aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-09-02 13:24:30 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-09-02 13:24:30 +0000
commit63fdb7bee70641e7d9a9704d51c8b70a62d31c24 (patch)
treef11b08d36e1a75861711146eeb11401df79a9528
parent78de2333eab3428f4b8723e41534f81c508bc7a6 (diff)
downloadgcc-63fdb7bee70641e7d9a9704d51c8b70a62d31c24.zip
gcc-63fdb7bee70641e7d9a9704d51c8b70a62d31c24.tar.gz
gcc-63fdb7bee70641e7d9a9704d51c8b70a62d31c24.tar.bz2
re PR tree-optimization/57511 (Missing SCEV final value replacement)
2013-09-02 Richard Biener <rguenther@suse.de> PR middle-end/57511 * tree-scalar-evolution.c (instantiate_scev_name): Allow non-linear SCEVs. * gcc.dg/tree-ssa/sccp-1.c: New testcase. From-SVN: r202168
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/sccp-1.c15
-rw-r--r--gcc/tree-scalar-evolution.c1
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2ffa49e..498f68e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2013-09-02 Richard Biener <rguenther@suse.de>
+ PR middle-end/57511
+ * tree-scalar-evolution.c (instantiate_scev_name): Allow
+ non-linear SCEVs.
+
+2013-09-02 Richard Biener <rguenther@suse.de>
+
* tree-affine.c (add_elt_to_tree): Avoid converting all pointer
arithmetic to sizetype.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4cb359c..b190c4d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2013-09-02 Richard Biener <rguenther@suse.de>
+ PR middle-end/57511
+ * gcc.dg/tree-ssa/sccp-1.c: New testcase.
+
+2013-09-02 Richard Biener <rguenther@suse.de>
+
* gcc.dg/tree-ssa/loop-4.c: Adjust scan looking for one memory
reference.
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 0000000..633a37a
--- /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 c7e9d4b..bed621f 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;