forked from OSchip/llvm-project
[BlockExtractor] Expose a constructor for the group extraction
NFC Differential Revision: https://reviews.llvm.org/D60971 llvm-svn: 359463
This commit is contained in:
parent
ae2cbb3400
commit
31ce274207
|
@ -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.
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in New Issue