[llvm] 2118b9d - [llvm-extract] Use new pass manager instead of legacy pass manager
Arthur Eubanks via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 20 12:57:43 PST 2022
Author: Arthur Eubanks
Date: 2022-12-20T12:57:35-08:00
New Revision: 2118b9d39b91e93c0146611235072cd6ca0f27b1
URL: https://github.com/llvm/llvm-project/commit/2118b9d39b91e93c0146611235072cd6ca0f27b1
DIFF: https://github.com/llvm/llvm-project/commit/2118b9d39b91e93c0146611235072cd6ca0f27b1.diff
LOG: [llvm-extract] Use new pass manager instead of legacy pass manager
Removes some legacy passes specific to llvm-extract
Added:
llvm/include/llvm/Transforms/IPO/ExtractGV.h
Modified:
llvm/include/llvm/InitializePasses.h
llvm/include/llvm/Transforms/IPO.h
llvm/include/llvm/Transforms/IPO/BlockExtractor.h
llvm/lib/Passes/PassRegistry.def
llvm/lib/Transforms/IPO/BlockExtractor.cpp
llvm/lib/Transforms/IPO/ExtractGV.cpp
llvm/lib/Transforms/IPO/IPO.cpp
llvm/lib/Transforms/IPO/StripSymbols.cpp
llvm/tools/llvm-extract/CMakeLists.txt
llvm/tools/llvm-extract/llvm-extract.cpp
llvm/utils/gn/secondary/llvm/tools/llvm-extract/BUILD.gn
Removed:
################################################################################
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index b5074907c7638..2d6d43d5eceff 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -67,7 +67,6 @@ void initializeBasicBlockSectionsPass(PassRegistry &);
void initializeBDCELegacyPassPass(PassRegistry&);
void initializeBarrierNoopPass(PassRegistry&);
void initializeBasicAAWrapperPassPass(PassRegistry&);
-void initializeBlockExtractorLegacyPassPass(PassRegistry &);
void initializeBlockFrequencyInfoWrapperPassPass(PassRegistry&);
void initializeBranchFolderPassPass(PassRegistry&);
void initializeBranchProbabilityInfoWrapperPassPass(PassRegistry&);
diff --git a/llvm/include/llvm/Transforms/IPO.h b/llvm/include/llvm/Transforms/IPO.h
index fe1e4d6c2dc98..9b1a2fb362f24 100644
--- a/llvm/include/llvm/Transforms/IPO.h
+++ b/llvm/include/llvm/Transforms/IPO.h
@@ -158,18 +158,6 @@ Pass *createLoopExtractorPass();
///
Pass *createSingleLoopExtractorPass();
-/// createBlockExtractorPass - This pass extracts all the specified blocks
-/// from the functions in the module.
-///
-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.
ModulePass *createStripDeadPrototypesPass();
diff --git a/llvm/include/llvm/Transforms/IPO/BlockExtractor.h b/llvm/include/llvm/Transforms/IPO/BlockExtractor.h
index deeb5ebe23d9a..6211027bd672a 100644
--- a/llvm/include/llvm/Transforms/IPO/BlockExtractor.h
+++ b/llvm/include/llvm/Transforms/IPO/BlockExtractor.h
@@ -14,11 +14,22 @@
#ifndef LLVM_TRANSFORMS_IPO_BLOCKEXTRACTOR_H
#define LLVM_TRANSFORMS_IPO_BLOCKEXTRACTOR_H
+#include <vector>
+
+#include "llvm/ADT/SmallVector.h"
#include "llvm/IR/PassManager.h"
namespace llvm {
+class BasicBlock;
+
struct BlockExtractorPass : PassInfoMixin<BlockExtractorPass> {
+ BlockExtractorPass(std::vector<std::vector<BasicBlock *>> &&GroupsOfBlocks,
+ bool EraseFunctions);
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+
+private:
+ std::vector<std::vector<BasicBlock *>> GroupsOfBlocks;
+ bool EraseFunctions;
};
} // namespace llvm
diff --git a/llvm/include/llvm/Transforms/IPO/ExtractGV.h b/llvm/include/llvm/Transforms/IPO/ExtractGV.h
new file mode 100644
index 0000000000000..45e29ba9a3ecf
--- /dev/null
+++ b/llvm/include/llvm/Transforms/IPO/ExtractGV.h
@@ -0,0 +1,30 @@
+//===-- ExtractGV.h -------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_IPO_EXTRACTGV_H
+#define LLVM_TRANSFORMS_IPO_EXTRACTGV_H
+
+#include "llvm/ADT/SetVector.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class ExtractGVPass : public PassInfoMixin<ExtractGVPass> {
+private:
+ SetVector<GlobalValue *> Named;
+ bool deleteStuff;
+ bool keepConstInit;
+
+public:
+ ExtractGVPass(std::vector<GlobalValue *> &GVs, bool deleteS = true,
+ bool keepConstInit = false);
+ PreservedAnalyses run(Module &M, ModuleAnalysisManager &);
+};
+} // namespace llvm
+
+#endif // LLVM_TRANSFORMS_IPO_EXTRACTGV_H
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index ee4108443cf00..4aec1b85c27ba 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -56,7 +56,7 @@ MODULE_PASS("deadargelim", DeadArgumentEliminationPass())
MODULE_PASS("debugify", NewPMDebugifyPass())
MODULE_PASS("dot-callgraph", CallGraphDOTPrinterPass())
MODULE_PASS("elim-avail-extern", EliminateAvailableExternallyPass())
-MODULE_PASS("extract-blocks", BlockExtractorPass())
+MODULE_PASS("extract-blocks", BlockExtractorPass({}, false))
MODULE_PASS("forceattrs", ForceFunctionAttrsPass())
MODULE_PASS("function-import", FunctionImportPass())
MODULE_PASS("globaldce", GlobalDCEPass())
diff --git a/llvm/lib/Transforms/IPO/BlockExtractor.cpp b/llvm/lib/Transforms/IPO/BlockExtractor.cpp
index dfadfdd736a72..a68cf7db7c854 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 @@ class BlockExtractor {
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);
@@ -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();
}
diff --git a/llvm/lib/Transforms/IPO/ExtractGV.cpp b/llvm/lib/Transforms/IPO/ExtractGV.cpp
index 84280781ee70c..d5073eed2fef0 100644
--- a/llvm/lib/Transforms/IPO/ExtractGV.cpp
+++ b/llvm/lib/Transforms/IPO/ExtractGV.cpp
@@ -10,11 +10,11 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/ADT/SetVector.h"
+#include "llvm/Transforms/IPO/ExtractGV.h"
#include "llvm/IR/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Transforms/IPO.h"
+#include "llvm/IR/PassManager.h"
#include <algorithm>
+
using namespace llvm;
/// Make sure GV is visible from both modules. Delete is true if it is
@@ -48,110 +48,86 @@ static void makeVisible(GlobalValue &GV, bool Delete) {
}
}
-namespace {
- /// A pass to extract specific global values and their dependencies.
- class GVExtractorPass : public ModulePass {
- SetVector<GlobalValue *> Named;
- bool deleteStuff;
- bool keepConstInit;
- public:
- static char ID; // Pass identification, replacement for typeid
/// If deleteS is true, this pass deletes the specified global values.
/// Otherwise, it deletes as much of the module as possible, except for the
/// global values specified.
- explicit GVExtractorPass(std::vector<GlobalValue*> &GVs,
- bool deleteS = true, bool keepConstInit = false)
- : ModulePass(ID), Named(GVs.begin(), GVs.end()), deleteStuff(deleteS),
- keepConstInit(keepConstInit) {}
-
- bool runOnModule(Module &M) override {
- if (skipModule(M))
- return false;
-
- // Visit the global inline asm.
- if (!deleteStuff)
- M.setModuleInlineAsm("");
-
- // For simplicity, just give all GlobalValues ExternalLinkage. A trickier
- // implementation could figure out which GlobalValues are actually
- // referenced by the Named set, and which GlobalValues in the rest of
- // the module are referenced by the NamedSet, and get away with leaving
- // more internal and private things internal and private. But for now,
- // be conservative and simple.
-
- // Visit the GlobalVariables.
- for (GlobalVariable &GV : M.globals()) {
- bool Delete = deleteStuff == (bool)Named.count(&GV) &&
- !GV.isDeclaration() &&
- (!GV.isConstant() || !keepConstInit);
- if (!Delete) {
- if (GV.hasAvailableExternallyLinkage())
- continue;
- if (GV.getName() == "llvm.global_ctors")
- continue;
- }
-
- makeVisible(GV, Delete);
-
- if (Delete) {
- // Make this a declaration and drop it's comdat.
- GV.setInitializer(nullptr);
- GV.setComdat(nullptr);
- }
- }
+ExtractGVPass::ExtractGVPass(std::vector<GlobalValue *> &GVs, bool deleteS,
+ bool keepConstInit)
+ : Named(GVs.begin(), GVs.end()), deleteStuff(deleteS),
+ keepConstInit(keepConstInit) {}
+
+PreservedAnalyses ExtractGVPass::run(Module &M, ModuleAnalysisManager &) {
+ // Visit the global inline asm.
+ if (!deleteStuff)
+ M.setModuleInlineAsm("");
+
+ // For simplicity, just give all GlobalValues ExternalLinkage. A trickier
+ // implementation could figure out which GlobalValues are actually
+ // referenced by the Named set, and which GlobalValues in the rest of
+ // the module are referenced by the NamedSet, and get away with leaving
+ // more internal and private things internal and private. But for now,
+ // be conservative and simple.
+
+ // Visit the GlobalVariables.
+ for (GlobalVariable &GV : M.globals()) {
+ bool Delete = deleteStuff == (bool)Named.count(&GV) &&
+ !GV.isDeclaration() && (!GV.isConstant() || !keepConstInit);
+ if (!Delete) {
+ if (GV.hasAvailableExternallyLinkage())
+ continue;
+ if (GV.getName() == "llvm.global_ctors")
+ continue;
+ }
- // Visit the Functions.
- for (Function &F : M) {
- bool Delete =
- deleteStuff == (bool)Named.count(&F) && !F.isDeclaration();
- if (!Delete) {
- if (F.hasAvailableExternallyLinkage())
- continue;
- }
-
- makeVisible(F, Delete);
-
- if (Delete) {
- // Make this a declaration and drop it's comdat.
- F.deleteBody();
- F.setComdat(nullptr);
- }
- }
+ makeVisible(GV, Delete);
- // Visit the Aliases.
- for (GlobalAlias &GA : llvm::make_early_inc_range(M.aliases())) {
- bool Delete = deleteStuff == (bool)Named.count(&GA);
- makeVisible(GA, Delete);
-
- if (Delete) {
- Type *Ty = GA.getValueType();
-
- GA.removeFromParent();
- llvm::Value *Declaration;
- if (FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
- Declaration =
- Function::Create(FTy, GlobalValue::ExternalLinkage,
- GA.getAddressSpace(), GA.getName(), &M);
-
- } else {
- Declaration =
- new GlobalVariable(M, Ty, false, GlobalValue::ExternalLinkage,
- nullptr, GA.getName());
- }
- GA.replaceAllUsesWith(Declaration);
- delete &GA;
- }
- }
+ if (Delete) {
+ // Make this a declaration and drop it's comdat.
+ GV.setInitializer(nullptr);
+ GV.setComdat(nullptr);
+ }
+ }
- return true;
+ // Visit the Functions.
+ for (Function &F : M) {
+ bool Delete = deleteStuff == (bool)Named.count(&F) && !F.isDeclaration();
+ if (!Delete) {
+ if (F.hasAvailableExternallyLinkage())
+ continue;
}
- };
- char GVExtractorPass::ID = 0;
-}
+ makeVisible(F, Delete);
+
+ if (Delete) {
+ // Make this a declaration and drop it's comdat.
+ F.deleteBody();
+ F.setComdat(nullptr);
+ }
+ }
+
+ // Visit the Aliases.
+ for (GlobalAlias &GA : llvm::make_early_inc_range(M.aliases())) {
+ bool Delete = deleteStuff == (bool)Named.count(&GA);
+ makeVisible(GA, Delete);
+
+ if (Delete) {
+ Type *Ty = GA.getValueType();
+
+ GA.removeFromParent();
+ llvm::Value *Declaration;
+ if (FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
+ Declaration = Function::Create(FTy, GlobalValue::ExternalLinkage,
+ GA.getAddressSpace(), GA.getName(), &M);
+
+ } else {
+ Declaration = new GlobalVariable(
+ M, Ty, false, GlobalValue::ExternalLinkage, nullptr, GA.getName());
+ }
+ GA.replaceAllUsesWith(Declaration);
+ delete &GA;
+ }
+ }
-ModulePass *llvm::createGVExtractionPass(std::vector<GlobalValue *> &GVs,
- bool deleteFn, bool keepConstInit) {
- return new GVExtractorPass(GVs, deleteFn, keepConstInit);
+ return PreservedAnalyses::none();
}
diff --git a/llvm/lib/Transforms/IPO/IPO.cpp b/llvm/lib/Transforms/IPO/IPO.cpp
index 8bd92b53a6cef..4163c448dc8f3 100644
--- a/llvm/lib/Transforms/IPO/IPO.cpp
+++ b/llvm/lib/Transforms/IPO/IPO.cpp
@@ -40,7 +40,6 @@ void llvm::initializeIPO(PassRegistry &Registry) {
initializeInferFunctionAttrsLegacyPassPass(Registry);
initializeInternalizeLegacyPassPass(Registry);
initializeLoopExtractorLegacyPassPass(Registry);
- initializeBlockExtractorLegacyPassPass(Registry);
initializeSingleLoopExtractorPass(Registry);
initializeMergeFunctionsLegacyPassPass(Registry);
initializePartialInlinerLegacyPassPass(Registry);
diff --git a/llvm/lib/Transforms/IPO/StripSymbols.cpp b/llvm/lib/Transforms/IPO/StripSymbols.cpp
index 159f0b25ecad6..34f8c4316cca2 100644
--- a/llvm/lib/Transforms/IPO/StripSymbols.cpp
+++ b/llvm/lib/Transforms/IPO/StripSymbols.cpp
@@ -33,6 +33,7 @@
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Transforms/IPO.h"
+#include "llvm/Transforms/IPO/StripSymbols.h"
#include "llvm/Transforms/Utils/Local.h"
using namespace llvm;
diff --git a/llvm/tools/llvm-extract/CMakeLists.txt b/llvm/tools/llvm-extract/CMakeLists.txt
index ce2a78d5d3865..dcd4c89ded629 100644
--- a/llvm/tools/llvm-extract/CMakeLists.txt
+++ b/llvm/tools/llvm-extract/CMakeLists.txt
@@ -3,6 +3,7 @@ set(LLVM_LINK_COMPONENTS
Core
IPO
IRReader
+ Passes
Support
)
diff --git a/llvm/tools/llvm-extract/llvm-extract.cpp b/llvm/tools/llvm-extract/llvm-extract.cpp
index ffd2a390d9c36..a879c203fc374 100644
--- a/llvm/tools/llvm-extract/llvm-extract.cpp
+++ b/llvm/tools/llvm-extract/llvm-extract.cpp
@@ -18,10 +18,10 @@
#include "llvm/IR/IRPrintingPasses.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
-#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Module.h"
+#include "llvm/IRPrinter/IRPrintingPasses.h"
#include "llvm/IRReader/IRReader.h"
-#include "llvm/Pass.h"
+#include "llvm/Passes/PassBuilder.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FileSystem.h"
@@ -31,8 +31,14 @@
#include "llvm/Support/SystemUtils.h"
#include "llvm/Support/ToolOutputFile.h"
#include "llvm/Transforms/IPO.h"
+#include "llvm/Transforms/IPO/BlockExtractor.h"
+#include "llvm/Transforms/IPO/ExtractGV.h"
+#include "llvm/Transforms/IPO/GlobalDCE.h"
+#include "llvm/Transforms/IPO/StripDeadPrototypes.h"
+#include "llvm/Transforms/IPO/StripSymbols.h"
#include <memory>
#include <utility>
+
using namespace llvm;
cl::OptionCategory ExtractCat("llvm-extract Options");
@@ -317,9 +323,22 @@ int main(int argc, char **argv) {
{
std::vector<GlobalValue *> Gvs(GVs.begin(), GVs.end());
- legacy::PassManager Extract;
- Extract.add(createGVExtractionPass(Gvs, DeleteFn, KeepConstInit));
- Extract.run(*M);
+ LoopAnalysisManager LAM;
+ FunctionAnalysisManager FAM;
+ CGSCCAnalysisManager CGAM;
+ ModuleAnalysisManager MAM;
+
+ PassBuilder PB;
+
+ PB.registerModuleAnalyses(MAM);
+ PB.registerCGSCCAnalyses(CGAM);
+ PB.registerFunctionAnalyses(FAM);
+ PB.registerLoopAnalyses(LAM);
+ PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
+
+ ModulePassManager PM;
+ PM.addPass(ExtractGVPass(Gvs, DeleteFn, KeepConstInit));
+ PM.run(*M, MAM);
// Now that we have all the GVs we want, mark the module as fully
// materialized.
@@ -331,9 +350,9 @@ int main(int argc, char **argv) {
// functions.
if (!ExtractBlocks.empty()) {
// Figure out which BasicBlocks we should extract.
- SmallVector<SmallVector<BasicBlock *, 16>, 4> GroupOfBBs;
+ std::vector<std::vector<BasicBlock *>> GroupOfBBs;
for (auto &P : BBMap) {
- SmallVector<BasicBlock *, 16> BBs;
+ std::vector<BasicBlock *> BBs;
for (StringRef BBName : P.second) {
// The function has been materialized, so add its matching basic blocks
// to the block extractor list, or fail if a name is not found.
@@ -351,19 +370,45 @@ int main(int argc, char **argv) {
GroupOfBBs.push_back(BBs);
}
- legacy::PassManager PM;
- PM.add(createBlockExtractorPass(GroupOfBBs, true));
- PM.run(*M);
+ LoopAnalysisManager LAM;
+ FunctionAnalysisManager FAM;
+ CGSCCAnalysisManager CGAM;
+ ModuleAnalysisManager MAM;
+
+ PassBuilder PB;
+
+ PB.registerModuleAnalyses(MAM);
+ PB.registerCGSCCAnalyses(CGAM);
+ PB.registerFunctionAnalyses(FAM);
+ PB.registerLoopAnalyses(LAM);
+ PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
+
+ ModulePassManager PM;
+ PM.addPass(BlockExtractorPass(std::move(GroupOfBBs), true));
+ PM.run(*M, MAM);
}
// In addition to deleting all other functions, we also want to spiff it
// up a little bit. Do this now.
- legacy::PassManager Passes;
+ LoopAnalysisManager LAM;
+ FunctionAnalysisManager FAM;
+ CGSCCAnalysisManager CGAM;
+ ModuleAnalysisManager MAM;
+
+ PassBuilder PB;
+
+ PB.registerModuleAnalyses(MAM);
+ PB.registerCGSCCAnalyses(CGAM);
+ PB.registerFunctionAnalyses(FAM);
+ PB.registerLoopAnalyses(LAM);
+ PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
+
+ ModulePassManager PM;
if (!DeleteFn)
- Passes.add(createGlobalDCEPass()); // Delete unreachable globals
- Passes.add(createStripDeadDebugInfoPass()); // Remove dead debug info
- Passes.add(createStripDeadPrototypesPass()); // Remove dead func decls
+ PM.addPass(GlobalDCEPass());
+ PM.addPass(StripDeadDebugInfoPass());
+ PM.addPass(StripDeadPrototypesPass());
std::error_code EC;
ToolOutputFile Out(OutputFilename, EC, sys::fs::OF_None);
@@ -373,12 +418,11 @@ int main(int argc, char **argv) {
}
if (OutputAssembly)
- Passes.add(
- createPrintModulePass(Out.os(), "", PreserveAssemblyUseListOrder));
+ PM.addPass(PrintModulePass(Out.os(), "", PreserveAssemblyUseListOrder));
else if (Force || !CheckBitcodeOutputToConsole(Out.os()))
- Passes.add(createBitcodeWriterPass(Out.os(), PreserveBitcodeUseListOrder));
+ PM.addPass(BitcodeWriterPass(Out.os(), PreserveBitcodeUseListOrder));
- Passes.run(*M.get());
+ PM.run(*M, MAM);
// Declare success.
Out.keep();
diff --git a/llvm/utils/gn/secondary/llvm/tools/llvm-extract/BUILD.gn b/llvm/utils/gn/secondary/llvm/tools/llvm-extract/BUILD.gn
index b486cf0780dfe..38be9f79c3f13 100644
--- a/llvm/utils/gn/secondary/llvm/tools/llvm-extract/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/tools/llvm-extract/BUILD.gn
@@ -4,6 +4,7 @@ executable("llvm-extract") {
"//llvm/lib/IR",
"//llvm/lib/IRReader",
"//llvm/lib/Support",
+ "//llvm/lib/Passes",
"//llvm/lib/Transforms/IPO",
]
sources = [ "llvm-extract.cpp" ]
More information about the llvm-commits
mailing list