LLVM: lib/Target/BPF/BPFTargetMachine.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

35#include

36using namespace llvm;

37

40 cl::desc("Disable machine peepholes for BPF"));

41

44 cl::desc("Disable Trap Unreachable for BPF"));

45

62

66

70 std::optionalReloc::Model RM,

71 std::optionalCodeModel::Model CM,

77 Subtarget(TT, std::string(CPU), std::string(FS), *this) {

81 }

82

84

88}

89

90namespace {

91

93public:

96

99 }

100

101 void addIRPasses() override;

102 bool addInstSelector() override;

103 void addMachineSSAOptimization() override;

104 void addPreEmitPass() override;

105

106 bool addIRTranslator() override;

107 bool addLegalizeMachineIR() override;

108 bool addRegBankSelect() override;

109 bool addGlobalInstructionSelect() override;

110};

111}

112

114 return new BPFPassConfig(*this, PM);

115}

116

119 "BPFPreserveStaticOffsetPass");

120}

121

123#define GET_PASS_REGISTRY "BPFPassRegistry.def"

125

126 PB.registerPipelineStartEPCallback(

134 });

139 });

140 PB.registerScalarOptimizerLateEPCallback(

142

143

145 });

146 PB.registerPipelineEarlySimplificationEPCallback(

149 });

150}

151

152void BPFPassConfig::addIRPasses() {

155

157}

158

163

164

165

166bool BPFPassConfig::addInstSelector() {

168

169 return false;

170}

171

172void BPFPassConfig::addMachineSSAOptimization() {

174

175

176

178

179 const BPFSubtarget *Subtarget = getBPFTargetMachine().getSubtargetImpl();

183 }

184}

185

186void BPFPassConfig::addPreEmitPass() {

191}

192

193bool BPFPassConfig::addIRTranslator() {

195 return false;

196}

197

198bool BPFPassConfig::addLegalizeMachineIR() {

200 return false;

201}

202

203bool BPFPassConfig::addRegBankSelect() {

205 return false;

206}

207

208bool BPFPassConfig::addGlobalInstructionSelect() {

210 return false;

211}

static Reloc::Model getEffectiveRelocModel()

static Expected< bool > parseBPFPreserveStaticOffsetOptions(StringRef Params)

Definition BPFTargetMachine.cpp:117

LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeBPFTarget()

Definition BPFTargetMachine.cpp:46

static cl::opt< bool > DisableCheckUnreachable("bpf-disable-trap-unreachable", cl::Hidden, cl::desc("Disable Trap Unreachable for BPF"))

static cl::opt< bool > DisableMIPeephole("disable-bpf-peephole", cl::Hidden, cl::desc("Disable machine peepholes for BPF"))

#define LLVM_EXTERNAL_VISIBILITY

This file declares the IRTranslator pass.

This header defines various interfaces for pass management in LLVM.

PassBuilder PB(Machine, PassOpts->PTO, std::nullopt, &PIC)

This file describes the interface of the MachineFunctionPass responsible for assigning the generic vi...

const GCNTargetMachine & getTM(const GCNSubtarget *STI)

This file provides the interface for the pass responsible for both simplifying and canonicalizing the...

static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton, "Generate example skeleton entry")

static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")

Target-Independent Code Generator Pass Configuration Options pass.

void setDwarfUsesRelocationsAcrossSections(bool enable)

TargetPassConfig * createPassConfig(PassManagerBase &PM) override

Create a pass configuration object to be used by addPassToEmitX methods for generating a pipeline of ...

Definition BPFTargetMachine.cpp:113

void registerPassBuilderCallbacks(PassBuilder &PB) override

Allow the target to modify the pass pipeline.

Definition BPFTargetMachine.cpp:122

BPFTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, std::optional< Reloc::Model > RM, std::optional< CodeModel::Model > CM, CodeGenOptLevel OL, bool JIT)

Definition BPFTargetMachine.cpp:67

TargetTransformInfo getTargetTransformInfo(const Function &F) const override

Return a TargetTransformInfo for a given function.

Definition BPFTargetMachine.cpp:160

CodeGenTargetMachineImpl(const Target &T, StringRef DataLayoutString, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, CodeGenOptLevel OL)

Tagged union holding either a T or a Error.

This pass is responsible for selecting generic machine instructions to target-specific instructions.

This class is intended to be used as a base class for asm properties and features specific to the tar...

This class provides access to building LLVM's passes.

static LLVM_ABI Expected< bool > parseSinglePassOption(StringRef Params, StringRef OptionName, StringRef PassName)

Handle passes only accept one bool-valued parameter.

LLVM_ATTRIBUTE_MINSIZE std::enable_if_t<!std::is_same_v< PassT, PassManager > > addPass(PassT &&Pass)

PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...

static LLVM_ABI PassRegistry * getPassRegistry()

getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...

This pass implements the reg bank selector pass used in the GlobalISel pipeline.

A pass to simplify and canonicalize the CFG of a function.

StringRef - Represent a constant reference to a string, i.e.

std::unique_ptr< const MCAsmInfo > AsmInfo

Contains target specific asm information.

unsigned NoTrapAfterNoreturn

Do not emit a trap instruction for 'unreachable' IR instructions behind noreturn calls,...

unsigned TrapUnreachable

Emit target-specific trap instruction for 'unreachable' IR instructions.

Target-Independent Code Generator Pass Configuration Options.

virtual void addIRPasses()

Add common target configurable passes that perform LLVM IR to IR transforms following machine indepen...

virtual void addMachineSSAOptimization()

addMachineSSAOptimization - Add standard passes that optimize machine instructions in SSA form.

This pass provides access to the codegen interfaces that are needed for IR-level transformations.

Target - Wrapper for Target specific information.

Triple - Helper class for working with autoconf configuration names.

PassManagerBase - An abstract interface to allow code to add passes to a pass manager without having ...

Interfaces for registering analysis passes, producing common pass manager configurations,...

template class LLVM_TEMPLATE_ABI opt< bool >

This is an optimization pass for GlobalISel generic memory operations.

void initializeBPFMIPreEmitPeepholePass(PassRegistry &)

void initializeBPFMISimplifyPatchablePass(PassRegistry &)

FunctionPass * createBPFMISimplifyPatchablePass()

ModuleToFunctionPassAdaptor createModuleToFunctionPassAdaptor(FunctionPassT &&Pass, bool EagerlyInvalidate=false)

A function to deduce a function pass type and wrap it in the templated adaptor.

FunctionPass * createBPFMIPreEmitCheckingPass()

Target & getTheBPFleTarget()

ModulePass * createBPFCheckAndAdjustIR()

FunctionPass * createBPFMIPreEmitPeepholePass()

void initializeBPFMIPeepholePass(PassRegistry &)

FunctionPass * createBPFMIPeepholePass()

ThinOrFullLTOPhase

This enumerates the LLVM full LTO or ThinLTO optimization phases.

static Reloc::Model getEffectiveRelocModel(std::optional< Reloc::Model > RM)

CodeModel::Model getEffectiveCodeModel(std::optional< CodeModel::Model > CM, CodeModel::Model Default)

Helper method for getting the code model, returning Default if CM does not have a value.

Target & getTheBPFbeTarget()

PassManager< Module > ModulePassManager

Convenience typedef for a pass manager over modules.

void initializeBPFAsmPrinterPass(PassRegistry &)

Target & getTheBPFTarget()

CodeGenOptLevel

Code generation optimization level.

LLVM_ABI void initializeGlobalISel(PassRegistry &)

Initialize all passes linked into the GlobalISel library.

void initializeBPFCheckAndAdjustIRPass(PassRegistry &)

PassManager< Function > FunctionPassManager

Convenience typedef for a pass manager over functions.

void initializeBPFMIPreEmitCheckingPass(PassRegistry &)

FunctionPass * createBPFISelDag(BPFTargetMachine &TM)

LLVM_ABI FunctionPass * createAtomicExpandLegacyPass()

AtomicExpandPass - At IR level this pass replace atomic instructions with __atomic_* library calls,...

void initializeBPFDAGToDAGISelLegacyPass(PassRegistry &)

Implement std::hash so that hash_code can be used in STL containers.

RegisterTargetMachine - Helper template for registering a target machine implementation,...