+2002-07-05 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.md ("*ashlsi3"): Avoid saving y if we know
+ it is dead.
+ ("*ashrsi3"): Likewise.
+ ("*lshrsi3"): Likewise.
+
2002-07-05 Vladimir Makarov <vmakarov@redhat.com>
* genautomata.c (output_max_insn_queue_index_def): Take latencies
into account.
-2002-07-06 Stephane Carrez <stcarrez@nerim.fr>
+2002-07-05 Stephane Carrez <stcarrez@nerim.fr>
* config/m68hc11/m68hc11.md (peephole2): New peephole2 to optimize
address computation and memory moves.
if (!Y_REG_P (operands[2]))
{
rtx ops[1];
+ int y_dead = dead_register_here (insn, iy_reg);
ops[0] = operands[1];
- output_asm_insn (\"pshy\", operands);
- if (reg_mentioned_p (stack_pointer_rtx, operands[1]))
+ if (y_dead == 0)
{
- ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2);
+ output_asm_insn (\"pshy\", operands);
+ if (reg_mentioned_p (stack_pointer_rtx, operands[1]))
+ ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2);
}
output_asm_insn (\"ldy\\t%0\", ops);
output_asm_insn (\"bsr\\t___ashlsi3\", operands);
- return \"puly\";
+ return y_dead == 0 ? \"puly\" : \"\";
}
return \"bsr\\t___ashlsi3\";
}")
if (!Y_REG_P (operands[2]))
{
rtx ops[1];
+ int y_dead = dead_register_here (insn, iy_reg);
ops[0] = operands[1];
- output_asm_insn (\"pshy\", operands);
- if (reg_mentioned_p (stack_pointer_rtx, operands[1]))
+ if (y_dead == 0)
{
- ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2);
+ output_asm_insn (\"pshy\", operands);
+ if (reg_mentioned_p (stack_pointer_rtx, operands[1]))
+ ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2);
}
output_asm_insn (\"ldy\\t%0\", ops);
output_asm_insn (\"bsr\\t___ashrsi3\", operands);
- return \"puly\";
+ return y_dead == 0 ? \"puly\" : \"\";
}
return \"bsr\\t___ashrsi3\";
}")
if (!Y_REG_P (operands[2]))
{
rtx ops[1];
+ int y_dead = dead_register_here (insn, iy_reg);
ops[0] = operands[1];
- output_asm_insn (\"pshy\", operands);
- if (reg_mentioned_p (stack_pointer_rtx, operands[1]))
+ if (y_dead == 0)
{
- ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2);
+ output_asm_insn (\"pshy\", operands);
+ if (reg_mentioned_p (stack_pointer_rtx, operands[1]))
+ ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2);
}
output_asm_insn (\"ldy\\t%0\", ops);
output_asm_insn (\"bsr\\t___lshrsi3\", operands);
- return \"puly\";
+ return y_dead == 0 ? \"puly\" : \"\";
}
return \"bsr\\t___lshrsi3\";
}")