Don't check ix86_indirect_branch_register for GOT operand
Since GOT_memory_operand and GOT32_symbol_operand are simple pattern matches, don't check ix86_indirect_branch_register here. If needed, -mindirect-branch= will convert indirect branch via GOT slot to a call and return thunk. * config/i386/constraints.md (Bs): Update ix86_indirect_branch_register check. Don't check ix86_indirect_branch_register with GOT_memory_operand. (Bw): Likewise. * config/i386/predicates.md (GOT_memory_operand): Don't check ix86_indirect_branch_register here. (GOT32_symbol_operand): Likewise. From-SVN: r256714
This commit is contained in:
parent
5ca876c398
commit
4a5a0497ba
|
@ -1,3 +1,13 @@
|
|||
2018-01-15 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/i386/constraints.md (Bs): Update
|
||||
ix86_indirect_branch_register check. Don't check
|
||||
ix86_indirect_branch_register with GOT_memory_operand.
|
||||
(Bw): Likewise.
|
||||
* config/i386/predicates.md (GOT_memory_operand): Don't check
|
||||
ix86_indirect_branch_register here.
|
||||
(GOT32_symbol_operand): Likewise.
|
||||
|
||||
2018-01-15 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/i386/predicates.md (constant_call_address_operand):
|
||||
|
|
|
@ -225,20 +225,18 @@
|
|||
|
||||
(define_constraint "Bs"
|
||||
"@internal Sibcall memory operand."
|
||||
(ior (and (not (match_test "TARGET_X32
|
||||
|| ix86_indirect_branch_register"))
|
||||
(ior (and (not (match_test "ix86_indirect_branch_register"))
|
||||
(not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "sibcall_memory_operand"))
|
||||
(and (match_test "TARGET_X32 && Pmode == DImode
|
||||
&& !ix86_indirect_branch_register")
|
||||
(and (match_test "TARGET_X32 && Pmode == DImode")
|
||||
(match_operand 0 "GOT_memory_operand"))))
|
||||
|
||||
(define_constraint "Bw"
|
||||
"@internal Call memory operand."
|
||||
(ior (and (not (match_test "TARGET_X32
|
||||
|| ix86_indirect_branch_register"))
|
||||
(ior (and (not (match_test "ix86_indirect_branch_register"))
|
||||
(not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "memory_operand"))
|
||||
(and (match_test "TARGET_X32 && Pmode == DImode
|
||||
&& !ix86_indirect_branch_register")
|
||||
(and (match_test "TARGET_X32 && Pmode == DImode")
|
||||
(match_operand 0 "GOT_memory_operand"))))
|
||||
|
||||
(define_constraint "Bz"
|
||||
|
|
|
@ -695,8 +695,7 @@
|
|||
|
||||
;; Return true if OP is a GOT memory operand.
|
||||
(define_predicate "GOT_memory_operand"
|
||||
(and (match_test "!ix86_indirect_branch_register")
|
||||
(match_operand 0 "memory_operand"))
|
||||
(match_operand 0 "memory_operand")
|
||||
{
|
||||
op = XEXP (op, 0);
|
||||
return (GET_CODE (op) == CONST
|
||||
|
@ -729,8 +728,7 @@
|
|||
|
||||
;; Return true if OP is a 32-bit GOT symbol operand.
|
||||
(define_predicate "GOT32_symbol_operand"
|
||||
(match_test "!ix86_indirect_branch_register
|
||||
&& GET_CODE (op) == CONST
|
||||
(match_test "GET_CODE (op) == CONST
|
||||
&& GET_CODE (XEXP (op, 0)) == UNSPEC
|
||||
&& XINT (XEXP (op, 0), 1) == UNSPEC_GOT"))
|
||||
|
||||
|
|
Loading…
Reference in New Issue