LLVM 24.0.0git
XCoreCodeGenPassBuilder.cpp
Go to the documentation of this file.
1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "XCore.h"
10#include "XCoreAsmPrinter.h"
11#include "XCoreTargetMachine.h"
17
18using namespace llvm;
19
20namespace {
21
22class XCoreCodeGenPassBuilder : public CodeGenPassBuilder {
23 using Base = CodeGenPassBuilder;
24
25 XCoreTargetMachine &getTM() const {
26 return static_cast<XCoreTargetMachine &>(TM);
27 }
28
29public:
30 explicit XCoreCodeGenPassBuilder(XCoreTargetMachine &TM,
31 const CGPassBuilderOption &Opts,
32 PassInstrumentationCallbacks *PIC)
33 : CodeGenPassBuilder(TM, Opts, PIC) {}
34
35 void addIRPasses(PassManagerWrapper &PMW) override;
36 void addPreISel(PassManagerWrapper &PMW) override;
37 Error addInstSelector(PassManagerWrapper &PMW) override;
38 void addPreEmitPass(PassManagerWrapper &PMW) override;
39 void addAsmPrinterBegin(PassManagerWrapper &PMW) override;
40 void addAsmPrinter(PassManagerWrapper &PMW) override;
41 void addAsmPrinterEnd(PassManagerWrapper &PMW) override;
42};
43
44void XCoreCodeGenPassBuilder::addIRPasses(PassManagerWrapper &PMW) {
45 addFunctionPass(AtomicExpandPass(getTM()), PMW);
46
47 Base::addIRPasses(PMW);
48}
49
50void XCoreCodeGenPassBuilder::addPreISel(PassManagerWrapper &PMW) {
51 flushFPMsToMPM(PMW);
52 addModulePass(XCoreLowerThreadLocalPass(), PMW);
53}
54
55Error XCoreCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) {
56 addMachineFunctionPass(XCoreISelDAGToDAGPass(getTM(), getOptLevel()), PMW);
57 return Error::success();
58}
59
60void XCoreCodeGenPassBuilder::addPreEmitPass(PassManagerWrapper &PMW) {
61 addMachineFunctionPass(XCoreFrameToArgsOffsetEliminationPass(), PMW);
62}
63
64void XCoreCodeGenPassBuilder::addAsmPrinterBegin(PassManagerWrapper &PMW) {
65 addModulePass(XCoreAsmPrinterBeginPass(), PMW);
66}
67
68void XCoreCodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW) {
69 addMachineFunctionPass(XCoreAsmPrinterPass(), PMW);
70}
71
72void XCoreCodeGenPassBuilder::addAsmPrinterEnd(PassManagerWrapper &PMW) {
73 addModulePass(XCoreAsmPrinterEndPass(), PMW);
74}
75
76} // namespace
77
79#define GET_PASS_REGISTRY "XCorePassRegistry.def"
81}
82
85 raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
86 const CGPassBuilderOption &Opt, MCContext &Ctx,
88 auto CGPB = XCoreCodeGenPassBuilder(*this, Opt, PIC);
89 return CGPB.buildPipeline(MPM, MAM, Out, DwoOut, FileType, Ctx);
90}
Interfaces for producing common pass manager configurations.
ModuleAnalysisManager MAM
PassBuilder PB(Mod->getContext(), Machine, PassOpts->PTO, std::nullopt, &PIC)
PassInstrumentationCallbacks PIC
This file defines the Pass Instrumentation classes that provide instrumentation points into the pass ...
const GCNTargetMachine & getTM(const GCNSubtarget *STI)
This class provides access to building LLVM's passes.
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
static ErrorSuccess success()
Create a success value.
Definition Error.h:336
Context object for machine code objects.
Definition MCContext.h:83
This class provides access to building LLVM's passes.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
Error buildCodeGenPipeline(ModulePassManager &MPM, ModuleAnalysisManager &MAM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, const CGPassBuilderOption &Opt, MCContext &Ctx, PassInstrumentationCallbacks *PIC) override
void registerPassBuilderCallbacks(PassBuilder &PB) override
Allow the target to modify the pass pipeline.
An abstract base class for streams implementations that also support a pwrite operation.
Interfaces for registering analysis passes, producing common pass manager configurations,...
This is an optimization pass for GlobalISel generic memory operations.
CodeGenFileType
These enums are meant to be passed into addPassesToEmitFile to indicate what type of file to emit,...
Definition CodeGen.h:309
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39