diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2018-01-15 22:32:37 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2018-01-15 14:32:37 -0800 |
commit | 5ca876c398d856b99a3427eabea5a992f328ee2d (patch) | |
tree | 5451647675d1fdd8262a5a808031a6d1a90881b8 /gcc | |
parent | e71cf74a5d61ce3dc228bcad1abfeb911d48430d (diff) | |
download | gcc-5ca876c398d856b99a3427eabea5a992f328ee2d.zip gcc-5ca876c398d856b99a3427eabea5a992f328ee2d.tar.gz gcc-5ca876c398d856b99a3427eabea5a992f328ee2d.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/predicates.md | 22 |
2 files changed, 16 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6500ed3..44de602 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 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 ix86_indirect_branch_thunk_register with ix86_indirect_branch_register. diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 64f13a0..6ec7ff2 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -710,24 +710,22 @@ (ior (match_test "constant_call_address_operand (op, mode == VOIDmode ? mode : Pmode)") (match_operand 0 "call_register_no_elim_operand") - (ior (and (not (match_test "TARGET_X32 - || ix86_indirect_branch_register")) - (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode - && !ix86_indirect_branch_register") - (match_operand 0 "GOT_memory_operand"))))) + (and (not (match_test "ix86_indirect_branch_register")) + (ior (and (not (match_test "TARGET_X32")) + (match_operand 0 "memory_operand")) + (and (match_test "TARGET_X32 && Pmode == DImode") + (match_operand 0 "GOT_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)") (match_operand 0 "register_no_elim_operand") - (ior (and (not (match_test "TARGET_X32 - || ix86_indirect_branch_register")) - (match_operand 0 "sibcall_memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode - && !ix86_indirect_branch_register") - (match_operand 0 "GOT_memory_operand"))))) + (and (not (match_test "ix86_indirect_branch_register")) + (ior (and (not (match_test "TARGET_X32")) + (match_operand 0 "sibcall_memory_operand")) + (and (match_test "TARGET_X32 && Pmode == DImode") + (match_operand 0 "GOT_memory_operand")))))) ;; Return true if OP is a 32-bit GOT symbol operand. (define_predicate "GOT32_symbol_operand" |