From f14e01090b090777be3b78441d851f221dd13230 Mon Sep 17 00:00:00 2001 From: Segher Boessenkool Date: Tue, 25 Aug 2015 21:35:15 +0200 Subject: [PATCH] rs6000: Fix PR67346 "*ior_mask" is a define_insn_and_split, so it shouldn't use can_create_pseudo in its instruction condition, because IRA can then create such an instruction, and the condition becomes false before the insn is split. Use a scratch instead. 2015-08-25 Segher Boessenkool PR target/67346 * config/rs6000/rs6000.md (*ior_mask): Use a match_scratch. From-SVN: r227183 --- gcc/ChangeLog | 5 +++++ gcc/config/rs6000/rs6000.md | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6d0e1e1a6df..3900191fcee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-08-25 Segher Boessenkool + + PR target/67346 + * config/rs6000/rs6000.md (*ior_mask): Use a match_scratch. + 2015-08-25 Segher Boessenkool PR target/67344 diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 60632421ca5..f7b3b4e3032 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -3652,9 +3652,9 @@ (define_insn_and_split "*ior_mask" [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") (ior:GPR (match_operand:GPR 1 "gpc_reg_operand" "r") - (match_operand:GPR 2 "const_int_operand" "n")))] - "can_create_pseudo_p () - && !logical_const_operand (operands[2], mode) + (match_operand:GPR 2 "const_int_operand" "n"))) + (clobber (match_scratch:GPR 3 "=r"))] + "!logical_const_operand (operands[2], mode) && rs6000_is_valid_mask (operands[2], NULL, NULL, mode)" "#" "&& 1" @@ -3669,7 +3669,8 @@ { int nb, ne; rs6000_is_valid_mask (operands[2], &nb, &ne, mode); - operands[3] = gen_reg_rtx (mode); + if (GET_CODE (operands[3]) == SCRATCH) + operands[3] = gen_reg_rtx (mode); operands[4] = GEN_INT (ne); operands[5] = GEN_INT (~UINTVAL (operands[2])); } -- 2.30.2