(call_internal*): Use hard register 19 (r3) in clobber
authorJim Wilson <wilson@gcc.gnu.org>
Tue, 2 Mar 1993 21:02:47 +0000 (13:02 -0800)
committerJim Wilson <wilson@gcc.gnu.org>
Tue, 2 Mar 1993 21:02:47 +0000 (13:02 -0800)
instead of match_scratch.

From-SVN: r3604

gcc/config/i960/i960.md

index c42a3f9ef3ffc6de0d2a0800a5d5651263608aa6..14b05de861e071db22909413d955454c7cc6aecf 100644 (file)
 ;; We need a call saved register allocated for the match_scratch, so we use
 ;; 'l' because all local registers are call saved.
 
+;; ??? I would prefer to use a match_scratch here, but match_scratch allocated
+;; registers can't be used for spills.  In a function with lots of calls,
+;; local-alloc may allocate all local registers to a match_scratch, leaving
+;; no local registers available for spills.
+
 (define_insn "call_internal"
   [(call (match_operand:SI 0 "general_operand" "g")
         (match_operand:SI 1 "immediate_operand" "i"))
    (use (match_operand:SI 2 "address_operand" "p"))
-   (clobber (match_scratch:SI 3 "=&l"))]
+   (clobber (reg:SI 19))]
   ""
   "* return i960_output_call_insn (operands[0], operands[1], operands[2],
-                                  operands[3], insn);"
+                                  insn);"
   [(set_attr "type" "call")])
 
 (define_expand "call_value"
        (call (match_operand:SI 1 "general_operand" "g")
              (match_operand:SI 2 "immediate_operand" "i")))
    (use (match_operand:SI 3 "address_operand" "p"))
-   (clobber (match_scratch:SI 4 "=&l"))]
+   (clobber (reg:SI 19))]
   ""
   "* return i960_output_call_insn (operands[1], operands[2], operands[3],
-                                  operands[4], insn);"
+                                  insn);"
   [(set_attr "type" "call")])
 
 (define_insn "return"