diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2ffa49e1750a..498f68e4027e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-09-02 Richard Biener + + PR middle-end/57511 + * tree-scalar-evolution.c (instantiate_scev_name): Allow + non-linear SCEVs. + 2013-09-02 Richard Biener * tree-affine.c (add_elt_to_tree): Avoid converting all pointer diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4cb359c3ca10..b190c4d382aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-09-02 Richard Biener + + PR middle-end/57511 + * gcc.dg/tree-ssa/sccp-1.c: New testcase. + 2013-09-02 Richard Biener * gcc.dg/tree-ssa/loop-4.c: Adjust scan looking for one memory diff --git a/gcc/testsuite/gcc.dg/tree-ssa/sccp-1.c b/gcc/testsuite/gcc.dg/tree-ssa/sccp-1.c new file mode 100644 index 000000000000..633a37a35fe3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/sccp-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int main(int argc, char* argv[]) +{ + int i, a = 0; + for (i=0; i < 10; i++) + a += i + 0xff00ff; + return a; +} + +/* There should be no loop left. */ + +/* { dg-final { scan-tree-dump-times "goto" 0 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index c7e9d4b46cdf..bed621fe052b 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -2252,6 +2252,7 @@ instantiate_scev_name (basic_block instantiate_below, else if (res != chrec_dont_know) { if (inner_loop + && def_bb->loop_father != inner_loop && !flow_loop_nested_p (def_bb->loop_father, inner_loop)) /* ??? We could try to compute the overall effect of the loop here. */ res = chrec_dont_know;