summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/PowerPC/bitreverse.ll
diff options
context:
space:
mode:
authorJames Molloy <james.molloy@arm.com>2015-11-12 12:29:09 +0000
committerJames Molloy <james.molloy@arm.com>2015-11-12 12:29:09 +0000
commit90111f79f9f34e0ba488c1453e2e3b57db2553e7 (patch)
tree2682353f0cf3fcf013ede40e10929cc5010dddd4 /llvm/test/CodeGen/PowerPC/bitreverse.ll
parent110094017ce85435ab55207efdb4aab4ad95a16d (diff)
downloadbcm5719-llvm-90111f79f9f34e0ba488c1453e2e3b57db2553e7.tar.gz
bcm5719-llvm-90111f79f9f34e0ba488c1453e2e3b57db2553e7.zip
[SDAG] Introduce a new BITREVERSE node along with a corresponding LLVM intrinsic
Several backends have instructions to reverse the order of bits in an integer. Conceptually matching such patterns is similar to @llvm.bswap, and it was mentioned in http://reviews.llvm.org/D14234 that it would be best if these patterns were matched in InstCombine instead of reimplemented in every different target. This patch introduces an intrinsic @llvm.bitreverse.i* that operates similarly to @llvm.bswap. For plumbing purposes there is also a new ISD node ISD::BITREVERSE, with simple expansion and promotion support. The intention is that InstCombine's BSWAP detection logic will be extended to support BITREVERSE too, and @llvm.bitreverse intrinsics emitted (if the backend supports lowering it efficiently). llvm-svn: 252878
Diffstat (limited to 'llvm/test/CodeGen/PowerPC/bitreverse.ll')
-rw-r--r--llvm/test/CodeGen/PowerPC/bitreverse.ll23
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/bitreverse.ll b/llvm/test/CodeGen/PowerPC/bitreverse.ll
new file mode 100644
index 00000000000..1c3741a9a69
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/bitreverse.ll
@@ -0,0 +1,23 @@
+; RUN: llc -march=ppc64 %s -o - | FileCheck %s
+
+; These tests just check that the plumbing is in place for @llvm.bitreverse. The
+; actual output is massive at the moment as llvm.bitreverse is not yet legal.
+
+declare <2 x i16> @llvm.bitreverse.v2i16(<2 x i16>) readnone
+
+define <2 x i16> @f(<2 x i16> %a) {
+; CHECK-LABEL: f:
+; CHECK: rlwinm
+ %b = call <2 x i16> @llvm.bitreverse.v2i16(<2 x i16> %a)
+ ret <2 x i16> %b
+}
+
+declare i8 @llvm.bitreverse.i8(i8) readnone
+
+define i8 @g(i8 %a) {
+; CHECK-LABEL: g:
+; CHECK: rlwinm
+; CHECK: rlwimi
+ %b = call i8 @llvm.bitreverse.i8(i8 %a)
+ ret i8 %b
+}
OpenPOWER on IntegriCloud