diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2012-09-11 12:28:02 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2012-09-11 12:28:02 +0000 |
commit | e0a6637cbdc4fa4a0ce37e2bce10dc7932a1c5e8 (patch) | |
tree | 9a984f9cfbe64c383745eb6303eccc37a45492a9 /gcc/tree-ssa-loop-im.c | |
parent | ccdbfe9398e4c225706599e6b291f4cf0e616df8 (diff) | |
download | gcc-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.c | 11 |
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; |