diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2011-12-24 17:31:46 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2011-12-24 17:31:46 +0000 |
| commit | 4ee5747fddc9cf0c8ce48b72f58cc4981cded922 (patch) | |
| tree | a3a1ba6564f685d2730a108b9d2c6ef467e3c9cb /llvm/test/Transforms | |
| parent | 010337c8385b919f75d98f6cb383214817c13257 (diff) | |
| download | bcm5719-llvm-4ee5747fddc9cf0c8ce48b72f58cc4981cded922.tar.gz bcm5719-llvm-4ee5747fddc9cf0c8ce48b72f58cc4981cded922.zip | |
ComputeMaskedBits: Make knownzero computation more aggressive for ctlz with undef zero.
unsigned foo(unsigned x) { return 31 - __builtin_clz(x); }
now compiles into a single "bsrl" instruction on x86.
llvm-svn: 147255
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/intrinsics.ll | 6 | ||||
| -rw-r--r-- | llvm/test/Transforms/InstCombine/sub-xor.ll | 13 |
2 files changed, 16 insertions, 3 deletions
diff --git a/llvm/test/Transforms/InstCombine/intrinsics.ll b/llvm/test/Transforms/InstCombine/intrinsics.ll index e31bd7dfee0..7ae6d5a969a 100644 --- a/llvm/test/Transforms/InstCombine/intrinsics.ll +++ b/llvm/test/Transforms/InstCombine/intrinsics.ll @@ -181,10 +181,10 @@ entry: define void @cmp.simplify(i32 %a, i32 %b, i1* %c) { entry: - %lz = tail call i32 @llvm.ctlz.i32(i32 %a, i1 true) nounwind readnone + %lz = tail call i32 @llvm.ctlz.i32(i32 %a, i1 false) nounwind readnone %lz.cmp = icmp eq i32 %lz, 32 store volatile i1 %lz.cmp, i1* %c - %tz = tail call i32 @llvm.cttz.i32(i32 %a, i1 true) nounwind readnone + %tz = tail call i32 @llvm.cttz.i32(i32 %a, i1 false) nounwind readnone %tz.cmp = icmp ne i32 %tz, 32 store volatile i1 %tz.cmp, i1* %c %pop = tail call i32 @llvm.ctpop.i32(i32 %b) nounwind readnone @@ -203,7 +203,7 @@ entry: define i32 @cttz_simplify1(i32 %x) nounwind readnone ssp { - %tmp1 = tail call i32 @llvm.ctlz.i32(i32 %x, i1 true) ; <i32> [#uses=1] + %tmp1 = tail call i32 @llvm.ctlz.i32(i32 %x, i1 false) ; <i32> [#uses=1] %shr3 = lshr i32 %tmp1, 5 ; <i32> [#uses=1] ret i32 %shr3 diff --git a/llvm/test/Transforms/InstCombine/sub-xor.ll b/llvm/test/Transforms/InstCombine/sub-xor.ll index 41e01fbdae8..bfa9f408c6f 100644 --- a/llvm/test/Transforms/InstCombine/sub-xor.ll +++ b/llvm/test/Transforms/InstCombine/sub-xor.ll @@ -10,3 +10,16 @@ define i32 @test1(i32 %x) nounwind { ; CHECK-NEXT: xor i32 %and, 63 ; CHECK-NEXT: ret } + +declare i32 @llvm.ctlz.i32(i32, i1) nounwind readnone + +define i32 @test2(i32 %x) nounwind { + %count = tail call i32 @llvm.ctlz.i32(i32 %x, i1 true) nounwind readnone + %sub = sub i32 31, %count + ret i32 %sub + +; CHECK: @test2 +; CHECK-NEXT: ctlz +; CHECK-NEXT: xor i32 %count, 31 +; CHECK-NEXT: ret +} |

