predicates.md (constant_call_address_operand): Declare as special predicate.
authorUros Bizjak <ubizjak@gmail.com>
Tue, 13 Mar 2012 19:07:33 +0000 (20:07 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 13 Mar 2012 19:07:33 +0000 (20:07 +0100)
* config/i386/predicates.md (constant_call_address_operand): Declare
as special predicate.  Update all uses.
* config/i386/i386.md: Remove mode from constant_call_address_operand
predicates.
* config/i386/i386.c (ix86_output_call_insn): Call
constant_call_address_operand with VOIDmode.

From-SVN: r185350

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/config/i386/predicates.md

index 9280a31f311dfc812932e76fba8241b47dbe8768..2c10e360a5be0aeae164edadc5a0b4563f2807f0 100644 (file)
@@ -1,3 +1,12 @@
+2012-03-13  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/predicates.md (constant_call_address_operand): Declare
+       as special predicate.  Update all uses.
+       * config/i386/i386.md: Remove mode from constant_call_address_operand
+       predicates.
+       * config/i386/i386.c (ix86_output_call_insn): Call
+       constant_call_address_operand with VOIDmode.
+
 2012-03-13  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.c (ix86_decompose_address): Handle subregs of
index 24f51fb20cb87894069fc8ed2495bc9d84b4fb61..6eddebba3da2e19944a26ec3426f24d3ee74a886 100644 (file)
@@ -23121,7 +23121,7 @@ ix86_split_call_vzeroupper (rtx insn, rtx vzeroupper)
 const char *
 ix86_output_call_insn (rtx insn, rtx call_op)
 {
-  bool direct_p = constant_call_address_operand (call_op, Pmode);
+  bool direct_p = constant_call_address_operand (call_op, VOIDmode);
   bool seh_nop_p = false;
   const char *xasm;
 
index 199f5fc65d4b09cc4962cdf8ece836b31fd0b5e7..a755574150e6712873ad4204c8b6f9d79800816f 100644 (file)
 
 (define_insn_and_split "*call_pop_vzeroupper"
   [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lzm"))
-        (match_operand:SI 1 "" ""))
+        (match_operand 1 "" ""))
    (set (reg:SI SP_REG)
        (plus:SI (reg:SI SP_REG)
                 (match_operand:SI 2 "immediate_operand" "i")))
        (unspec:SI
         [(match_operand:SI 1 "register_operand" "b")
          (match_operand 2 "tls_symbolic_operand" "")
-         (match_operand:SI 3 "constant_call_address_operand" "z")]
+         (match_operand 3 "constant_call_address_operand" "z")]
         UNSPEC_TLS_GD))
    (clobber (match_scratch:SI 4 "=d"))
    (clobber (match_scratch:SI 5 "=c"))
     [(set (match_operand:SI 0 "register_operand" "")
          (unspec:SI [(match_operand:SI 2 "register_operand" "")
                      (match_operand 1 "tls_symbolic_operand" "")
-                     (match_operand:SI 3 "constant_call_address_operand" "")]
+                     (match_operand 3 "constant_call_address_operand" "")]
                     UNSPEC_TLS_GD))
      (clobber (match_scratch:SI 4 ""))
      (clobber (match_scratch:SI 5 ""))
 (define_insn "*tls_global_dynamic_64_<mode>"
   [(set (match_operand:P 0 "register_operand" "=a")
        (call:P
-        (mem:QI (match_operand:P 2 "constant_call_address_operand" "z"))
-        (match_operand:P 3 "" "")))
+        (mem:QI (match_operand 2 "constant_call_address_operand" "z"))
+        (match_operand 3 "" "")))
    (unspec:P [(match_operand 1 "tls_symbolic_operand" "")]
             UNSPEC_TLS_GD)]
   "TARGET_64BIT"
   [(parallel
     [(set (match_operand:P 0 "register_operand" "")
          (call:P
-          (mem:QI (match_operand:P 2 "constant_call_address_operand" ""))
+          (mem:QI (match_operand 2 "constant_call_address_operand" ""))
           (const_int 0)))
      (unspec:P [(match_operand 1 "tls_symbolic_operand" "")]
               UNSPEC_TLS_GD)])]
   [(set (match_operand:SI 0 "register_operand" "=a")
        (unspec:SI
         [(match_operand:SI 1 "register_operand" "b")
-         (match_operand:SI 2 "constant_call_address_operand" "z")]
+         (match_operand 2 "constant_call_address_operand" "z")]
         UNSPEC_TLS_LD_BASE))
    (clobber (match_scratch:SI 3 "=d"))
    (clobber (match_scratch:SI 4 "=c"))
      [(set (match_operand:SI 0 "register_operand" "")
           (unspec:SI
            [(match_operand:SI 1 "register_operand" "")
-            (match_operand:SI 2 "constant_call_address_operand" "")]
+            (match_operand 2 "constant_call_address_operand" "")]
            UNSPEC_TLS_LD_BASE))
       (clobber (match_scratch:SI 3 ""))
       (clobber (match_scratch:SI 4 ""))
 (define_insn "*tls_local_dynamic_base_64_<mode>"
   [(set (match_operand:P 0 "register_operand" "=a")
        (call:P
-        (mem:QI (match_operand:P 1 "constant_call_address_operand" "z"))
-        (match_operand:P 2 "" "")))
+        (mem:QI (match_operand 1 "constant_call_address_operand" "z"))
+        (match_operand 2 "" "")))
    (unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)]
   "TARGET_64BIT"
 {
   [(parallel
      [(set (match_operand:P 0 "register_operand" "")
           (call:P
-           (mem:QI (match_operand:P 1 "constant_call_address_operand" ""))
+           (mem:QI (match_operand 1 "constant_call_address_operand" ""))
            (const_int 0)))
       (unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)])]
   "TARGET_64BIT")
   [(set (match_operand:SI 0 "register_operand" "=a")
        (plus:SI
         (unspec:SI [(match_operand:SI 1 "register_operand" "b")
-                    (match_operand:SI 2 "constant_call_address_operand" "z")]
+                    (match_operand 2 "constant_call_address_operand" "z")]
                    UNSPEC_TLS_LD_BASE)
         (const:SI (unspec:SI
                    [(match_operand 3 "tls_symbolic_operand" "")]
index 4c766484ecf79060936f9396e9273d15fe7e5a72..e53eb568f550a698b72b6e8fb84e8f4fdc3116e7 100644 (file)
        (match_test "op == ix86_tls_module_base ()")))
 
 ;; Test for a pc-relative call operand
-(define_predicate "constant_call_address_operand"
+(define_special_predicate "constant_call_address_operand"
   (match_code "symbol_ref")
 {
   if (ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC)
 ;; Test for a valid operand for a call instruction.
 ;; Allow constant call address operands in Pmode only.
 (define_special_predicate "call_insn_operand"
-  (ior (match_test "constant_call_address_operand
-                    (op, mode == VOIDmode ? mode : Pmode)")
+  (ior (match_operand 0 "constant_call_address_operand")
        (match_operand 0 "call_register_no_elim_operand")
        (and (not (match_test "TARGET_X32"))
            (match_operand 0 "memory_operand"))))
 
 ;; Similarly, but for tail calls, in which we cannot allow memory references.
 (define_special_predicate "sibcall_insn_operand"
-  (ior (match_test "constant_call_address_operand
-                    (op, mode == VOIDmode ? mode : Pmode)")
+  (ior (match_operand 0 "constant_call_address_operand")
        (match_operand 0 "register_no_elim_operand")))
 
 ;; Match exactly zero.