diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-02 09:55:32 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-02 09:55:32 +0000 |
commit | 8b3fb720f80336b39a0312ea95a79e7ab7fbcea3 (patch) | |
tree | 29483f94c7fd8e951808091e6445ac4ed0428961 /gcc | |
parent | 559f753b89b09661db0428811fcc914ca150616a (diff) | |
download | ppe42-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr53163.c | 34 | ||||
-rw-r--r-- | gcc/tree-ssa-phiopt.c | 13 |
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; |