re PR tree-optimization/23821 (DOM and VRP creating harder to optimize code)
2009-10-05 Richard Guenther <rguenther@suse.de> PR tree-optimization/23821 * tree-vrp.c (vrp_finalize): Do not perform copy propagation. * tree-ssa-dom.c (cprop_operand): Do not propagate copies into simple IV increments. * gcc.dg/torture/pr23821.c: New testcase. From-SVN: r152449
This commit is contained in:
parent
916bd5f07f
commit
e9d85fa6a7
@ -1,3 +1,10 @@
|
||||
2009-10-05 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/23821
|
||||
* tree-vrp.c (vrp_finalize): Do not perform copy propagation.
|
||||
* tree-ssa-dom.c (cprop_operand): Do not propagate copies into
|
||||
simple IV increments.
|
||||
|
||||
2009-10-05 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
|
||||
|
||||
* config/arm/arm.c (arm_override_options): Really initialize
|
||||
|
@ -1,3 +1,8 @@
|
||||
2009-10-05 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/23821
|
||||
* gcc.dg/torture/pr23821.c: New testcase.
|
||||
|
||||
2009-10-05 Daniel Kraft <d@domob.eu>
|
||||
|
||||
PR fortran/41403
|
||||
|
29
gcc/testsuite/gcc.dg/torture/pr23821.c
Normal file
29
gcc/testsuite/gcc.dg/torture/pr23821.c
Normal file
@ -0,0 +1,29 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
|
||||
/* At -O1 DOM threads a jump in a non-optimal way which leads to
|
||||
the bogus propagation. */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O1" } { "" } } */
|
||||
/* { dg-options "-fdump-tree-ivcanon-details" } */
|
||||
|
||||
static int a[199];
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int i, x;
|
||||
for (i = 0; i < 199; i++)
|
||||
{
|
||||
x = a[i];
|
||||
if (x != i)
|
||||
abort ();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Verify that we do not propagate the equivalence x == i into the
|
||||
induction variable increment. */
|
||||
|
||||
/* { dg-final { scan-tree-dump "Added canonical iv" "ivcanon" } } */
|
||||
/* { dg-final { cleanup-tree-dump "ivcanon" } } */
|
@ -1998,6 +1998,12 @@ cprop_operand (gimple stmt, use_operand_p op_p)
|
||||
if (loop_depth_of_name (val) > loop_depth_of_name (op))
|
||||
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;
|
||||
|
||||
/* Dump details. */
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
{
|
||||
|
@ -7237,7 +7237,7 @@ vrp_finalize (void)
|
||||
}
|
||||
|
||||
/* We may have ended with ranges that have exactly one value. Those
|
||||
values can be substituted as any other copy/const propagated
|
||||
values can be substituted as any other const propagated
|
||||
value using substitute_and_fold. */
|
||||
single_val_range = XCNEWVEC (prop_value_t, num_ssa_names);
|
||||
|
||||
@ -7245,7 +7245,8 @@ vrp_finalize (void)
|
||||
for (i = 0; i < num_ssa_names; i++)
|
||||
if (vr_value[i]
|
||||
&& vr_value[i]->type == VR_RANGE
|
||||
&& vr_value[i]->min == vr_value[i]->max)
|
||||
&& vr_value[i]->min == vr_value[i]->max
|
||||
&& is_gimple_min_invariant (vr_value[i]->min))
|
||||
{
|
||||
single_val_range[i].value = vr_value[i]->min;
|
||||
do_value_subst_p = true;
|
||||
|
Loading…
Reference in New Issue
Block a user