Move pic sethi ahead of non-pic sethi and document why.
authorDoug Evans <dje@gnu.org>
Fri, 9 Feb 1996 22:25:39 +0000 (22:25 +0000)
committerDoug Evans <dje@gnu.org>
Fri, 9 Feb 1996 22:25:39 +0000 (22:25 +0000)
From-SVN: r11186

gcc/config/sparc/sparc.md

index d454a6f..5f41d95 100644 (file)
   ;; is not an "arith_operand".
   [(set_attr "length" "1")])
 
-(define_insn "*sethi_si"
-  [(set (match_operand:SI 0 "register_operand" "=r")
-       (high:SI (match_operand 1 "" "")))]
-  "check_pic (1)"
-  "sethi %%hi(%a1),%0"
-  [(set_attr "type" "move")
-   (set_attr "length" "1")])
-
-(define_insn "*sethi_hi"
-  [(set (match_operand:HI 0 "register_operand" "=r")
-       (high:HI (match_operand 1 "" "")))]
-  "check_pic (1)"
-  "sethi %%hi(%a1),%0"
-  [(set_attr "type" "move")
-   (set_attr "length" "1")])
-
 ;; For PIC, symbol_refs are put inside unspec so that the optimizer will not
 ;; confuse them with real addresses.
 (define_insn "pic_lo_sum_si"
   ;; is not an "arith_operand".
   [(set_attr "length" "1")])
 
+;; The PIC version of sethi must appear before the non-pic case so that
+;; the unspec will not be matched as part of the operand.
 ;; For PIC, symbol_refs are put inside unspec so that the optimizer will not
 ;; confuse them with real addresses.
 (define_insn "pic_sethi_si"
   [(set_attr "type" "move")
    (set_attr "length" "1")])
 
+(define_insn "*sethi_si"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (high:SI (match_operand 1 "" "")))]
+  "check_pic (1)"
+  "sethi %%hi(%a1),%0"
+  [(set_attr "type" "move")
+   (set_attr "length" "1")])
+
+(define_insn "*sethi_hi"
+  [(set (match_operand:HI 0 "register_operand" "=r")
+       (high:HI (match_operand 1 "" "")))]
+  "check_pic (1)"
+  "sethi %%hi(%a1),%0"
+  [(set_attr "type" "move")
+   (set_attr "length" "1")])
+
 (define_insn "get_pc_sp32"
   [(set (pc) (label_ref (match_operand 0 "" "")))
    (set (reg:SI 15) (label_ref (match_dup 0)))]