diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-02-11 12:38:04 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2023-02-11 12:38:11 +0000 |
commit | e3b557809604d036af6e00c60f012c2025b59a5e (patch) | |
tree | 8a11ba2269a3b669601e2fd41145b174008f4da8 /llvm/lib/Transforms/IPO/BlockExtractor.cpp | |
parent | 08e8dd7b9db7bb4a9de26d44c1cbfd24e869c014 (diff) |
Diffstat (limited to 'llvm/lib/Transforms/IPO/BlockExtractor.cpp')
-rw-r--r-- | llvm/lib/Transforms/IPO/BlockExtractor.cpp | 75 |
1 files changed, 11 insertions, 64 deletions
diff --git a/llvm/lib/Transforms/IPO/BlockExtractor.cpp b/llvm/lib/Transforms/IPO/BlockExtractor.cpp index 9e27ae49a901..a68cf7db7c85 100644 --- a/llvm/lib/Transforms/IPO/BlockExtractor.cpp +++ b/llvm/lib/Transforms/IPO/BlockExtractor.cpp @@ -45,20 +45,15 @@ class BlockExtractor { public: BlockExtractor(bool EraseFunctions) : EraseFunctions(EraseFunctions) {} bool runOnModule(Module &M); - void init(const SmallVectorImpl<SmallVector<BasicBlock *, 16>> - &GroupsOfBlocksToExtract) { - for (const SmallVectorImpl<BasicBlock *> &GroupOfBlocks : - GroupsOfBlocksToExtract) { - SmallVector<BasicBlock *, 16> NewGroup; - NewGroup.append(GroupOfBlocks.begin(), GroupOfBlocks.end()); - GroupsOfBlocks.emplace_back(NewGroup); - } + void + init(const std::vector<std::vector<BasicBlock *>> &GroupsOfBlocksToExtract) { + GroupsOfBlocks = GroupsOfBlocksToExtract; if (!BlockExtractorFile.empty()) loadFile(); } private: - SmallVector<SmallVector<BasicBlock *, 16>, 4> GroupsOfBlocks; + std::vector<std::vector<BasicBlock *>> GroupsOfBlocks; bool EraseFunctions; /// Map a function name to groups of blocks. SmallVector<std::pair<std::string, SmallVector<std::string, 4>>, 4> @@ -68,56 +63,8 @@ private: void splitLandingPadPreds(Function &F); }; -class BlockExtractorLegacyPass : public ModulePass { - BlockExtractor BE; - bool runOnModule(Module &M) override; - -public: - static char ID; - BlockExtractorLegacyPass(const SmallVectorImpl<BasicBlock *> &BlocksToExtract, - bool EraseFunctions) - : ModulePass(ID), BE(EraseFunctions) { - // We want one group per element of the input list. - SmallVector<SmallVector<BasicBlock *, 16>, 4> MassagedGroupsOfBlocks; - for (BasicBlock *BB : BlocksToExtract) { - SmallVector<BasicBlock *, 16> NewGroup; - NewGroup.push_back(BB); - MassagedGroupsOfBlocks.push_back(NewGroup); - } - BE.init(MassagedGroupsOfBlocks); - } - - BlockExtractorLegacyPass(const SmallVectorImpl<SmallVector<BasicBlock *, 16>> - &GroupsOfBlocksToExtract, - bool EraseFunctions) - : ModulePass(ID), BE(EraseFunctions) { - BE.init(GroupsOfBlocksToExtract); - } - - BlockExtractorLegacyPass() - : BlockExtractorLegacyPass(SmallVector<BasicBlock *, 0>(), false) {} -}; - } // end anonymous namespace -char BlockExtractorLegacyPass::ID = 0; -INITIALIZE_PASS(BlockExtractorLegacyPass, "extract-blocks", - "Extract basic blocks from module", false, false) - -ModulePass *llvm::createBlockExtractorPass() { - return new BlockExtractorLegacyPass(); -} -ModulePass *llvm::createBlockExtractorPass( - const SmallVectorImpl<BasicBlock *> &BlocksToExtract, bool EraseFunctions) { - return new BlockExtractorLegacyPass(BlocksToExtract, EraseFunctions); -} -ModulePass *llvm::createBlockExtractorPass( - const SmallVectorImpl<SmallVector<BasicBlock *, 16>> - &GroupsOfBlocksToExtract, - bool EraseFunctions) { - return new BlockExtractorLegacyPass(GroupsOfBlocksToExtract, EraseFunctions); -} - /// Gets all of the blocks specified in the input file. void BlockExtractor::loadFile() { auto ErrOrBuf = MemoryBuffer::getFile(BlockExtractorFile); @@ -161,7 +108,7 @@ void BlockExtractor::splitLandingPadPreds(Function &F) { // Look through the landing pad's predecessors. If one of them ends in an // 'invoke', then we want to split the landing pad. bool Split = false; - for (auto PredBB : predecessors(LPad)) { + for (auto *PredBB : predecessors(LPad)) { if (PredBB->isLandingPad() && PredBB != Parent && isa<InvokeInst>(Parent->getTerminator())) { Split = true; @@ -179,7 +126,6 @@ void BlockExtractor::splitLandingPadPreds(Function &F) { } bool BlockExtractor::runOnModule(Module &M) { - bool Changed = false; // Get all the functions. @@ -251,14 +197,15 @@ bool BlockExtractor::runOnModule(Module &M) { return Changed; } -bool BlockExtractorLegacyPass::runOnModule(Module &M) { - return BE.runOnModule(M); -} +BlockExtractorPass::BlockExtractorPass( + std::vector<std::vector<BasicBlock *>> &&GroupsOfBlocks, + bool EraseFunctions) + : GroupsOfBlocks(GroupsOfBlocks), EraseFunctions(EraseFunctions) {} PreservedAnalyses BlockExtractorPass::run(Module &M, ModuleAnalysisManager &AM) { - BlockExtractor BE(false); - BE.init(SmallVector<SmallVector<BasicBlock *, 16>, 0>()); + BlockExtractor BE(EraseFunctions); + BE.init(GroupsOfBlocks); return BE.runOnModule(M) ? PreservedAnalyses::none() : PreservedAnalyses::all(); } |