summaryrefslogtreecommitdiff
path: root/gcc/tree-predcom.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-11-19 09:21:07 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-11-19 09:21:07 +0000
commit7906dbe42433518f7adef2ca388d7edc0a7fd246 (patch)
tree701e6a088cef351b4a7274c7c7aa0195f16be89a /gcc/tree-predcom.c
parent64856e1e0befcc1d2d1245efbe34b3e1b016a8f0 (diff)
downloadgcc-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.c6
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);