mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-03 02:53:06 +00:00
Revert "Revert "This patch builds on top of D13378 to handle constant 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> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249581 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b5f011715c
commit
0ba01f2bb2
@ -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
test/Analysis/ScalarEvolution/constant_condition.ll
Normal file
51
test/Analysis/ScalarEvolution/constant_condition.ll
Normal file
@ -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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user