diff options
author | Paul Koning <ni1d@arrl.net> | 2018-06-07 13:55:05 -0400 |
---|---|---|
committer | Paul Koning <pkoning@gcc.gnu.org> | 2018-06-07 13:55:05 -0400 |
commit | a3e87f07f3dc36bd42ed82853429d64a4b5b9703 (patch) | |
tree | 2d3ec078e149f926309b09d57d900fb27c257a8d /gcc/compare-elim.c | |
parent | 75d1c00452b12b51121236930d09578bc01f6306 (diff) | |
download | gcc-a3e87f07f3dc36bd42ed82853429d64a4b5b9703.zip gcc-a3e87f07f3dc36bd42ed82853429d64a4b5b9703.tar.gz gcc-a3e87f07f3dc36bd42ed82853429d64a4b5b9703.tar.bz2 |
compare-elim.c (try_merge_compare): Don't merge compare if address contains a side effect.
2018-06-07 Paul Koning <ni1d@arrl.net>
gcc/
* compare-elim.c (try_merge_compare): Don't merge compare if
address contains a side effect.
(try_eliminate_compare): Likewise.
gcc/testsuite/
* gcc.c-torture/compile/20180605-1.c: New test.
From-SVN: r261287
Diffstat (limited to 'gcc/compare-elim.c')
-rw-r--r-- | gcc/compare-elim.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/compare-elim.c b/gcc/compare-elim.c index 16576c4..50bbaa8 100644 --- a/gcc/compare-elim.c +++ b/gcc/compare-elim.c @@ -690,6 +690,13 @@ try_merge_compare (struct comparison *cmp) return false; rtx src = SET_SRC (set); + + /* If the source uses addressing modes with side effects, we can't + do the merge because we'd end up with a PARALLEL that has two + instances of that side effect in it. */ + if (side_effects_p (src)) + return false; + rtx flags = maybe_select_cc_mode (cmp, src, CONST0_RTX (GET_MODE (src))); if (!flags) { @@ -809,6 +816,12 @@ try_eliminate_compare (struct comparison *cmp) else return false; + /* If the source uses addressing modes with side effects, we can't + do the merge because we'd end up with a PARALLEL that has two + instances of that side effect in it. */ + if (side_effects_p (cmp_src)) + return false; + /* Determine if we ought to use a different CC_MODE here. */ flags = maybe_select_cc_mode (cmp, cmp_src, in_b); if (flags == NULL) |