aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/IPO/BlockExtractor.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2023-02-11 12:38:04 +0000
committerDimitry Andric <dim@FreeBSD.org>2023-02-11 12:38:11 +0000
commite3b557809604d036af6e00c60f012c2025b59a5e (patch)
tree8a11ba2269a3b669601e2fd41145b174008f4da8 /llvm/lib/Transforms/IPO/BlockExtractor.cpp
parent08e8dd7b9db7bb4a9de26d44c1cbfd24e869c014 (diff)
Diffstat (limited to 'llvm/lib/Transforms/IPO/BlockExtractor.cpp')
-rw-r--r--llvm/lib/Transforms/IPO/BlockExtractor.cpp75
1 files changed, 11 insertions, 64 deletions
diff --git a/llvm/lib/Transforms/IPO/BlockExtractor.cpp b/llvm/lib/Transforms/IPO/BlockExtractor.cpp
index 9e27ae49a901..a68cf7db7c85 100644
--- a/llvm/lib/Transforms/IPO/BlockExtractor.cpp
+++ b/llvm/lib/Transforms/IPO/BlockExtractor.cpp
@@ -45,20 +45,15 @@ class BlockExtractor {
public:
BlockExtractor(bool EraseFunctions) : EraseFunctions(EraseFunctions) {}
bool runOnModule(Module &M);
- 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);
- }
+ void
+ init(const std::vector<std::vector<BasicBlock *>> &GroupsOfBlocksToExtract) {
+ GroupsOfBlocks = GroupsOfBlocksToExtract;
if (!BlockExtractorFile.empty())
loadFile();
}
private:
- SmallVector<SmallVector<BasicBlock *, 16>, 4> GroupsOfBlocks;
+ std::vector<std::vector<BasicBlock *>> GroupsOfBlocks;
bool EraseFunctions;
/// Map a function name to groups of blocks.
SmallVector<std::pair<std::string, SmallVector<std::string, 4>>, 4>
@@ -68,56 +63,8 @@ private:
void splitLandingPadPreds(Function &F);
};
-class BlockExtractorLegacyPass : public ModulePass {
- BlockExtractor BE;
- bool runOnModule(Module &M) override;
-
-public:
- static char ID;
- BlockExtractorLegacyPass(const SmallVectorImpl<BasicBlock *> &BlocksToExtract,
- bool EraseFunctions)
- : ModulePass(ID), BE(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);
- MassagedGroupsOfBlocks.push_back(NewGroup);
- }
- BE.init(MassagedGroupsOfBlocks);
- }
-
- BlockExtractorLegacyPass(const SmallVectorImpl<SmallVector<BasicBlock *, 16>>
- &GroupsOfBlocksToExtract,
- bool EraseFunctions)
- : ModulePass(ID), BE(EraseFunctions) {
- BE.init(GroupsOfBlocksToExtract);
- }
-
- BlockExtractorLegacyPass()
- : BlockExtractorLegacyPass(SmallVector<BasicBlock *, 0>(), false) {}
-};
-
} // end anonymous namespace
-char BlockExtractorLegacyPass::ID = 0;
-INITIALIZE_PASS(BlockExtractorLegacyPass, "extract-blocks",
- "Extract basic blocks from module", false, false)
-
-ModulePass *llvm::createBlockExtractorPass() {
- return new BlockExtractorLegacyPass();
-}
-ModulePass *llvm::createBlockExtractorPass(
- const SmallVectorImpl<BasicBlock *> &BlocksToExtract, bool EraseFunctions) {
- return new BlockExtractorLegacyPass(BlocksToExtract, EraseFunctions);
-}
-ModulePass *llvm::createBlockExtractorPass(
- const SmallVectorImpl<SmallVector<BasicBlock *, 16>>
- &GroupsOfBlocksToExtract,
- bool EraseFunctions) {
- return new BlockExtractorLegacyPass(GroupsOfBlocksToExtract, EraseFunctions);
-}
-
/// Gets all of the blocks specified in the input file.
void BlockExtractor::loadFile() {
auto ErrOrBuf = MemoryBuffer::getFile(BlockExtractorFile);
@@ -161,7 +108,7 @@ void BlockExtractor::splitLandingPadPreds(Function &F) {
// Look through the landing pad's predecessors. If one of them ends in an
// 'invoke', then we want to split the landing pad.
bool Split = false;
- for (auto PredBB : predecessors(LPad)) {
+ for (auto *PredBB : predecessors(LPad)) {
if (PredBB->isLandingPad() && PredBB != Parent &&
isa<InvokeInst>(Parent->getTerminator())) {
Split = true;
@@ -179,7 +126,6 @@ void BlockExtractor::splitLandingPadPreds(Function &F) {
}
bool BlockExtractor::runOnModule(Module &M) {
-
bool Changed = false;
// Get all the functions.
@@ -251,14 +197,15 @@ bool BlockExtractor::runOnModule(Module &M) {
return Changed;
}
-bool BlockExtractorLegacyPass::runOnModule(Module &M) {
- return BE.runOnModule(M);
-}
+BlockExtractorPass::BlockExtractorPass(
+ std::vector<std::vector<BasicBlock *>> &&GroupsOfBlocks,
+ bool EraseFunctions)
+ : GroupsOfBlocks(GroupsOfBlocks), EraseFunctions(EraseFunctions) {}
PreservedAnalyses BlockExtractorPass::run(Module &M,
ModuleAnalysisManager &AM) {
- BlockExtractor BE(false);
- BE.init(SmallVector<SmallVector<BasicBlock *, 16>, 0>());
+ BlockExtractor BE(EraseFunctions);
+ BE.init(GroupsOfBlocks);
return BE.runOnModule(M) ? PreservedAnalyses::none()
: PreservedAnalyses::all();
}