aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2018-01-15 22:32:37 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2018-01-15 14:32:37 -0800
commit5ca876c398d856b99a3427eabea5a992f328ee2d (patch)
tree5451647675d1fdd8262a5a808031a6d1a90881b8 /gcc
parente71cf74a5d61ce3dc228bcad1abfeb911d48430d (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/i386/predicates.md22
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"