Commit 5ca876c3 by H.J. Lu Committed by H.J. Lu

i386: Rewrite ix86_indirect_branch_register logic

Rewrite ix86_indirect_branch_register logic with

(and (not (match_test "ix86_indirect_branch_register"))
     (original condition before r256662))

	* config/i386/predicates.md (constant_call_address_operand):
	Rewrite ix86_indirect_branch_register logic.
	(sibcall_insn_operand): Likewise.

From-SVN: r256713
parent e71cf74a
2018-01-15 H.J. Lu <hongjiu.lu@intel.com> 2018-01-15 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/predicates.md (constant_call_address_operand):
Rewrite ix86_indirect_branch_register logic.
(sibcall_insn_operand): Likewise.
2018-01-15 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/constraints.md (Bs): Replace * config/i386/constraints.md (Bs): Replace
ix86_indirect_branch_thunk_register with ix86_indirect_branch_thunk_register with
ix86_indirect_branch_register. ix86_indirect_branch_register.
......
...@@ -710,24 +710,22 @@ ...@@ -710,24 +710,22 @@
(ior (match_test "constant_call_address_operand (ior (match_test "constant_call_address_operand
(op, mode == VOIDmode ? mode : Pmode)") (op, mode == VOIDmode ? mode : Pmode)")
(match_operand 0 "call_register_no_elim_operand") (match_operand 0 "call_register_no_elim_operand")
(ior (and (not (match_test "TARGET_X32 (and (not (match_test "ix86_indirect_branch_register"))
|| ix86_indirect_branch_register")) (ior (and (not (match_test "TARGET_X32"))
(match_operand 0 "memory_operand")) (match_operand 0 "memory_operand"))
(and (match_test "TARGET_X32 && Pmode == DImode (and (match_test "TARGET_X32 && Pmode == DImode")
&& !ix86_indirect_branch_register") (match_operand 0 "GOT_memory_operand"))))))
(match_operand 0 "GOT_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_test "constant_call_address_operand
(op, mode == VOIDmode ? mode : Pmode)") (op, mode == VOIDmode ? mode : Pmode)")
(match_operand 0 "register_no_elim_operand") (match_operand 0 "register_no_elim_operand")
(ior (and (not (match_test "TARGET_X32 (and (not (match_test "ix86_indirect_branch_register"))
|| ix86_indirect_branch_register")) (ior (and (not (match_test "TARGET_X32"))
(match_operand 0 "sibcall_memory_operand")) (match_operand 0 "sibcall_memory_operand"))
(and (match_test "TARGET_X32 && Pmode == DImode (and (match_test "TARGET_X32 && Pmode == DImode")
&& !ix86_indirect_branch_register") (match_operand 0 "GOT_memory_operand"))))))
(match_operand 0 "GOT_memory_operand")))))
;; Return true if OP is a 32-bit GOT symbol operand. ;; Return true if OP is a 32-bit GOT symbol operand.
(define_predicate "GOT32_symbol_operand" (define_predicate "GOT32_symbol_operand"
......
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