[flang-commits] [flang] 9b74746 - [Flang] Switch to runCodeGenPipeline abstraction
via flang-commits
flang-commits at lists.llvm.org
Thu Sep 3 10:48:38 PDT 2026
Author: Aiden Grossman
Date: 2026-09-03T10:48:33-07:00
New Revision: 9b7474651733c596ed31afb2c1ce0e4ebb077951
URL: https://github.com/llvm/llvm-project/commit/9b7474651733c596ed31afb2c1ce0e4ebb077951
DIFF: https://github.com/llvm/llvm-project/commit/9b7474651733c596ed31afb2c1ce0e4ebb077951.diff
LOG: [Flang] Switch to runCodeGenPipeline abstraction
This lets flang share some more code with clang around CodeGen pipeline
setup. It also already has a switch for enabling the NewPM and will
default to the NewPM for targets that opt in.
Reviewers: arsenm, valerydmit, jeanPerier, tarunprabhu, clementval, aengelke
Pull Request: https://github.com/llvm/llvm-project/pull/220307
Added:
Modified:
flang/lib/Frontend/FrontendActions.cpp
flang/test/Driver/emit-asm-x86.f90
Removed:
################################################################################
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp
index 1c5850bd0491d..994fa8d46897e 100644
--- a/flang/lib/Frontend/FrontendActions.cpp
+++ b/flang/lib/Frontend/FrontendActions.cpp
@@ -56,6 +56,7 @@
#include "llvm/Linker/Linker.h"
#include "llvm/Object/OffloadBinary.h"
#include "llvm/Passes/PassBuilder.h"
+#include "llvm/Passes/RunCodeGen.h"
#include "llvm/Passes/StandardInstrumentations.h"
#include "llvm/Plugins/PassPlugin.h"
#include "llvm/ProfileData/InstrProfCorrelator.h"
@@ -910,21 +911,6 @@ static void generateMachineCodeOrAssemblyImpl(
if (plugin->invokePreCodeGenCallback(llvmModule, tm, cgft, os))
return;
- // Set-up the pass manager, i.e create an LLVM code-gen pass pipeline.
- // Currently only the legacy pass manager is supported.
- // TODO: Switch to the new PM once it's available in the backend.
- llvm::legacy::PassManager codeGenPasses;
- codeGenPasses.add(
- createTargetTransformInfoWrapperPass(tm.getTargetIRAnalysis()));
-
- llvm::Triple triple(llvmModule.getTargetTriple());
- llvm::TargetLibraryInfoImpl *tlii =
- llvm::driver::createTLII(triple, codeGenOpts.getVecLib());
- codeGenPasses.add(new llvm::TargetLibraryInfoWrapperPass(*tlii));
- codeGenPasses.add(new llvm::RuntimeLibraryInfoWrapper(
- tm.Options.ExceptionModel, tm.Options.EABIVersion,
- tm.Options.MCOptions.ABIName, tm.Options.VecLib));
-
std::unique_ptr<llvm::ToolOutputFile> dwoOS;
if (!codeGenOpts.SplitDwarfOutput.empty()) {
std::error_code ec;
@@ -936,8 +922,9 @@ static void generateMachineCodeOrAssemblyImpl(
return;
}
}
- if (tm.addPassesToEmitFile(codeGenPasses, os, dwoOS ? &dwoOS->os() : nullptr,
- cgft)) {
+ llvm::Error codeGenError =
+ runCodeGenPipeline(tm, llvmModule, os, dwoOS, cgft);
+ if (codeGenError) {
unsigned diagID =
diags.getCustomDiagID(clang::DiagnosticsEngine::Error,
"emission of this file type is not supported");
@@ -945,14 +932,8 @@ static void generateMachineCodeOrAssemblyImpl(
return;
}
- // Run the passes
- codeGenPasses.run(llvmModule);
-
if (dwoOS)
dwoOS->keep();
-
- // Cleanup
- delete tlii;
}
void CodeGenAction::runOptimizationPipeline(llvm::raw_pwrite_stream &os) {
diff --git a/flang/test/Driver/emit-asm-x86.f90 b/flang/test/Driver/emit-asm-x86.f90
index 124289bbb27d7..1f88ae0863ca8 100644
--- a/flang/test/Driver/emit-asm-x86.f90
+++ b/flang/test/Driver/emit-asm-x86.f90
@@ -3,6 +3,7 @@
! REQUIRES: x86-registered-target
! RUN: %flang_fc1 -S -triple x86_64-unknown-linux-gnu %s -o - | FileCheck %s
+! RUN: %flang_fc1 -S -triple x86_64-unknown-linux-gnu %s -o - -mllvm -force-new-pm-codegen=true | FileCheck %s
! RUN: %flang -S -target x86_64-unknown-linux-gnu %s -o - | FileCheck %s
! CHECK-LABEL: _QQmain:
More information about the flang-commits
mailing list