aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2020-04-01 16:51:04 +0000
committerSegher Boessenkool <segher@kernel.crashing.org>2020-04-01 17:00:10 +0000
commit032f2366a4cd57f781f2093d977b9cf9600c83b8 (patch)
tree6eb72532213c11af74a473cd5c5bd6ba2e6312af
parente899d4b71255b9ae096a7ecd31a61fc76f200019 (diff)
downloadgcc-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.md3
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)))