LLVM 24.0.0git
SparcCodeGenPassBuilder.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 "Sparc.h"
10#include "SparcAsmPrinter.h"
11#include "SparcTargetMachine.h"
18
19using namespace llvm;
20
21namespace {
22
23class SparcCodeGenPassBuilder : public CodeGenPassBuilder {
24 using Base = CodeGenPassBuilder;
25
26 SparcTargetMachine &getTM() const {
27 return static_cast<SparcTargetMachine &>(TM);
28 }
29
30public:
31 explicit SparcCodeGenPassBuilder(SparcTargetMachine &TM,
32 const CGPassBuilderOption &Opts,
33 PassInstrumentationCallbacks *PIC)
34 : CodeGenPassBuilder(TM, Opts, PIC) {}
35
36 void addIRPasses(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 SparcCodeGenPassBuilder::addIRPasses(PassManagerWrapper &PMW) {
45 addFunctionPass(AtomicExpandPass(getTM()), PMW);
46
47 Base::addIRPasses(PMW);
48}
49
50Error SparcCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) {
51 addMachineFunctionPass(SparcDAGToDAGISelPass(getTM(), getOptLevel()), PMW);
52 return Error::success();
53}
54
55void SparcCodeGenPassBuilder::addPreEmitPass(PassManagerWrapper &PMW) {
56 if (getTM().getCLOpts().enable_branch_relax)
57 addMachineFunctionPass(BranchRelaxationPass(), PMW);
58
59 addMachineFunctionPass(SparcDelaySlotFillerPass(), PMW);
60 addMachineFunctionPass(SparcInsertNOPLoadPass(), PMW);
61 addMachineFunctionPass(SparcDetectRoundChangePass(), PMW);
62 addMachineFunctionPass(SparcFixAllFDIVSQRTPass(), PMW);
63 addMachineFunctionPass(SparcErrataWorkaroundPass(), PMW);
64}
65
66void SparcCodeGenPassBuilder::addAsmPrinterBegin(PassManagerWrapper &PMW) {
67 addModulePass(SparcAsmPrinterBeginPass(), PMW, /*Force=*/true);
68}
69
70void SparcCodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW) {
71 addMachineFunctionPass(SparcAsmPrinterPass(), PMW, /*Force=*/true);
72}
73
74void SparcCodeGenPassBuilder::addAsmPrinterEnd(PassManagerWrapper &PMW) {
75 addModulePass(SparcAsmPrinterEndPass(), PMW, /*Force=*/true);
76}
77
78} // namespace
79
81#define GET_PASS_REGISTRY "SparcPassRegistry.def"
83}
84
87 raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
88 const CGPassBuilderOption &Opt, MCContext &Ctx,
90 auto CGPB = SparcCodeGenPassBuilder(*this, Opt, PIC);
91 return CGPB.buildPipeline(MPM, MAM, Out, DwoOut, FileType, Ctx);
92}
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,...
const AArch64MCOptions & getCLOpts(const MCTargetOptions &Options)
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