diff options
author | David Majnemer <david.majnemer@gmail.com> | 2013-07-09 07:50:59 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2013-07-09 07:50:59 +0000 |
commit | 377a5c1a87b879b7a05a635ed7bbf125b0b61e28 (patch) | |
tree | 275e59425c6d7b5624da0778de459b323d0afe5a /test/Transforms | |
parent | fa55969acb64da32acf6305064c9f6e3c237b74e (diff) | |
download | external_llvm-377a5c1a87b879b7a05a635ed7bbf125b0b61e28.zip external_llvm-377a5c1a87b879b7a05a635ed7bbf125b0b61e28.tar.gz external_llvm-377a5c1a87b879b7a05a635ed7bbf125b0b61e28.tar.bz2 |
InstCombine: add more transforms
C1-X <u C2 -> (X|(C2-1)) == C1
C1-X >u C2 -> (X|C2) == C1
X-C1 <u C2 -> (X & -C2) == C1
X-C1 >u C2 -> (X & ~C2) == C1
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185909 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms')
-rw-r--r-- | test/Transforms/InstCombine/2007-01-27-AndICmp.ll | 4 | ||||
-rw-r--r-- | test/Transforms/InstCombine/and.ll | 6 | ||||
-rw-r--r-- | test/Transforms/InstCombine/icmp.ll | 40 |
3 files changed, 45 insertions, 5 deletions
diff --git a/test/Transforms/InstCombine/2007-01-27-AndICmp.ll b/test/Transforms/InstCombine/2007-01-27-AndICmp.ll index 4d1b982..6298a07 100644 --- a/test/Transforms/InstCombine/2007-01-27-AndICmp.ll +++ b/test/Transforms/InstCombine/2007-01-27-AndICmp.ll @@ -1,8 +1,8 @@ ; RUN: opt < %s -instcombine -S | grep "ugt.*, 1" define i1 @test(i32 %tmp1030) { - %tmp1037 = icmp ne i32 %tmp1030, 40 ; <i1> [#uses=1] - %tmp1039 = icmp ne i32 %tmp1030, 41 ; <i1> [#uses=1] + %tmp1037 = icmp ne i32 %tmp1030, 39 ; <i1> [#uses=1] + %tmp1039 = icmp ne i32 %tmp1030, 40 ; <i1> [#uses=1] %tmp1042 = and i1 %tmp1037, %tmp1039 ; <i1> [#uses=1] ret i1 %tmp1042 } diff --git a/test/Transforms/InstCombine/and.ll b/test/Transforms/InstCombine/and.ll index 8492df9..3d36bfb 100644 --- a/test/Transforms/InstCombine/and.ll +++ b/test/Transforms/InstCombine/and.ll @@ -186,9 +186,9 @@ define i1 @test25(i32 %A) { } define i1 @test26(i32 %A) { - %B = icmp ne i32 %A, 50 ; <i1> [#uses=1] - %C = icmp ne i32 %A, 51 ; <i1> [#uses=1] - ;; (A-50) > 1 + %B = icmp ne i32 %A, 49 ; <i1> [#uses=1] + %C = icmp ne i32 %A, 50 ; <i1> [#uses=1] + ;; (A-49) > 1 %D = and i1 %B, %C ; <i1> [#uses=1] ret i1 %D } diff --git a/test/Transforms/InstCombine/icmp.ll b/test/Transforms/InstCombine/icmp.ll index cf8305d..aaac9b6 100644 --- a/test/Transforms/InstCombine/icmp.ll +++ b/test/Transforms/InstCombine/icmp.ll @@ -1123,3 +1123,43 @@ define i1 @icmp_add_ult_2(i32 %X) { %cmp = icmp ult i32 %add, 2 ret i1 %cmp } + +; CHECK: @icmp_add_X_-14_ult_2 +; CHECK-NEXT: [[AND:%[a-z0-9]+]] = and i32 %X, -2 +; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp eq i32 [[AND]], 14 +; CHECK-NEXT: ret i1 [[CMP]] +define i1 @icmp_add_X_-14_ult_2(i32 %X) { + %add = add i32 %X, -14 + %cmp = icmp ult i32 %add, 2 + ret i1 %cmp +} + +; CHECK: @icmp_sub_3_X_ult_2 +; CHECK-NEXT: [[OR:%[a-z0-9]+]] = or i32 %X, 1 +; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp eq i32 [[OR]], 3 +; CHECK-NEXT: ret i1 [[CMP]] +define i1 @icmp_sub_3_X_ult_2(i32 %X) { + %add = sub i32 3, %X + %cmp = icmp ult i32 %add, 2 + ret i1 %cmp +} + +; CHECK: @icmp_add_X_-14_uge_2 +; CHECK-NEXT: [[AND:%[a-z0-9]+]] = and i32 %X, -2 +; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp ne i32 [[AND]], 14 +; CHECK-NEXT: ret i1 [[CMP]] +define i1 @icmp_add_X_-14_uge_2(i32 %X) { + %add = add i32 %X, -14 + %cmp = icmp uge i32 %add, 2 + ret i1 %cmp +} + +; CHECK: @icmp_sub_3_X_uge_2 +; CHECK-NEXT: [[OR:%[a-z0-9]+]] = or i32 %X, 1 +; CHECK-NEXT: [[CMP:%[a-z0-9]+]] = icmp ne i32 [[OR]], 3 +; CHECK-NEXT: ret i1 [[CMP]] +define i1 @icmp_sub_3_X_uge_2(i32 %X) { + %add = sub i32 3, %X + %cmp = icmp uge i32 %add, 2 + ret i1 %cmp +} |