Author: Aiden Grossman Date: 2026-10-24T22:25:45Z New Revision: 25385baacc635c7159644f612dcee0cd3ff88451
URL: https://github.com/llvm/llvm-project/commit/25385baacc635c7159644f612dcee0cd3ff88451 DIFF: https://github.com/llvm/llvm-project/commit/25385baacc635c7159644f612dcee0cd3ff88451.diff LOG: [Passes] Make runCodeGenPipeline take raw_pwrite_stream for DwoOS (#235339) The std::unique_ptr reference was mostly cargo-culting from clang/flang that does not necessarily make sense for other frontends (case study right now is rustc). Change to a raw_pwrite_stream given that makes more sense internally and gives frontends more flexibility. Added: Modified: clang/lib/CodeGen/BackendUtil.cpp flang/lib/Frontend/FrontendActions.cpp llvm/include/llvm/Passes/RunCodeGen.h llvm/lib/Passes/RunCodeGen.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 8331ad64df3dff..fe1454026f569d 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1282,7 +1282,8 @@ void EmitAssemblyHelper::RunCodegenPipeline( TimeCodegenPasses([&]() { Error CodeGenError = runCodeGenPipeline( - *TM, *TheModule, *OS, DwoOS, CGFT, !CodeGenOpts.VerifyModule, + *TM, *TheModule, *OS, DwoOS ? &DwoOS->os() : nullptr, CGFT, + !CodeGenOpts.VerifyModule, /*DisableSimplifyLibCalls=*/false, CI.getVirtualFileSystemPtr()); if (CodeGenError) Diags.Report(diag::err_fe_unable_to_interface_with_target); diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp index 8ebcafa9426aa1..9191f22b7024e8 100644 --- a/flang/lib/Frontend/FrontendActions.cpp +++ b/flang/lib/Frontend/FrontendActions.cpp @@ -937,8 +937,8 @@ static void generateMachineCodeOrAssemblyImpl( return; } } - llvm::Error codeGenError = - runCodeGenPipeline(tm, llvmModule, os, dwoOS, cgft); + llvm::Error codeGenError = runCodeGenPipeline( + tm, llvmModule, os, dwoOS ? &dwoOS->os() : nullptr, cgft); if (codeGenError) { unsigned diagID = diags.getCustomDiagID(clang::DiagnosticsEngine::Error, diff --git a/llvm/include/llvm/Passes/RunCodeGen.h b/llvm/include/llvm/Passes/RunCodeGen.h index 39f06746817c8f..87db2562b7acae 100644 --- a/llvm/include/llvm/Passes/RunCodeGen.h +++ b/llvm/include/llvm/Passes/RunCodeGen.h @@ -10,16 +10,16 @@ #define LLVM_PASSES_RUN_CODEGEN_H #include "llvm/IR/Module.h" -#include "llvm/Support/ToolOutputFile.h" #include "llvm/Support/VirtualFileSystem.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetMachine.h" namespace llvm { LLVM_ABI Error runCodeGenPipeline( TargetMachine &TM, Module &M, raw_pwrite_stream &OS, - std::unique_ptr<ToolOutputFile> &DwoOS, CodeGenFileType CGFT, - bool DisableVerify = true, bool DisableSimplifyLibCalls = false, + raw_pwrite_stream *DwoOS, CodeGenFileType CGFT, bool DisableVerify = true, + bool DisableSimplifyLibCalls = false, IntrusiveRefCntPtr<vfs::FileSystem> VFS = vfs::getRealFileSystem()); } // namespace llvm diff --git a/llvm/lib/Passes/RunCodeGen.cpp b/llvm/lib/Passes/RunCodeGen.cpp index 7dd4a02c778ca6..67aecdb6f5494c 100644 --- a/llvm/lib/Passes/RunCodeGen.cpp +++ b/llvm/lib/Passes/RunCodeGen.cpp @@ -20,7 +20,6 @@ #include "llvm/Passes/PassBuilder.h" #include "llvm/Support/CodeGen.h" #include "llvm/Support/Error.h" -#include "llvm/Support/ToolOutputFile.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Target/CGPassBuilderOption.h" @@ -28,7 +27,7 @@ using namespace llvm; static Error runCodeGenPipelineLegacy(TargetMachine &TM, Module &M, raw_pwrite_stream &OS, - std::unique_ptr<ToolOutputFile> &DwoOS, + raw_pwrite_stream *DwoOS, CodeGenFileType CGFT, bool DisableVerify, bool DisableSimplifyLibCalls) { legacy::PassManager CodeGenPasses; @@ -44,8 +43,7 @@ static Error runCodeGenPipelineLegacy(TargetMachine &TM, Module &M, CodeGenPasses.add( new RuntimeLibraryInfoWrapper(Options.MCOptions.ABIName, Options.VecLib)); - if (TM.addPassesToEmitFile(CodeGenPasses, OS, DwoOS ? &DwoOS->os() : nullptr, - CGFT, DisableVerify)) + if (TM.addPassesToEmitFile(CodeGenPasses, OS, DwoOS, CGFT, DisableVerify)) return createStringError("Failed to construct CodeGen pipeline"); CodeGenPasses.run(M); @@ -54,7 +52,7 @@ static Error runCodeGenPipelineLegacy(TargetMachine &TM, Module &M, static Error runCodeGenPipelineNewPM(TargetMachine &TM, Module &M, raw_pwrite_stream &OS, - std::unique_ptr<ToolOutputFile> &DwoOS, + raw_pwrite_stream *DwoOS, CodeGenFileType CGFT, bool DisableVerify, IntrusiveRefCntPtr<vfs::FileSystem> VFS) { ModulePassManager MPM; @@ -79,9 +77,8 @@ static Error runCodeGenPipelineNewPM(TargetMachine &TM, Module &M, MAM.registerPass([&] { return MachineModuleAnalysis(MMI); }); - Error BuildPipelineError = - TM.buildCodeGenPipeline(MPM, MAM, OS, DwoOS ? &DwoOS->os() : nullptr, - CGFT, Opt, MMI.getContext(), &PIC); + Error BuildPipelineError = TM.buildCodeGenPipeline( + MPM, MAM, OS, DwoOS, CGFT, Opt, MMI.getContext(), &PIC); if (BuildPipelineError) return BuildPipelineError; @@ -90,8 +87,7 @@ static Error runCodeGenPipelineNewPM(TargetMachine &TM, Module &M, } Error llvm::runCodeGenPipeline(TargetMachine &TM, Module &M, - raw_pwrite_stream &OS, - std::unique_ptr<ToolOutputFile> &DwoOS, + raw_pwrite_stream &OS, raw_pwrite_stream *DwoOS, CodeGenFileType CGFT, bool DisableVerify, bool DisableSimplifyLibCalls, IntrusiveRefCntPtr<vfs::FileSystem> VFS) { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
