Add testcases for PR target/47744.

2011-08-03  H.J. Lu  <hongjiu.lu@intel.com>

	PR target/47744
	* gcc.dg/torture/pr47744-1.c: New.
	* gcc.dg/torture/pr47744-2.c: Likewise.
	* gcc.dg/torture/pr47744-3.c: Likewise.

From-SVN: r177271
This commit is contained in:
H.J. Lu 2011-08-03 14:07:32 +00:00 committed by H.J. Lu
parent a130fb2441
commit 72c2f8102c
4 changed files with 142 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2011-08-03 H.J. Lu <hongjiu.lu@intel.com>
PR target/47744
* gcc.dg/torture/pr47744-1.c: New.
* gcc.dg/torture/pr47744-2.c: Likewise.
* gcc.dg/torture/pr47744-3.c: Likewise.
2011-08-03 Richard Guenther <rguenther@suse.de>
PR middle-end/49958

View File

@ -0,0 +1,21 @@
/* { dg-do compile } */
/* { dg-options "-fpic" { target fpic } } */
typedef int int32_t;
static const int init_jk[] = {2,3,4,6};
int __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int32_t *ipio2)
{
int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih;
double z,fw,f[20],fq[20],q[20];
jk = init_jk[prec];
jp = jk;
jx = nx-1;
for (i=0;i<=jk;i++) {
for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
}
for(i=0,j=jz,z=q[jz];j>0;i++,j--) {
z = q[j-1]+fw;
}
n = (int32_t) z;
return n&7;
}

View File

@ -0,0 +1,40 @@
/* { dg-do compile } */
/* { dg-require-effective-target int128 } */
/* { dg-options "-std=gnu99" } */
typedef long unsigned int size_t;
typedef long int ssize_t;
typedef ssize_t index_type;
typedef __int128_t GFC_INTEGER_16;
typedef struct descriptor_dimension
{
index_type _stride;
index_type _lbound;
index_type _ubound;
}
descriptor_dimension;
typedef struct { GFC_INTEGER_16 *data; size_t offset; index_type dtype; descriptor_dimension dim[7];} gfc_array_i16;
void
matmul_i16 (gfc_array_i16 * const restrict retarray,
gfc_array_i16 * const restrict a,
GFC_INTEGER_16 bbase_yn)
{
GFC_INTEGER_16 * restrict dest;
index_type rxstride, rystride;
index_type x, y, n, count, xcount;
GFC_INTEGER_16 * restrict dest_y;
GFC_INTEGER_16 s;
const GFC_INTEGER_16 * restrict abase_n;
rxstride = ((retarray)->dim[0]._stride);
rystride = ((retarray)->dim[1]._stride);
xcount = ((a)->dim[0]._ubound + 1 - (a)->dim[0]._lbound);
dest = retarray->data;
dest_y = &dest[y*rystride];
for (x = 0; x < xcount; x++)
dest_y[x] += abase_n[x] * bbase_yn;
for (x = 0; x < xcount; x++)
{
for (n = 0; n < count; n++)
dest_y[x*rxstride] = (GFC_INTEGER_16) 0;
}
}

View File

@ -0,0 +1,74 @@
/* { dg-do compile } */
typedef union rtunion_def {
struct rtx_def *rtx;
} rtunion;
typedef struct rtx_def {
unsigned short code;
rtunion fld[1];
} *rtx;
extern rtx recog_operand[];
extern rtx *recog_operand_loc[];
extern int reload_n_operands;
extern void find_dummy_reload (int, int);
extern int asm_noperands (rtx);
extern int n_occurrences (char **);
char operands_match[10][10];
void find_reloads (rtx insn, int n_alternatives, int commutative)
{
register int i, j;
int noperands;
char *constraints[10];
int address_reloaded[10];
int this_alternative[10];
char this_alternative_win[10];
int this_alternative_matches[10];
int this_alternative_number;
rtx body = ((insn)->fld[3].rtx);
int operand_mode[10];
if (body->code == 1)
{
reload_n_operands = noperands = asm_noperands (body);
n_alternatives = n_occurrences (constraints);
}
for (this_alternative_number = 0;
this_alternative_number < n_alternatives;
this_alternative_number++)
for (i = 0;
i < noperands;
i++)
{
register char *p = constraints[i];
register int win = 0;
int badop = 1;
int c;
register rtx operand = recog_operand[i];
int force_reload = 0;
this_alternative_win[i] = 0;
this_alternative[i] = 1;
while (*p && (c = *p++) != ',')
switch (c)
{
case '4':
c -= '0';
this_alternative_matches[i] = c;
if ((c != commutative
|| i != commutative + 1)
&& operands_match[c][i])
win = this_alternative_win[c];
else
find_dummy_reload (operand_mode[i], this_alternative[c]);
if (! win || force_reload)
for (j = 0; j < i; j++)
if (this_alternative_matches[j]
== this_alternative_matches[i])
badop = 1;
break;
case '<':
if (operand->code == 2
&& ! address_reloaded[i]
&& operand->fld[0].rtx->code == 3)
win = 1;
}
}
}