The testcase exercises one of the rotate patterns.  Segher okayed the
testcase a long time ago, and the comments are obvious.
Committed rev 266046.

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

diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index 805d92ea1f1..1af01935b5e 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -922,7 +922,7 @@ (define_predicate "non_add_cint_operand"
                    && !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")
 {
@@ -935,7 +935,7 @@ (define_predicate "logical_const_operand"
 })
 
 ;; 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")))
diff --git a/gcc/testsuite/gcc.target/powerpc/rotmask.c 
b/gcc/testsuite/gcc.target/powerpc/rotmask.c
new file mode 100644
index 00000000000..4d1b9174921
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/rotmask.c
@@ -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;
+}

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to