From 032f2366a4cd57f781f2093d977b9cf9600c83b8 Mon Sep 17 00:00:00 2001 From: Segher Boessenkool Date: Wed, 1 Apr 2020 16:51:04 +0000 Subject: [PATCH] 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" 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 PR target/94420 * config/rs6000/rs6000.md (*tocref for P): Add insn condition on operands[1]. --- gcc/config/rs6000/rs6000.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index dcccb03f376..11ab74589b4 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -10311,7 +10311,8 @@ (define_insn_and_split "*tocref" [(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))) -- 2.30.2