summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2010-09-02 18:23:58 +0000
committerOwen Anderson <resistor@mac.com>2010-09-02 18:23:58 +0000
commita8c896b704ca567cf1efa6f41fdbe039ccc17a7b (patch)
treef8bd366fa8f07913d1b22ad02bd91e8f46abbacc /llvm
parentaec776fd2aaccc76702a32d878a9039e6ef7712a (diff)
downloadbcm5719-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.cpp4
-rw-r--r--llvm/test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll25
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
OpenPOWER on IntegriCloud