diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2020-04-01 16:51:04 +0000 |
---|---|---|
committer | Segher Boessenkool <segher@kernel.crashing.org> | 2020-04-01 17:00:10 +0000 |
commit | 032f2366a4cd57f781f2093d977b9cf9600c83b8 (patch) | |
tree | 6eb72532213c11af74a473cd5c5bd6ba2e6312af | |
parent | e899d4b71255b9ae096a7ecd31a61fc76f200019 (diff) | |
download | gcc-032f2366a4cd57f781f2093d977b9cf9600c83b8.zip gcc-032f2366a4cd57f781f2093d977b9cf9600c83b8.tar.gz gcc-032f2366a4cd57f781f2093d977b9cf9600c83b8.tar.bz2 |
rs6000: Make code questionably using r2 not ICE (PR94420)
The example code in the PR uses r2 (the TOC register) directly. In the
RTL generated for that, r2 is copied to some pseudo, and then cprop
propagates that into a "*tocref<mode>" insn, because nothing is
preventing it from doing that.
So, put the same condition in the insn condition for this as we will
later encounter in the constraint anyway, fixing this.
2020-04-01 Segher Boessenkool <segher@kernel.crashing.org>
PR target/94420
* config/rs6000/rs6000.md (*tocref<mode> for P): Add insn condition
on operands[1].
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index dcccb03..11ab745 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -10311,7 +10311,8 @@ (define_insn_and_split "*tocref<mode>" [(set (match_operand:P 0 "gpc_reg_operand" "=b") (match_operand:P 1 "small_toc_ref" "R"))] - "TARGET_TOC" + "TARGET_TOC + && legitimate_constant_pool_address_p (operands[1], QImode, false)" "la %0,%a1" "&& TARGET_CMODEL != CMODEL_SMALL && reload_completed" [(set (match_dup 0) (high:P (match_dup 1))) |