summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-02 09:55:32 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-02 09:55:32 +0000
commit8b3fb720f80336b39a0312ea95a79e7ab7fbcea3 (patch)
tree29483f94c7fd8e951808091e6445ac4ed0428961 /gcc
parent559f753b89b09661db0428811fcc914ca150616a (diff)
downloadppe42-gcc-8b3fb720f80336b39a0312ea95a79e7ab7fbcea3.tar.gz
ppe42-gcc-8b3fb720f80336b39a0312ea95a79e7ab7fbcea3.zip
PR tree-optimization/53163
* tree-ssa-phiopt.c (cond_if_else_store_replacement): Don't ignore return value from compute_all_dependences. * gcc.c-torture/compile/pr53163.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187038 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr53163.c34
-rw-r--r--gcc/tree-ssa-phiopt.c13
4 files changed, 52 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 972f3cc0b5e..f9b8a6e84f2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2012-05-02 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/53163
+ * tree-ssa-phiopt.c (cond_if_else_store_replacement): Don't ignore
+ return value from compute_all_dependences.
+
PR rtl-optimization/53160
* ree.c (combine_reaching_defs): Handle the case where cand->insn
has been modified by ree pass already.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 72d9379d0d9..b2055433beb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2012-05-02 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/53163
+ * gcc.c-torture/compile/pr53163.c: New test.
+
PR rtl-optimization/53160
* gcc.c-torture/execute/pr53160.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr53163.c b/gcc/testsuite/gcc.c-torture/compile/pr53163.c
new file mode 100644
index 00000000000..990b1132444
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr53163.c
@@ -0,0 +1,34 @@
+/* PR tree-optimization/53163 */
+
+struct S { int s; } b, f;
+int a, c;
+
+void
+foo (void)
+{
+ int d, e;
+ for (d = 4; d < 19; ++d)
+ for (e = 2; e >= 0; e--)
+ {
+ a = 0;
+ a = 1;
+ }
+}
+
+void
+bar (void)
+{
+ int g, h, i;
+ for (i = 1; i >= 0; i--)
+ {
+ b = f;
+ for (g = 0; g <= 1; g++)
+ {
+ if (c)
+ break;
+ for (h = 0; h <= 1; h++)
+ foo ();
+ foo ();
+ }
+ }
+}
diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c
index 88c16e68373..1cfa0f512bc 100644
--- a/gcc/tree-ssa-phiopt.c
+++ b/gcc/tree-ssa-phiopt.c
@@ -1624,8 +1624,17 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
/* Compute and check data dependencies in both basic blocks. */
then_ddrs = VEC_alloc (ddr_p, heap, 1);
else_ddrs = VEC_alloc (ddr_p, heap, 1);
- compute_all_dependences (then_datarefs, &then_ddrs, NULL, false);
- compute_all_dependences (else_datarefs, &else_ddrs, NULL, false);
+ if (!compute_all_dependences (then_datarefs, &then_ddrs, NULL, false)
+ || !compute_all_dependences (else_datarefs, &else_ddrs, NULL, false))
+ {
+ free_dependence_relations (then_ddrs);
+ free_dependence_relations (else_ddrs);
+ free_data_refs (then_datarefs);
+ free_data_refs (else_datarefs);
+ VEC_free (gimple, heap, then_stores);
+ VEC_free (gimple, heap, else_stores);
+ return false;
+ }
blocks[0] = then_bb;
blocks[1] = else_bb;
blocks[2] = join_bb;
OpenPOWER on IntegriCloud