2018-04-10 Segher Boessenkool PR target/85287 * gcc/config/rs6000/rs6000.md (allocate_stack): Put the residual size for stack clash protection in a register whenever we need it to be in a register. --- a/gcc/config/rs6000/rs6000.md 2018/04/10 21:09:30 259298 +++ b/gcc/config/rs6000/rs6000.md 2018/04/10 21:37:34 259299 @@ -9783,14 +9783,12 @@ /* Now handle residuals. We just have to set operands[1] correctly and let the rest of the expander run. */ operands[1] = residual; - if (!CONST_INT_P (residual)) - operands[1] = force_reg (Pmode, operands[1]); } - if (GET_CODE (operands[1]) != CONST_INT - || INTVAL (operands[1]) < -32767 - || INTVAL (operands[1]) > 32768) + if (!(CONST_INT_P (operands[1]) + && IN_RANGE (INTVAL (operands[1]), -32767, 32768))) { + operands[1] = force_reg (Pmode, operands[1]); neg_op0 = gen_reg_rtx (Pmode); if (TARGET_32BIT) emit_insn (gen_negsi2 (neg_op0, operands[1])); @@ -9798,7 +9796,7 @@ emit_insn (gen_negdi2 (neg_op0, operands[1])); } else - neg_op0 = GEN_INT (- INTVAL (operands[1])); + neg_op0 = GEN_INT (-INTVAL (operands[1])); insn = emit_insn ((* ((TARGET_32BIT) ? gen_movsi_update_stack : gen_movdi_di_update_stack))