Skip to content

Commit

Permalink
Revert "Revert "This patch builds on top of D13378 to handle constant…
Browse files Browse the repository at this point in the history
… condition.""

This reverts commit r249528 and reapply r249431. The fix for the
fallout has been commited in r249575.

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 249581
  • Loading branch information
joker-eph committed Oct 7, 2015
1 parent daad571 commit 044cb34
Showing 2 changed files with 56 additions and 0 deletions.
5 changes: 5 additions & 0 deletions llvm/lib/Analysis/ScalarEvolution.cpp
Original file line number Diff line number Diff line change
@@ -3904,6 +3904,11 @@ const SCEV *ScalarEvolution::createNodeForSelectOrPHI(Instruction *I,
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)
51 changes: 51 additions & 0 deletions llvm/test/Analysis/ScalarEvolution/constant_condition.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
; 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
}

0 comments on commit 044cb34

Please sign in to comment.