summaryrefslogtreecommitdiff
path: root/gcc/reg-stack.c
diff options
context:
space:
mode:
authorwehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4>1999-04-10 17:18:08 +0000
committerwehle <wehle@138bc75d-0d04-0410-961f-82ee72b054a4>1999-04-10 17:18:08 +0000
commit6c3269d835c4f9cde7e0247ce3b8b5a314d5af65 (patch)
treee7defba0ed613c69d9f7f05379c456447918777f /gcc/reg-stack.c
parent06f8dd7695c6af31f005b7f30dcbb9355c58a20f (diff)
downloadgcc-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.c18
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));