[LVI] Fix potential memory corruption in getValueFromCondition

Rewrite Visited[Cond] = getValueFromConditionImpl(..., Visited) statement which can lead to a memory corruption since getValueFromConditionImpl changes Visited map and invalidates the iterators.

llvm-svn: 278514
diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp
index 8c09010..7a94048 100644
--- a/llvm/lib/Analysis/LazyValueInfo.cpp
+++ b/llvm/lib/Analysis/LazyValueInfo.cpp
@@ -1260,8 +1260,10 @@
   auto I = Visited.find(Cond);
   if (I != Visited.end())
     return I->second;
-  return Visited[Cond] = getValueFromConditionImpl(Val, Cond, isTrueDest,
-                                                   Visited);
+
+  auto Result = getValueFromConditionImpl(Val, Cond, isTrueDest, Visited);
+  Visited[Cond] = Result;
+  return Result;
 }
 
 LVILatticeVal getValueFromCondition(Value *Val, Value *Cond, bool isTrueDest) {