diff options
author | Richard Biener <rguenther@suse.de> | 2015-01-13 08:32:13 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-01-13 08:32:13 +0000 |
commit | a2d429ac5e450845f3febbfba21d3bb486fcf7ce (patch) | |
tree | 71d4302bbc8f858c29bcf76ecec98e40ee75f40f /gcc/tree-ssa-forwprop.c | |
parent | 0d7a9dbdd23c58761a85f22e18982242e2dc9621 (diff) | |
download | gcc-a2d429ac5e450845f3febbfba21d3bb486fcf7ce.zip gcc-a2d429ac5e450845f3febbfba21d3bb486fcf7ce.tar.gz gcc-a2d429ac5e450845f3febbfba21d3bb486fcf7ce.tar.bz2 |
re PR middle-end/64568 (error: invalid reference prefix)
2014-01-13 Richard Biener <rguenther@suse.de>
PR tree-optimization/64568
* tree-ssa-forwprop.c (pass_forwprop::execute): Properly
release defs of removed stmts, avoid splitting TARGET_MEM_REFs.
* g++.dg/torture/pr64568.C: New testcase.
From-SVN: r219520
Diffstat (limited to 'gcc/tree-ssa-forwprop.c')
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index 6054ef4..aa82ec0 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -2267,6 +2267,8 @@ pass_forwprop::execute (function *fun) gsi_insert_before (&gsi, new_stmt, GSI_SAME_STMT); } + + release_defs (stmt); gsi_remove (&gsi, true); } else @@ -2281,7 +2283,9 @@ pass_forwprop::execute (function *fun) if (single_imm_use (lhs, &use_p, &use_stmt) && gimple_store_p (use_stmt) && !gimple_has_volatile_ops (use_stmt) - && is_gimple_assign (use_stmt)) + && is_gimple_assign (use_stmt) + && (TREE_CODE (gimple_assign_lhs (use_stmt)) + != TARGET_MEM_REF)) { tree use_lhs = gimple_assign_lhs (use_stmt); tree new_lhs = build1 (REALPART_EXPR, @@ -2302,6 +2306,7 @@ pass_forwprop::execute (function *fun) gimple_assign_set_rhs1 (use_stmt, gimple_assign_rhs2 (stmt)); update_stmt (use_stmt); + release_defs (stmt); gsi_remove (&gsi, true); } else |