diff options
Diffstat (limited to 'llvm/lib/Transforms/IPO/BlockExtractor.cpp')
| -rw-r--r-- | llvm/lib/Transforms/IPO/BlockExtractor.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/IPO/BlockExtractor.cpp b/llvm/lib/Transforms/IPO/BlockExtractor.cpp index 5cf2235bbff..6c365f3f3cb 100644 --- a/llvm/lib/Transforms/IPO/BlockExtractor.cpp +++ b/llvm/lib/Transforms/IPO/BlockExtractor.cpp @@ -44,20 +44,40 @@ class BlockExtractor : public ModulePass { SmallVector<std::pair<std::string, SmallVector<std::string, 4>>, 4> BlocksByName; + 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); + } + if (!BlockExtractorFile.empty()) + loadFile(); + } + public: static char ID; BlockExtractor(const SmallVectorImpl<BasicBlock *> &BlocksToExtract, bool EraseFunctions) : ModulePass(ID), EraseFunctions(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); - GroupsOfBlocks.push_back(NewGroup); + MassagedGroupsOfBlocks.push_back(NewGroup); } - if (!BlockExtractorFile.empty()) - loadFile(); + init(MassagedGroupsOfBlocks); } + + BlockExtractor(const SmallVectorImpl<SmallVector<BasicBlock *, 16>> + &GroupsOfBlocksToExtract, + bool EraseFunctions) + : ModulePass(ID), EraseFunctions(EraseFunctions) { + init(GroupsOfBlocksToExtract); + } + BlockExtractor() : BlockExtractor(SmallVector<BasicBlock *, 0>(), false) {} bool runOnModule(Module &M) override; @@ -76,6 +96,12 @@ ModulePass *llvm::createBlockExtractorPass( const SmallVectorImpl<BasicBlock *> &BlocksToExtract, bool EraseFunctions) { return new BlockExtractor(BlocksToExtract, EraseFunctions); } +ModulePass *llvm::createBlockExtractorPass( + const SmallVectorImpl<SmallVector<BasicBlock *, 16>> + &GroupsOfBlocksToExtract, + bool EraseFunctions) { + return new BlockExtractor(GroupsOfBlocksToExtract, EraseFunctions); +} /// Gets all of the blocks specified in the input file. void BlockExtractor::loadFile() { |

