Index: llvm/include/llvm/Transforms/IPO.h =================================================================== --- llvm/include/llvm/Transforms/IPO.h +++ llvm/include/llvm/Transforms/IPO.h @@ -215,11 +215,11 @@ /// manager. ModulePass *createBarrierNoopPass(); -/// What to do with the summary when running the LowerTypeTests pass. -enum class LowerTypeTestsSummaryAction { +/// What to do with the summary when running passes that operate on it. +enum class PassSummaryAction { None, ///< Do nothing. - Import, ///< Import typeid resolutions from summary and globals. - Export, ///< Export typeid resolutions to summary and globals. + Import, ///< Import information from summary. + Export, ///< Export information to summary. }; /// \brief This pass lowers type metadata and the llvm.type.test intrinsic to @@ -227,7 +227,7 @@ /// \param Action What to do with the summary passed as Index. /// \param Index The summary to use for importing or exporting, this can be null /// when Action is None. -ModulePass *createLowerTypeTestsPass(LowerTypeTestsSummaryAction Action, +ModulePass *createLowerTypeTestsPass(PassSummaryAction Action, ModuleSummaryIndex *Index); /// \brief This pass export CFI checks for use by external modules. Index: llvm/lib/Passes/PassBuilder.cpp =================================================================== --- llvm/lib/Passes/PassBuilder.cpp +++ llvm/lib/Passes/PassBuilder.cpp @@ -718,8 +718,8 @@ // CFI is disabled. // Enable once we add support for the summary in the new PM. #if 0 - MPM.addPass(LowerTypeTestsPass(Summary ? LowerTypeTestsSummaryAction::Export : - LowerTypeTestsSummaryAction::None, + MPM.addPass(LowerTypeTestsPass(Summary ? PassSummaryAction::Export : + PassSummaryAction::None, Summary)); #endif Index: llvm/lib/Transforms/IPO/LowerTypeTests.cpp =================================================================== --- llvm/lib/Transforms/IPO/LowerTypeTests.cpp +++ llvm/lib/Transforms/IPO/LowerTypeTests.cpp @@ -42,8 +42,6 @@ using namespace llvm; using namespace lowertypetests; -using SummaryAction = LowerTypeTestsSummaryAction; - #define DEBUG_TYPE "lowertypetests" STATISTIC(ByteArraySizeBits, "Byte array size in bits"); @@ -57,13 +55,13 @@ cl::desc("Try to avoid reuse of byte array addresses using aliases"), cl::Hidden, cl::init(true)); -static cl::opt ClSummaryAction( +static cl::opt ClSummaryAction( "lowertypetests-summary-action", cl::desc("What to do with the summary when running this pass"), - cl::values(clEnumValN(SummaryAction::None, "none", "Do nothing"), - clEnumValN(SummaryAction::Import, "import", + cl::values(clEnumValN(PassSummaryAction::None, "none", "Do nothing"), + clEnumValN(PassSummaryAction::Import, "import", "Import typeid resolutions from summary and globals"), - clEnumValN(SummaryAction::Export, "export", + clEnumValN(PassSummaryAction::Export, "export", "Export typeid resolutions to summary and globals")), cl::Hidden); @@ -234,7 +232,7 @@ class LowerTypeTestsModule { Module &M; - SummaryAction Action; + PassSummaryAction Action; ModuleSummaryIndex *Summary; bool LinkerSubsectionsViaSymbols; @@ -334,7 +332,7 @@ void createJumpTable(Function *F, ArrayRef Functions); public: - LowerTypeTestsModule(Module &M, SummaryAction Action, + LowerTypeTestsModule(Module &M, PassSummaryAction Action, ModuleSummaryIndex *Summary); bool lower(); @@ -348,14 +346,14 @@ bool UseCommandLine = false; - SummaryAction Action; + PassSummaryAction Action; ModuleSummaryIndex *Summary; LowerTypeTests() : ModulePass(ID), UseCommandLine(true) { initializeLowerTypeTestsPass(*PassRegistry::getPassRegistry()); } - LowerTypeTests(SummaryAction Action, ModuleSummaryIndex *Summary) + LowerTypeTests(PassSummaryAction Action, ModuleSummaryIndex *Summary) : ModulePass(ID), Action(Action), Summary(Summary) { initializeLowerTypeTestsPass(*PassRegistry::getPassRegistry()); } @@ -375,7 +373,7 @@ false) char LowerTypeTests::ID = 0; -ModulePass *llvm::createLowerTypeTestsPass(SummaryAction Action, +ModulePass *llvm::createLowerTypeTestsPass(PassSummaryAction Action, ModuleSummaryIndex *Summary) { return new LowerTypeTests(Action, Summary); } @@ -502,7 +500,7 @@ } else { Constant *ByteArray = TIL.TheByteArray; if (!LinkerSubsectionsViaSymbols && AvoidReuse && - Action != SummaryAction::Import) { + Action != PassSummaryAction::Import) { // Each use of the byte array uses a different alias. This makes the // backend less likely to reuse previously computed byte array addresses, // improving the security of the CFI mechanism based on this pass. @@ -1292,7 +1290,7 @@ } /// Lower all type tests in this module. -LowerTypeTestsModule::LowerTypeTestsModule(Module &M, SummaryAction Action, +LowerTypeTestsModule::LowerTypeTestsModule(Module &M, PassSummaryAction Action, ModuleSummaryIndex *Summary) : M(M), Action(Action), Summary(Summary) { Triple TargetTriple(M.getTargetTriple()); @@ -1338,10 +1336,10 @@ Function *TypeTestFunc = M.getFunction(Intrinsic::getName(Intrinsic::type_test)); if ((!TypeTestFunc || TypeTestFunc->use_empty()) && - Action != SummaryAction::Export) + Action != PassSummaryAction::Export) return false; - if (Action == SummaryAction::Import) { + if (Action == PassSummaryAction::Import) { for (auto UI = TypeTestFunc->use_begin(), UE = TypeTestFunc->use_end(); UI != UE;) { auto *CI = cast((*UI++).getUser()); @@ -1422,7 +1420,7 @@ } } - if (Action == SummaryAction::Export) { + if (Action == PassSummaryAction::Export) { DenseMap> MetadataByGUID; for (auto &P : TypeIdInfo) { if (auto *TypeId = dyn_cast(P.first)) @@ -1502,7 +1500,8 @@ PreservedAnalyses LowerTypeTestsPass::run(Module &M, ModuleAnalysisManager &AM) { bool Changed = - LowerTypeTestsModule(M, SummaryAction::None, /*Summary=*/nullptr).lower(); + LowerTypeTestsModule(M, PassSummaryAction::None, /*Summary=*/nullptr) + .lower(); if (!Changed) return PreservedAnalyses::all(); return PreservedAnalyses::none(); Index: llvm/lib/Transforms/IPO/PassManagerBuilder.cpp =================================================================== --- llvm/lib/Transforms/IPO/PassManagerBuilder.cpp +++ llvm/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -830,8 +830,7 @@ PM.add(createVerifierPass()); if (Summary) - PM.add( - createLowerTypeTestsPass(LowerTypeTestsSummaryAction::Import, Summary)); + PM.add(createLowerTypeTestsPass(PassSummaryAction::Import, Summary)); populateModulePassManager(PM); @@ -857,9 +856,8 @@ // Lower type metadata and the type.test intrinsic. This pass supports Clang's // control flow integrity mechanisms (-fsanitize=cfi*) and needs to run at // link time if CFI is enabled. The pass does nothing if CFI is disabled. - PM.add(createLowerTypeTestsPass(Summary ? LowerTypeTestsSummaryAction::Export - : LowerTypeTestsSummaryAction::None, - Summary)); + PM.add(createLowerTypeTestsPass( + Summary ? PassSummaryAction::Export : PassSummaryAction::None, Summary)); if (OptLevel != 0) addLateLTOOptimizationPasses(PM);