[clang] [CodeGen] Implement fallback path for backend NPM run (PR #210248)
Vikram Hegde via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 27 02:11:20 PDT 2026
https://github.com/vikramRH updated https://github.com/llvm/llvm-project/pull/210248
>From 4af2be73ab608e1c4523934ffcf3da56b5bd042f Mon Sep 17 00:00:00 2001
From: vikhegde <vikram.hegde at amd.com>
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(
More information about the cfe-commits
mailing list