]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
X86: Fix a typo in call_insn_operand
authorH.J. Lu <hongjiu.lu@intel.com>
Thu, 21 Apr 2016 22:01:34 +0000 (22:01 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Thu, 21 Apr 2016 22:01:34 +0000 (15:01 -0700)
r231923 has

 ;; Test for a valid operand for a call instruction.
 ;; Allow constant call address operands in Pmode only.
 (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")))))

"sibcall_memory_operand" should be "memory_operand".

gcc/

PR target/70750
* config/i386/predicates.md (call_insn_operand): Replace
sibcall_memory_operand with memory_operand.

gcc/testsuite/

PR target/70750
* gcc.target/i386/pr70750-1.c: New test.
* gcc.target/i386/pr70750-2.c: Likewise.

From-SVN: r235353

gcc/ChangeLog
gcc/config/i386/predicates.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr70750-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr70750-2.c [new file with mode: 0644]

index 78ac409493e171b7a1b0bc39fd5f6918bfa07e98..06ff30c1ac0c1123bd51861c20ae709ef8aa343e 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/70750
+       * config/i386/predicates.md (call_insn_operand): Replace
+       sibcall_memory_operand with memory_operand.
+
 2016-04-21  Patrick Palka  <ppalka@gcc.gnu.org>
 
        * tree-vrp.c (register_edge_assert_for_2): Remove redundant
index 14e80d9b48f9472489b23d78a27d6a3da5b9182b..93dda7bb0e7cc4d6bee0f5880437e82a577c4adf 100644 (file)
                     (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")))))
 
index 0227f70243b8d721e32db45b9cee1913eebbba46..38b18c9073ffd351c33db1e754432d49a48e1dc2 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/70750
+       * gcc.target/i386/pr70750-1.c: New test.
+       * gcc.target/i386/pr70750-2.c: Likewise.
+
 2016-04-21  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/70540
diff --git a/gcc/testsuite/gcc.target/i386/pr70750-1.c b/gcc/testsuite/gcc.target/i386/pr70750-1.c
new file mode 100644 (file)
index 0000000..9fcab17
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile { target *-*-linux* } } */
+/* { dg-options "-O2" } */
+
+int
+f (int (**p) (void))
+{
+  return p[1]();
+}
+
+/* { dg-final { scan-assembler "jmp\[ \t\].*\\(%rdi\\)" { target { lp64 } } } } */
+/* { dg-final { scan-assembler "jmp\[ \t\]\\*%rax" { target { x32 } } } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr70750-2.c b/gcc/testsuite/gcc.target/i386/pr70750-2.c
new file mode 100644 (file)
index 0000000..afbef37
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile { target *-*-linux* } } */
+/* { dg-options "-O2" } */
+
+int
+f (int (**p) (void))
+{
+  return -p[1]();
+}
+
+/* { dg-final { scan-assembler "call\[ \t\].*\\(%rdi\\)" { target { lp64 } } } } */
+/* { dg-final { scan-assembler "call\[ \t\]\\*%rax" { target { x32 } } } } */