aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/Transforms/CorrelatedValuePropagation/select.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/CorrelatedValuePropagation/select.ll')
-rw-r--r--llvm/test/Transforms/CorrelatedValuePropagation/select.ll23
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/select.ll b/llvm/test/Transforms/CorrelatedValuePropagation/select.ll
index 28a8516..9842328 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/select.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/select.ll
@@ -372,4 +372,27 @@ define i64 @select_cond_may_undef(i32 %a) {
ret i64 %max
}
+define i32 @test_solve_select_at_use(i32 %a, i32 %b, i32 %c) {
+; CHECK-LABEL: define i32 @test_solve_select_at_use
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A]], 0
+; CHECK-NEXT: [[COND:%.*]] = icmp sgt i32 [[A]], -1
+; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
+; CHECK: if.then:
+; CHECK-NEXT: ret i32 [[C]]
+; CHECK: if.else:
+; CHECK-NEXT: ret i32 [[B]]
+;
+entry:
+ %cmp = icmp slt i32 %a, 0
+ %retval = select i1 %cmp, i32 %b, i32 %c
+ %cond = icmp sgt i32 %a, -1
+ br i1 %cond, label %if.then, label %if.else
+if.then:
+ ret i32 %retval
+if.else:
+ ret i32 %retval
+}
+
!0 = !{}