https://github.com/vikramRH updated https://github.com/llvm/llvm-project/pull/210248
>From 4af2be73ab608e1c4523934ffcf3da56b5bd042f Mon Sep 17 00:00:00 2001 From: vikhegde <[email protected]> Date: Thu, 16 Jul 2026 16:12:34 +0530 Subject: [PATCH] [Clang][CodeGen] Improve support for NPM codegen --- clang/lib/CodeGen/BackendUtil.cpp | 37 ++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 068b1b4c262c8..7fbac4a09492d 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1312,6 +1312,22 @@ void EmitAssemblyHelper::RunCodegenPipelineNewPM( TargetMachine *TMPointer = TM.get(); PassBuilder PB(TMPointer, PTOptions, std::nullopt, &PIC, CI.getVirtualFileSystemPtr()); + + StandardInstrumentations SI(TheModule->getContext(), + CodeGenOpts.DebugPassManager, + CodeGenOpts.VerifyEach); + SI.registerCallbacks(PIC, &MAM); + + TargetLibraryInfoImpl TLII(TheModule->getTargetTriple()); + FAM.registerPass([&] { return TargetLibraryAnalysis(TLII); }); + MAM.registerPass([&] { return MachineModuleAnalysis(MMI); }); + MAM.registerPass([&] { + const llvm::TargetOptions &Options = TM->Options; + return RuntimeLibraryAnalysis(TargetTriple, Options.ExceptionModel, + Options.FloatABIType, Options.EABIVersion, + Options.MCOptions.ABIName, Options.VecLib); + }); + PB.registerModuleAnalyses(MAM); PB.registerCGSCCAnalyses(CGAM); PB.registerFunctionAnalyses(FAM); @@ -1319,17 +1335,26 @@ void EmitAssemblyHelper::RunCodegenPipelineNewPM( PB.registerMachineFunctionAnalyses(MFAM); PB.crossRegisterProxies(LAM, FAM, CGAM, MAM, &MFAM); - MAM.registerPass([&] { return MachineModuleAnalysis(MMI); }); - - Error BuildPipelineError = - TM->buildCodeGenPipeline(MPM, MAM, *OS, DwoOS ? &DwoOS->os() : nullptr, - CGFT, Opt, MMI.getContext(), &PIC); - if (BuildPipelineError) { + if (Error BuildPipelineError = TM->buildCodeGenPipeline( + MPM, MAM, *OS, DwoOS ? &DwoOS->os() : nullptr, CGFT, Opt, + MMI.getContext(), &PIC)) { Diags.Report(diag::err_fe_unable_to_interface_with_target); return; } + if (PrintPipelinePasses) { + std::string PipelineStr; + raw_string_ostream OutS(PipelineStr); + MPM.printPipeline(OutS, [&PIC](StringRef ClassName) { + auto PassName = PIC.getPassNameForClassName(ClassName); + return PassName.empty() ? ClassName : PassName; + }); + outs() << PipelineStr << '\n'; + return; + } + TimeCodegenPasses([&] { MPM.run(*TheModule, MAM); }); + return; } void EmitAssemblyHelper::TimeCodegenPasses( _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
