re PR tree-optimization/62217 (DOM confuses complete unrolling which in turn causes VRP to warn)

2015-02-18  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/62217
	* tree-ssa-dom.c (cprop_operand): Avoid propagating copies
	into BIVs.

	* gcc.dg/tree-ssa/cunroll-11.c: New testcase.

From-SVN: r220785
This commit is contained in:
Richard Biener 2015-02-18 09:48:57 +00:00 committed by Richard Biener
parent c7400e2fec
commit 6f423f4c89
4 changed files with 39 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2015-02-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/62217
* tree-ssa-dom.c (cprop_operand): Avoid propagating copies
into BIVs.
2015-02-18 Marek Polacek <polacek@redhat.com>
PR sanitizer/65081

View File

@ -1,3 +1,8 @@
2015-02-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/62217
* gcc.dg/tree-ssa/cunroll-11.c: New testcase.
2015-02-18 Marek Polacek <polacek@redhat.com>
PR sanitizer/65081

View File

@ -0,0 +1,18 @@
/* { dg-do compile } */
/* { dg-options "-O3 -Warray-bounds -fdump-tree-cunroll-details" } */
typedef struct { unsigned data; } s1;
s1 g_x[4];
extern void foo (s1 *x1, s1 *x2, int a, int b)
{
int i;
for(i = 0; i < a; i++)
if(i == b)
g_x[i] = *x1;
else
g_x[i] = *x2;
}
/* { dg-final { scan-tree-dump "Loop 1 iterates at most 3 times" "cunroll" } } */
/* { dg-final { cleanup-tree-dump "cunroll" } } */

View File

@ -2291,11 +2291,16 @@ cprop_operand (gimple stmt, use_operand_p op_p)
if (!may_propagate_copy (op, val))
return;
/* Do not propagate copies into simple IV increment statements.
See PR23821 for how this can disturb IV analysis. */
if (TREE_CODE (val) != INTEGER_CST
&& simple_iv_increment_p (stmt))
return;
/* Do not propagate copies into BIVs.
See PR23821 and PR62217 for how this can disturb IV and
number of iteration analysis. */
if (TREE_CODE (val) != INTEGER_CST)
{
gimple def = SSA_NAME_DEF_STMT (op);
if (gimple_code (def) == GIMPLE_PHI
&& gimple_bb (def)->loop_father->header == gimple_bb (def))
return;
}
/* Dump details. */
if (dump_file && (dump_flags & TDF_DETAILS))