https://github.com/boomanaiden154 updated https://github.com/llvm/llvm-project/pull/214574
>From b6bab3855cb359013032f0c7419ec78832f7c614 Mon Sep 17 00:00:00 2001 From: Aiden Grossman <[email protected]> Date: Thu, 6 Aug 2026 20:42:46 +0000 Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20ch?= =?UTF-8?q?anges=20to=20main=20this=20commit=20is=20based=20on?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.7 [skip ci] --- clang/include/clang/Basic/CodeGenOptions.def | 3 ++- clang/include/clang/Basic/CodeGenOptions.h | 6 ++++++ clang/include/clang/Options/Options.td | 8 ++++++++ clang/lib/CodeGen/BackendUtil.cpp | 6 +++++- clang/test/CodeGen/X86/newpm.c | 2 +- llvm/include/llvm/Target/TargetMachine.h | 4 ++++ llvm/lib/Target/MSP430/MSP430TargetMachine.h | 2 ++ llvm/tools/llc/llc.cpp | 10 +++++++++- 8 files changed, 37 insertions(+), 4 deletions(-) diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index 7e54e75752f39..bf3e61f2f036f 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -351,7 +351,8 @@ CODEGENOPT(TimeTrace , 1, 0, Benign) ///< Set when -ftime-trace is enabl VALUE_CODEGENOPT(TimeTraceGranularity, 32, 500, Benign) ///< Minimum time granularity (in microseconds), ///< traced by time profiler CODEGENOPT(InterchangeLoops , 1, 0, Benign) ///< Run loop-interchange. -CODEGENOPT(EnableNewPMCodeGen, 1, 0, Benign) ///< Use NewPM for the CodeGen pipeline. +ENUM_CODEGENOPT(EnableNewPMCodeGen, NewPMEnablementLevel, 2, + NewPMEnablementLevel::Auto, Benign) ///< Use NewPM for the CodeGen pipeline. CODEGENOPT(FuseLoops , 1, 0, Benign) ///< Run loop-fusion. CODEGENOPT(UnrollLoops , 1, 0, Benign) ///< Control whether loops are unrolled. CODEGENOPT(RerollLoops , 1, 0, Benign) ///< Control whether loops are rerolled. diff --git a/clang/include/clang/Basic/CodeGenOptions.h b/clang/include/clang/Basic/CodeGenOptions.h index c12434135a198..6e9bde32e0655 100644 --- a/clang/include/clang/Basic/CodeGenOptions.h +++ b/clang/include/clang/Basic/CodeGenOptions.h @@ -240,6 +240,12 @@ class CodeGenOptions : public CodeGenOptionsBase { NonStrictDefault = NonZero }; + enum class NewPMEnablementLevel { + Auto, // Use the target dependent default. + ForceEnable, // Always enable regardless of the target default. + ForceDisable, // Always disable regardless of the target default. + }; + /// The code model to use (-mcmodel). std::string CodeModel; diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index cf66ee3e52f2d..3c6a9560d4509 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -4788,6 +4788,14 @@ defm enable_new_pm_codegen "Use the NewPM for the Codegen Pipeline">>, DocBrief< [{When enabled, use the NewPM to drive the Codegen pipeline.}]>; +def enable_new_pm_codegen : Joined<["-"], "fenable-new-pm-codegen=">, + Group<f_Group>, + Visibility<[CC1Option]>, + HelpText<"When enabled, use the NewPM to drive the CodeGen pipeline.">, + Values<"auto,force-on,force-disable">, + NormalizedValuesScope<"CodeGenOptions::NewPMEnablementLevel">, + NormalizedValues<["Auto","ForceEnable","ForceDisable"]>, + MarshallingInfoEnum<CodeGenOpts<"EnableNewPMCodeGen">, "Auto">; defm experimental_loop_fusion : OptInCC1FFlag<"experimental-loop-fusion", "Enable", "Disable", "Enable the loop fusion pass", diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 068b1b4c262c8..7910ccbbf854c 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1251,7 +1251,11 @@ void EmitAssemblyHelper::RunCodegenPipeline( return; } - if (CodeGenOpts.EnableNewPMCodeGen) { + if (CodeGenOpts.getEnableNewPMCodeGen() == + CodeGenOptions::NewPMEnablementLevel::ForceEnable || + (CodeGenOpts.getEnableNewPMCodeGen() == + CodeGenOptions::NewPMEnablementLevel::Auto && + TM->shouldDefaultToNewPM())) { RunCodegenPipelineNewPM(Action, OS, DwoOS, CGFT); } else { RunCodegenPipelineLegacy(Action, OS, DwoOS, CGFT); diff --git a/clang/test/CodeGen/X86/newpm.c b/clang/test/CodeGen/X86/newpm.c index dd8d03d910bad..6dec8a2e8e24a 100644 --- a/clang/test/CodeGen/X86/newpm.c +++ b/clang/test/CodeGen/X86/newpm.c @@ -1,5 +1,5 @@ // REQUIRES: x86-registered-target -// RUN: %clang_cc1 -triple=x86_64-unkown-linux-gnu -fenable-new-pm-codegen -S -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple=x86_64-unkown-linux-gnu -fenable-new-pm-codegen=force-on -S -o - %s | FileCheck %s int foo() { // CHECK-LABEL: foo diff --git a/llvm/include/llvm/Target/TargetMachine.h b/llvm/include/llvm/Target/TargetMachine.h index 03c82913c94fc..24d45b7956cab 100644 --- a/llvm/include/llvm/Target/TargetMachine.h +++ b/llvm/include/llvm/Target/TargetMachine.h @@ -502,6 +502,10 @@ class LLVM_ABI TargetMachine { inconvertibleErrorCode()); } + /// Returns true if frontends should default to using the NewPM for this + /// specific target. + virtual bool shouldDefaultToNewPM() const { return false; } + /// Returns true if the target is expected to pass all machine verifier /// checks. This is a stopgap measure to fix targets one by one. We will /// remove this at some point and always enable the verifier when diff --git a/llvm/lib/Target/MSP430/MSP430TargetMachine.h b/llvm/lib/Target/MSP430/MSP430TargetMachine.h index 1897e64fcdb56..b27ad4ffab741 100644 --- a/llvm/lib/Target/MSP430/MSP430TargetMachine.h +++ b/llvm/lib/Target/MSP430/MSP430TargetMachine.h @@ -55,6 +55,8 @@ class MSP430TargetMachine : public CodeGenTargetMachineImpl { CodeGenFileType FileType, const CGPassBuilderOption &Opt, MCContext &Ctx, PassInstrumentationCallbacks *PIC) override; + + bool shouldDefaultToNewPM() const override { return true; } }; // MSP430TargetMachine. } // end namespace llvm diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp index dcd54c18401d0..55f91a375fc8a 100644 --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -749,7 +749,15 @@ static int compileModule(char **argv, SmallVectorImpl<PassPlugin> &PluginList, else if (VerifyEach) VK = VerifierKind::EachPass; - if (EnableNewPassManager || !PassPipeline.empty()) { + // Use the NewPM if the user specifies -passes (NewPM specific), specifically + // requests the NewPM with -enable-new-pm, or the target defaults to the + // NewPM, the user has not explicitly disabled the NewPM with + // -enable-new-pm=false, and the user has not specified -run-pass. + if (!PassPipeline.empty() || + (EnableNewPassManager.getNumOccurrences() > 0 && EnableNewPassManager) || + (Target->shouldDefaultToNewPM() && + !(EnableNewPassManager.getNumOccurrences() && !EnableNewPassManager) && + getRunPassNames().empty())) { return compileModuleWithNewPM(argv[0], std::move(M), std::move(MIR), std::move(Target), std::move(Out), std::move(DwoOut), Context, TLII, VK, >From 6e827e93977b15ec87ebc1d21e3ad3ec80ef4c27 Mon Sep 17 00:00:00 2001 From: Aiden Grossman <[email protected]> Date: Fri, 7 Aug 2026 05:50:01 +0000 Subject: [PATCH 2/2] formatting Created using spr 1.3.7 --- llvm/lib/Target/Lanai/LanaiTargetMachine.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Target/Lanai/LanaiTargetMachine.h b/llvm/lib/Target/Lanai/LanaiTargetMachine.h index fa3cb937f906d..22313a2ed7dd1 100644 --- a/llvm/lib/Target/Lanai/LanaiTargetMachine.h +++ b/llvm/lib/Target/Lanai/LanaiTargetMachine.h @@ -59,7 +59,7 @@ class LanaiTargetMachine : public CodeGenTargetMachineImpl { CodeGenFileType FileType, const CGPassBuilderOption &Opt, MCContext &Ctx, PassInstrumentationCallbacks *PIC) override; - + bool shouldDefaultToNewPM() const override { return true; } }; } // namespace llvm _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
