Fix a bug in LazyValueInfo that CorrelatedValuePropagation exposed: In the LVI lattic...
authorOwen Anderson <resistor@mac.com>
Thu, 2 Sep 2010 18:23:58 +0000 (18:23 +0000)
committerOwen Anderson <resistor@mac.com>
Thu, 2 Sep 2010 18:23:58 +0000 (18:23 +0000)
be treated as equivalent.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112843 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/LazyValueInfo.cpp
test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll [new file with mode: 0644]

index f6f715e4df3e0ce74299ae0c5e0bd26b1e960728..ff98bf97711aed70353eeb6c6cecc8e6a353b418 100644 (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;
diff --git a/test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll b/test/Transforms/CorrelatedValuePropagation/2010-09-02-Trunc.ll
new file mode 100644 (file)
index 0000000..f2553dc
--- /dev/null
@@ -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