re PR tree-optimization/36034 (wrong code vectorizing unrolled inner loop (SLP))
2008-04-24 Ira Rosen <irar@il.ibm.com> Richard Guenther <rguenther@suse.de> PR tree-optimization/36034 * tree-vect-analyze.c (vect_analyze_group_access): SLP is incapable of dealing with loads with gaps. * gcc.c-torture/execute/pr36034-1.c: New testcase. * gcc.c-torture/execute/pr36034-2.c: Likewise. Co-Authored-By: Richard Guenther <rguenther@suse.de> From-SVN: r134628
This commit is contained in:
parent
22a812674c
commit
2aa43509ae
@ -1,3 +1,10 @@
|
||||
2008-04-24 Ira Rosen <irar@il.ibm.com>
|
||||
Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/36034
|
||||
* tree-vect-analyze.c (vect_analyze_group_access): SLP is
|
||||
incapable of dealing with loads with gaps.
|
||||
|
||||
2008-04-24 Rafael Espindola <espindola@google.com>
|
||||
|
||||
* tree-flow.h (vrp_evaluate_conditional): Change signature.
|
||||
|
@ -1,3 +1,10 @@
|
||||
2008-04-24 Ira Rosen <irar@il.ibm.com>
|
||||
Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/36034
|
||||
* gcc.c-torture/execute/pr36034-1.c: New testcase.
|
||||
* gcc.c-torture/execute/pr36034-2.c: Likewise.
|
||||
|
||||
2008-04-24 Olivier Hainque <hainque@adacore.com>
|
||||
|
||||
* gnat.dg/concat_length.adb: New test.
|
||||
|
32
gcc/testsuite/gcc.c-torture/execute/pr36034-1.c
Normal file
32
gcc/testsuite/gcc.c-torture/execute/pr36034-1.c
Normal file
@ -0,0 +1,32 @@
|
||||
double x[5][10] = { { 10, 11, 12, 13, 14, 15, -1, -1, -1, -1 },
|
||||
{ 21, 22, 23, 24, 25, 26, -1, -1, -1, -1 },
|
||||
{ 32, 33, 34, 35, 36, 37, -1, -1, -1, -1 },
|
||||
{ 43, 44, 45, 46, 47, 48, -1, -1, -1, -1 },
|
||||
{ 54, 55, 56, 57, 58, 59, -1, -1, -1, -1 } };
|
||||
double tmp[5][6];
|
||||
|
||||
void __attribute__((noinline))
|
||||
test (void)
|
||||
{
|
||||
int i, j;
|
||||
for (i = 0; i < 5; ++i)
|
||||
{
|
||||
tmp[i][0] = x[i][0];
|
||||
tmp[i][1] = x[i][1];
|
||||
tmp[i][2] = x[i][2];
|
||||
tmp[i][3] = x[i][3];
|
||||
tmp[i][4] = x[i][4];
|
||||
tmp[i][5] = x[i][5];
|
||||
}
|
||||
}
|
||||
extern void abort (void);
|
||||
int main()
|
||||
{
|
||||
int i, j;
|
||||
test();
|
||||
for (i = 0; i < 5; ++i)
|
||||
for (j = 0; j < 6; ++j)
|
||||
if (tmp[i][j] == -1)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
32
gcc/testsuite/gcc.c-torture/execute/pr36034-2.c
Normal file
32
gcc/testsuite/gcc.c-torture/execute/pr36034-2.c
Normal file
@ -0,0 +1,32 @@
|
||||
double x[50] = { 10, 11, 12, 13, 14, 15, -1, -1, -1, -1,
|
||||
21, 22, 23, 24, 25, 26, -1, -1, -1, -1,
|
||||
32, 33, 34, 35, 36, 37, -1, -1, -1, -1,
|
||||
43, 44, 45, 46, 47, 48, -1, -1, -1, -1,
|
||||
54, 55, 56, 57, 58, 59, -1, -1, -1, -1 };
|
||||
double tmp[30];
|
||||
|
||||
void __attribute__((noinline))
|
||||
test (void)
|
||||
{
|
||||
int i, j;
|
||||
for (i = 0; i < 5; ++i)
|
||||
{
|
||||
tmp[i*6] = x[i*10];
|
||||
tmp[i*6+1] = x[i*10+1];
|
||||
tmp[i*6+2] = x[i*10+2];
|
||||
tmp[i*6+3] = x[i*10+3];
|
||||
tmp[i*6+4] = x[i*10+4];
|
||||
tmp[i*6+5] = x[i*10+5];
|
||||
}
|
||||
}
|
||||
extern void abort (void);
|
||||
int main()
|
||||
{
|
||||
int i, j;
|
||||
test();
|
||||
for (i = 0; i < 5; ++i)
|
||||
for (j = 0; j < 6; ++j)
|
||||
if (tmp[i*6+j] == -1)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
@ -2228,11 +2228,16 @@ vect_analyze_group_access (struct data_reference *dr)
|
||||
|
||||
/* Check that the size of the interleaving is equal to STEP for stores,
|
||||
i.e., that there are no gaps. */
|
||||
if (!DR_IS_READ (dr) && dr_step != count_in_bytes)
|
||||
if (dr_step != count_in_bytes)
|
||||
{
|
||||
if (vect_print_dump_info (REPORT_DETAILS))
|
||||
fprintf (vect_dump, "interleaved store with gaps");
|
||||
return false;
|
||||
if (DR_IS_READ (dr))
|
||||
slp_impossible = true;
|
||||
else
|
||||
{
|
||||
if (vect_print_dump_info (REPORT_DETAILS))
|
||||
fprintf (vect_dump, "interleaved store with gaps");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check that STEP is a multiple of type size. */
|
||||
|
Loading…
Reference in New Issue
Block a user