diff options
| author | Chad Rosier <mcrosier@codeaurora.org> | 2016-05-05 15:39:18 +0000 |
|---|---|---|
| committer | Chad Rosier <mcrosier@codeaurora.org> | 2016-05-05 15:39:18 +0000 |
| commit | 25cfb7dbd640391f6f55dd6423aa82258209e45f (patch) | |
| tree | 116d13f7de312aa1b6e2ee729abe77c3a78f5fbf /llvm/test/Transforms/SimplifyCFG | |
| parent | e57662d5ec3a50e77fc35d8e25d7442cb3af6474 (diff) | |
| download | bcm5719-llvm-25cfb7dbd640391f6f55dd6423aa82258209e45f.tar.gz bcm5719-llvm-25cfb7dbd640391f6f55dd6423aa82258209e45f.zip | |
[ValueTracking] Improve isImpliedCondition for matching LHS and Imm RHSs.
llvm-svn: 268636
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG')
| -rw-r--r-- | llvm/test/Transforms/SimplifyCFG/implied-cond-matching-imm.ll | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/implied-cond-matching-imm.ll b/llvm/test/Transforms/SimplifyCFG/implied-cond-matching-imm.ll new file mode 100644 index 00000000000..60ef8136598 --- /dev/null +++ b/llvm/test/Transforms/SimplifyCFG/implied-cond-matching-imm.ll @@ -0,0 +1,123 @@ +; RUN: opt %s -S -simplifycfg | FileCheck %s + +; cmp1 implies cmp2 is false +; CHECK-LABEL: @test1 +; CHECK-NOT: call void @is(i1 true) +; CHECK: call void @is(i1 false) +define void @test1(i32 %a) { + %cmp1 = icmp eq i32 %a, 0 + br i1 %cmp1, label %taken, label %untaken + +taken: + %cmp2 = icmp eq i32 %a, 1 + br i1 %cmp2, label %istrue, label %isfalse + +istrue: + call void @is(i1 true) + ret void + +isfalse: + call void @is(i1 false) + ret void + +untaken: + ret void +} + +; cmp1 implies cmp2 is false +; CHECK-LABEL: @test2 +; CHECK-NOT: call void @is(i1 true) +; CHECK: call void @is(i1 false) +define void @test2(i32 %a) { + %cmp1 = icmp ugt i32 %a, 5 + br i1 %cmp1, label %untaken, label %taken + +taken: + %cmp2 = icmp ugt i32 %a, 6 + br i1 %cmp2, label %istrue, label %isfalse + +istrue: + call void @is(i1 true) + ret void + +isfalse: + call void @is(i1 false) + ret void + +untaken: + ret void +} + +; cmp1 implies cmp2 is false +; CHECK-LABEL: @test3 +; CHECK-NOT: call void @is(i1 true) +; CHECK: call void @is(i1 false) +define void @test3(i32 %a) { + %cmp1 = icmp ugt i32 %a, 1 + br i1 %cmp1, label %taken, label %untaken + +taken: + %cmp2 = icmp eq i32 %a, 0 + br i1 %cmp2, label %istrue, label %isfalse + +istrue: + call void @is(i1 true) + ret void + +isfalse: + call void @is(i1 false) + ret void + +untaken: + ret void +} + +; cmp1 implies cmp2 is true +; CHECK-LABEL: @test4 +; CHECK: call void @is(i1 true) +; CHECK-NOT: call void @is(i1 false) +define void @test4(i32 %a) { + %cmp1 = icmp sgt i32 %a, 1 + br i1 %cmp1, label %taken, label %untaken + +taken: + %cmp2 = icmp ugt i32 %a, 0 + br i1 %cmp2, label %istrue, label %isfalse + +istrue: + call void @is(i1 true) + ret void + +isfalse: + call void @is(i1 false) + ret void + +untaken: + ret void +} + +; cmp1 implies cmp2 is true +; CHECK-LABEL: @test5 +; CHECK: call void @is(i1 true) +; CHECK-NOT: call void @is(i1 false) +define void @test5(i32 %a) { + %cmp1 = icmp sgt i32 %a, 5 + br i1 %cmp1, label %taken, label %untaken + +taken: + %cmp2 = icmp sgt i32 %a, -1 + br i1 %cmp2, label %istrue, label %isfalse + +istrue: + call void @is(i1 true) + ret void + +isfalse: + call void @is(i1 false) + ret void + +untaken: + ret void +} + +declare void @is(i1) |

