Fix a bug in LazyValueInfo that CorrelatedValuePropagation exposed: In the LVI lattice, undef and the full set ConstantRange should not

be treated as equivalent.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112843 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson 2010-09-02 18:23:58 +00:00
parent bb5a039b76
commit 66048c2169
2 changed files with 25 additions and 4 deletions

View File

@ -173,10 +173,6 @@ public:
assert(isUndefined());
if (NewR.isEmptySet())
return markOverdefined();
else if (NewR.isFullSet()) {
Tag = undefined;
return true;
}
Tag = constantrange;
Range = NewR;

View File

@ -0,0 +1,25 @@
; RUN: opt -S < %s -correlated-propagation | FileCheck %s
; CHECK: @check
define i16 @test(i32 %a, i1 %b) {
entry:
%c = icmp eq i32 %a, 0
br i1 %c, label %left, label %right
right:
%d = trunc i32 %a to i1
br label %merge
left:
br i1 %b, label %merge, label %other
other:
ret i16 23
merge:
%f = phi i1 [%b, %left], [%d, %right]
; CHECK: select i1 %f, i16 1, i16 0
%h = select i1 %f, i16 1, i16 0
; CHECK: ret i16 %h
ret i16 %h
}