diff options
author | wehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-04-25 11:43:49 +0000 |
---|---|---|
committer | wehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-04-25 11:43:49 +0000 |
commit | aae163e1020becf456dafd42e6995a3ec1203cec (patch) | |
tree | 7ca441f8bb80a8971078183607b030c4dd82e538 /gcc/stupid.c | |
parent | a6af95fb35a4f613476d2ae14f070f0a4c5613bd (diff) | |
download | gcc-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.c | 20 |
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)); |