summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO/BlockExtractor.cpp
diff options
context:
space:
mode:
authorQuentin Colombet <quentin.colombet@gmail.com>2019-04-29 16:14:02 +0000
committerQuentin Colombet <quentin.colombet@gmail.com>2019-04-29 16:14:02 +0000
commit31ce274207fd16b0277e26a021f7371783475894 (patch)
tree9244cf6b8d257d020093ad6260e3c4399c8c051e /llvm/lib/Transforms/IPO/BlockExtractor.cpp
parentae2cbb34007d20c1a4e0e0bf0c9408b2df238eea (diff)
downloadbcm5719-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.cpp32
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() {
OpenPOWER on IntegriCloud