[BlockExtractor] Expose a constructor for the group extraction

NFC

Differential Revision: https://reviews.llvm.org/D60971

llvm-svn: 359463
This commit is contained in:
Quentin Colombet 2019-04-29 16:14:02 +00:00
parent ae2cbb3400
commit 31ce274207
2 changed files with 33 additions and 3 deletions

View File

@ -182,6 +182,10 @@ ModulePass *createBlockExtractorPass();
ModulePass *
createBlockExtractorPass(const SmallVectorImpl<BasicBlock *> &BlocksToExtract,
bool EraseFunctions);
ModulePass *
createBlockExtractorPass(const SmallVectorImpl<SmallVector<BasicBlock *, 16>>
&GroupsOfBlocksToExtract,
bool EraseFunctions);
/// createStripDeadPrototypesPass - This pass removes any function declarations
/// (prototypes) that are not used.

View File

@ -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() {