[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