mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-14 11:50:01 +08:00
* pa.md (reload shift-add patterns): Remove.
From-SVN: r30688
This commit is contained in:
parent
2e02044af4
commit
8b4b9b7ad3
@ -1,3 +1,7 @@
|
||||
Sun Nov 28 13:21:00 1999 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* pa.md (reload shift-add patterns): Remove.
|
||||
|
||||
1999-11-28 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
|
||||
|
||||
* reorg.c (dbr_schedule) Print more statistics. Corrected
|
||||
|
@ -3118,25 +3118,6 @@
|
||||
(set_attr "pa_combine_type" "addmove")
|
||||
(set_attr "length" "4,4")])
|
||||
|
||||
;; Disgusting kludge to work around reload bugs with frame pointer
|
||||
;; elimination. Similar to other magic reload patterns in the
|
||||
;; indexed memory operations.
|
||||
(define_insn ""
|
||||
[(set (match_operand:SI 0 "register_operand" "=&r")
|
||||
(plus:SI (plus:SI (match_operand:SI 1 "register_operand" "%r")
|
||||
(match_operand:SI 2 "register_operand" "r"))
|
||||
(match_operand:SI 3 "const_int_operand" "rL")))]
|
||||
"reload_in_progress"
|
||||
"*
|
||||
{
|
||||
if (GET_CODE (operands[3]) == CONST_INT)
|
||||
return \"ldo %3(%2),%0\;{addl|add,l} %1,%0,%0\";
|
||||
else
|
||||
return \"{addl|add,l} %3,%2,%0\;{addl|add,l} %1,%0,%0\";
|
||||
}"
|
||||
[(set_attr "type" "binary")
|
||||
(set_attr "length" "8")])
|
||||
|
||||
(define_expand "subdi3"
|
||||
[(set (match_operand:DI 0 "register_operand" "")
|
||||
(minus:DI (match_operand:DI 1 "register_operand" "")
|
||||
@ -4223,28 +4204,6 @@
|
||||
[(set_attr "type" "binary")
|
||||
(set_attr "length" "4")])
|
||||
|
||||
;; This variant of the above insn can occur if the first operand
|
||||
;; is the frame pointer. This is a kludge, but there doesn't
|
||||
;; seem to be a way around it. Only recognize it while reloading.
|
||||
;; Note how operand 3 uses a predicate of "const_int_operand", but
|
||||
;; has constraints allowing a register. I don't know how this works,
|
||||
;; but it somehow makes sure that out-of-range constants are placed
|
||||
;; in a register which somehow magically is a "const_int_operand".
|
||||
;; (this was stolen from alpha.md, I'm not going to try and change it.
|
||||
|
||||
(define_insn ""
|
||||
[(set (match_operand:SI 0 "register_operand" "=&r,r")
|
||||
(plus:SI (plus:SI (mult:SI (match_operand:SI 2 "register_operand" "r,r")
|
||||
(match_operand:SI 4 "shadd_operand" ""))
|
||||
(match_operand:SI 1 "register_operand" "r,r"))
|
||||
(match_operand:SI 3 "const_int_operand" "r,J")))]
|
||||
"reload_in_progress"
|
||||
"@
|
||||
{sh%O4addl %2,%1,%0|shladd,l %2,%O4,%1,%0}\;{addl|add,l} %3,%0,%0
|
||||
{sh%O4addl %2,%1,%0|shladd,l %2,%O4,%1,%0}\;ldo %3(%0),%0"
|
||||
[(set_attr "type" "multi")
|
||||
(set_attr "length" "8")])
|
||||
|
||||
;; This anonymous pattern and splitter wins because it reduces the latency
|
||||
;; of the shadd sequence without increasing the latency of the shift.
|
||||
;;
|
||||
|
Loading…
Reference in New Issue
Block a user