diff options
Diffstat (limited to 'llvm/test/Transforms/CorrelatedValuePropagation/select.ll')
| -rw-r--r-- | llvm/test/Transforms/CorrelatedValuePropagation/select.ll | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/select.ll b/llvm/test/Transforms/CorrelatedValuePropagation/select.ll index be44bdcd921..bad8e6b74f5 100644 --- a/llvm/test/Transforms/CorrelatedValuePropagation/select.ll +++ b/llvm/test/Transforms/CorrelatedValuePropagation/select.ll @@ -73,3 +73,72 @@ if.end: ret i32 %sel ; CHECK: ret i32 1 } + +define i1 @test1(i32* %p, i1 %unknown) { +; CHECK-LABEL: @test1 + %pval = load i32, i32* %p + %cmp1 = icmp slt i32 %pval, 255 + br i1 %cmp1, label %next, label %exit + +next: + %min = select i1 %unknown, i32 %pval, i32 5 + ;; TODO: This pointless branch shouldn't be neccessary + br label %next2 +next2: +; CHECK-LABEL: next2: +; CHECK: ret i1 false + %res = icmp eq i32 %min, 255 + ret i1 %res + +exit: +; CHECK-LABEL: exit: +; CHECK: ret i1 true + ret i1 true +} + +; Check that we take a conservative meet +define i1 @test2(i32* %p, i32 %qval, i1 %unknown) { +; CHECK-LABEL: test2 + %pval = load i32, i32* %p + %cmp1 = icmp slt i32 %pval, 255 + br i1 %cmp1, label %next, label %exit + +next: + %min = select i1 %unknown, i32 %pval, i32 %qval + ;; TODO: This pointless branch shouldn't be neccessary + br label %next2 +next2: +; CHECK-LABEL: next2 +; CHECK: ret i1 %res + %res = icmp eq i32 %min, 255 + ret i1 %res + +exit: +; CHECK-LABEL: exit: +; CHECK: ret i1 true + ret i1 true +} + +; Same as @test2, but for the opposite select input +define i1 @test3(i32* %p, i32 %qval, i1 %unknown) { +; CHECK-LABEL: test3 + %pval = load i32, i32* %p + %cmp1 = icmp slt i32 %pval, 255 + br i1 %cmp1, label %next, label %exit + +next: + %min = select i1 %unknown, i32 %qval, i32 %pval + ;; TODO: This pointless branch shouldn't be neccessary + br label %next2 +next2: +; CHECK-LABEL: next2 +; CHECK: ret i1 %res + %res = icmp eq i32 %min, 255 + ret i1 %res + +exit: +; CHECK-LABEL: exit: +; CHECK: ret i1 true + ret i1 true +} + |

