Commit 6a4a5d95 by John Wehle Committed by John Wehle

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
parent d6470dd0
Sat Apr 10 20:09:55 EDT 1999 John Wehle (john@feith.com)
* 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.
Sat Apr 10 13:09:18 1999 Nick Clifton <nickc@cygnus.com> Sat Apr 10 13:09:18 1999 Nick Clifton <nickc@cygnus.com>
* config/arm/arm.c (di_operand): Allow SUBREGs as well. * config/arm/arm.c (di_operand): Allow SUBREGs as well.
......
...@@ -854,54 +854,6 @@ function_arg_partial_nregs (cum, mode, type, named) ...@@ -854,54 +854,6 @@ function_arg_partial_nregs (cum, mode, type, named)
return 0; return 0;
} }
/* Output an insn whose source is a 386 integer register. SRC is the
rtx for the register, and TEMPLATE is the op-code template. SRC may
be either SImode or DImode.
The template will be output with operands[0] as SRC, and operands[1]
as a pointer to the top of the 386 stack. So a call from floatsidf2
would look like this:
output_op_from_reg (operands[1], AS1 (fild%z0,%1));
where %z0 corresponds to the caller's operands[1], and is used to
emit the proper size suffix.
??? Extend this to handle HImode - a 387 can load and store HImode
values directly. */
void
output_op_from_reg (src, template)
rtx src;
char *template;
{
rtx xops[4];
int size = GET_MODE_SIZE (GET_MODE (src));
xops[0] = src;
xops[1] = AT_SP (Pmode);
xops[2] = GEN_INT (size);
xops[3] = stack_pointer_rtx;
if (size > UNITS_PER_WORD)
{
rtx high;
if (size > 2 * UNITS_PER_WORD)
{
high = gen_rtx_REG (SImode, REGNO (src) + 2);
output_asm_insn (AS1 (push%L0,%0), &high);
}
high = gen_rtx_REG (SImode, REGNO (src) + 1);
output_asm_insn (AS1 (push%L0,%0), &high);
}
output_asm_insn (AS1 (push%L0,%0), &src);
output_asm_insn (template, xops);
output_asm_insn (AS2 (add%L3,%2,%3), xops);
}
/* Output an insn to pop an value from the 387 top-of-stack to 386 /* Output an insn to pop an value from the 387 top-of-stack to 386
register DEST. The 387 register stack is popped if DIES is true. If register DEST. The 387 register stack is popped if DIES is true. If
the mode of DEST is an integer mode, a `fist' integer store is done, the mode of DEST is an integer mode, a `fist' integer store is done,
......
...@@ -2713,7 +2713,6 @@ extern void function_arg_advance (); ...@@ -2713,7 +2713,6 @@ extern void function_arg_advance ();
extern struct rtx_def *function_arg (); extern struct rtx_def *function_arg ();
extern int function_arg_partial_nregs (); extern int function_arg_partial_nregs ();
extern char *output_strlen_unroll (); extern char *output_strlen_unroll ();
extern void output_op_from_reg ();
extern void output_to_reg (); extern void output_to_reg ();
extern char *singlemove_string (); extern char *singlemove_string ();
extern char *output_move_double (); extern char *output_move_double ();
......
...@@ -2171,110 +2171,271 @@ ...@@ -2171,110 +2171,271 @@
;; Conversions between float and double. ;; Conversions between float and double.
(define_insn "extendsfdf2" (define_expand "extendsfdf2"
[(set (match_operand:DF 0 "nonimmediate_operand" "=fm,f") [(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "")
(float_extend:DF (float_extend:DF
(match_operand:SF 1 "nonimmediate_operand" "f,fm")))] (match_operand:SF 1 "nonimmediate_operand" "")))
(clobber (match_dup 2))
(clobber (match_dup 3))])]
"TARGET_80387" "TARGET_80387"
"
{
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
operands[1] = force_reg (SFmode, operands[1]);
operands[2] = assign_386_stack_local (SFmode, 0);
operands[3] = assign_386_stack_local (DFmode, 0);
}")
(define_insn ""
[(set (match_operand:DF 0 "nonimmediate_operand" "=f,m,!f,!*r")
(float_extend:DF
(match_operand:SF 1 "nonimmediate_operand" "fm,f,*r,f")))
(clobber (match_operand:SF 2 "memory_operand" "m,m,m,m"))
(clobber (match_operand:DF 3 "memory_operand" "m,m,m,o"))]
"TARGET_80387 && (GET_CODE (operands[0]) != MEM
|| GET_CODE (operands[1]) != MEM)"
"#")
(define_split
[(set (match_operand:DF 0 "register_operand" "")
(float_extend:DF (match_operand:SF 1 "register_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))
(clobber (match_operand:DF 3 "memory_operand" ""))]
"TARGET_80387 && reload_completed && NON_STACK_REG_P (operands[1])"
[(set (match_dup 2)
(match_dup 1))
(set (match_dup 0)
(float_extend:DF (match_dup 2)))]
"")
(define_split
[(set (match_operand:DF 0 "register_operand" "")
(float_extend:DF (match_operand:SF 1 "register_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))
(clobber (match_operand:DF 3 "memory_operand" ""))]
"TARGET_80387 && reload_completed && NON_STACK_REG_P (operands[0])"
[(set (match_dup 3)
(float_extend:DF (match_dup 1)))
(set (match_dup 0)
(match_dup 3))]
"")
(define_split
[(set (match_operand:DF 0 "nonimmediate_operand" "")
(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))
(clobber (match_operand:DF 3 "memory_operand" ""))]
"TARGET_80387 && reload_completed"
[(set (match_dup 0)
(float_extend:DF (match_dup 1)))]
"")
(define_insn ""
[(set (match_operand:DF 0 "nonimmediate_operand" "=f,m")
(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))]
"TARGET_80387 && (GET_CODE (operands[0]) != MEM
|| GET_CODE (operands[1]) != MEM)"
"* "*
{ {
int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0; int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0;
if (NON_STACK_REG_P (operands[1])) if (! STACK_TOP_P (operands[0]) && ! STACK_TOP_P (operands[1]))
{ abort ();
output_op_from_reg (operands[1], AS1 (fld%z0,%y1));
RET;
}
if (NON_STACK_REG_P (operands[0])) if (STACK_TOP_P (operands[0]) && STACK_TOP_P (operands[1]))
{ return \"\";
output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
if (STACK_TOP_P (operands[0])) if (STACK_TOP_P (operands[0]))
return AS1 (fld%z1,%y1); return AS1 (fld%z1,%y1);
if (GET_CODE (operands[0]) == MEM) if (stack_top_dies)
{ return AS1 (fstp%z0,%y0);
if (stack_top_dies) else
return AS1 (fstp%z0,%y0); return AS1 (fst%z0,%y0);
else }"
return AS1 (fst%z0,%y0); [(set_attr "type" "fld,fpop")])
}
(define_expand "extenddfxf2"
[(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "")
(float_extend:XF
(match_operand:DF 1 "nonimmediate_operand" "")))
(clobber (match_dup 2))
(clobber (match_dup 3))])]
"TARGET_80387"
"
{
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
operands[1] = force_reg (DFmode, operands[1]);
abort (); operands[2] = assign_386_stack_local (DFmode, 0);
operands[3] = assign_386_stack_local (XFmode, 0);
}") }")
(define_insn "extenddfxf2" (define_insn ""
[(set (match_operand:XF 0 "nonimmediate_operand" "=fm,f,f,!*r") [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,!f,!*r")
(float_extend:XF (float_extend:XF
(match_operand:DF 1 "nonimmediate_operand" "f,fm,!*r,f")))] (match_operand:DF 1 "nonimmediate_operand" "fm,f,*r,f")))
"TARGET_80387" (clobber (match_operand:DF 2 "memory_operand" "m,m,o,m"))
(clobber (match_operand:XF 3 "memory_operand" "m,m,m,o"))]
"TARGET_80387 && (GET_CODE (operands[0]) != MEM
|| GET_CODE (operands[1]) != MEM)"
"#")
(define_split
[(set (match_operand:XF 0 "register_operand" "")
(float_extend:XF (match_operand:DF 1 "register_operand" "")))
(clobber (match_operand:DF 2 "memory_operand" ""))
(clobber (match_operand:XF 3 "memory_operand" ""))]
"TARGET_80387 && reload_completed && NON_STACK_REG_P (operands[1])"
[(set (match_dup 2)
(match_dup 1))
(set (match_dup 0)
(float_extend:XF (match_dup 2)))]
"")
(define_split
[(set (match_operand:XF 0 "register_operand" "")
(float_extend:XF (match_operand:DF 1 "register_operand" "")))
(clobber (match_operand:DF 2 "memory_operand" ""))
(clobber (match_operand:XF 3 "memory_operand" ""))]
"TARGET_80387 && reload_completed && NON_STACK_REG_P (operands[0])"
[(set (match_dup 3)
(float_extend:XF (match_dup 1)))
(set (match_dup 0)
(match_dup 3))]
"")
(define_split
[(set (match_operand:XF 0 "nonimmediate_operand" "")
(float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "")))
(clobber (match_operand:DF 2 "memory_operand" ""))
(clobber (match_operand:XF 3 "memory_operand" ""))]
"TARGET_80387 && reload_completed"
[(set (match_dup 0)
(float_extend:XF (match_dup 1)))]
"")
(define_insn ""
[(set (match_operand:XF 0 "nonimmediate_operand" "=f,m")
(float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))]
"TARGET_80387 && (GET_CODE (operands[0]) != MEM
|| GET_CODE (operands[1]) != MEM)"
"* "*
{ {
int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0; int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0;
if (NON_STACK_REG_P (operands[1])) if (! STACK_TOP_P (operands[0]) && ! STACK_TOP_P (operands[1]))
{ abort ();
output_op_from_reg (operands[1], AS1 (fld%z0,%y1));
RET;
}
if (NON_STACK_REG_P (operands[0])) if (STACK_TOP_P (operands[0]) && STACK_TOP_P (operands[1]))
{ return \"\";
output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
if (STACK_TOP_P (operands[0])) if (STACK_TOP_P (operands[0]))
return AS1 (fld%z1,%y1); return AS1 (fld%z1,%y1);
if (GET_CODE (operands[0]) == MEM) if (stack_top_dies || GET_CODE (operands[0]) == MEM)
{ output_asm_insn (AS1 (fstp%z0,%y0), operands);
output_asm_insn (AS1 (fstp%z0,%y0), operands); else
if (! stack_top_dies) return AS1 (fst%z0,%y0);
return AS1 (fld%z0,%y0);
RET;
}
abort (); if (! stack_top_dies)
return AS1 (fld%z0,%y0);
return \"\";
}"
[(set_attr "type" "fld,fpop")])
(define_expand "extendsfxf2"
[(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "")
(float_extend:XF
(match_operand:SF 1 "nonimmediate_operand" "")))
(clobber (match_dup 2))
(clobber (match_dup 3))])]
"TARGET_80387"
"
{
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
operands[1] = force_reg (SFmode, operands[1]);
operands[2] = assign_386_stack_local (SFmode, 0);
operands[3] = assign_386_stack_local (XFmode, 0);
}") }")
(define_insn "extendsfxf2" (define_insn ""
[(set (match_operand:XF 0 "nonimmediate_operand" "=fm,f,f,!*r") [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,!f,!*r")
(float_extend:XF (float_extend:XF
(match_operand:SF 1 "nonimmediate_operand" "f,fm,!*r,f")))] (match_operand:SF 1 "nonimmediate_operand" "fm,f,*r,f")))
"TARGET_80387" (clobber (match_operand:SF 2 "memory_operand" "m,m,m,m"))
(clobber (match_operand:XF 3 "memory_operand" "m,m,m,o"))]
"TARGET_80387 && (GET_CODE (operands[0]) != MEM
|| GET_CODE (operands[1]) != MEM)"
"#")
(define_split
[(set (match_operand:XF 0 "register_operand" "")
(float_extend:XF (match_operand:SF 1 "register_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))
(clobber (match_operand:XF 3 "memory_operand" ""))]
"TARGET_80387 && reload_completed && NON_STACK_REG_P (operands[1])"
[(set (match_dup 2)
(match_dup 1))
(set (match_dup 0)
(float_extend:XF (match_dup 2)))]
"")
(define_split
[(set (match_operand:XF 0 "register_operand" "")
(float_extend:XF (match_operand:SF 1 "register_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))
(clobber (match_operand:XF 3 "memory_operand" ""))]
"TARGET_80387 && reload_completed && NON_STACK_REG_P (operands[0])"
[(set (match_dup 3)
(float_extend:XF (match_dup 1)))
(set (match_dup 0)
(match_dup 3))]
"")
(define_split
[(set (match_operand:XF 0 "nonimmediate_operand" "")
(float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))
(clobber (match_operand:XF 3 "memory_operand" ""))]
"TARGET_80387 && reload_completed"
[(set (match_dup 0)
(float_extend:XF (match_dup 1)))]
"")
(define_insn ""
[(set (match_operand:XF 0 "nonimmediate_operand" "=f,m")
(float_extend:XF
(match_operand:SF 1 "nonimmediate_operand" "fm,f")))]
"TARGET_80387 && (GET_CODE (operands[0]) != MEM
|| GET_CODE (operands[1]) != MEM)"
"* "*
{ {
int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0; int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0;
if (NON_STACK_REG_P (operands[1])) if (! STACK_TOP_P (operands[0]) && ! STACK_TOP_P (operands[1]))
{ abort ();
output_op_from_reg (operands[1], AS1 (fld%z0,%y1));
RET;
}
if (NON_STACK_REG_P (operands[0])) if (STACK_TOP_P (operands[0]) && STACK_TOP_P (operands[1]))
{ return \"\";
output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
if (STACK_TOP_P (operands[0])) if (STACK_TOP_P (operands[0]))
return AS1 (fld%z1,%y1); return AS1 (fld%z1,%y1);
if (GET_CODE (operands[0]) == MEM) if (stack_top_dies || GET_CODE (operands[0]) == MEM)
{ output_asm_insn (AS1 (fstp%z0,%y0), operands);
output_asm_insn (AS1 (fstp%z0,%y0), operands); else
if (! stack_top_dies) return AS1 (fst%z0,%y0);
return AS1 (fld%z0,%y0);
RET;
}
abort (); if (! stack_top_dies)
}") return AS1 (fld%z0,%y0);
return \"\";
}"
[(set_attr "type" "fld,fpop")])
(define_expand "truncdfsf2" (define_expand "truncdfsf2"
[(parallel [(set (match_operand:SF 0 "nonimmediate_operand" "") [(parallel [(set (match_operand:SF 0 "nonimmediate_operand" "")
...@@ -2502,75 +2663,6 @@ ...@@ -2502,75 +2663,6 @@
}" }"
[(set_attr "type" "fpop")]) [(set_attr "type" "fpop")])
;; The 387 requires that the stack top dies after converting to DImode.
;; Represent an unsigned conversion from SImode to MODE_FLOAT by first
;; doing a signed conversion to DImode, and then taking just the low
;; part.
(define_expand "fixuns_truncxfsi2"
[(set (match_dup 4)
(match_operand:XF 1 "register_operand" ""))
(parallel [(set (match_dup 2)
(fix:DI (fix:XF (match_dup 4))))
(clobber (match_dup 4))
(clobber (match_dup 5))
(clobber (match_dup 6))
(clobber (match_scratch:SI 7 ""))])
(set (match_operand:SI 0 "general_operand" "")
(match_dup 3))]
"TARGET_80387"
"
{
operands[2] = gen_reg_rtx (DImode);
operands[3] = gen_lowpart (SImode, operands[2]);
operands[4] = gen_reg_rtx (XFmode);
operands[5] = (rtx) assign_386_stack_local (SImode, 0);
operands[6] = (rtx) assign_386_stack_local (DImode, 1);
}")
(define_expand "fixuns_truncdfsi2"
[(set (match_dup 4)
(match_operand:DF 1 "register_operand" ""))
(parallel [(set (match_dup 2)
(fix:DI (fix:DF (match_dup 4))))
(clobber (match_dup 4))
(clobber (match_dup 5))
(clobber (match_dup 6))
(clobber (match_scratch:SI 7 ""))])
(set (match_operand:SI 0 "general_operand" "")
(match_dup 3))]
"TARGET_80387"
"
{
operands[2] = gen_reg_rtx (DImode);
operands[3] = gen_lowpart (SImode, operands[2]);
operands[4] = gen_reg_rtx (DFmode);
operands[5] = (rtx) assign_386_stack_local (SImode, 0);
operands[6] = (rtx) assign_386_stack_local (DImode, 1);
}")
(define_expand "fixuns_truncsfsi2"
[(set (match_dup 4)
(match_operand:SF 1 "register_operand" ""))
(parallel [(set (match_dup 2)
(fix:DI (fix:SF (match_dup 4))))
(clobber (match_dup 4))
(clobber (match_dup 5))
(clobber (match_dup 6))
(clobber (match_scratch:SI 7 ""))])
(set (match_operand:SI 0 "general_operand" "")
(match_dup 3))]
"TARGET_80387"
"
{
operands[2] = gen_reg_rtx (DImode);
operands[3] = gen_lowpart (SImode, operands[2]);
operands[4] = gen_reg_rtx (SFmode);
operands[5] = (rtx) assign_386_stack_local (SImode, 0);
operands[6] = (rtx) assign_386_stack_local (DImode, 1);
}")
;; Signed conversion to DImode. ;; Signed conversion to DImode.
(define_expand "fix_truncxfdi2" (define_expand "fix_truncxfdi2"
...@@ -2749,18 +2841,18 @@ ...@@ -2749,18 +2841,18 @@
"#") "#")
(define_split (define_split
[(set (match_operand:SF 0 "register_operand" "=f") [(set (match_operand:SF 0 "register_operand" "")
(float:SF (match_operand:SI 1 "memory_operand" "m"))) (float:SF (match_operand:SI 1 "memory_operand" "")))
(clobber (match_operand:SI 2 "memory_operand" "m"))] (clobber (match_operand:SI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 0) [(set (match_dup 0)
(float:SF (match_dup 1)))] (float:SF (match_dup 1)))]
"") "")
(define_split (define_split
[(set (match_operand:SF 0 "register_operand" "=f") [(set (match_operand:SF 0 "register_operand" "")
(float:SF (match_operand:SI 1 "register_operand" "r"))) (float:SF (match_operand:SI 1 "register_operand" "")))
(clobber (match_operand:SI 2 "memory_operand" "m"))] (clobber (match_operand:SI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 2) [(set (match_dup 2)
(match_dup 1)) (match_dup 1))
...@@ -2790,18 +2882,18 @@ ...@@ -2790,18 +2882,18 @@
"#") "#")
(define_split (define_split
[(set (match_operand:SF 0 "register_operand" "=f") [(set (match_operand:SF 0 "register_operand" "")
(float:SF (match_operand:DI 1 "memory_operand" "m"))) (float:SF (match_operand:DI 1 "memory_operand" "")))
(clobber (match_operand:DI 2 "memory_operand" "m"))] (clobber (match_operand:DI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 0) [(set (match_dup 0)
(float:SF (match_dup 1)))] (float:SF (match_dup 1)))]
"") "")
(define_split (define_split
[(set (match_operand:SF 0 "register_operand" "=f") [(set (match_operand:SF 0 "register_operand" "")
(float:SF (match_operand:DI 1 "register_operand" "r"))) (float:SF (match_operand:DI 1 "register_operand" "")))
(clobber (match_operand:DI 2 "memory_operand" "o"))] (clobber (match_operand:DI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 2) [(set (match_dup 2)
(match_dup 1)) (match_dup 1))
...@@ -2831,18 +2923,18 @@ ...@@ -2831,18 +2923,18 @@
"#") "#")
(define_split (define_split
[(set (match_operand:DF 0 "register_operand" "=f") [(set (match_operand:DF 0 "register_operand" "")
(float:DF (match_operand:SI 1 "memory_operand" "m"))) (float:DF (match_operand:SI 1 "memory_operand" "")))
(clobber (match_operand:SI 2 "memory_operand" "m"))] (clobber (match_operand:SI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 0) [(set (match_dup 0)
(float:DF (match_dup 1)))] (float:DF (match_dup 1)))]
"") "")
(define_split (define_split
[(set (match_operand:DF 0 "register_operand" "=f") [(set (match_operand:DF 0 "register_operand" "")
(float:DF (match_operand:SI 1 "register_operand" "r"))) (float:DF (match_operand:SI 1 "register_operand" "")))
(clobber (match_operand:SI 2 "memory_operand" "m"))] (clobber (match_operand:SI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 2) [(set (match_dup 2)
(match_dup 1)) (match_dup 1))
...@@ -2872,18 +2964,18 @@ ...@@ -2872,18 +2964,18 @@
"#") "#")
(define_split (define_split
[(set (match_operand:DF 0 "register_operand" "=f") [(set (match_operand:DF 0 "register_operand" "")
(float:DF (match_operand:DI 1 "memory_operand" "m"))) (float:DF (match_operand:DI 1 "memory_operand" "")))
(clobber (match_operand:DI 2 "memory_operand" "m"))] (clobber (match_operand:DI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 0) [(set (match_dup 0)
(float:DF (match_dup 1)))] (float:DF (match_dup 1)))]
"") "")
(define_split (define_split
[(set (match_operand:DF 0 "register_operand" "=f") [(set (match_operand:DF 0 "register_operand" "")
(float:DF (match_operand:DI 1 "register_operand" "r"))) (float:DF (match_operand:DI 1 "register_operand" "")))
(clobber (match_operand:DI 2 "memory_operand" "o"))] (clobber (match_operand:DI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 2) [(set (match_dup 2)
(match_dup 1)) (match_dup 1))
...@@ -2913,18 +3005,18 @@ ...@@ -2913,18 +3005,18 @@
"#") "#")
(define_split (define_split
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "")
(float:XF (match_operand:SI 1 "memory_operand" "m"))) (float:XF (match_operand:SI 1 "memory_operand" "")))
(clobber (match_operand:SI 2 "memory_operand" "m"))] (clobber (match_operand:SI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 0) [(set (match_dup 0)
(float:XF (match_dup 1)))] (float:XF (match_dup 1)))]
"") "")
(define_split (define_split
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "")
(float:XF (match_operand:SI 1 "register_operand" "r"))) (float:XF (match_operand:SI 1 "register_operand" "")))
(clobber (match_operand:SI 2 "memory_operand" "m"))] (clobber (match_operand:SI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 2) [(set (match_dup 2)
(match_dup 1)) (match_dup 1))
...@@ -2954,18 +3046,18 @@ ...@@ -2954,18 +3046,18 @@
"#") "#")
(define_split (define_split
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "")
(float:XF (match_operand:DI 1 "memory_operand" "m"))) (float:XF (match_operand:DI 1 "memory_operand" "")))
(clobber (match_operand:DI 2 "memory_operand" "m"))] (clobber (match_operand:DI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 0) [(set (match_dup 0)
(float:XF (match_dup 1)))] (float:XF (match_dup 1)))]
"") "")
(define_split (define_split
[(set (match_operand:XF 0 "register_operand" "=f") [(set (match_operand:XF 0 "register_operand" "")
(float:XF (match_operand:DI 1 "register_operand" "r"))) (float:XF (match_operand:DI 1 "register_operand" "")))
(clobber (match_operand:DI 2 "memory_operand" "o"))] (clobber (match_operand:DI 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387 && reload_completed"
[(set (match_dup 2) [(set (match_dup 2)
(match_dup 1)) (match_dup 1))
...@@ -7208,12 +7300,12 @@ byte_xor_operation: ...@@ -7208,12 +7300,12 @@ byte_xor_operation:
"#") "#")
(define_split (define_split
[(set (match_operand:SI 0 "register_operand" "=r,r") [(set (match_operand:SI 0 "register_operand" "")
(if_then_else:SI (match_operator 1 "comparison_operator" (if_then_else:SI (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(const_int 0)]) (const_int 0)])
(match_operand:SI 3 "nonimmediate_operand" "rm,0") (match_operand:SI 3 "nonimmediate_operand" "")
(match_operand:SI 4 "nonimmediate_operand" "0,rm")))] (match_operand:SI 4 "nonimmediate_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) [(set (cc0)
(match_dup 2)) (match_dup 2))
...@@ -7223,12 +7315,12 @@ byte_xor_operation: ...@@ -7223,12 +7315,12 @@ byte_xor_operation:
"") "")
(define_split (define_split
[(set (match_operand:SI 0 "register_operand" "=r,r") [(set (match_operand:SI 0 "register_operand" "")
(if_then_else:SI (match_operator 1 "comparison_operator" (if_then_else:SI (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(match_operand 3 "general_operand" "")]) (match_operand 3 "general_operand" "")])
(match_operand:SI 4 "nonimmediate_operand" "rm,0") (match_operand:SI 4 "nonimmediate_operand" "")
(match_operand:SI 5 "nonimmediate_operand" "0,rm")))] (match_operand:SI 5 "nonimmediate_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) (compare (match_dup 2) (match_dup 3))) [(set (cc0) (compare (match_dup 2) (match_dup 3)))
(set (match_dup 0) (set (match_dup 0)
...@@ -7282,12 +7374,12 @@ byte_xor_operation: ...@@ -7282,12 +7374,12 @@ byte_xor_operation:
"#") "#")
(define_split (define_split
[(set (match_operand:HI 0 "register_operand" "=r,r") [(set (match_operand:HI 0 "register_operand" "")
(if_then_else:HI (match_operator 1 "comparison_operator" (if_then_else:HI (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(const_int 0)]) (const_int 0)])
(match_operand:HI 3 "nonimmediate_operand" "rm,0") (match_operand:HI 3 "nonimmediate_operand" "")
(match_operand:HI 4 "nonimmediate_operand" "0,rm")))] (match_operand:HI 4 "nonimmediate_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) [(set (cc0)
(match_dup 2)) (match_dup 2))
...@@ -7297,12 +7389,12 @@ byte_xor_operation: ...@@ -7297,12 +7389,12 @@ byte_xor_operation:
"") "")
(define_split (define_split
[(set (match_operand:HI 0 "register_operand" "=r,r") [(set (match_operand:HI 0 "register_operand" "")
(if_then_else:HI (match_operator 1 "comparison_operator" (if_then_else:HI (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(match_operand 3 "general_operand" "")]) (match_operand 3 "general_operand" "")])
(match_operand:HI 4 "nonimmediate_operand" "rm,0") (match_operand:HI 4 "nonimmediate_operand" "")
(match_operand:HI 5 "nonimmediate_operand" "0,rm")))] (match_operand:HI 5 "nonimmediate_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) [(set (cc0)
(compare (match_dup 2) (match_dup 3))) (compare (match_dup 2) (match_dup 3)))
...@@ -7385,12 +7477,12 @@ byte_xor_operation: ...@@ -7385,12 +7477,12 @@ byte_xor_operation:
"#") "#")
(define_split (define_split
[(set (match_operand:SF 0 "register_operand" "=f,f") [(set (match_operand:SF 0 "register_operand" "")
(if_then_else:SF (match_operator 1 "comparison_operator" (if_then_else:SF (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(const_int 0)]) (const_int 0)])
(match_operand:SF 3 "register_operand" "f,0") (match_operand:SF 3 "register_operand" "")
(match_operand:SF 4 "register_operand" "0,f")))] (match_operand:SF 4 "register_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) [(set (cc0)
(match_dup 2)) (match_dup 2))
...@@ -7400,12 +7492,12 @@ byte_xor_operation: ...@@ -7400,12 +7492,12 @@ byte_xor_operation:
"") "")
(define_split (define_split
[(set (match_operand:SF 0 "register_operand" "=f,f") [(set (match_operand:SF 0 "register_operand" "")
(if_then_else:SF (match_operator 1 "comparison_operator" (if_then_else:SF (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(match_operand 3 "general_operand" "")]) (match_operand 3 "general_operand" "")])
(match_operand:SF 4 "register_operand" "f,0") (match_operand:SF 4 "register_operand" "")
(match_operand:SF 5 "register_operand" "0,f")))] (match_operand:SF 5 "register_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) (compare (match_dup 2) (match_dup 3))) [(set (cc0) (compare (match_dup 2) (match_dup 3)))
(set (match_dup 0) (set (match_dup 0)
...@@ -7487,12 +7579,12 @@ byte_xor_operation: ...@@ -7487,12 +7579,12 @@ byte_xor_operation:
"#") "#")
(define_split (define_split
[(set (match_operand:DF 0 "register_operand" "=f,f") [(set (match_operand:DF 0 "register_operand" "")
(if_then_else:DF (match_operator 1 "comparison_operator" (if_then_else:DF (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(const_int 0)]) (const_int 0)])
(match_operand:DF 3 "register_operand" "f,0") (match_operand:DF 3 "register_operand" "")
(match_operand:DF 4 "register_operand" "0,f")))] (match_operand:DF 4 "register_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) [(set (cc0)
(match_dup 2)) (match_dup 2))
...@@ -7502,12 +7594,12 @@ byte_xor_operation: ...@@ -7502,12 +7594,12 @@ byte_xor_operation:
"") "")
(define_split (define_split
[(set (match_operand:DF 0 "register_operand" "=f,f") [(set (match_operand:DF 0 "register_operand" "")
(if_then_else:DF (match_operator 1 "comparison_operator" (if_then_else:DF (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(match_operand 3 "general_operand" "")]) (match_operand 3 "general_operand" "")])
(match_operand:DF 4 "register_operand" "f,0") (match_operand:DF 4 "register_operand" "")
(match_operand:DF 5 "register_operand" "0,f")))] (match_operand:DF 5 "register_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) (compare (match_dup 2) (match_dup 3))) [(set (cc0) (compare (match_dup 2) (match_dup 3)))
(set (match_dup 0) (set (match_dup 0)
...@@ -7589,12 +7681,12 @@ byte_xor_operation: ...@@ -7589,12 +7681,12 @@ byte_xor_operation:
"#") "#")
(define_split (define_split
[(set (match_operand:XF 0 "register_operand" "=f,f") [(set (match_operand:XF 0 "register_operand" "")
(if_then_else:XF (match_operator 1 "comparison_operator" (if_then_else:XF (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(const_int 0)]) (const_int 0)])
(match_operand:XF 3 "register_operand" "f,0") (match_operand:XF 3 "register_operand" "")
(match_operand:XF 4 "register_operand" "0,f")))] (match_operand:XF 4 "register_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) [(set (cc0)
(match_dup 2)) (match_dup 2))
...@@ -7604,12 +7696,12 @@ byte_xor_operation: ...@@ -7604,12 +7696,12 @@ byte_xor_operation:
"") "")
(define_split (define_split
[(set (match_operand:XF 0 "register_operand" "=f,f") [(set (match_operand:XF 0 "register_operand" "")
(if_then_else:XF (match_operator 1 "comparison_operator" (if_then_else:XF (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(match_operand 3 "general_operand" "")]) (match_operand 3 "general_operand" "")])
(match_operand:XF 4 "register_operand" "f,0") (match_operand:XF 4 "register_operand" "")
(match_operand:XF 5 "register_operand" "0,f")))] (match_operand:XF 5 "register_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) (compare (match_dup 2) (match_dup 3))) [(set (cc0) (compare (match_dup 2) (match_dup 3)))
(set (match_dup 0) (set (match_dup 0)
...@@ -7663,12 +7755,12 @@ byte_xor_operation: ...@@ -7663,12 +7755,12 @@ byte_xor_operation:
"#") "#")
(define_split (define_split
[(set (match_operand:DI 0 "register_operand" "=&r,&r") [(set (match_operand:DI 0 "register_operand" "")
(if_then_else:DI (match_operator 1 "comparison_operator" (if_then_else:DI (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(const_int 0)]) (const_int 0)])
(match_operand:DI 3 "nonimmediate_operand" "ro,0") (match_operand:DI 3 "nonimmediate_operand" "")
(match_operand:DI 4 "nonimmediate_operand" "0,ro")))] (match_operand:DI 4 "nonimmediate_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) [(set (cc0)
(match_dup 2)) (match_dup 2))
...@@ -7683,12 +7775,12 @@ byte_xor_operation: ...@@ -7683,12 +7775,12 @@ byte_xor_operation:
split_di (&operands[4], 1, &operands[9], &operands[10]);") split_di (&operands[4], 1, &operands[9], &operands[10]);")
(define_split (define_split
[(set (match_operand:DI 0 "register_operand" "=&r,&r") [(set (match_operand:DI 0 "register_operand" "")
(if_then_else:DI (match_operator 1 "comparison_operator" (if_then_else:DI (match_operator 1 "comparison_operator"
[(match_operand 2 "nonimmediate_operand" "") [(match_operand 2 "nonimmediate_operand" "")
(match_operand 3 "general_operand" "")]) (match_operand 3 "general_operand" "")])
(match_operand:DI 4 "nonimmediate_operand" "ro,0") (match_operand:DI 4 "nonimmediate_operand" "")
(match_operand:DI 5 "nonimmediate_operand" "0,ro")))] (match_operand:DI 5 "nonimmediate_operand" "")))]
"TARGET_CMOVE && reload_completed" "TARGET_CMOVE && reload_completed"
[(set (cc0) (compare (match_dup 2) (match_dup 3))) [(set (cc0) (compare (match_dup 2) (match_dup 3)))
(set (match_dup 6) (set (match_dup 6)
......
...@@ -1405,6 +1405,14 @@ static void ...@@ -1405,6 +1405,14 @@ static void
delete_insn_for_stacker (insn) delete_insn_for_stacker (insn)
rtx 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); PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0; NOTE_SOURCE_FILE (insn) = 0;
...@@ -2478,8 +2486,14 @@ subst_stack_regs (insn, regstack) ...@@ -2478,8 +2486,14 @@ subst_stack_regs (insn, regstack)
for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++) for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
{ {
if (stack_regs_mentioned_p (XVECEXP (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 else
subst_stack_regs_pat (insn, regstack, PATTERN (insn)); subst_stack_regs_pat (insn, regstack, PATTERN (insn));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment