* pa.md (load high pattern): Rework constraints to reduce %r1 spillage.
authorJeff Law <law@gcc.gnu.org>
Sun, 21 Feb 1993 18:10:37 +0000 (11:10 -0700)
committerJeff Law <law@gcc.gnu.org>
Sun, 21 Feb 1993 18:10:37 +0000 (11:10 -0700)
From-SVN: r3510

gcc/config/pa/pa.md

index d780323c222d41a18edd37429f77746ba1899176..39d783442867b29bebecd9d4a03fe4963d717870 100644 (file)
 
 ;; For all symbolic operands *except* function addresses and read-only
 ;; operands (which live in TEXT space and do not require relocation).  
+;;
+;; The constraints are a little strange.  
+;; The basic idea is to prefer %r1 as much as possible for register 
+;; allocation (hence we do not allow regclass to know about the general
+;; register case (via *r).
+;; We also want to avoid spilling %r1 as that will cause every use
+;; of %r1 to be reloaded, so we make the %r1 case very expensive
+;; as far as reload is concerned (via !a).
+;;
+;; The real solution is to not spill all pseudos allocated to %r1
+;; when %r1 is needed as a spill register, but that is considerably
+;; more difficult than coercing decent behavior via constraints.
 (define_insn ""
-  [(set (match_operand:SI 0 "register_operand" "=a,!*r")
+  [(set (match_operand:SI 0 "register_operand" "=!a,*r")
        (high:SI (match_operand 1 "" "")))]
   "! TARGET_KERNEL && symbolic_operand(operands[1], Pmode)
    && ! function_label_operand (operands[1])