diff options
author | Quentin Colombet <quentin.colombet@gmail.com> | 2019-04-29 16:14:02 +0000 |
---|---|---|
committer | Quentin Colombet <quentin.colombet@gmail.com> | 2019-04-29 16:14:02 +0000 |
commit | 31ce274207fd16b0277e26a021f7371783475894 (patch) | |
tree | 9244cf6b8d257d020093ad6260e3c4399c8c051e /llvm/lib/Transforms/IPO/BlockExtractor.cpp | |
parent | ae2cbb34007d20c1a4e0e0bf0c9408b2df238eea (diff) | |
download | bcm5719-llvm-31ce274207fd16b0277e26a021f7371783475894.tar.gz bcm5719-llvm-31ce274207fd16b0277e26a021f7371783475894.zip |
[BlockExtractor] Expose a constructor for the group extraction
NFC
Differential Revision: https://reviews.llvm.org/D60971
llvm-svn: 359463
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() { |