diff options
author | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2018-08-01 16:37:51 +0000 |
---|---|---|
committer | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2018-08-01 16:37:51 +0000 |
commit | bed4babc56a1910f674566b8e0b9624f5bc292c1 (patch) | |
tree | e2c71a99aeb56e5678089de34b00c6ff14521fb2 /llvm/lib/Transforms/IPO/FunctionAttrs.cpp | |
parent | 5c4fb14e07358f685742e61f7d0109e13b5f9edd (diff) | |
download | bcm5719-llvm-bed4babc56a1910f674566b8e0b9624f5bc292c1.tar.gz bcm5719-llvm-bed4babc56a1910f674566b8e0b9624f5bc292c1.zip |
[NFC][FunctionAttrs] Remove duplication in old/new PM pipeline
This patch just extract code into a separate function to remove some
duplication between the old and new pass manager pipeline. Due to the
different CGSCC iterators used, not all code duplication was eliminated.
llvm-svn: 338585
Diffstat (limited to 'llvm/lib/Transforms/IPO/FunctionAttrs.cpp')
-rw-r--r-- | llvm/lib/Transforms/IPO/FunctionAttrs.cpp | 62 |
1 files changed, 29 insertions, 33 deletions
diff --git a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp index 010b0a29807..925f4af9d48 100644 --- a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp +++ b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp @@ -1286,6 +1286,31 @@ static bool addNoRecurseAttrs(const SCCNodeSet &SCCNodes) { return setDoesNotRecurse(*F); } +template <typename AARGetterT> +static bool deriveAttrsInPostOrder(SCCNodeSet &SCCNodes, AARGetterT &&AARGetter, + bool HasUnknownCall) { + bool Changed = false; + + // Bail if the SCC only contains optnone functions. + if (SCCNodes.empty()) + return Changed; + + Changed |= addArgumentReturnedAttrs(SCCNodes); + Changed |= addReadAttrs(SCCNodes, AARGetter); + Changed |= addArgumentAttrs(SCCNodes); + + // If we have no external nodes participating in the SCC, we can deduce some + // more precise attributes as well. + if (!HasUnknownCall) { + Changed |= addNoAliasAttrs(SCCNodes); + Changed |= addNonNullAttrs(SCCNodes); + Changed |= inferAttrsFromFunctionBodies(SCCNodes); + Changed |= addNoRecurseAttrs(SCCNodes); + } + + return Changed; +} + PreservedAnalyses PostOrderFunctionAttrsPass::run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM, LazyCallGraph &CG, @@ -1328,21 +1353,10 @@ PreservedAnalyses PostOrderFunctionAttrsPass::run(LazyCallGraph::SCC &C, SCCNodes.insert(&F); } - bool Changed = false; - Changed |= addArgumentReturnedAttrs(SCCNodes); - Changed |= addReadAttrs(SCCNodes, AARGetter); - Changed |= addArgumentAttrs(SCCNodes); - - // If we have no external nodes participating in the SCC, we can deduce some - // more precise attributes as well. - if (!HasUnknownCall) { - Changed |= addNoAliasAttrs(SCCNodes); - Changed |= addNonNullAttrs(SCCNodes); - Changed |= inferAttrsFromFunctionBodies(SCCNodes); - Changed |= addNoRecurseAttrs(SCCNodes); - } + if (deriveAttrsInPostOrder(SCCNodes, AARGetter, HasUnknownCall)) + return PreservedAnalyses::none(); - return Changed ? PreservedAnalyses::none() : PreservedAnalyses::all(); + return PreservedAnalyses::all(); } namespace { @@ -1382,7 +1396,6 @@ Pass *llvm::createPostOrderFunctionAttrsLegacyPass() { template <typename AARGetterT> static bool runImpl(CallGraphSCC &SCC, AARGetterT AARGetter) { - bool Changed = false; // 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 @@ -1403,24 +1416,7 @@ static bool runImpl(CallGraphSCC &SCC, AARGetterT AARGetter) { SCCNodes.insert(F); } - // Skip it if the SCC only contains optnone functions. - if (SCCNodes.empty()) - return Changed; - - Changed |= addArgumentReturnedAttrs(SCCNodes); - Changed |= addReadAttrs(SCCNodes, AARGetter); - Changed |= addArgumentAttrs(SCCNodes); - - // If we have no external nodes participating in the SCC, we can deduce some - // more precise attributes as well. - if (!ExternalNode) { - Changed |= addNoAliasAttrs(SCCNodes); - Changed |= addNonNullAttrs(SCCNodes); - Changed |= inferAttrsFromFunctionBodies(SCCNodes); - Changed |= addNoRecurseAttrs(SCCNodes); - } - - return Changed; + return deriveAttrsInPostOrder(SCCNodes, AARGetter, ExternalNode); } bool PostOrderFunctionAttrsLegacyPass::runOnSCC(CallGraphSCC &SCC) { |