LLVM: lib/Target/AVR/AVRTargetMachine.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

14

19

26

27#include

28

29namespace llvm {

30

31

33 if (CPU.empty() || CPU == "generic") {

34 return "avr2";

35 }

36

37 return CPU;

38}

39

43

47 std::optionalReloc::Model RM,

48 std::optionalCodeModel::Model CM,

53 SubTarget(TT, std::string(getCPU(CPU)), std::string(FS), *this) {

54 this->TLOF = std::make_unique();

56}

57

58namespace {

59

61public:

64 EnableLoopTermFold = true;

65 }

66

67 AVRTargetMachine &getAVRTargetMachine() const {

69 }

70

71 void addIRPasses() override;

72 bool addInstSelector() override;

73 void addPreSched2() override;

74 void addPreEmitPass() override;

75};

76}

77

79 return new AVRPassConfig(*this, PM);

80}

81

82void AVRPassConfig::addIRPasses() {

83

84

85

87

89}

90

101

103 return &SubTarget;

104}

105

107 return &SubTarget;

108}

109

114

121

122

123

124

125

126bool AVRPassConfig::addInstSelector() {

127

128 addPass(createAVRISelDag(getAVRTargetMachine(), getOptLevel()));

129

131

132 return false;

133}

134

135void AVRPassConfig::addPreSched2() { addPass(createAVRExpandPseudoPass()); }

136

137void AVRPassConfig::addPreEmitPass() {

138

139 addPass(&BranchRelaxationPassID);

140}

141

142}

static Reloc::Model getEffectiveRelocModel()

This file defines a TargetTransformInfoImplBase conforming object specific to the AVR target machine.

#define LLVM_EXTERNAL_VISIBILITY

const GCNTargetMachine & getTM(const GCNSubtarget *STI)

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

Target-Independent Code Generator Pass Configuration Options pass.

A specific AVR target MCU.

A generic AVR implementation.

const AVRSubtarget * getSubtargetImpl() const

Definition AVRTargetMachine.cpp:102

TargetPassConfig * createPassConfig(PassManagerBase &PM) override

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

Definition AVRTargetMachine.cpp:78

AVRTargetMachine(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 AVRTargetMachine.cpp:44

MachineFunctionInfo * createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, const TargetSubtargetInfo *STI) const override

Create the target's instance of MachineFunctionInfo.

Definition AVRTargetMachine.cpp:115

TargetTransformInfo getTargetTransformInfo(const Function &F) const override

Return a TargetTransformInfo for a given function.

Definition AVRTargetMachine.cpp:111

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

static LLVM_ABI PassRegistry * getPassRegistry()

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

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

std::unique_ptr< const MCSubtargetInfo > STI

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

TargetSubtargetInfo - Generic base class for all target subtargets.

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

This is an optimization pass for GlobalISel generic memory operations.

void initializeAVRShiftExpandPass(PassRegistry &)

void initializeAVRExpandPseudoPass(PassRegistry &)

Target & getTheAVRTarget()

static StringRef getCPU(StringRef CPU)

Processes a CPU name.

Definition AVRTargetMachine.cpp:32

FunctionPass * createAVRFrameAnalyzerPass()

Creates instance of the frame analyzer pass.

FunctionPass * createAVRISelDag(AVRTargetMachine &TM, CodeGenOptLevel OptLevel)

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

Definition AVRTargetMachine.cpp:40

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.

void initializeAVRDAGToDAGISelLegacyPass(PassRegistry &)

CodeGenOptLevel

Code generation optimization level.

Pass * createAVRShiftExpandPass()

LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAVRTarget()

Definition AVRTargetMachine.cpp:91

void initializeAVRAsmPrinterPass(PassRegistry &)

BumpPtrAllocatorImpl<> BumpPtrAllocator

The standard BumpPtrAllocator which just uses the default template parameters.

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

MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...

static FuncInfoTy * create(BumpPtrAllocator &Allocator, const Function &F, const SubtargetTy *STI)

Factory function: default behavior is to call new using the supplied allocator.

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