Namely CrossDSOCFI and GlobalSplit.
These are part of the optimization pipeline, of which the legacy pass manager version is deprecated.
Export, ///< Export information to summary.
};
-/// This pass export CFI checks for use by external modules.
-ModulePass *createCrossDSOCFIPass();
-
-/// This pass splits globals into pieces for the benefit of whole-program
-/// devirtualization and control-flow integrity.
-ModulePass *createGlobalSplitPass();
-
} // End llvm namespace
#endif
namespace {
-struct CrossDSOCFI : public ModulePass {
- static char ID;
- CrossDSOCFI() : ModulePass(ID) {
- initializeCrossDSOCFIPass(*PassRegistry::getPassRegistry());
- }
-
+struct CrossDSOCFI {
MDNode *VeryLikelyWeights;
ConstantInt *extractNumericTypeId(MDNode *MD);
void buildCFICheck(Module &M);
- bool runOnModule(Module &M) override;
+ bool runOnModule(Module &M);
};
} // anonymous namespace
-INITIALIZE_PASS_BEGIN(CrossDSOCFI, "cross-dso-cfi", "Cross-DSO CFI", false,
- false)
-INITIALIZE_PASS_END(CrossDSOCFI, "cross-dso-cfi", "Cross-DSO CFI", false, false)
-char CrossDSOCFI::ID = 0;
-
-ModulePass *llvm::createCrossDSOCFIPass() { return new CrossDSOCFI; }
-
/// Extracts a numeric type identifier from an MDNode containing type metadata.
ConstantInt *CrossDSOCFI::extractNumericTypeId(MDNode *MD) {
// This check excludes vtables for classes inside anonymous namespaces.
return Changed;
}
-namespace {
-
-struct GlobalSplit : public ModulePass {
- static char ID;
-
- GlobalSplit() : ModulePass(ID) {
- initializeGlobalSplitPass(*PassRegistry::getPassRegistry());
- }
-
- bool runOnModule(Module &M) override {
- if (skipModule(M))
- return false;
-
- return splitGlobals(M);
- }
-};
-
-} // end anonymous namespace
-
-char GlobalSplit::ID = 0;
-
-INITIALIZE_PASS(GlobalSplit, "globalsplit", "Global splitter", false, false)
-
-ModulePass *llvm::createGlobalSplitPass() {
- return new GlobalSplit;
-}
-
PreservedAnalyses GlobalSplitPass::run(Module &M, ModuleAnalysisManager &AM) {
if (!splitGlobals(M))
return PreservedAnalyses::all();
void llvm::initializeIPO(PassRegistry &Registry) {
initializeAnnotation2MetadataLegacyPass(Registry);
initializeConstantMergeLegacyPassPass(Registry);
- initializeCrossDSOCFIPass(Registry);
initializeDAEPass(Registry);
initializeDAHPass(Registry);
initializeForceFunctionAttrsLegacyPassPass(Registry);
initializeGlobalDCELegacyPassPass(Registry);
initializeGlobalOptLegacyPassPass(Registry);
- initializeGlobalSplitPass(Registry);
initializeAlwaysInlinerLegacyPassPass(Registry);
initializeInferFunctionAttrsLegacyPassPass(Registry);
initializeLoopExtractorLegacyPassPass(Registry);