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.

Reply via email to