Skip to content

Commit e927cf6

Browse files
authored
Reland "[AArch64][NPM] Chalk out the CodeGenPassBuilder for NPM (#128… (#128662)
…471)" Reland #128471 The Passes library was not linked in earlier.
1 parent 472ea0b commit e927cf6

File tree

4 files changed

+42
-0
lines changed

4 files changed

+42
-0
lines changed

llvm/lib/Target/AArch64/AArch64TargetMachine.cpp

+32
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#include "llvm/MC/MCTargetOptions.h"
4242
#include "llvm/MC/TargetRegistry.h"
4343
#include "llvm/Pass.h"
44+
#include "llvm/Passes/CodeGenPassBuilder.h"
4445
#include "llvm/Passes/PassBuilder.h"
4546
#include "llvm/Support/CodeGen.h"
4647
#include "llvm/Support/CommandLine.h"
@@ -562,8 +563,39 @@ class AArch64PassConfig : public TargetPassConfig {
562563
std::unique_ptr<CSEConfigBase> getCSEConfig() const override;
563564
};
564565

566+
class AArch64CodeGenPassBuilder
567+
: public CodeGenPassBuilder<AArch64CodeGenPassBuilder,
568+
AArch64TargetMachine> {
569+
using Base =
570+
CodeGenPassBuilder<AArch64CodeGenPassBuilder, AArch64TargetMachine>;
571+
572+
public:
573+
AArch64CodeGenPassBuilder(AArch64TargetMachine &TM,
574+
const CGPassBuilderOption &Opts,
575+
PassInstrumentationCallbacks *PIC)
576+
: CodeGenPassBuilder(TM, Opts, PIC) {}
577+
void addPreISel(AddIRPass &) const {
578+
// TODO: Add pre-isel passes
579+
}
580+
void addAsmPrinter(AddMachinePass &addPass, CreateMCStreamer) const {
581+
// TODO: Add asm printer passes
582+
}
583+
Error addInstSelector(AddMachinePass &) const {
584+
// TODO: Add instruction selector passes
585+
return Error::success();
586+
}
587+
};
588+
565589
} // end anonymous namespace
566590

591+
Error AArch64TargetMachine::buildCodeGenPipeline(
592+
ModulePassManager &MPM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut,
593+
CodeGenFileType FileType, const CGPassBuilderOption &Opts,
594+
PassInstrumentationCallbacks *PIC) {
595+
AArch64CodeGenPassBuilder Builder(*this, Opts, PIC);
596+
return Builder.buildPipeline(MPM, Out, DwoOut, FileType);
597+
}
598+
567599
void AArch64TargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
568600

569601
PB.registerLateLoopOptimizationsEPCallback(

llvm/lib/Target/AArch64/AArch64TargetMachine.h

+6
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ class AArch64TargetMachine : public CodeGenTargetMachineImpl {
4646
// Pass Pipeline Configuration
4747
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
4848

49+
Error buildCodeGenPipeline(ModulePassManager &MPM, raw_pwrite_stream &Out,
50+
raw_pwrite_stream *DwoOut,
51+
CodeGenFileType FileType,
52+
const CGPassBuilderOption &Opts,
53+
PassInstrumentationCallbacks *PIC) override;
54+
4955
void registerPassBuilderCallbacks(PassBuilder &PB) override;
5056

5157
TargetTransformInfo getTargetTransformInfo(const Function &F) const override;

llvm/lib/Target/AArch64/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ add_llvm_target(AArch64CodeGen
105105
Core
106106
GlobalISel
107107
MC
108+
Passes
108109
Scalar
109110
SelectionDAG
110111
Support

llvm/test/CodeGen/AArch64/machine-latecleanup-inlineasm.mir

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
22
# RUN: llc -start-before=machine-latecleanup -stop-after=machine-latecleanup \
33
# RUN: -o - %s | FileCheck %s
4+
5+
# RUN: llc -enable-new-pm -passes=machine-latecleanup \
6+
# RUN: -o - %s | FileCheck %s
47
--- |
58
; ModuleID = 'reduced5.ll'
69
source_filename = "reduced5.ll"

0 commit comments

Comments
 (0)