This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: reload problem in current CVS
- To: Bernd Schmidt <bernds at pathia dot cygnus dot co dot uk>, egcs-patches at egcs dot cygnus dot com
- Subject: Re: reload problem in current CVS
- From: Jan Hubicka <hubicka at atrey dot karlin dot mff dot cuni dot cz>
- Date: Tue, 30 Nov 1999 15:33:10 +0100
- Cc: egcs-bugs at egcs dot cygnus dot com
- References: <Pine.LNX.4.20.9911251047530.5029-100000@moshier.ne.mediaone.net> <Pine.LNX.4.04.9911291359590.16486-100000@pathia.cygnus.co.uk>
>
> Jan, is there any particular reason that the patterns which use FLOAT_INT_REGS
> (like the one above) couldn't be written like this, i.e. splitting the
> alternatives:
>
> (define_insn "*negsf2_if"
> [(set (match_operand:SF 0 "nonimmediate_operand" "=f,rm")
> (neg:SF (match_operand:SF 1 "nonimmediate_operand" "0,0")))
> (clobber (reg:CC 17))]
>
> That should avoid this particular problem.
I've done this. Only I've added the #f and #r to keep costs working right.
The testcase seems to work nicelly now.
OK to install?
Tue Nov 30 15:20:52 MET 1999 Jan Hubicka <hubicka@freesoft.cz>
* i386.md (neg?f2_if): Split "r" and "f" to separate alternatives.
(abs?f2_if): Likewise.
Index: egcs/gcc/config/i386/i386.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/i386/i386.md,v
retrieving revision 1.110
diff -c -3 -p -r1.110 i386.md
*** i386.md 1999/11/25 12:53:44 1.110
--- i386.md 1999/11/30 14:26:53
***************
*** 4968,4976 ****
"TARGET_80387"
"ix86_expand_unary_operator (NEG, SFmode, operands); DONE;")
(define_insn "*negsf2_if"
! [(set (match_operand:SF 0 "nonimmediate_operand" "=frm")
! (neg:SF (match_operand:SF 1 "nonimmediate_operand" "0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (NEG, SFmode, operands)"
"#")
--- 4838,4849 ----
"TARGET_80387"
"ix86_expand_unary_operator (NEG, SFmode, operands); DONE;")
+ ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+ ;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+ ;; to itself.
(define_insn "*negsf2_if"
! [(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f")
! (neg:SF (match_operand:SF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (NEG, SFmode, operands)"
"#")
***************
*** 5020,5028 ****
"TARGET_80387"
"ix86_expand_unary_operator (NEG, DFmode, operands); DONE;")
(define_insn "*negdf2_if"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=frm")
! (neg:DF (match_operand:DF 1 "nonimmediate_operand" "0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (NEG, DFmode, operands)"
"#")
--- 4893,4904 ----
"TARGET_80387"
"ix86_expand_unary_operator (NEG, DFmode, operands); DONE;")
+ ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+ ;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+ ;; to itself.
(define_insn "*negdf2_if"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=f#r,rm#f")
! (neg:DF (match_operand:DF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (NEG, DFmode, operands)"
"#")
***************
*** 5053,5061 ****
"TARGET_80387"
"ix86_expand_unary_operator (NEG, XFmode, operands); DONE;")
(define_insn "*negxf2_if"
! [(set (match_operand:XF 0 "nonimmediate_operand" "=frm")
! (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (NEG, XFmode, operands)"
"#")
--- 4929,4940 ----
"TARGET_80387"
"ix86_expand_unary_operator (NEG, XFmode, operands); DONE;")
+ ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+ ;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+ ;; to itself.
(define_insn "*negxf2_if"
! [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f")
! (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (NEG, XFmode, operands)"
"#")
***************
*** 5142,5150 ****
"TARGET_80387"
"ix86_expand_unary_operator (ABS, SFmode, operands); DONE;")
(define_insn "*abssf2_if"
! [(set (match_operand:SF 0 "nonimmediate_operand" "=frm")
! (abs:SF (match_operand:SF 1 "nonimmediate_operand" "0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (ABS, SFmode, operands)"
"#")
--- 5021,5032 ----
"TARGET_80387"
"ix86_expand_unary_operator (ABS, SFmode, operands); DONE;")
+ ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+ ;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+ ;; to itself.
(define_insn "*abssf2_if"
! [(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f")
! (abs:SF (match_operand:SF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (ABS, SFmode, operands)"
"#")
***************
*** 5194,5202 ****
"TARGET_80387"
"ix86_expand_unary_operator (ABS, DFmode, operands); DONE;")
(define_insn "*absdf2_if"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=frm")
! (abs:DF (match_operand:DF 1 "nonimmediate_operand" "0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (ABS, DFmode, operands)"
"#")
--- 5076,5087 ----
"TARGET_80387"
"ix86_expand_unary_operator (ABS, DFmode, operands); DONE;")
+ ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+ ;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+ ;; to itself.
(define_insn "*absdf2_if"
! [(set (match_operand:DF 0 "nonimmediate_operand" "=f#r,rm#f")
! (abs:DF (match_operand:DF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (ABS, DFmode, operands)"
"#")
***************
*** 5227,5235 ****
"TARGET_80387"
"ix86_expand_unary_operator (ABS, XFmode, operands); DONE;")
(define_insn "*absxf2_if"
! [(set (match_operand:XF 0 "nonimmediate_operand" "=frm")
! (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (ABS, XFmode, operands)"
"#")
--- 5112,5123 ----
"TARGET_80387"
"ix86_expand_unary_operator (ABS, XFmode, operands); DONE;")
+ ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems
+ ;; because of secondary memory needed to reload from class FLOAT_INT_REGS
+ ;; to itself.
(define_insn "*absxf2_if"
! [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f")
! (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
"TARGET_80387 && ix86_unary_operator_ok (ABS, XFmode, operands)"
"#")