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