From 5ca876c398d856b99a3427eabea5a992f328ee2d Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 15 Jan 2018 22:32:37 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/predicates.md | 22 ++++++++++------------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6500ed3821d..44de6022d05 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-01-15 H.J. Lu + + * config/i386/predicates.md (constant_call_address_operand): + Rewrite ix86_indirect_branch_register logic. + (sibcall_insn_operand): Likewise. + 2018-01-15 H.J. Lu * config/i386/constraints.md (Bs): Replace diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 64f13a01326..6ec7ff2e784 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" -- 2.30.2