diff options
| author | Arnaud A. de Grandmaison <arnaud.adegm@gmail.com> | 2013-03-22 08:25:01 +0000 |
|---|---|---|
| committer | Arnaud A. de Grandmaison <arnaud.adegm@gmail.com> | 2013-03-22 08:25:01 +0000 |
| commit | f364bc63e71355a94ca1ef442e7e5af64973239d (patch) | |
| tree | 4edb459905de7e6370ae14926a0437201e04e252 /llvm/test/Transforms/InstCombine/load-cmp.ll | |
| parent | f1311dfce1d434c724cd6ec5c1cf13e268b23511 (diff) | |
| download | bcm5719-llvm-f364bc63e71355a94ca1ef442e7e5af64973239d.tar.gz bcm5719-llvm-f364bc63e71355a94ca1ef442e7e5af64973239d.zip | |
InstCombine: Improve the result bitvect type when folding (cmp pred (load (gep GV, i)) C) to a bit test.
The original code used i32, and i64 if legal. This introduced unneeded
casts when they aren't legal, or when the index variable i has another
type. In order of preference: try to use i's type; use the smallest
fitting legal type (using an added DataLayout method); default to i32.
A testcase checks that this works when the index gep operand is i16.
Patch by : Ahmed Bougacha <ahmed.bougacha@gmail.com>
Reviewed by : Duncan
llvm-svn: 177712
Diffstat (limited to 'llvm/test/Transforms/InstCombine/load-cmp.ll')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/load-cmp.ll | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/load-cmp.ll b/llvm/test/Transforms/InstCombine/load-cmp.ll index 5cafb7787e3..d88188e4109 100644 --- a/llvm/test/Transforms/InstCombine/load-cmp.ll +++ b/llvm/test/Transforms/InstCombine/load-cmp.ll @@ -47,6 +47,18 @@ define i1 @test4(i32 %X) { ; CHECK-NEXT: ret i1 %R } +define i1 @test4_i16(i16 %X) { + %P = getelementptr inbounds [10 x i16]* @G16, i32 0, i16 %X + %Q = load i16* %P + %R = icmp sle i16 %Q, 73 + ret i1 %R +; CHECK: @test4_i16 +; CHECK-NEXT: lshr i16 933, %X +; CHECK-NEXT: and i16 {{.*}}, 1 +; CHECK-NEXT: %R = icmp ne i16 {{.*}}, 0 +; CHECK-NEXT: ret i1 %R +} + define i1 @test5(i32 %X) { %P = getelementptr inbounds [10 x i16]* @G16, i32 0, i32 %X %Q = load i16* %P |

