From: Sean Silva Date: Sun, 3 Jul 2016 03:35:03 +0000 (+0000) Subject: [PM] Some preparatory refactoring to minimize the diff of D21921 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ad5ea26278b2320a30bf786ba455dbad4f43f21b;p=llvm [PM] Some preparatory refactoring to minimize the diff of D21921 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274456 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/IPO/FunctionAttrs.cpp b/lib/Transforms/IPO/FunctionAttrs.cpp index a21a320faaa..fff54408541 100644 --- a/lib/Transforms/IPO/FunctionAttrs.cpp +++ b/lib/Transforms/IPO/FunctionAttrs.cpp @@ -1067,22 +1067,10 @@ INITIALIZE_PASS_END(PostOrderFunctionAttrsLegacyPass, "functionattrs", Pass *llvm::createPostOrderFunctionAttrsLegacyPass() { return new PostOrderFunctionAttrsLegacyPass(); } -bool PostOrderFunctionAttrsLegacyPass::runOnSCC(CallGraphSCC &SCC) { - if (skipSCC(SCC)) - return false; +template +static bool runImpl(CallGraphSCC &SCC, AARGetterT AARGetter) { 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 - // be queried, but we re-use them each time. - Optional BAR; - Optional AAR; - auto AARGetter = [&](Function &F) -> AAResults & { - BAR.emplace(createLegacyPMBasicAAResult(*this, F)); - AAR.emplace(createLegacyPMAAResults(*this, F, *BAR)); - return *AAR; - }; - // Fill SCCNodes with the elements of the SCC. Used for quickly looking up // whether a given CallGraphNode is in this SCC. Also track whether there are // any external or opt-none nodes that will prevent us from optimizing any @@ -1116,6 +1104,24 @@ bool PostOrderFunctionAttrsLegacyPass::runOnSCC(CallGraphSCC &SCC) { return Changed; } +bool PostOrderFunctionAttrsLegacyPass::runOnSCC(CallGraphSCC &SCC) { + if (skipSCC(SCC)) + return 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 + // be queried, but we re-use them each time. + Optional BAR; + Optional AAR; + auto AARGetter = [&](Function &F) -> AAResults & { + BAR.emplace(createLegacyPMBasicAAResult(*this, F)); + AAR.emplace(createLegacyPMAAResults(*this, F, *BAR)); + return *AAR; + }; + + return runImpl(SCC, AARGetter); +} + namespace { struct ReversePostOrderFunctionAttrsLegacyPass : public ModulePass { static char ID; // Pass identification, replacement for typeid