diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2019-03-15 23:09:15 +0100 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2019-03-15 23:09:15 +0100 |
commit | 850b8aa3091a2c62200bde93fc61101e4dec45b6 (patch) | |
tree | 6f2bcf43a0baaf2389f316018cdd8a154739f785 /gcc | |
parent | 30bb0e44d3893b27c6cd74c72a077e5a0d96a244 (diff) | |
download | gcc-850b8aa3091a2c62200bde93fc61101e4dec45b6.zip gcc-850b8aa3091a2c62200bde93fc61101e4dec45b6.tar.gz gcc-850b8aa3091a2c62200bde93fc61101e4dec45b6.tar.bz2 |
LRA: side_effects_p stmts' output is not invariant (PR89721)
PR89721 shows LRA treating an unspec_volatile's result as invariant,
which of course isn't correct. This patch fixes it.
PR rtl-optimization/89721
* lra-constraints (invariant_p): Return false if side_effects_p holds.
From-SVN: r269716
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/lra-constraints.c | 3 |
2 files changed, 8 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 55d80e5..67dc0bf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-03-15 Segher Boessenkool <segher@kernel.crashing.org> + + PR rtl-optimization/89721 + * lra-constraints (invariant_p): Return false if side_effects_p holds. + 2019-03-15 Kelvin Nilsen <kelvin@gcc.gnu.org> PR target/87532 diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index d7d69c6..ccca130 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -5839,6 +5839,9 @@ invariant_p (const_rtx x) enum rtx_code code; int i, j; + if (side_effects_p (x)) + return false; + code = GET_CODE (x); mode = GET_MODE (x); if (code == SUBREG) |