diff options
author | Chad Rosier <mcrosier@codeaurora.org> | 2017-01-17 17:23:51 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@codeaurora.org> | 2017-01-17 17:23:51 +0000 |
commit | 8520429bdde09567167a3f89033f6c12ec9ac103 (patch) | |
tree | 2710a466f3ebabed42cfaf210370b015f180371b /llvm/test | |
parent | a802a5096330d121d0394d5a3a0f924feec51853 (diff) | |
download | bcm5719-llvm-8520429bdde09567167a3f89033f6c12ec9ac103.tar.gz bcm5719-llvm-8520429bdde09567167a3f89033f6c12ec9ac103.zip |
[ValueTracking] Extend known bits to understand @llvm.bitreverse.
Differential Revision: https://reviews.llvm.org/D28780
llvm-svn: 292233
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Transforms/InstCombine/bitreverse-known-bits.ll | 34 | ||||
-rw-r--r-- | llvm/test/Transforms/InstSimplify/bitreverse.ll | 31 |
2 files changed, 65 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/bitreverse-known-bits.ll b/llvm/test/Transforms/InstCombine/bitreverse-known-bits.ll new file mode 100644 index 00000000000..b73df77b925 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/bitreverse-known-bits.ll @@ -0,0 +1,34 @@ +; RUN: opt < %s -S -instcombine | FileCheck %s + +declare i32 @llvm.bitreverse.i32(i32) + +; CHECK-LABEL: @test1 +; CHECK: ret i1 true +define i1 @test1(i32 %arg) { + %a = or i32 %arg, 4294901760 + %b = call i32 @llvm.bitreverse.i32(i32 %a) + %and = and i32 %b, 65535 + %res = icmp eq i32 %and, 65535 + ret i1 %res +} + +; CHECK-LABEL: @test2 +; CHECK: ret i1 true +define i1 @test2(i32 %arg) { + %a = or i32 %arg, 1 + %b = call i32 @llvm.bitreverse.i32(i32 %a) + %c = and i32 %b, 2147483648 + %d = call i32 @llvm.bitreverse.i32(i32 %c) + %res = icmp eq i32 %d, 1 + ret i1 %res +} + +; CHECK-LABEL: @test3 +; CHECK: ret i1 false +define i1 @test3(i32 %arg) { + %a = or i32 %arg, 65536 + %b = call i32 @llvm.bitreverse.i32(i32 %a) + %and = and i32 %b, 32768 + %res = icmp eq i32 %and, 0 + ret i1 %res +} diff --git a/llvm/test/Transforms/InstSimplify/bitreverse.ll b/llvm/test/Transforms/InstSimplify/bitreverse.ll new file mode 100644 index 00000000000..d87b68831fe --- /dev/null +++ b/llvm/test/Transforms/InstSimplify/bitreverse.ll @@ -0,0 +1,31 @@ +; RUN: opt < %s -S -instsimplify | FileCheck %s + +declare i32 @llvm.bitreverse.i32(i32) + +; CHECK-LABEL: @test1( +; CHECK: ret i1 false +define i1 @test1(i32 %arg) { + %a = or i32 %arg, 1 + %b = call i32 @llvm.bitreverse.i32(i32 %a) + %res = icmp eq i32 %b, 0 + ret i1 %res +} + +; CHECK-LABEL: @test2( +; CHECK: ret i1 false +define i1 @test2(i32 %arg) { + %a = or i32 %arg, 1024 + %b = call i32 @llvm.bitreverse.i32(i32 %a) + %res = icmp eq i32 %b, 0 + ret i1 %res +} + +; CHECK-LABEL: @test3( +; CHECK: ret i1 false +define i1 @test3(i32 %arg) { + %a = and i32 %arg, 1 + %b = call i32 @llvm.bitreverse.i32(i32 %a) + %and = and i32 %b, 1 + %res = icmp eq i32 %and, 1 + ret i1 %res +} |