On Sun, Jan 14, 2018 at 7:08 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Sun, Jan 14, 2018 at 9:51 AM, Uros Bizjak <ubiz...@gmail.com> wrote: >> - (ior (and (not (match_test "TARGET_X32")) >> + (ior (and (not (match_test "TARGET_X32 >> + || ix86_indirect_branch_thunk_register")) >> (match_operand 0 "sibcall_memory_operand")) >> - (and (match_test "TARGET_X32 && Pmode == DImode") >> + (and (match_test "TARGET_X32 && Pmode == DImode >> + && !ix86_indirect_branch_thunk_register") >> (match_operand 0 "GOT_memory_operand")))) >> >> Is this patch just trying to disable the predicate when >> ix86_indirect_branch_thunk_register is set? Because this is what this >> convoluted logic does. > > Yes, we want to disable all indirect branch via memory with > -mindirect-branch-register, just like -mx32. We could do > > #idefine TARGET_INDIRECT_BRANCH_REGISTER \ > (TARGER_X32 || ix86_indirect_branch_thunk_register)
Index: predicates.md =================================================================== --- predicates.md (revision 256666) +++ predicates.md (working copy) @@ -710,11 +710,10 @@ (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_thunk_register")) + (and (not (match_test "ix86_indirect_branch_thunk_register")) + (ior (and (not (match_test "TARGET_X32"))) (match_operand 0 "memory_operand")) - (and (match_test "TARGET_X32 && Pmode == DImode - && !ix86_indirect_branch_thunk_register") + (and (match_test "TARGET_X32 && Pmode == DImode") (match_operand 0 "GOT_memory_operand"))))) or something like that. Uros.