[Bug target/70750] [6/7 Regression] Load and call no longer combined for indirect calls on x86

hjl.tools at gmail dot com gcc-bugzilla@gcc.gnu.org
Thu Apr 21 17:34:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70750

--- Comment #3 from H.J. Lu <hjl.tools at gmail dot com> ---
r231923 has

 (define_special_predicate "call_insn_operand"
   (ior (match_test "constant_call_address_operand
                     (op, mode == VOIDmode ? mode : Pmode)")
        (match_operand 0 "call_register_no_elim_operand")
-       (and (not (match_test "TARGET_X32"))
-           (match_operand 0 "memory_operand"))))
+       (ior (and (not (match_test "TARGET_X32"))
+                (match_operand 0 "sibcall_memory_operand"))
                                   ^^^^^^^^^^^^^^^^^^^^^^^^ A typo.
+           (and (match_test "TARGET_X32 && Pmode == DImode")
+                (match_operand 0 "GOT_memory_operand")))))


I am testing

diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
index 14e80d9..93dda7b 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -637,7 +637,7 @@
           (op, mode == VOIDmode ? mode : Pmode)")
        (match_operand 0 "call_register_no_elim_operand")
        (ior (and (not (match_test "TARGET_X32"))
-      (match_operand 0 "sibcall_memory_operand"))
+      (match_operand 0 "memory_operand"))
       (and (match_test "TARGET_X32 && Pmode == DImode")
       (match_operand 0 "GOT_memory_operand")))))


More information about the Gcc-bugs mailing list