diff options
author | Richard Biener <rguenther@suse.de> | 2013-11-19 09:21:07 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-11-19 09:21:07 +0000 |
commit | 7906dbe42433518f7adef2ca388d7edc0a7fd246 (patch) | |
tree | 701e6a088cef351b4a7274c7c7aa0195f16be89a /gcc/tree-predcom.c | |
parent | 64856e1e0befcc1d2d1245efbe34b3e1b016a8f0 (diff) | |
download | gcc-7906dbe42433518f7adef2ca388d7edc0a7fd246.tar.gz |
re PR tree-optimization/57517 (internal compiler error: in eliminate_temp_copies, at tree-predcom.c:1913)
2013-11-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/57517
* tree-predcom.c (combinable_refs_p): Verify the combination
is always executed when the refs are.
* gfortran.fortran-torture/compile/pr57517.f90: New testcase.
* gcc.dg/torture/pr57517.c: Likewise.
From-SVN: r205010
Diffstat (limited to 'gcc/tree-predcom.c')
-rw-r--r-- | gcc/tree-predcom.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c index 77a15ab5523..a43d19b08a9 100644 --- a/gcc/tree-predcom.c +++ b/gcc/tree-predcom.c @@ -2035,7 +2035,11 @@ combinable_refs_p (dref r1, dref r2, stmt = find_common_use_stmt (&name1, &name2); - if (!stmt) + if (!stmt + /* A simple post-dominance check - make sure the combination + is executed under the same condition as the references. */ + || (gimple_bb (stmt) != gimple_bb (r1->stmt) + && gimple_bb (stmt) != gimple_bb (r2->stmt))) return false; acode = gimple_assign_rhs_code (stmt); |