summaryrefslogtreecommitdiff
path: root/gcc/stupid.c
diff options
context:
space:
mode:
authorwehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4>1999-04-25 11:43:49 +0000
committerwehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4>1999-04-25 11:43:49 +0000
commitaae163e1020becf456dafd42e6995a3ec1203cec (patch)
tree7ca441f8bb80a8971078183607b030c4dd82e538 /gcc/stupid.c
parenta6af95fb35a4f613476d2ae14f070f0a4c5613bd (diff)
downloadgcc-aae163e1020becf456dafd42e6995a3ec1203cec.tar.gz
* stupid.c (stupid_mark_refs): Generate a REG_UNUSED note
for a register which is clobbered even if the register was used by an earlier instruction. * i386.md (fix_truncsfdi2, fix_truncdfdi2, fix_truncxfdi2): Don't bother with the gen_reg_RTX. (fix_truncsfsi2, fix_truncsfdi2, fix_truncdfsi2, fix_truncdfdi2, fix_truncxfsi2, fix_truncxfdi2): Update operand constraints and modes. * i386.c (output_fix_trunc): Use HImode register to avoid memory stalls. Call output_move_double instead of output_to_reg. (output_to_reg): Remove. * i386.h: Likewise. * i386.md (negsf2, negdf2, negxf2): Set the type attribute to fpop. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@26621 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/stupid.c')
-rw-r--r--gcc/stupid.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/gcc/stupid.c b/gcc/stupid.c
index a0368bec3ca..b2cd170c8c3 100644
--- a/gcc/stupid.c
+++ b/gcc/stupid.c
@@ -682,16 +682,18 @@ stupid_mark_refs (x, chain)
if (last_setjmp_suid < reg_where_dead[regno])
regs_crosses_setjmp[regno] = 1;
- /* If this register is only used in this insn and is only
- set, mark it unused. We have to do this even when not
- optimizing so that MD patterns which count on this
- behavior (e.g., it not causing an output reload on
- an insn setting CC) will operate correctly. */
+ /* If this register is clobbered or it is only used in
+ this insn and is only set, mark it unused. We have
+ to do this even when not optimizing so that MD patterns
+ which count on this behavior (e.g., it not causing an
+ output reload on an insn setting CC) will operate
+ correctly. */
if (GET_CODE (SET_DEST (x)) == REG
- && REGNO_FIRST_UID (regno) == INSN_UID (insn)
- && REGNO_LAST_UID (regno) == INSN_UID (insn)
- && (code == CLOBBER || ! reg_mentioned_p (SET_DEST (x),
- SET_SRC (x))))
+ && (code == CLOBBER
+ || (REGNO_FIRST_UID (regno) == INSN_UID (insn)
+ && REGNO_LAST_UID (regno) == INSN_UID (insn)
+ && ! reg_mentioned_p (SET_DEST (x),
+ SET_SRC (x)))))
REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_UNUSED,
SET_DEST (x),
REG_NOTES (insn));