Commit 6e5c8423 by Uros Bizjak Committed by Uros Bizjak

predicates.md (constant_call_address_operand): Declare as special predicate.

	* 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
parent f155bc64
2012-03-13 Uros Bizjak <ubizjak@gmail.com> 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 * config/i386/i386.c (ix86_decompose_address): Handle subregs of
AND zero extended address correctly. AND zero extended address correctly.
......
...@@ -23121,7 +23121,7 @@ ix86_split_call_vzeroupper (rtx insn, rtx vzeroupper) ...@@ -23121,7 +23121,7 @@ ix86_split_call_vzeroupper (rtx insn, rtx vzeroupper)
const char * const char *
ix86_output_call_insn (rtx insn, rtx call_op) 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; bool seh_nop_p = false;
const char *xasm; const char *xasm;
...@@ -11376,7 +11376,7 @@ ...@@ -11376,7 +11376,7 @@
(define_insn_and_split "*call_pop_vzeroupper" (define_insn_and_split "*call_pop_vzeroupper"
[(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lzm")) [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lzm"))
(match_operand:SI 1 "" "")) (match_operand 1 "" ""))
(set (reg:SI SP_REG) (set (reg:SI SP_REG)
(plus:SI (reg:SI SP_REG) (plus:SI (reg:SI SP_REG)
(match_operand:SI 2 "immediate_operand" "i"))) (match_operand:SI 2 "immediate_operand" "i")))
...@@ -12592,7 +12592,7 @@ ...@@ -12592,7 +12592,7 @@
(unspec:SI (unspec:SI
[(match_operand:SI 1 "register_operand" "b") [(match_operand:SI 1 "register_operand" "b")
(match_operand 2 "tls_symbolic_operand" "") (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)) UNSPEC_TLS_GD))
(clobber (match_scratch:SI 4 "=d")) (clobber (match_scratch:SI 4 "=d"))
(clobber (match_scratch:SI 5 "=c")) (clobber (match_scratch:SI 5 "=c"))
...@@ -12617,7 +12617,7 @@ ...@@ -12617,7 +12617,7 @@
[(set (match_operand:SI 0 "register_operand" "") [(set (match_operand:SI 0 "register_operand" "")
(unspec:SI [(match_operand:SI 2 "register_operand" "") (unspec:SI [(match_operand:SI 2 "register_operand" "")
(match_operand 1 "tls_symbolic_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)) UNSPEC_TLS_GD))
(clobber (match_scratch:SI 4 "")) (clobber (match_scratch:SI 4 ""))
(clobber (match_scratch:SI 5 "")) (clobber (match_scratch:SI 5 ""))
...@@ -12626,8 +12626,8 @@ ...@@ -12626,8 +12626,8 @@
(define_insn "*tls_global_dynamic_64_<mode>" (define_insn "*tls_global_dynamic_64_<mode>"
[(set (match_operand:P 0 "register_operand" "=a") [(set (match_operand:P 0 "register_operand" "=a")
(call:P (call:P
(mem:QI (match_operand:P 2 "constant_call_address_operand" "z")) (mem:QI (match_operand 2 "constant_call_address_operand" "z"))
(match_operand:P 3 "" ""))) (match_operand 3 "" "")))
(unspec:P [(match_operand 1 "tls_symbolic_operand" "")] (unspec:P [(match_operand 1 "tls_symbolic_operand" "")]
UNSPEC_TLS_GD)] UNSPEC_TLS_GD)]
"TARGET_64BIT" "TARGET_64BIT"
...@@ -12650,7 +12650,7 @@ ...@@ -12650,7 +12650,7 @@
[(parallel [(parallel
[(set (match_operand:P 0 "register_operand" "") [(set (match_operand:P 0 "register_operand" "")
(call:P (call:P
(mem:QI (match_operand:P 2 "constant_call_address_operand" "")) (mem:QI (match_operand 2 "constant_call_address_operand" ""))
(const_int 0))) (const_int 0)))
(unspec:P [(match_operand 1 "tls_symbolic_operand" "")] (unspec:P [(match_operand 1 "tls_symbolic_operand" "")]
UNSPEC_TLS_GD)])] UNSPEC_TLS_GD)])]
...@@ -12660,7 +12660,7 @@ ...@@ -12660,7 +12660,7 @@
[(set (match_operand:SI 0 "register_operand" "=a") [(set (match_operand:SI 0 "register_operand" "=a")
(unspec:SI (unspec:SI
[(match_operand:SI 1 "register_operand" "b") [(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)) UNSPEC_TLS_LD_BASE))
(clobber (match_scratch:SI 3 "=d")) (clobber (match_scratch:SI 3 "=d"))
(clobber (match_scratch:SI 4 "=c")) (clobber (match_scratch:SI 4 "=c"))
...@@ -12685,7 +12685,7 @@ ...@@ -12685,7 +12685,7 @@
[(set (match_operand:SI 0 "register_operand" "") [(set (match_operand:SI 0 "register_operand" "")
(unspec:SI (unspec:SI
[(match_operand:SI 1 "register_operand" "") [(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)) UNSPEC_TLS_LD_BASE))
(clobber (match_scratch:SI 3 "")) (clobber (match_scratch:SI 3 ""))
(clobber (match_scratch:SI 4 "")) (clobber (match_scratch:SI 4 ""))
...@@ -12694,8 +12694,8 @@ ...@@ -12694,8 +12694,8 @@
(define_insn "*tls_local_dynamic_base_64_<mode>" (define_insn "*tls_local_dynamic_base_64_<mode>"
[(set (match_operand:P 0 "register_operand" "=a") [(set (match_operand:P 0 "register_operand" "=a")
(call:P (call:P
(mem:QI (match_operand:P 1 "constant_call_address_operand" "z")) (mem:QI (match_operand 1 "constant_call_address_operand" "z"))
(match_operand:P 2 "" ""))) (match_operand 2 "" "")))
(unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)] (unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)]
"TARGET_64BIT" "TARGET_64BIT"
{ {
...@@ -12712,7 +12712,7 @@ ...@@ -12712,7 +12712,7 @@
[(parallel [(parallel
[(set (match_operand:P 0 "register_operand" "") [(set (match_operand:P 0 "register_operand" "")
(call:P (call:P
(mem:QI (match_operand:P 1 "constant_call_address_operand" "")) (mem:QI (match_operand 1 "constant_call_address_operand" ""))
(const_int 0))) (const_int 0)))
(unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)])] (unspec:P [(const_int 0)] UNSPEC_TLS_LD_BASE)])]
"TARGET_64BIT") "TARGET_64BIT")
...@@ -12724,7 +12724,7 @@ ...@@ -12724,7 +12724,7 @@
[(set (match_operand:SI 0 "register_operand" "=a") [(set (match_operand:SI 0 "register_operand" "=a")
(plus:SI (plus:SI
(unspec:SI [(match_operand:SI 1 "register_operand" "b") (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) UNSPEC_TLS_LD_BASE)
(const:SI (unspec:SI (const:SI (unspec:SI
[(match_operand 3 "tls_symbolic_operand" "")] [(match_operand 3 "tls_symbolic_operand" "")]
......
...@@ -500,7 +500,7 @@ ...@@ -500,7 +500,7 @@
(match_test "op == ix86_tls_module_base ()"))) (match_test "op == ix86_tls_module_base ()")))
;; Test for a pc-relative call operand ;; Test for a pc-relative call operand
(define_predicate "constant_call_address_operand" (define_special_predicate "constant_call_address_operand"
(match_code "symbol_ref") (match_code "symbol_ref")
{ {
if (ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) if (ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC)
...@@ -573,16 +573,14 @@ ...@@ -573,16 +573,14 @@
;; Test for a valid operand for a call instruction. ;; Test for a valid operand for a call instruction.
;; Allow constant call address operands in Pmode only. ;; Allow constant call address operands in Pmode only.
(define_special_predicate "call_insn_operand" (define_special_predicate "call_insn_operand"
(ior (match_test "constant_call_address_operand (ior (match_operand 0 "constant_call_address_operand")
(op, mode == VOIDmode ? mode : Pmode)")
(match_operand 0 "call_register_no_elim_operand") (match_operand 0 "call_register_no_elim_operand")
(and (not (match_test "TARGET_X32")) (and (not (match_test "TARGET_X32"))
(match_operand 0 "memory_operand")))) (match_operand 0 "memory_operand"))))
;; Similarly, but for tail calls, in which we cannot allow memory references. ;; Similarly, but for tail calls, in which we cannot allow memory references.
(define_special_predicate "sibcall_insn_operand" (define_special_predicate "sibcall_insn_operand"
(ior (match_test "constant_call_address_operand (ior (match_operand 0 "constant_call_address_operand")
(op, mode == VOIDmode ? mode : Pmode)")
(match_operand 0 "register_no_elim_operand"))) (match_operand 0 "register_no_elim_operand")))
;; Match exactly zero. ;; Match exactly zero.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment