[llvm] [CodeGen] Add code new pm code stubs for all backends (PR #78552)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 18 00:57:53 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->
@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)

<details>
<summary>Changes</summary>

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
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]

``````````

</details>


https://github.com/llvm/llvm-project/pull/78552


More information about the llvm-commits mailing list