diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2013-07-05 00:31:17 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2013-07-05 00:31:17 +0000 |
| commit | c2a990bc00faf4a7017590d24a8a3d08b0a2640b (patch) | |
| tree | b6854be2856139d97b8739b27b4fa68ecf2ba5db /llvm/test/Transforms | |
| parent | 156a2deafe5694fe0f867eb041bd6b6b8ed8ca90 (diff) | |
| download | bcm5719-llvm-c2a990bc00faf4a7017590d24a8a3d08b0a2640b.tar.gz bcm5719-llvm-c2a990bc00faf4a7017590d24a8a3d08b0a2640b.zip | |
InstCombine: (icmp eq B, 0) | (icmp ult A, B) -> (icmp ule A, B-1)
This transform allows us to turn IR that looks like:
%1 = icmp eq i64 %b, 0
%2 = icmp ult i64 %a, %b
%3 = or i1 %1, %2
ret i1 %3
into:
%0 = add i64 %b, -1
%1 = icmp uge i64 %0, %a
ret i1 %1
which means we go from lowering:
cmpq %rsi, %rdi
setb %cl
testq %rsi, %rsi
sete %al
orb %cl, %al
ret
to lowering:
decq %rsi
cmpq %rdi, %rsi
setae %al
ret
llvm-svn: 185677
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/icmp.ll | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/icmp.ll b/llvm/test/Transforms/InstCombine/icmp.ll index 0026b20696c..195dc572adf 100644 --- a/llvm/test/Transforms/InstCombine/icmp.ll +++ b/llvm/test/Transforms/InstCombine/icmp.ll @@ -1102,3 +1102,14 @@ define i1 @icmp_shl_1_V_ult_2147483648(i32 %V) { %cmp = icmp ult i32 %shl, 2147483648 ret i1 %cmp } + +; CEHCK: @or_icmp_eq_B_0_icmp_ult_A_B +; CHECK: [[SUB:%[a-z0-9]+]] = add i64 %b, -1 +; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp uge i64 [[SUB]], %a +; CHECK-NEXT: ret i1 [[CMP]] +define i1 @or_icmp_eq_B_0_icmp_ult_A_B(i64 %a, i64 %b) { + %1 = icmp eq i64 %b, 0 + %2 = icmp ult i64 %a, %b + %3 = or i1 %1, %2 + ret i1 %3 +} |

