expose edge information and switch j-t to use it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86920 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/LazyValueInfo.cpp b/lib/Analysis/LazyValueInfo.cpp
index c17b727..6c306bd 100644
--- a/lib/Analysis/LazyValueInfo.cpp
+++ b/lib/Analysis/LazyValueInfo.cpp
@@ -270,6 +270,27 @@
   return 0;
 }
 
+/// getConstantOnEdge - Determine whether the specified value is known to be a
+/// constant on the specified edge.  Return null if not.
+Constant *LazyValueInfo::getConstantOnEdge(Value *V, BasicBlock *FromBB,
+                                           BasicBlock *ToBB) {
+  // If already a constant, return it.
+  if (Constant *VC = dyn_cast<Constant>(V))
+    return VC;
+  
+  DenseMap<BasicBlock*, LVILatticeVal> BlockValues;
+  
+  DEBUG(errs() << "Getting value " << *V << " on edge from '"
+               << FromBB->getName() << "' to '" << ToBB->getName() << "'\n");
+  LVILatticeVal Result = GetValueOnEdge(V, FromBB, ToBB, BlockValues);
+  
+  DEBUG(errs() << "  Result = " << Result << "\n");
+  
+  if (Result.isConstant())
+    return Result.getConstant();
+  return 0;
+}
+
 /// isEqual - Determine whether the specified value is known to be equal or
 /// not-equal to the specified constant at the end of the specified block.
 LazyValueInfo::Tristate