diff options
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/IPO/SampleProfile.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/IPO/SampleProfile.cpp b/llvm/lib/Transforms/IPO/SampleProfile.cpp index 49ebf6555b6..8fd81d62dd8 100644 --- a/llvm/lib/Transforms/IPO/SampleProfile.cpp +++ b/llvm/lib/Transforms/IPO/SampleProfile.cpp @@ -123,6 +123,7 @@ protected: bool propagateThroughEdges(Function &F); void computeDominanceAndLoopInfo(Function &F); unsigned getOffset(unsigned L, unsigned H) const; + void clearFunctionData(); /// \brief Map basic blocks to their computed weights. /// @@ -175,6 +176,20 @@ protected: }; } +/// Clear all the per-function data used to load samples and propagate weights. +void SampleProfileLoader::clearFunctionData() { + BlockWeights.clear(); + EdgeWeights.clear(); + VisitedBlocks.clear(); + VisitedEdges.clear(); + EquivalenceClass.clear(); + DT = nullptr; + PDT = nullptr; + LI = nullptr; + Predecessors.clear(); + Successors.clear(); +} + /// \brief Returns the offset of lineno \p L to head_lineno \p H /// /// \param L Lineno @@ -931,17 +946,19 @@ ModulePass *llvm::createSampleProfileLoaderPass(StringRef Name) { } bool SampleProfileLoader::runOnModule(Module &M) { + if (!ProfileIsValid) + return false; + bool retval = false; for (auto &F : M) - if (!F.isDeclaration()) + if (!F.isDeclaration()) { + clearFunctionData(); retval |= runOnFunction(F); + } return retval; } bool SampleProfileLoader::runOnFunction(Function &F) { - if (!ProfileIsValid) - return false; - Samples = Reader->getSamplesFor(F); if (!Samples->empty()) return emitAnnotations(F); |

