diff options
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/sh/sh.md | 11 |
2 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7a3bdeee1b3..c0461f4629b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Mon Mar 29 20:35:49 1999 J"orn Rennecke <amylaar@cygnus.co.uk> + + * sh.md (mulsi3): Tag an extra REG_EQUAL note to the middle insn. + Mon Mar 29 11:50:34 1999 Jerry Quinn <jquinn@nortelnetworks.com> * pa.h (HAVE_PRE_INCREMENT): Disable when optimizing for a PA8000 diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index f572d6f343d..f5bd532f167 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -1112,8 +1112,17 @@ else { rtx macl = gen_rtx_REG (SImode, MACL_REG); + rtx giv_insn; + first = emit_insn (gen_mul_l (operands[1], operands[2])); - emit_insn (gen_movsi_i ((operands[0]), macl)); + /* consec_sets_giv can only recognize the first insn that sets a + giv as the giv insn. So we must tag this also with a REG_EQUAL + note. */ + giv_insn = emit_insn (gen_movsi_i ((operands[0]), macl)); + REG_NOTES (giv_insn) + = gen_rtx_EXPR_LIST (REG_EQUAL, + gen_rtx_MULT (SImode, operands[1], operands[2]), + REG_NOTES (giv_insn)); /* The sequence must end in a no-op move, lest cse puts macl in its tables and does invalid substitutions. */ last = emit_insn (gen_movsi_i ((operands[0]), operands[0])); |