[FunctionAttrs] Inline the prototype attribute inference to an existing
authorChandler Carruth <chandlerc@gmail.com>
Sat, 31 Oct 2015 00:28:37 +0000 (00:28 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sat, 31 Oct 2015 00:28:37 +0000 (00:28 +0000)
loop over the SCC.

The separate function wasn't really adding much, NFC.

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

lib/Transforms/IPO/FunctionAttrs.cpp

index 2928cb0..8005022 100644 (file)
@@ -73,8 +73,6 @@ struct FunctionAttrs : public CallGraphSCCPass {
 
 private:
   TargetLibraryInfo *TLI;
 
 private:
   TargetLibraryInfo *TLI;
-
-  bool annotateLibraryCalls(const CallGraphSCC &SCC);
 };
 }
 
 };
 }
 
@@ -1750,27 +1748,9 @@ static bool inferPrototypeAttributes(Function &F, const TargetLibraryInfo &TLI)
   return true;
 }
 
   return true;
 }
 
-/// Adds attributes to well-known standard library call declarations.
-bool FunctionAttrs::annotateLibraryCalls(const CallGraphSCC &SCC) {
-  bool MadeChange = false;
-
-  // Check each function in turn annotating well-known library function
-  // declarations with attributes.
-  for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
-    Function *F = (*I)->getFunction();
-
-    if (F && F->isDeclaration())
-      MadeChange |= inferPrototypeAttributes(*F, *TLI);
-  }
-
-  return MadeChange;
-}
-
 bool FunctionAttrs::runOnSCC(CallGraphSCC &SCC) {
   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
 bool FunctionAttrs::runOnSCC(CallGraphSCC &SCC) {
   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
-
-  // Annotate declarations for which we have special knowledge.
-  bool Changed = annotateLibraryCalls(SCC);
+  bool Changed = false;
 
   // We compute dedicated AA results for each function in the SCC as needed. We
   // use a lambda referencing external objects so that they live long enough to
 
   // We compute dedicated AA results for each function in the SCC as needed. We
   // use a lambda referencing external objects so that they live long enough to
@@ -1798,6 +1778,11 @@ bool FunctionAttrs::runOnSCC(CallGraphSCC &SCC) {
       continue;
     }
 
       continue;
     }
 
+    // When initially processing functions, also infer their prototype
+    // attributes if they are declarations.
+    if (F->isDeclaration())
+      Changed |= inferPrototypeAttributes(*F, *TLI);
+
     SCCNodes.insert(F);
   }
 
     SCCNodes.insert(F);
   }