diff options
author | Chris Lattner <sabre@nondot.org> | 2011-04-26 20:18:20 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-04-26 20:18:20 +0000 |
commit | 325eeb1cd7c3247ead1513204bc9cf4b6e883653 (patch) | |
tree | 4e02166fa21871f7f77097284b7f1e5aba28af3c /test/Transforms/InstCombine/icmp.ll | |
parent | 5036ce4a64caaeaff4b1f8f1c91836cc2e49a455 (diff) |
Transform: "icmp eq (trunc (lshr(X, cst1)), cst" to "icmp (and X, mask), cst"
when X has multiple uses. This is useful for exposing secondary optimizations,
but the X86 backend isn't ready for this when X has a single use. For example,
this can disable load folding.
This is inching towards resolving PR6627.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130238 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/InstCombine/icmp.ll')
-rw-r--r-- | test/Transforms/InstCombine/icmp.ll | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/Transforms/InstCombine/icmp.ll b/test/Transforms/InstCombine/icmp.ll index 7ba43680a6..099540ac74 100644 --- a/test/Transforms/InstCombine/icmp.ll +++ b/test/Transforms/InstCombine/icmp.ll @@ -494,3 +494,19 @@ define i1 @test51(i32 %X, i32 %Y) { %C = icmp sgt i32 %B, -1 ret i1 %C } + +; CHECK: @test52 +; CHECK-NEXT: and i32 %x1, 16711935 +; CHECK-NEXT: icmp eq i32 {{.*}}, 4980863 +; CHECK-NEXT: ret i1 +define i1 @test52(i32 %x1) nounwind { + %conv = and i32 %x1, 255 + %cmp = icmp eq i32 %conv, 127 + %tmp2 = lshr i32 %x1, 16 + %tmp3 = trunc i32 %tmp2 to i8 + %cmp15 = icmp eq i8 %tmp3, 76 + + %A = and i1 %cmp, %cmp15 + ret i1 %A +} + |