aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Sayle <roger@nextmovesoftware.com>2023-06-08 00:09:00 +0100
committerThomas Schwinge <thomas@codesourcery.com>2023-11-15 15:25:22 +0100
commit75c20a99b3a242121eef8a532f5224c00c471b56 (patch)
treefda338264c9308a77356b00104a9692f01e40e81
parent61c45c055a5ccfc59463c21ab057dece822d973c (diff)
downloadgcc-75c20a99b3a242121eef8a532f5224c00c471b56.zip
gcc-75c20a99b3a242121eef8a532f5224c00c471b56.tar.gz
gcc-75c20a99b3a242121eef8a532f5224c00c471b56.tar.bz2
Update nvptx's bitrev<mode>2 pattern to use BITREVERSE rtx.
This minor tweak to the nvptx backend switches the representation of of the brev instruction from an UNSPEC to instead use the new BITREVERSE rtx. This allows various RTL optimizations including evaluation (constant folding) of integer constant arguments at compile-time. gcc/ * config/nvptx/nvptx.md (UNSPEC_BITREV): Delete. (bitrev<mode>2): Represent using bitreverse. gcc/testsuite/ * gcc.target/nvptx/brev-2-O2.c: Adjust. * gcc.target/nvptx/brevll-2-O2.c: Likewise. Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
-rw-r--r--gcc/config/nvptx/nvptx.md5
-rw-r--r--gcc/testsuite/gcc.target/nvptx/brev-2-O2.c25
-rw-r--r--gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c25
3 files changed, 5 insertions, 50 deletions
diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md
index 1bb9304..7a7c994 100644
--- a/gcc/config/nvptx/nvptx.md
+++ b/gcc/config/nvptx/nvptx.md
@@ -34,8 +34,6 @@
UNSPEC_FPINT_CEIL
UNSPEC_FPINT_NEARBYINT
- UNSPEC_BITREV
-
UNSPEC_ALLOCA
UNSPEC_SET_SOFTSTACK
@@ -636,8 +634,7 @@
(define_insn "bitrev<mode>2"
[(set (match_operand:SDIM 0 "nvptx_register_operand" "=R")
- (unspec:SDIM [(match_operand:SDIM 1 "nvptx_register_operand" "R")]
- UNSPEC_BITREV))]
+ (bitreverse:SDIM (match_operand:SDIM 1 "nvptx_register_operand" "R")))]
""
"%.\\tbrev.b%T0\\t%0, %1;")
diff --git a/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c b/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c
index e350522..c707a87 100644
--- a/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c
+++ b/gcc/testsuite/gcc.target/nvptx/brev-2-O2.c
@@ -1,7 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-additional-options -save-temps } */
-/* { dg-final { check-function-bodies {**} {} } } */
inline __attribute__((always_inline))
unsigned int bitreverse32(unsigned int x)
@@ -96,26 +95,6 @@ int main(void)
return 0;
}
-/*
-** main:
-** ...
-** mov\.u32 (%r[0-9]+), 0;
-** brev\.b32 (%r[0-9]+), \1;
-** setp\.[^.]+\.u32 %r[0-9]+, \2, 0;
-** ...
-** mov\.u32 (%r[0-9]+), -1;
-** brev\.b32 (%r[0-9]+), \3;
-** setp\.[^.]+\.u32 %r[0-9]+, \4, -1;
-** ...
-** mov\.u32 (%r[0-9]+), 1;
-** brev\.b32 (%r[0-9]+), \5;
-** setp\.[^.]+\.u32 %r[0-9]+, \6, -2147483648;
-** ...
-** mov\.u32 (%r[0-9]+), 2;
-** brev\.b32 (%r[0-9]+), \7;
-** setp\.[^.]+\.u32 %r[0-9]+, \8, 1073741824;
-** ...
-*/
-/* { dg-final { scan-assembler-times {\tbrev\.b32\t} 40 } } */
-/* { dg-final { scan-assembler {\mabort\M} } } */
+/* { dg-final { scan-assembler-not {\tbrev\.b32\t} } } */
+/* { dg-final { scan-assembler-not {\mabort\M} } } */
diff --git a/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c b/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c
index cbfda1b..c89be96 100644
--- a/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c
+++ b/gcc/testsuite/gcc.target/nvptx/brevll-2-O2.c
@@ -1,7 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-additional-options -save-temps } */
-/* { dg-final { check-function-bodies {**} {} } } */
inline __attribute__((always_inline))
unsigned long long bitreverse64(unsigned long long x)
@@ -156,26 +155,6 @@ int main(void)
return 0;
}
-/*
-** main:
-** ...
-** mov\.u64 (%r[0-9]+), 0;
-** brev\.b64 (%r[0-9]+), \1;
-** setp\.[^.]+\.u64 %r[0-9]+, \2, 0;
-** ...
-** mov\.u64 (%r[0-9]+), -1;
-** brev\.b64 (%r[0-9]+), \3;
-** setp\.[^.]+\.u64 %r[0-9]+, \4, -1;
-** ...
-** mov\.u64 (%r[0-9]+), 1;
-** brev\.b64 (%r[0-9]+), \5;
-** setp\.[^.]+\.u64 %r[0-9]+, \6, -9223372036854775808;
-** ...
-** mov\.u64 (%r[0-9]+), 2;
-** brev\.b64 (%r[0-9]+), \7;
-** setp\.[^.]+\.u64 %r[0-9]+, \8, 4611686018427387904;
-** ...
-*/
-/* { dg-final { scan-assembler-times {\tbrev\.b64\t} 70 } } */
-/* { dg-final { scan-assembler {\mabort\M} } } */
+/* { dg-final { scan-assembler-not {\tbrev\.b64\t} } } */
+/* { dg-final { scan-assembler-not {\mabort\M} } } */