aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-im.c
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2012-09-11 12:28:02 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2012-09-11 12:28:02 +0000
commite0a6637cbdc4fa4a0ce37e2bce10dc7932a1c5e8 (patch)
tree9a984f9cfbe64c383745eb6303eccc37a45492a9 /gcc/tree-ssa-loop-im.c
parentccdbfe9398e4c225706599e6b291f4cf0e616df8 (diff)
downloadgcc-e0a6637cbdc4fa4a0ce37e2bce10dc7932a1c5e8.zip
gcc-e0a6637cbdc4fa4a0ce37e2bce10dc7932a1c5e8.tar.gz
gcc-e0a6637cbdc4fa4a0ce37e2bce10dc7932a1c5e8.tar.bz2
re PR middle-end/54149 (write introduction incorrect wrt the C11 memory model)
PR middle-end/54149 * tree-ssa-loop-im.c (execute_sm_if_changed_flag_set): Only set flag for writes. From-SVN: r191179
Diffstat (limited to 'gcc/tree-ssa-loop-im.c')
-rw-r--r--gcc/tree-ssa-loop-im.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c
index 0f61631..67cab3a 100644
--- a/gcc/tree-ssa-loop-im.c
+++ b/gcc/tree-ssa-loop-im.c
@@ -2113,9 +2113,14 @@ execute_sm_if_changed_flag_set (struct loop *loop, mem_ref_p ref)
gimple_stmt_iterator gsi;
gimple stmt;
- gsi = gsi_for_stmt (loc->stmt);
- stmt = gimple_build_assign (flag, boolean_true_node);
- gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
+ /* Only set the flag for writes. */
+ if (is_gimple_assign (loc->stmt)
+ && gimple_assign_lhs_ptr (loc->stmt) == loc->ref)
+ {
+ gsi = gsi_for_stmt (loc->stmt);
+ stmt = gimple_build_assign (flag, boolean_true_node);
+ gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
+ }
}
VEC_free (mem_ref_loc_p, heap, locs);
return flag;