i386: Rewrite ix86_indirect_branch_register logic
authorH.J. Lu <hongjiu.lu@intel.com>
Mon, 15 Jan 2018 22:32:37 +0000 (22:32 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Mon, 15 Jan 2018 22:32:37 +0000 (14:32 -0800)
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

gcc/ChangeLog
gcc/config/i386/predicates.md

index 6500ed3821d3bf0f8b064d83815d7f49c4821797..44de6022d05481641af09693ca938f4ceef70053 100644 (file)
@@ -1,3 +1,9 @@
+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
index 64f13a01326e62f525da0ddf655c778a4ff768d8..6ec7ff2e784f4c9952ecd101b5d57ee157b31df0 100644 (file)
   (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"