Value *Cond,
Value *TrueVal,
Value *FalseVal) {
- // Handle "constant" branch or select. This can occur for instance when a
- // loop pass transforms an inner loop and moves on to process the outer loop.
- if (auto *CI = dyn_cast<ConstantInt>(Cond))
- return getSCEV(CI->isOne() ? TrueVal : FalseVal);
-
// Try to match some simple smax or umax patterns.
auto *ICI = dyn_cast<ICmpInst>(Cond);
if (!ICI)
+++ /dev/null
-; RUN: opt -analyze -scalar-evolution < %s | FileCheck %s
-
-define i32 @branch_true(i32 %x, i32 %y) {
-; CHECK-LABEL: Classifying expressions for: @branch_true
- entry:
- br i1 true, label %add, label %merge
-
- add:
- %sum = add i32 %x, %y
- br label %merge
-
- merge:
- %v = phi i32 [ %sum, %add ], [ %x, %entry ]
-; CHECK: %v = phi i32 [ %sum, %add ], [ %x, %entry ]
-; CHECK-NEXT: --> (%x + %y) U: full-set S: full-set
- ret i32 %v
-}
-
-define i32 @branch_false(i32 %x, i32 %y) {
-; CHECK-LABEL: Classifying expressions for: @branch_false
- entry:
- br i1 false, label %add, label %merge
-
- add:
- %sum = add i32 %x, %y
- br label %merge
-
- merge:
- %v = phi i32 [ %sum, %add ], [ %x, %entry ]
-; CHECK: %v = phi i32 [ %sum, %add ], [ %x, %entry ]
-; CHECK-NEXT: --> %x U: full-set S: full-set
- ret i32 %v
-}
-
-define i32 @select_true(i32 %x, i32 %y) {
-; CHECK-LABEL: Classifying expressions for: @select_true
- entry:
- %v = select i1 true, i32 %x, i32 %y
-; CHECK: %v = select i1 true, i32 %x, i32 %y
-; CHECK-NEXT: --> %x U: full-set S: full-set
- ret i32 %v
-}
-
-define i32 @select_false(i32 %x, i32 %y) {
-; CHECK-LABEL: Classifying expressions for: @select_false
- entry:
- %v = select i1 false, i32 %x, i32 %y
-; CHECK: %v = select i1 false, i32 %x, i32 %y
-; CHECK-NEXT: --> %y U: full-set S: full-set
- ret i32 %v
-}