Matched operands should also have matched predicate...

2017-08-27  Uros Bizjak  <ubiz...@gmail.com>

    PR target/81995
    * config/i386/i386.md (*<btsc><mode>): Change operand 2
    predicate to register_operand.  Reorder operands.
    (*btr<mode>): Ditto.
    (*<btsc><mode>_mask): Change operand 3 predicate to register_operand.
    (*btr<mode>_mask): Ditto.

testsuite/ChangeLog:

2017-08-27  Uros Bizjak  <ubiz...@gmail.com>

    PR target/81995
    * gcc.target/i386/pr46091-4.c: Add -mregparm=2 for 32bit targets.
    * gcc.target/i386/pr46091-4a.c: Ditto.

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Committed to mainline SVN.

Uros.
Index: config/i386/i386.md
===================================================================
--- config/i386/i386.md (revision 251368)
+++ config/i386/i386.md (working copy)
@@ -11011,11 +11011,11 @@
   [(set (match_operand:SWI48 0 "register_operand" "=r")
        (any_or:SWI48
          (ashift:SWI48 (const_int 1)
-                       (match_operand:QI 1 "register_operand" "r"))
-         (match_operand:SWI48 2 "nonimmediate_operand" "0")))
+                       (match_operand:QI 2 "register_operand" "r"))
+         (match_operand:SWI48 1 "register_operand" "0")))
    (clobber (reg:CC FLAGS_REG))]
   "TARGET_USE_BT"
-  "<btsc>{<imodesuffix>}\t{%<k>1, %0|%0, %<k>1}"
+  "<btsc>{<imodesuffix>}\t{%<k>2, %0|%0, %<k>2}"
   [(set_attr "type" "alu1")
    (set_attr "prefix_0f" "1")
    (set_attr "znver1_decode" "double")
@@ -11031,7 +11031,7 @@
              (and:SI
                (match_operand:SI 1 "register_operand")
                (match_operand:SI 2 "const_int_operand")) 0))
-         (match_operand:SWI48 3 "nonimmediate_operand")))
+         (match_operand:SWI48 3 "register_operand")))
    (clobber (reg:CC FLAGS_REG))]
   "(INTVAL (operands[2]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
    == GET_MODE_BITSIZE (<MODE>mode)-1
@@ -11051,11 +11051,11 @@
   [(set (match_operand:SWI48 0 "register_operand" "=r")
        (and:SWI48
          (rotate:SWI48 (const_int -2)
-                       (match_operand:QI 1 "register_operand" "r"))
-       (match_operand:SWI48 2 "nonimmediate_operand" "0")))
+                       (match_operand:QI 2 "register_operand" "r"))
+       (match_operand:SWI48 1 "register_operand" "0")))
    (clobber (reg:CC FLAGS_REG))]
   "TARGET_USE_BT"
-  "btr{<imodesuffix>}\t{%<k>1, %0|%0, %<k>1}"
+  "btr{<imodesuffix>}\t{%<k>2, %0|%0, %<k>2}"
   [(set_attr "type" "alu1")
    (set_attr "prefix_0f" "1")
    (set_attr "znver1_decode" "double")
@@ -11071,7 +11071,7 @@
              (and:SI
                (match_operand:SI 1 "register_operand")
                (match_operand:SI 2 "const_int_operand")) 0))
-         (match_operand:SWI48 3 "nonimmediate_operand")))
+         (match_operand:SWI48 3 "register_operand")))
    (clobber (reg:CC FLAGS_REG))]
   "(INTVAL (operands[2]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
    == GET_MODE_BITSIZE (<MODE>mode)-1
Index: testsuite/gcc.target/i386/pr46091-4.c
===================================================================
--- testsuite/gcc.target/i386/pr46091-4.c       (revision 251368)
+++ testsuite/gcc.target/i386/pr46091-4.c       (working copy)
@@ -1,5 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2" } */
+/* { dg-additional-options "-mregparm=2" { target ia32 } } */
 
 int test_1 (int x, int n)
 {
Index: testsuite/gcc.target/i386/pr46091-4a.c
===================================================================
--- testsuite/gcc.target/i386/pr46091-4a.c      (revision 251368)
+++ testsuite/gcc.target/i386/pr46091-4a.c      (working copy)
@@ -1,5 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2" } */
+/* { dg-additional-options "-mregparm=2" { target ia32 } } */
 
 int test_1 (int x, int n)
 {

Reply via email to