mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-13 04:36:46 +08:00
re PR tree-optimization/65063 (gcc.dg/vect/vect-double-reduc-6.c FAILs with -O3 -fno-tree-loop-ivcanon -fno-tree-vectorize)
2015-02-18 Richard Biener <rguenther@suse.de> PR tree-optimization/65063 * tree-predcom.c (determine_unroll_factor): Return 1 if we have replaced looparound PHIs. * gcc.dg/pr65063.c: New testcase. From-SVN: r220788
This commit is contained in:
parent
0c28944fc0
commit
8039a35df1
@ -1,3 +1,9 @@
|
||||
2015-02-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/65063
|
||||
* tree-predcom.c (determine_unroll_factor): Return 1 if we
|
||||
have replaced looparound PHIs.
|
||||
|
||||
2015-02-18 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* lto-streamer.c (lto_streamer_init): Encapsulate
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-02-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/65063
|
||||
* gcc.dg/pr65063.c: New testcase.
|
||||
|
||||
2015-02-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/62217
|
||||
|
33
gcc/testsuite/gcc.dg/pr65063.c
Normal file
33
gcc/testsuite/gcc.dg/pr65063.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O3 -fno-tree-loop-ivcanon -fno-tree-vectorize" } */
|
||||
|
||||
static int in[8][4];
|
||||
static int out[4];
|
||||
static const int check_result[] = {0, 16, 256, 4096};
|
||||
|
||||
static inline void foo ()
|
||||
{
|
||||
int sum;
|
||||
int i, j, k;
|
||||
for (k = 0; k < 4; k++)
|
||||
{
|
||||
sum = 1;
|
||||
for (j = 0; j < 4; j++)
|
||||
for (i = 0; i < 4; i++)
|
||||
sum *= in[i + k][j];
|
||||
out[k] = sum;
|
||||
}
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
int i, j, k;
|
||||
for (i = 0; i < 8; i++)
|
||||
for (j = 0; j < 4; j++)
|
||||
in[i][j] = (i + 2) / 3;
|
||||
foo ();
|
||||
for (k = 0; k < 4; k++)
|
||||
if (out[k] != check_result[k])
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
@ -1775,9 +1775,21 @@ determine_unroll_factor (vec<chain_p> chains)
|
||||
|
||||
FOR_EACH_VEC_ELT (chains, i, chain)
|
||||
{
|
||||
if (chain->type == CT_INVARIANT || chain->combined)
|
||||
if (chain->type == CT_INVARIANT)
|
||||
continue;
|
||||
|
||||
if (chain->combined)
|
||||
{
|
||||
/* For combined chains, we can't handle unrolling if we replace
|
||||
looparound PHIs. */
|
||||
dref a;
|
||||
unsigned j;
|
||||
for (j = 1; chain->refs.iterate (j, &a); j++)
|
||||
if (gimple_code (a->stmt) == GIMPLE_PHI)
|
||||
return 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* The best unroll factor for this chain is equal to the number of
|
||||
temporary variables that we create for it. */
|
||||
af = chain->length;
|
||||
|
Loading…
Reference in New Issue
Block a user