aboutsummaryrefslogtreecommitdiff
path: root/gcc/reg-stack.c
diff options
context:
space:
mode:
authorJohn Wehle <john@feith.com>1999-04-10 17:18:08 +0000
committerJohn Wehle <wehle@gcc.gnu.org>1999-04-10 17:18:08 +0000
commit6a4a5d954ba4d21559453c4a2bf5b95c5105982d (patch)
treee7defba0ed613c69d9f7f05379c456447918777f /gcc/reg-stack.c
parentd6470dd07edf86bea7fa918f483004d0b3a0c7c9 (diff)
downloadgcc-6a4a5d954ba4d21559453c4a2bf5b95c5105982d.zip
gcc-6a4a5d954ba4d21559453c4a2bf5b95c5105982d.tar.gz
gcc-6a4a5d954ba4d21559453c4a2bf5b95c5105982d.tar.bz2
i386.md (floatsisf2, [...]): Remove unused register constraints from the splitters.
* 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. From-SVN: r26338
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 014f952..fe554a0 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));