Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CodeGen] Add code new pm code stubs for all backends #78552

Closed
wants to merge 2 commits into from

Conversation

paperchalice
Copy link
Contributor

Just add dummy methods here, so llc will not throw error when building codegen pipeline.

@llvmbot
Copy link
Collaborator

llvmbot commented Jan 18, 2024

@llvm/pr-subscribers-backend-arm
@llvm/pr-subscribers-backend-aarch64
@llvm/pr-subscribers-backend-msp430
@llvm/pr-subscribers-backend-webassembly
@llvm/pr-subscribers-backend-directx
@llvm/pr-subscribers-backend-m68k
@llvm/pr-subscribers-backend-spir-v
@llvm/pr-subscribers-backend-risc-v

@llvm/pr-subscribers-backend-loongarch

Author: None (paperchalice)

Changes

Just add dummy methods here, so llc will not throw error when building codegen pipeline.


Patch is 96.06 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/78552.diff

76 Files Affected:

  • (modified) llvm/include/llvm/Target/TargetMachine.h (+1-4)
  • (added) llvm/lib/Target/AArch64/AArch64CodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/AArch64/AArch64TargetMachine.h (+6)
  • (modified) llvm/lib/Target/AArch64/CMakeLists.txt (+2)
  • (added) llvm/lib/Target/AMDGPU/AMDGPUCodeGenPassBuilder.cpp (+56)
  • (modified) llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h (+6)
  • (modified) llvm/lib/Target/AMDGPU/CMakeLists.txt (+2)
  • (added) llvm/lib/Target/ARC/ARCCodeGenPassBuilder.cpp (+56)
  • (modified) llvm/lib/Target/ARC/ARCTargetMachine.h (+6)
  • (modified) llvm/lib/Target/ARC/CMakeLists.txt (+3)
  • (added) llvm/lib/Target/ARM/ARMCodeGenPassBuilder.cpp (+56)
  • (modified) llvm/lib/Target/ARM/ARMTargetMachine.h (+6)
  • (modified) llvm/lib/Target/ARM/CMakeLists.txt (+2)
  • (added) llvm/lib/Target/AVR/AVRCodeGenPassBuilder.cpp (+56)
  • (modified) llvm/lib/Target/AVR/AVRTargetMachine.h (+6)
  • (modified) llvm/lib/Target/AVR/CMakeLists.txt (+5)
  • (added) llvm/lib/Target/BPF/BPFCodeGenPassBuilder.cpp (+56)
  • (modified) llvm/lib/Target/BPF/BPFTargetMachine.h (+6)
  • (modified) llvm/lib/Target/BPF/CMakeLists.txt (+2)
  • (modified) llvm/lib/Target/CSKY/CMakeLists.txt (+4)
  • (added) llvm/lib/Target/CSKY/CSKYCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/CSKY/CSKYTargetMachine.h (+6)
  • (modified) llvm/lib/Target/DirectX/CMakeLists.txt (+3)
  • (added) llvm/lib/Target/DirectX/DirectXCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/DirectX/DirectXTargetMachine.h (+6)
  • (modified) llvm/lib/Target/Hexagon/CMakeLists.txt (+2)
  • (added) llvm/lib/Target/Hexagon/HexagonCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/Hexagon/HexagonTargetMachine.h (+6)
  • (modified) llvm/lib/Target/Lanai/CMakeLists.txt (+3)
  • (added) llvm/lib/Target/Lanai/LanaiCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/Lanai/LanaiTargetMachine.h (+6)
  • (modified) llvm/lib/Target/LoongArch/CMakeLists.txt (+3)
  • (added) llvm/lib/Target/LoongArch/LoongArchCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/LoongArch/LoongArchTargetMachine.h (+6)
  • (modified) llvm/lib/Target/M68k/CMakeLists.txt (+4)
  • (added) llvm/lib/Target/M68k/M68kCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/M68k/M68kTargetMachine.h (+6)
  • (modified) llvm/lib/Target/MSP430/CMakeLists.txt (+5)
  • (added) llvm/lib/Target/MSP430/MSP430CodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/MSP430/MSP430TargetMachine.h (+6)
  • (modified) llvm/lib/Target/Mips/CMakeLists.txt (+4)
  • (added) llvm/lib/Target/Mips/MipsCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/Mips/MipsTargetMachine.h (+6)
  • (modified) llvm/lib/Target/NVPTX/CMakeLists.txt (+2)
  • (added) llvm/lib/Target/NVPTX/NVPTXCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/NVPTX/NVPTXTargetMachine.h (+6)
  • (modified) llvm/lib/Target/PowerPC/CMakeLists.txt (+2)
  • (added) llvm/lib/Target/PowerPC/PPCCodeGenPassBuilder.cpp (+56)
  • (modified) llvm/lib/Target/PowerPC/PPCTargetMachine.h (+6)
  • (modified) llvm/lib/Target/RISCV/CMakeLists.txt (+2)
  • (added) llvm/lib/Target/RISCV/RISCVCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/RISCV/RISCVTargetMachine.h (+6)
  • (modified) llvm/lib/Target/SPIRV/CMakeLists.txt (+3)
  • (added) llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/SPIRV/SPIRVTargetMachine.h (+6)
  • (modified) llvm/lib/Target/Sparc/CMakeLists.txt (+5)
  • (added) llvm/lib/Target/Sparc/SparcCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/Sparc/SparcTargetMachine.h (+6)
  • (modified) llvm/lib/Target/SystemZ/CMakeLists.txt (+3)
  • (added) llvm/lib/Target/SystemZ/SystemZCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/SystemZ/SystemZTargetMachine.h (+6)
  • (modified) llvm/lib/Target/VE/CMakeLists.txt (+4)
  • (added) llvm/lib/Target/VE/VECodeGenPassBuilder.cpp (+55)
  • (modified) llvm/lib/Target/VE/VETargetMachine.h (+6)
  • (modified) llvm/lib/Target/WebAssembly/CMakeLists.txt (+2)
  • (added) llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.h (+6)
  • (modified) llvm/lib/Target/X86/CMakeLists.txt (+3)
  • (added) llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp (+56)
  • (modified) llvm/lib/Target/X86/X86TargetMachine.h (+6)
  • (modified) llvm/lib/Target/XCore/CMakeLists.txt (+3)
  • (added) llvm/lib/Target/XCore/XCoreCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/XCore/XCoreTargetMachine.h (+6)
  • (modified) llvm/lib/Target/Xtensa/CMakeLists.txt (+5)
  • (added) llvm/lib/Target/Xtensa/XtensaCodeGenPassBuilder.cpp (+57)
  • (modified) llvm/lib/Target/Xtensa/XtensaTargetMachine.h (+6)
diff --git a/llvm/include/llvm/Target/TargetMachine.h b/llvm/include/llvm/Target/TargetMachine.h
index 1fe47dec70b1630..0d4444b484d690b 100644
--- a/llvm/include/llvm/Target/TargetMachine.h
+++ b/llvm/include/llvm/Target/TargetMachine.h
@@ -457,10 +457,7 @@ class LLVMTargetMachine : public TargetMachine {
                                      MachineFunctionAnalysisManager &,
                                      raw_pwrite_stream &, raw_pwrite_stream *,
                                      CodeGenFileType, CGPassBuilderOption,
-                                     PassInstrumentationCallbacks *) {
-    return make_error<StringError>("buildCodeGenPipeline is not overridden",
-                                   inconvertibleErrorCode());
-  }
+                                     PassInstrumentationCallbacks *) = 0;
 
   virtual std::pair<StringRef, bool> getPassNameFromLegacyName(StringRef) {
     llvm_unreachable(
diff --git a/llvm/lib/Target/AArch64/AArch64CodeGenPassBuilder.cpp b/llvm/lib/Target/AArch64/AArch64CodeGenPassBuilder.cpp
new file mode 100644
index 000000000000000..ca916d43b8291f8
--- /dev/null
+++ b/llvm/lib/Target/AArch64/AArch64CodeGenPassBuilder.cpp
@@ -0,0 +1,57 @@
+//===-- AArch64CodeGenPassBuilder.cpp -----------------------------*- C++ -*-=//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file contains AArch64 CodeGen pipeline builder.
+/// TODO: Port CodeGen passes to new pass manager.
+//===----------------------------------------------------------------------===//
+
+#include "AArch64TargetMachine.h"
+
+#include "llvm/CodeGen/CodeGenPassBuilder.h"
+#include "llvm/MC/MCStreamer.h"
+
+using namespace llvm;
+
+namespace {
+
+class AArch64CodeGenPassBuilder
+    : public CodeGenPassBuilder<AArch64CodeGenPassBuilder> {
+public:
+  explicit AArch64CodeGenPassBuilder(LLVMTargetMachine &TM,
+                                     CGPassBuilderOption Opts,
+                                     PassInstrumentationCallbacks *PIC)
+      : CodeGenPassBuilder(TM, Opts, PIC) {}
+  void addPreISel(AddIRPass &addPass) const;
+  void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const;
+  Error addInstSelector(AddMachinePass &) const;
+};
+
+void AArch64CodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
+  // TODO: Add passes pre instruction selection.
+}
+
+void AArch64CodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass,
+                                              CreateMCStreamer) const {
+  // TODO: Add AsmPrinter.
+}
+
+Error AArch64CodeGenPassBuilder::addInstSelector(AddMachinePass &) const {
+  // TODO: Add instruction selector.
+  return Error::success();
+}
+
+} // namespace
+
+Error AArch64TargetMachine::buildCodeGenPipeline(
+    ModulePassManager &MPM, MachineFunctionPassManager &MFPM,
+    MachineFunctionAnalysisManager &, raw_pwrite_stream &Out,
+    raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
+    CGPassBuilderOption Opt, PassInstrumentationCallbacks *PIC) {
+  auto CGPB = AArch64CodeGenPassBuilder(*this, Opt, PIC);
+  return CGPB.buildPipeline(MPM, MFPM, Out, DwoOut, FileType);
+}
diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.h b/llvm/lib/Target/AArch64/AArch64TargetMachine.h
index 8fb68b06f137803..55dc92f07f2d9dc 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetMachine.h
+++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.h
@@ -71,6 +71,12 @@ class AArch64TargetMachine : public LLVMTargetMachine {
     return true;
   }
 
+  Error buildCodeGenPipeline(ModulePassManager &, MachineFunctionPassManager &,
+                             MachineFunctionAnalysisManager &,
+                             raw_pwrite_stream &, raw_pwrite_stream *,
+                             CodeGenFileType, CGPassBuilderOption,
+                             PassInstrumentationCallbacks *) override;
+
 private:
   bool isLittle;
 };
diff --git a/llvm/lib/Target/AArch64/CMakeLists.txt b/llvm/lib/Target/AArch64/CMakeLists.txt
index cb5f85801c65b7f..ab553454f1d4f8a 100644
--- a/llvm/lib/Target/AArch64/CMakeLists.txt
+++ b/llvm/lib/Target/AArch64/CMakeLists.txt
@@ -46,6 +46,7 @@ add_llvm_target(AArch64CodeGen
   AArch64BranchTargets.cpp
   AArch64CallingConvention.cpp
   AArch64CleanupLocalDynamicTLSPass.cpp
+  AArch64CodeGenPassBuilder.cpp
   AArch64CollectLOH.cpp
   AArch64CondBrTuning.cpp
   AArch64ConditionalCompares.cpp
@@ -103,6 +104,7 @@ add_llvm_target(AArch64CodeGen
   CodeGenTypes
   Core
   GlobalISel
+  IRPrinter
   MC
   Scalar
   SelectionDAG
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPassBuilder.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPassBuilder.cpp
new file mode 100644
index 000000000000000..1f7155c44c8c6a8
--- /dev/null
+++ b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPassBuilder.cpp
@@ -0,0 +1,56 @@
+//===-- AMDGPUCodeGenPassBuilder.cpp ------------------------------*- C++ -*-=//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file contains AMDGPU CodeGen pipeline builder.
+/// TODO: Port CodeGen passes to new pass manager.
+//===----------------------------------------------------------------------===//
+#include "AMDGPUTargetMachine.h"
+
+#include "llvm/CodeGen/CodeGenPassBuilder.h"
+#include "llvm/MC/MCStreamer.h"
+
+using namespace llvm;
+
+namespace {
+
+class AMDGPUCodeGenPassBuilder
+    : public CodeGenPassBuilder<AMDGPUCodeGenPassBuilder> {
+public:
+  explicit AMDGPUCodeGenPassBuilder(LLVMTargetMachine &TM,
+                                    CGPassBuilderOption Opts,
+                                    PassInstrumentationCallbacks *PIC)
+      : CodeGenPassBuilder(TM, Opts, PIC) {}
+  void addPreISel(AddIRPass &addPass) const;
+  void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const;
+  Error addInstSelector(AddMachinePass &) const;
+};
+
+void AMDGPUCodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
+  // TODO: Add passes pre instruction selection.
+}
+
+void AMDGPUCodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass,
+                                             CreateMCStreamer) const {
+  // TODO: Add AsmPrinter.
+}
+
+Error AMDGPUCodeGenPassBuilder::addInstSelector(AddMachinePass &) const {
+  // TODO: Add instruction selector.
+  return Error::success();
+}
+
+} // namespace
+
+Error AMDGPUTargetMachine::buildCodeGenPipeline(
+    ModulePassManager &MPM, MachineFunctionPassManager &MFPM,
+    MachineFunctionAnalysisManager &, raw_pwrite_stream &Out,
+    raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
+    CGPassBuilderOption Opt, PassInstrumentationCallbacks *PIC) {
+  auto CGPB = AMDGPUCodeGenPassBuilder(*this, Opt, PIC);
+  return CGPB.buildPipeline(MPM, MFPM, Out, DwoOut, FileType);
+}
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h
index 99c9db3e654a64c..ae8576d7df998b9 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h
@@ -66,6 +66,12 @@ class AMDGPUTargetMachine : public LLVMTargetMachine {
   getPredicatedAddrSpace(const Value *V) const override;
 
   unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const override;
+
+  Error buildCodeGenPipeline(ModulePassManager &, MachineFunctionPassManager &,
+                             MachineFunctionAnalysisManager &,
+                             raw_pwrite_stream &, raw_pwrite_stream *,
+                             CodeGenFileType, CGPassBuilderOption,
+                             PassInstrumentationCallbacks *) override;
 };
 
 //===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/AMDGPU/CMakeLists.txt b/llvm/lib/Target/AMDGPU/CMakeLists.txt
index 2c92e7a07388553..3bc67d31af474bc 100644
--- a/llvm/lib/Target/AMDGPU/CMakeLists.txt
+++ b/llvm/lib/Target/AMDGPU/CMakeLists.txt
@@ -50,6 +50,7 @@ add_llvm_target(AMDGPUCodeGen
   AMDGPUAtomicOptimizer.cpp
   AMDGPUAttributor.cpp
   AMDGPUCallLowering.cpp
+  AMDGPUCodeGenPassBuilder.cpp
   AMDGPUCodeGenPrepare.cpp
   AMDGPUCombinerHelper.cpp
   AMDGPUCtorDtorLowering.cpp
@@ -180,6 +181,7 @@ add_llvm_target(AMDGPUCodeGen
   GlobalISel
   HipStdPar
   IPO
+  IRPrinter
   MC
   MIRParser
   Passes
diff --git a/llvm/lib/Target/ARC/ARCCodeGenPassBuilder.cpp b/llvm/lib/Target/ARC/ARCCodeGenPassBuilder.cpp
new file mode 100644
index 000000000000000..bdec0148bd64867
--- /dev/null
+++ b/llvm/lib/Target/ARC/ARCCodeGenPassBuilder.cpp
@@ -0,0 +1,56 @@
+//===-- ARCCodeGenPassBuilder.cpp ---------------------------------*- C++ -*-=//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file contains ARC CodeGen pipeline builder.
+/// TODO: Port CodeGen passes to new pass manager.
+//===----------------------------------------------------------------------===//
+
+#include "ARCTargetMachine.h"
+
+#include "llvm/CodeGen/CodeGenPassBuilder.h"
+#include "llvm/MC/MCStreamer.h"
+
+using namespace llvm;
+
+namespace {
+
+class ARCCodeGenPassBuilder : public CodeGenPassBuilder<ARCCodeGenPassBuilder> {
+public:
+  explicit ARCCodeGenPassBuilder(LLVMTargetMachine &TM,
+                                 CGPassBuilderOption Opts,
+                                 PassInstrumentationCallbacks *PIC)
+      : CodeGenPassBuilder(TM, Opts, PIC) {}
+  void addPreISel(AddIRPass &addPass) const;
+  void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const;
+  Error addInstSelector(AddMachinePass &) const;
+};
+
+void ARCCodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
+  // TODO: Add passes pre instruction selection.
+}
+
+void ARCCodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass,
+                                          CreateMCStreamer) const {
+  // TODO: Add AsmPrinter.
+}
+
+Error ARCCodeGenPassBuilder::addInstSelector(AddMachinePass &) const {
+  // TODO: Add instruction selector.
+  return Error::success();
+}
+
+} // namespace
+
+Error ARCTargetMachine::buildCodeGenPipeline(
+    ModulePassManager &MPM, MachineFunctionPassManager &MFPM,
+    MachineFunctionAnalysisManager &, raw_pwrite_stream &Out,
+    raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
+    CGPassBuilderOption Opt, PassInstrumentationCallbacks *PIC) {
+  auto CGPB = ARCCodeGenPassBuilder(*this, Opt, PIC);
+  return CGPB.buildPipeline(MPM, MFPM, Out, DwoOut, FileType);
+}
diff --git a/llvm/lib/Target/ARC/ARCTargetMachine.h b/llvm/lib/Target/ARC/ARCTargetMachine.h
index 0fc4243ab44a72c..e2df4ef7fa6b6b7 100644
--- a/llvm/lib/Target/ARC/ARCTargetMachine.h
+++ b/llvm/lib/Target/ARC/ARCTargetMachine.h
@@ -49,6 +49,12 @@ class ARCTargetMachine : public LLVMTargetMachine {
   MachineFunctionInfo *
   createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F,
                             const TargetSubtargetInfo *STI) const override;
+
+  Error buildCodeGenPipeline(ModulePassManager &, MachineFunctionPassManager &,
+                             MachineFunctionAnalysisManager &,
+                             raw_pwrite_stream &, raw_pwrite_stream *,
+                             CodeGenFileType, CGPassBuilderOption,
+                             PassInstrumentationCallbacks *) override;
 };
 
 } // end namespace llvm
diff --git a/llvm/lib/Target/ARC/CMakeLists.txt b/llvm/lib/Target/ARC/CMakeLists.txt
index 9f3c1787c5635e3..3522df427b5ee56 100644
--- a/llvm/lib/Target/ARC/CMakeLists.txt
+++ b/llvm/lib/Target/ARC/CMakeLists.txt
@@ -15,6 +15,7 @@ add_public_tablegen_target(ARCCommonTableGen)
 add_llvm_target(ARCCodeGen
   ARCAsmPrinter.cpp
   ARCBranchFinalize.cpp
+  ARCCodeGenPassBuilder.cpp
   ARCExpandPseudos.cpp
   ARCFrameLowering.cpp
   ARCInstrInfo.cpp
@@ -35,7 +36,9 @@ add_llvm_target(ARCCodeGen
   CodeGen
   CodeGenTypes
   Core
+  IRPrinter
   MC
+  Scalar
   SelectionDAG
   Support
   Target
diff --git a/llvm/lib/Target/ARM/ARMCodeGenPassBuilder.cpp b/llvm/lib/Target/ARM/ARMCodeGenPassBuilder.cpp
new file mode 100644
index 000000000000000..42134477e25d120
--- /dev/null
+++ b/llvm/lib/Target/ARM/ARMCodeGenPassBuilder.cpp
@@ -0,0 +1,56 @@
+//===-- ARMCodeGenPassBuilder.cpp ---------------------------------*- C++ -*-=//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file contains ARM CodeGen pipeline builder.
+/// TODO: Port CodeGen passes to new pass manager.
+//===----------------------------------------------------------------------===//
+
+#include "ARMTargetMachine.h"
+
+#include "llvm/CodeGen/CodeGenPassBuilder.h"
+#include "llvm/MC/MCStreamer.h"
+
+using namespace llvm;
+
+namespace {
+
+class ARMCodeGenPassBuilder : public CodeGenPassBuilder<ARMCodeGenPassBuilder> {
+public:
+  explicit ARMCodeGenPassBuilder(LLVMTargetMachine &TM,
+                                 CGPassBuilderOption Opts,
+                                 PassInstrumentationCallbacks *PIC)
+      : CodeGenPassBuilder(TM, Opts, PIC) {}
+  void addPreISel(AddIRPass &addPass) const;
+  void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const;
+  Error addInstSelector(AddMachinePass &) const;
+};
+
+void ARMCodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
+  // TODO: Add passes pre instruction selection.
+}
+
+void ARMCodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass,
+                                          CreateMCStreamer) const {
+  // TODO: Add AsmPrinter.
+}
+
+Error ARMCodeGenPassBuilder::addInstSelector(AddMachinePass &) const {
+  // TODO: Add instruction selector.
+  return Error::success();
+}
+
+} // namespace
+
+Error ARMBaseTargetMachine::buildCodeGenPipeline(
+    ModulePassManager &MPM, MachineFunctionPassManager &MFPM,
+    MachineFunctionAnalysisManager &, raw_pwrite_stream &Out,
+    raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
+    CGPassBuilderOption Opt, PassInstrumentationCallbacks *PIC) {
+  auto CGPB = ARMCodeGenPassBuilder(*this, Opt, PIC);
+  return CGPB.buildPipeline(MPM, MFPM, Out, DwoOut, FileType);
+}
diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.h b/llvm/lib/Target/ARM/ARMTargetMachine.h
index 69d8fa8ada64983..07f044c25e9c09a 100644
--- a/llvm/lib/Target/ARM/ARMTargetMachine.h
+++ b/llvm/lib/Target/ARM/ARMTargetMachine.h
@@ -91,6 +91,12 @@ class ARMBaseTargetMachine : public LLVMTargetMachine {
                                 PerFunctionMIParsingState &PFS,
                                 SMDiagnostic &Error,
                                 SMRange &SourceRange) const override;
+
+  Error buildCodeGenPipeline(ModulePassManager &, MachineFunctionPassManager &,
+                             MachineFunctionAnalysisManager &,
+                             raw_pwrite_stream &, raw_pwrite_stream *,
+                             CodeGenFileType, CGPassBuilderOption,
+                             PassInstrumentationCallbacks *) override;
 };
 
 /// ARM/Thumb little endian target machine.
diff --git a/llvm/lib/Target/ARM/CMakeLists.txt b/llvm/lib/Target/ARM/CMakeLists.txt
index 3d6af28b4375384..9f94963c1da56a5 100644
--- a/llvm/lib/Target/ARM/CMakeLists.txt
+++ b/llvm/lib/Target/ARM/CMakeLists.txt
@@ -28,6 +28,7 @@ add_llvm_target(ARMCodeGen
   ARMBranchTargets.cpp
   ARMCallingConv.cpp
   ARMCallLowering.cpp
+  ARMCodeGenPassBuilder.cpp
   ARMConstantIslandPass.cpp
   ARMConstantPoolValue.cpp
   ARMExpandPseudoInsts.cpp
@@ -81,6 +82,7 @@ add_llvm_target(ARMCodeGen
   Core
   GlobalISel
   IPO
+  IRPrinter
   MC
   Scalar
   SelectionDAG
diff --git a/llvm/lib/Target/AVR/AVRCodeGenPassBuilder.cpp b/llvm/lib/Target/AVR/AVRCodeGenPassBuilder.cpp
new file mode 100644
index 000000000000000..50dd940961994de
--- /dev/null
+++ b/llvm/lib/Target/AVR/AVRCodeGenPassBuilder.cpp
@@ -0,0 +1,56 @@
+//===-- AVRCodeGenPassBuilder.cpp ---------------------------------*- C++ -*-=//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file contains AVR CodeGen pipeline builder.
+/// TODO: Port CodeGen passes to new pass manager.
+//===----------------------------------------------------------------------===//
+
+#include "AVRTargetMachine.h"
+
+#include "llvm/CodeGen/CodeGenPassBuilder.h"
+#include "llvm/MC/MCStreamer.h"
+
+using namespace llvm;
+
+namespace {
+
+class AVRCodeGenPassBuilder : public CodeGenPassBuilder<AVRCodeGenPassBuilder> {
+public:
+  explicit AVRCodeGenPassBuilder(LLVMTargetMachine &TM,
+                                 CGPassBuilderOption Opts,
+                                 PassInstrumentationCallbacks *PIC)
+      : CodeGenPassBuilder(TM, Opts, PIC) {}
+  void addPreISel(AddIRPass &addPass) const;
+  void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const;
+  Error addInstSelector(AddMachinePass &) const;
+};
+
+void AVRCodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
+  // TODO: Add passes pre instruction selection.
+}
+
+void AVRCodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass,
+                                          CreateMCStreamer) const {
+  // TODO: Add AsmPrinter.
+}
+
+Error AVRCodeGenPassBuilder::addInstSelector(AddMachinePass &) const {
+  // TODO: Add instruction selector.
+  return Error::success();
+}
+
+} // namespace
+
+Error AVRTargetMachine::buildCodeGenPipeline(
+    ModulePassManager &MPM, MachineFunctionPassManager &MFPM,
+    MachineFunctionAnalysisManager &, raw_pwrite_stream &Out,
+    raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
+    CGPassBuilderOption Opt, PassInstrumentationCallbacks *PIC) {
+  auto CGPB = AVRCodeGenPassBuilder(*this, Opt, PIC);
+  return CGPB.buildPipeline(MPM, MFPM, Out, DwoOut, FileType);
+}
diff --git a/llvm/lib/Target/AVR/AVRTargetMachine.h b/llvm/lib/Target/AVR/AVRTargetMachine.h
index c19df2bc301ea4d..4e9c029f8547e6a 100644
--- a/llvm/lib/Target/AVR/AVRTargetMachine.h
+++ b/llvm/lib/Target/AVR/AVRTargetMachine.h
@@ -57,6 +57,12 @@ class AVRTargetMachine : public LLVMTargetMachine {
     return getPointerSize(SrcAs) == getPointerSize(DestAs);
   }
 
+  Error buildCodeGenPipeline(ModulePassManager &, MachineFunctionPassManager &,
+                             MachineFunctionAnalysisManager &,
+                             raw_pwrite_stream &, raw_pwrite_stream *,
+                             CodeGenFileType, CGPassBuilderOption,
+                             PassInstrumentationCallbacks *) override;
+
 private:
   std::unique_ptr<TargetLoweringObjectFile> TLOF;
   AVRSubtarget SubTarget;
diff --git a/llvm/lib/Target/AVR/CMakeLists.txt b/llvm/lib/Target/AVR/CMakeLists.txt
index 817ba739d8418ac..678dd6575dafcce 100644
--- a/llvm/lib/Target/AVR/CMakeLists.txt
+++ b/llvm/lib/Target/AVR/CMakeLists.txt
@@ -16,6 +16,7 @@ add_public_tablegen_target(AVRCommonTableGen)
 
 add_llvm_target(AVRCodeGen
   AVRAsmPrinter.cpp
+  AVRCodeGenPassBuilder.cpp
   AVRExpandPseudoInsts.cpp
   AVRFrameLowering.cpp
   AVRInstrInfo.cpp
@@ -34,14 +35,18 @@ add_llvm_target(AVRCodeGen
   LINK_COMPONENTS
   AVRDesc
   AVRInfo
+  Analysis
   AsmPrinter
   CodeGen
   CodeGenTypes
   Core
+  IRPrinter
   MC
+  Scalar
   SelectionDAG
   Support
   Target
+  TransformUtils
 
   ADD_TO_COMPONENT
   AVR
diff --git a/llvm/lib/Target/BPF/BPFCodeGenPassBuilder.cpp b/llvm/lib/Target/BPF/BPFCodeGenPassBuilder.cpp
new file mode 100644
index 000000000000000..754ad4415cf4cd0
--- /dev/null
+++ b/llvm/lib/Target/BPF/BPFCodeGenPassBuilder.cpp
@@ -0,0 +1,56 @@
+//===-- BPFCodeGenPassBuilder.cpp ---------------------------------*- C++ -*-=//
+//
+// Part of the LLV...
[truncated]

Copy link
Contributor

@arsenm arsenm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if it's a good idea to do every target at once until there's an effort to port that target's passes. If the interface changes again when bringing these up, it will just be a larger hassle to update all the implementations

@paperchalice
Copy link
Contributor Author

Not sure if it's a good idea to do every target at once until there's an effort to port that target's passes. If the interface changes again when bringing these up, it will just be a larger hassle to update all the implementations

Agreed, the interface may change in future, MachineFunctionPassManager may change to ModulePassManager.

@aeubanks
Copy link
Contributor

agreed

@paperchalice paperchalice deleted the stub branch January 20, 2024 10:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants