[RS6000] Rotate testcase
authorAlan Modra <amodra@gmail.com>
Tue, 13 Nov 2018 03:20:22 +0000 (13:50 +1030)
committerAlan Modra <amodra@gcc.gnu.org>
Tue, 13 Nov 2018 03:20:22 +0000 (13:50 +1030)
The testcase exercises one of the rotate patterns.

gcc/
* config/rs6000/predicates.md (logical_const_operand),
(logical_operand): Correct comment.
gcc/testsuite/
* gcc.target/powerpc/rotmask.c: New.

From-SVN: r266046

gcc/ChangeLog
gcc/config/rs6000/predicates.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/rotmask.c [new file with mode: 0644]

index 99500638f12aedd2bc5119d47fc64b1873315d41..b2ab5487d5567304ffe720570f9703f72712ab4b 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-13  Alan Modra  <amodra@gmail.com>
+
+       * config/rs6000/predicates.md (logical_const_operand),
+       (logical_operand): Correct comment.
+
 2018-11-13  Alan Modra  <amodra@gmail.com>
 
        * config/rs6000/rs6000.md (addsi3_high): Prefix with '*'.
index 40b0114a64f000df0ffd694d1495a2d3f8d9ba3d..b80c278d74246031ce3292518e97ee9a4233aafe 100644 (file)
                    && !satisfies_constraint_L (op)")))
 
 ;; Return 1 if the operand is a constant that can be used as the operand
-;; of an OR or XOR.
+;; of an AND, OR or XOR.
 (define_predicate "logical_const_operand"
   (match_code "const_int")
 {
 })
 
 ;; Return 1 if the operand is a non-special register or a constant that
-;; can be used as the operand of an OR or XOR.
+;; can be used as the operand of an AND, OR or XOR.
 (define_predicate "logical_operand"
   (ior (match_operand 0 "gpc_reg_operand")
        (match_operand 0 "logical_const_operand")))
index cff23eee5a1594afd80ec043de601da65763ad0b..e7d4ad7143c2ce6dc74ad1b732c799a547dc940b 100644 (file)
@@ -1,3 +1,7 @@
+2018-11-13  Alan Modra  <amodra@gmail.com>
+
+       * gcc.target/powerpc/rotmask.c: New.
+
 2018-11-13  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
        PR middle-end/86677
diff --git a/gcc/testsuite/gcc.target/powerpc/rotmask.c b/gcc/testsuite/gcc.target/powerpc/rotmask.c
new file mode 100644 (file)
index 0000000..4d1b917
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler-not "rotldi" } } */
+
+unsigned long f (unsigned long x)
+{
+  return ((x << 1) | (x >> 63)) & 0xffffffff;
+}