diff options
author | wehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-04-10 17:18:08 +0000 |
---|---|---|
committer | wehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-04-10 17:18:08 +0000 |
commit | 6c3269d835c4f9cde7e0247ce3b8b5a314d5af65 (patch) | |
tree | e7defba0ed613c69d9f7f05379c456447918777f /gcc/reg-stack.c | |
parent | 06f8dd7695c6af31f005b7f30dcbb9355c58a20f (diff) | |
download | gcc-6c3269d835c4f9cde7e0247ce3b8b5a314d5af65.tar.gz |
* i386.md (floatsisf2, floatdisf2, floatsidf2, floatdidf2,
floatsixf2, floatdixf2, movsicc, movhicc, movsfcc, movdfcc,
movxfcc, movdicc): Remove unused register constraints from
the splitters.
* i386.md (fixuns_truncsfsi2, fixuns_truncdfsi2,
fixuns_truncxfsi2): Delete.
* reg-stack.c (delete_insn_for_stacker): Ensure that
the only side effects of a PARALLEL are clobbers.
(subst_stack_regs): Handle subst_stack_regs_pat deleting
a PARALLEL.
* i386.md (extendsfdf2, extenddfxf2,
extendsfxf2): Rewrite using a splitter.
* i386.c (output_op_from_reg): Remove.
* i386.h: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@26338 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reg-stack.c')
-rw-r--r-- | gcc/reg-stack.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index 014f9524013..fe554a031c9 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -1405,6 +1405,14 @@ static void delete_insn_for_stacker (insn) rtx insn; { + int i; + + /* Ensure that the side effects were clobbers when deleting a PARALLEL. */ + if (GET_CODE (PATTERN (insn)) == PARALLEL) + for (i = 1; i < XVECLEN (PATTERN (insn), 0); i++) + if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) != CLOBBER) + abort (); + PUT_CODE (insn, NOTE); NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; NOTE_SOURCE_FILE (insn) = 0; @@ -2478,8 +2486,14 @@ subst_stack_regs (insn, regstack) for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++) { if (stack_regs_mentioned_p (XVECEXP (PATTERN (insn), 0, i))) - subst_stack_regs_pat (insn, regstack, - XVECEXP (PATTERN (insn), 0, i)); + { + subst_stack_regs_pat (insn, regstack, + XVECEXP (PATTERN (insn), 0, i)); + + /* subst_stack_regs_pat may have deleted a no-op insn. */ + if (GET_CODE (insn) == NOTE) + break; + } } else subst_stack_regs_pat (insn, regstack, PATTERN (insn)); |