Interchange this loop so that we test all pointers against one call site
authorChris Lattner <sabre@nondot.org>
Sat, 26 Mar 2005 22:16:44 +0000 (22:16 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 26 Mar 2005 22:16:44 +0000 (22:16 +0000)
before moving on to the next call site.  This will be a more efficient way
to compute the mod/ref set for AA implementations like DSA.

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

lib/Analysis/AliasAnalysisEvaluator.cpp

index 1b3daba0ab4187435340d92b357dbedaf0b071f2..da8e4e8e62799cae403b0ce6ec6e053ec1bb6cf2 100644 (file)
@@ -156,15 +156,16 @@ bool AAEval::runOnFunction(Function &F) {
   }
 
   // Mod/ref alias analysis: compare all pairs of calls and values
-  for (std::set<Value *>::iterator V = Pointers.begin(), Ve = Pointers.end();
-       V != Ve; ++V) {
-    unsigned Size = 0;
-    const Type *ElTy = cast<PointerType>((*V)->getType())->getElementType();
-    if (ElTy->isSized()) Size = TD.getTypeSize(ElTy);
-
-    for (std::set<CallSite>::iterator C = CallSites.begin(), 
-           Ce = CallSites.end(); C != Ce; ++C) {
-      Instruction *I = C->getInstruction();
+  for (std::set<CallSite>::iterator C = CallSites.begin(), 
+         Ce = CallSites.end(); C != Ce; ++C) {
+    Instruction *I = C->getInstruction();
+    
+    for (std::set<Value *>::iterator V = Pointers.begin(), Ve = Pointers.end();
+         V != Ve; ++V) {
+      unsigned Size = 0;
+      const Type *ElTy = cast<PointerType>((*V)->getType())->getElementType();
+      if (ElTy->isSized()) Size = TD.getTypeSize(ElTy);
+      
       switch (AA.getModRefInfo(*C, *V, Size)) {
       case AliasAnalysis::NoModRef:
         PrintModRefResults("NoModRef", PrintNoModRef, I, *V, F.getParent());
@@ -183,7 +184,7 @@ bool AAEval::runOnFunction(Function &F) {
       }
     }
   }
-
+  
   return false;
 }