diff options
| -rw-r--r-- | llvm/test/Transforms/CorrelatedValuePropagation/select.ll | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/select.ll b/llvm/test/Transforms/CorrelatedValuePropagation/select.ll index bad8e6b74f5..cab88766113 100644 --- a/llvm/test/Transforms/CorrelatedValuePropagation/select.ll +++ b/llvm/test/Transforms/CorrelatedValuePropagation/select.ll @@ -142,3 +142,28 @@ exit: ret i1 true } +; Conflicting constants (i.e. isOverdefined result) +; NOTE: Using doubles in this version is a bit of a hack. This +; is to get around the fact that all integers (including constants +; and non-constants) are actually represented as constant-ranges. +define i1 @test4(i32* %p, i32 %qval, i1 %unknown) { +; CHECK-LABEL: test4 + %pval = load i32, i32* %p + %cmp1 = icmp slt i32 %pval, 255 + br i1 %cmp1, label %next, label %exit + +next: + %min = select i1 %unknown, double 1.0, double 0.0 + ;; TODO: This pointless branch shouldn't be neccessary + br label %next2 +next2: +; CHECK-LABEL: next2 +; CHECK: ret i1 %res + %res = fcmp oeq double %min, 300.0 + ret i1 %res + +exit: +; CHECK-LABEL: exit: +; CHECK: ret i1 true + ret i1 true +} |

