Fix a bug that was causing several miscompilations on SPEC.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40746 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/MemoryDependenceAnalysis.cpp b/lib/Analysis/MemoryDependenceAnalysis.cpp
index a280fff..47e47e5 100644
--- a/lib/Analysis/MemoryDependenceAnalysis.cpp
+++ b/lib/Analysis/MemoryDependenceAnalysis.cpp
@@ -111,19 +111,31 @@
   while (!stack.empty()) {
     BasicBlock* BB = stack.back();
     
-    visited.insert(BB);
-    
-    if (resp.count(BB)) {
+    if (visited.count(BB)) {
       stack.pop_back();
       continue;
     }
     
     if (BB != block) {
+      visited.insert(BB);
+      
       Instruction* localDep = getDependency(query, 0, BB);
       if (localDep != NonLocal) {
         resp.insert(std::make_pair(BB, localDep));
+        stack.pop_back();
+        
         continue;
       }
+    } else if (BB == block && stack.size() > 1) {
+      visited.insert(BB);
+      
+      Instruction* localDep = getDependency(query, 0, BB);
+      if (localDep != query)
+        resp.insert(std::make_pair(BB, localDep));
+      
+      stack.pop_back();
+      
+      continue;
     }
     
     bool predOnStack = false;