diff options
author | Owen Anderson <resistor@mac.com> | 2010-09-02 18:23:58 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2010-09-02 18:23:58 +0000 |
commit | a8c896b704ca567cf1efa6f41fdbe039ccc17a7b (patch) | |
tree | f8bd366fa8f07913d1b22ad02bd91e8f46abbacc /llvm | |
parent | aec776fd2aaccc76702a32d878a9039e6ef7712a (diff) | |
download | bcm5719-llvm-a8c896b704ca567cf1efa6f41fdbe039ccc17a7b.tar.gz bcm5719-llvm-a8c896b704ca567cf1efa6f41fdbe039ccc17a7b.zip |
Fix a bug in LazyValueInfo that CorrelatedValuePropagation exposed: In the LVI lattice, undef and the full set ConstantRange should not
be treated as equivalent.
llvm-svn: 112843
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Analysis/LazyValueInfo.cpp | 4 | ||||
-rw-r--r-- | llvm/test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll | 25 |
2 files changed, 25 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp index f6f715e4df3..ff98bf97711 100644 --- a/llvm/lib/Analysis/LazyValueInfo.cpp +++ b/llvm/lib/Analysis/LazyValueInfo.cpp @@ -173,10 +173,6 @@ public: assert(isUndefined()); if (NewR.isEmptySet()) return markOverdefined(); - else if (NewR.isFullSet()) { - Tag = undefined; - return true; - } Tag = constantrange; Range = NewR; diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll b/llvm/test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll new file mode 100644 index 00000000000..f2553dc2ca1 --- /dev/null +++ b/llvm/test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll @@ -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 +}
\ No newline at end of file |