aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2015-08-25 21:35:15 +0200
committerSegher Boessenkool <segher@gcc.gnu.org>2015-08-25 21:35:15 +0200
commitf14e01090b090777be3b78441d851f221dd13230 (patch)
tree19897b3dccc8c0e7642624b8d3963a85a7f87dc6 /gcc
parentb733687e967cc21ae3610c3bca9250a82d66c193 (diff)
downloadgcc-f14e01090b090777be3b78441d851f221dd13230.zip
gcc-f14e01090b090777be3b78441d851f221dd13230.tar.gz
gcc-f14e01090b090777be3b78441d851f221dd13230.tar.bz2
rs6000: Fix PR67346
"*ior<mode>_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 <segher@kernel.crashing.org> PR target/67346 * config/rs6000/rs6000.md (*ior<mode>_mask): Use a match_scratch. From-SVN: r227183
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.md9
2 files changed, 10 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6d0e1e1..3900191 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2015-08-25 Segher Boessenkool <segher@kernel.crashing.org>
+ PR target/67346
+ * config/rs6000/rs6000.md (*ior<mode>_mask): Use a match_scratch.
+
+2015-08-25 Segher Boessenkool <segher@kernel.crashing.org>
+
PR target/67344
* config/rs6000/rs6000.md (*and<mode>3_imm_dot_shifted): Change to
a define_insn, remove second alternative.
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 6063242..f7b3b4e 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -3652,9 +3652,9 @@
(define_insn_and_split "*ior<mode>_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>mode)
+ (match_operand:GPR 2 "const_int_operand" "n")))
+ (clobber (match_scratch:GPR 3 "=r"))]
+ "!logical_const_operand (operands[2], <MODE>mode)
&& rs6000_is_valid_mask (operands[2], NULL, NULL, <MODE>mode)"
"#"
"&& 1"
@@ -3669,7 +3669,8 @@
{
int nb, ne;
rs6000_is_valid_mask (operands[2], &nb, &ne, <MODE>mode);
- operands[3] = gen_reg_rtx (<MODE>mode);
+ if (GET_CODE (operands[3]) == SCRATCH)
+ operands[3] = gen_reg_rtx (<MODE>mode);
operands[4] = GEN_INT (ne);
operands[5] = GEN_INT (~UINTVAL (operands[2]));
}