(define_operator_list swapped_simple_comparison gt ge eq ne le lt)
(define_operator_list BSWAP BUILT_IN_BSWAP16 BUILT_IN_BSWAP32
BUILT_IN_BSWAP64 BUILT_IN_BSWAP128)
-(define_operator_list BITREVERSE BUILT_IN_BITREVERSE16 BUILT_IN_BITREVERSE32
- BUILT_IN_BITREVERSE64 BUILT_IN_BITREVERSE128)
+(define_operator_list BITREVERSE BUILT_IN_BITREVERSE8 BUILT_IN_BITREVERSE16
+ BUILT_IN_BITREVERSE32 BUILT_IN_BITREVERSE64 BUILT_IN_BITREVERSE128)
#include "cfn-operators.pd"
return BS (BS (BS (BS (a))));
}
+bool
+foo9 (unsigned a)
+{
+ return BS (a) == 0;
+}
+
/* { dg-final { scan-tree-dump-not "__builtin_bitreverse" "optimized" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+#define BS(X) __builtin_bitreverse64 (X)
+
+unsigned long long
+foo1 (unsigned long long a)
+{
+ return BS (~ BS (a));
+}
+
+unsigned long long
+foo2 (unsigned long long a)
+{
+ return BS (BS (a) & 0xA0000);
+}
+
+unsigned long long
+foo3 (unsigned long long a)
+{
+ return BS (BS (a) | 0xA0000);
+}
+
+unsigned long long
+foo4 (unsigned long long a)
+{
+ return BS (BS (a) ^ 0xA0000);
+}
+
+unsigned long long
+foo5 (unsigned long long a, unsigned long long b)
+{
+ return BS (BS (a) & BS (b));
+}
+
+unsigned long long
+foo6 (unsigned long long a, unsigned long long b)
+{
+ return BS (BS (a) | BS (b));
+}
+
+unsigned long long
+foo7 (unsigned long long a, unsigned long long b)
+{
+ return BS (BS (a) ^ BS (b));
+}
+
+unsigned long long
+foo8 (unsigned long long a)
+{
+ return BS (BS (BS (BS (a))));
+}
+
+bool
+foo9 (unsigned long long a)
+{
+ return BS (a) == 0;
+}
+
+/* { dg-final { scan-tree-dump-not "__builtin_bitreverse" "optimized" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+#define BS(X) __builtin_bitreverse16 (X)
+
+unsigned short
+foo1 (unsigned short a)
+{
+ return BS (~ BS (a));
+}
+
+unsigned short
+foo2 (unsigned short a)
+{
+ return BS (BS (a) & 0xA00);
+}
+
+unsigned short
+foo3 (unsigned short a)
+{
+ return BS (BS (a) | 0xA00);
+}
+
+unsigned short
+foo4 (unsigned short a)
+{
+ return BS (BS (a) ^ 0xA00);
+}
+
+unsigned short
+foo5 (unsigned short a, unsigned short b)
+{
+ return BS (BS (a) & BS (b));
+}
+
+unsigned short
+foo6 (unsigned short a, unsigned short b)
+{
+ return BS (BS (a) | BS (b));
+}
+
+unsigned short
+foo7 (unsigned short a, unsigned short b)
+{
+ return BS (BS (a) ^ BS (b));
+}
+
+unsigned short
+foo8 (unsigned short a)
+{
+ return BS (BS (BS (BS (a))));
+}
+
+bool
+foo9 (unsigned short a)
+{
+ return BS (a) == 0;
+}
+
+/* { dg-final { scan-tree-dump-not "__builtin_bitreverse" "optimized" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+#define BS(X) __builtin_bitreverse8 (X)
+
+unsigned char
+foo1 (unsigned char a)
+{
+ return BS (~ BS (a));
+}
+
+unsigned char
+foo2 (unsigned char a)
+{
+ return BS (BS (a) & 0x0A);
+}
+
+unsigned char
+foo3 (unsigned char a)
+{
+ return BS (BS (a) | 0x0A);
+}
+
+unsigned char
+foo4 (unsigned char a)
+{
+ return BS (BS (a) ^ 0x0A);
+}
+
+unsigned char
+foo5 (unsigned char a, unsigned char b)
+{
+ return BS (BS (a) & BS (b));
+}
+
+unsigned char
+foo6 (unsigned char a, unsigned char b)
+{
+ return BS (BS (a) | BS (b));
+}
+
+unsigned char
+foo7 (unsigned char a, unsigned char b)
+{
+ return BS (BS (a) ^ BS (b));
+}
+
+unsigned char
+foo8 (unsigned char a)
+{
+ return BS (BS (BS (BS (a))));
+}
+
+bool
+foo9 (unsigned char a)
+{
+ return BS (a) == 0;
+}
+
+/* { dg-final { scan-tree-dump-not "__builtin_bitreverse" "optimized" } } */
--- /dev/null
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+#define BS(X) __builtin_bitreverse128 (X)
+
+unsigned __int128
+foo1 (unsigned __int128 a)
+{
+ return BS (~ BS (a));
+}
+
+unsigned __int128
+foo2 (unsigned __int128 a)
+{
+ return BS (BS (a) & 0xA0000A0000ULL);
+}
+
+unsigned __int128
+foo3 (unsigned __int128 a)
+{
+ return BS (BS (a) | 0xA0000A0000ULL);
+}
+
+unsigned __int128
+foo4 (unsigned __int128 a)
+{
+ return BS (BS (a) ^ 0xA0000A0000ULL);
+}
+
+unsigned __int128
+foo5 (unsigned __int128 a, unsigned __int128 b)
+{
+ return BS (BS (a) & BS (b));
+}
+
+unsigned __int128
+foo6 (unsigned __int128 a, unsigned __int128 b)
+{
+ return BS (BS (a) | BS (b));
+}
+
+unsigned __int128
+foo7 (unsigned __int128 a, unsigned __int128 b)
+{
+ return BS (BS (a) ^ BS (b));
+}
+
+unsigned __int128
+foo8 (unsigned __int128 a)
+{
+ return BS (BS (BS (BS (a))));
+}
+
+bool
+foo9 (unsigned __int128 a)
+{
+ return BS (a) == 0;
+}
+
+/* { dg-final { scan-tree-dump-not "__builtin_bitreverse" "optimized" } } */