Paper bag time. Committing as obvious fix. Bootstrapped and regression checked on powerpc64-linux and powerpc64le-linux; also bootstrapped the latter with --enable-checking=release and -O3 (the PR67045 case). Will do an --enable-checking=yes,rtl as well.
Segher 2015-07-29 Segher Boessenkool <seg...@kernel.crashing.org> PR target/66217 PR target/67045 * config/rs6000/rs6000.md (and<mode>3): Put a CONST_INT_P check around those cases that need one. --- gcc/config/rs6000/rs6000.md | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index f7fa399..527ad98 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -2898,26 +2898,29 @@ (define_expand "and<mode>3" DONE; } - if (rs6000_is_valid_and_mask (operands[2], <MODE>mode)) + if (CONST_INT_P (operands[2])) { - emit_insn (gen_and<mode>3_mask (operands[0], operands[1], operands[2])); - DONE; - } + if (rs6000_is_valid_and_mask (operands[2], <MODE>mode)) + { + emit_insn (gen_and<mode>3_mask (operands[0], operands[1], operands[2])); + DONE; + } - if (logical_const_operand (operands[2], <MODE>mode) - && rs6000_gen_cell_microcode) - { - emit_insn (gen_and<mode>3_imm (operands[0], operands[1], operands[2])); - DONE; - } + if (logical_const_operand (operands[2], <MODE>mode) + && rs6000_gen_cell_microcode) + { + emit_insn (gen_and<mode>3_imm (operands[0], operands[1], operands[2])); + DONE; + } - if (rs6000_is_valid_2insn_and (operands[2], <MODE>mode)) - { - rs6000_emit_2insn_and (<MODE>mode, operands, true, 0); - DONE; - } + if (rs6000_is_valid_2insn_and (operands[2], <MODE>mode)) + { + rs6000_emit_2insn_and (<MODE>mode, operands, true, 0); + DONE; + } - operands[2] = force_reg (<MODE>mode, operands[2]); + operands[2] = force_reg (<MODE>mode, operands[2]); + } }) -- 1.8.1.4