diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -1650,6 +1650,11 @@ // Convert @llvm.global.annotations to !annotation metadata. MPM.addPass(Annotation2MetadataPass()); + // Create a function that performs CFI checks for cross-DSO calls with targets + // in the current module. (Note: Add this passs irrespective of the + // optimization level). + MPM.addPass(CrossDSOCFIPass()); + if (Level == OptimizationLevel::O0) { // The WPD and LowerTypeTest passes need to run at -O0 to lower type // metadata and intrinsics. @@ -1868,10 +1873,6 @@ MainFPM.addPass(JumpThreadingPass(/*InsertFreezeWhenUnfoldingSelect*/ true)); MPM.addPass(createModuleToFunctionPassAdaptor(std::move(MainFPM))); - // Create a function that performs CFI checks for cross-DSO calls with - // targets in the current module. - MPM.addPass(CrossDSOCFIPass()); - // Lower type metadata and the type.test intrinsic. This pass supports // clang's control flow integrity mechanisms (-fsanitize=cfi*) and needs // to be run at link time if CFI is enabled. This pass does nothing if diff --git a/llvm/test/Other/new-pm-O0-defaults.ll b/llvm/test/Other/new-pm-O0-defaults.ll --- a/llvm/test/Other/new-pm-O0-defaults.ll +++ b/llvm/test/Other/new-pm-O0-defaults.ll @@ -38,6 +38,7 @@ ; CHECK-THINLTO-NEXT: Running pass: EliminateAvailableExternallyPass ; CHECK-THINLTO-NEXT: Running pass: GlobalDCEPass ; CHECK-LTO: Running pass: Annotation2MetadataPass +; CHECK-LTO: Running pass: CrossDSOCFIPass on [module] ; CHECK-LTO-NEXT: Running pass: WholeProgramDevirtPass ; CHECK-LTO-NEXT: Running analysis: InnerAnalysisManagerProxy ; CHECK-LTO-NEXT: Running pass: LowerTypeTestsPass diff --git a/llvm/test/Other/new-pm-lto-defaults.ll b/llvm/test/Other/new-pm-lto-defaults.ll --- a/llvm/test/Other/new-pm-lto-defaults.ll +++ b/llvm/test/Other/new-pm-lto-defaults.ll @@ -26,6 +26,7 @@ ; RUN: --check-prefix=CHECK-O3 --check-prefix=CHECK-EP-Peephole ; CHECK-O: Running pass: Annotation2Metadata +; CHECK-O-NEXT: Running pass: CrossDSOCFIPass ; CHECK-O-NEXT: Running pass: GlobalDCEPass ; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass ; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass @@ -123,7 +124,6 @@ ; CHECK-O23SZ-NEXT: Running pass: InstCombinePass on foo ; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass on foo ; CHECK-O23SZ-NEXT: Running pass: JumpThreadingPass on foo -; CHECK-O23SZ-NEXT: Running pass: CrossDSOCFIPass ; CHECK-O23SZ-NEXT: Running pass: LowerTypeTestsPass ; CHECK-O-NEXT: Running pass: LowerTypeTestsPass ; CHECK-O23SZ-NEXT: Running pass: SimplifyCFGPass