LLVM: lib/Target/AMDGPU/R600TargetMachine.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

23#include

24

25using namespace llvm;

26

29 cl::desc("Use StructurizeCFG IR pass"),

31

33 cl::desc("Use if conversion pass"),

35

37 "amdgpu-function-calls", cl::desc("Enable AMDGPU function call support"),

40

42 return new ScheduleDAGMILive(C, std::make_unique());

43}

44

46 "Run R600's custom scheduler",

48

49

50

51

52

56 std::optionalReloc::Model RM,

57 std::optionalCodeModel::Model CM,

61

62

66}

67

72

74 SubtargetKey.append(FS);

75

76 auto &I = SubtargetMap[SubtargetKey];

77 if (I) {

78

79

80

82 I = std::make_unique(TargetTriple, GPU, FS, *this);

83 }

84

85 return I.get();

86}

87

91}

92

93namespace {

95public:

98

102 }

103

104 bool addPreISel() override;

105 bool addInstSelector() override;

106 void addPreRegAlloc() override;

107 void addPreSched2() override;

108 void addPreEmitPass() override;

109};

110}

111

112

113

114

115

116bool R600PassConfig::addPreISel() {

118

121 return false;

122}

123

124bool R600PassConfig::addInstSelector() {

125 addPass(createR600ISelDag(getAMDGPUTargetMachine(), getOptLevel()));

126 return false;

127}

128

130

131void R600PassConfig::addPreSched2() {

136}

137

138void R600PassConfig::addPreEmitPass() {

144}

145

147 return new R600PassConfig(*this, PM);

148}

149

155 return CGPB.buildPipeline(MPM, Out, DwoOut, FileType);

156}

157

161 return R600MachineFunctionInfo::create(

163}

164

165

166

167

168

174}

175

177

178}

179

181 CreateMCStreamer) const {

182

183}

184

186

188}

PassInstrumentationCallbacks PIC

R600 Machine Scheduler interface.

static cl::opt< bool > EnableR600IfConvert("r600-if-convert", cl::desc("Use if conversion pass"), cl::ReallyHidden, cl::init(true))

static cl::opt< bool > EnableR600StructurizeCFG("r600-ir-structurize", cl::desc("Use StructurizeCFG IR pass"), cl::init(true))

static ScheduleDAGInstrs * createR600MachineScheduler(MachineSchedContext *C)

static MachineSchedRegistry R600SchedRegistry("r600", "Run R600's custom scheduler", createR600MachineScheduler)

static cl::opt< bool, true > EnableAMDGPUFunctionCallsOpt("amdgpu-function-calls", cl::desc("Enable AMDGPU function call support"), cl::location(AMDGPUTargetMachine::EnableFunctionCalls), cl::init(true), cl::Hidden)

The AMDGPU TargetMachine interface definition for hw codegen targets.

This file a TargetTransformInfo::Concept conforming object specific to the R600 target machine.

bool addPreISel() override

Methods with trivial inline returns are convenient points in the common codegen pass pipeline where t...

const TargetSubtargetInfo * getSubtargetImpl() const

StringRef getFeatureString(const Function &F) const

static bool EnableFunctionCalls

StringRef getGPUName(const Function &F) const

Allocate memory in an ever growing pool, as if by bump-pointer.

This class provides access to building LLVM's passes.

Error buildPipeline(ModulePassManager &MPM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType) const

Lightweight error class with error context and mandatory checking.

static ErrorSuccess success()

Create a success value.

MachineSchedRegistry provides a selection of available machine instruction schedulers.

void addPreISel(AddIRPass &addPass) const

R600CodeGenPassBuilder(R600TargetMachine &TM, const CGPassBuilderOption &Opts, PassInstrumentationCallbacks *PIC)

void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const

Error addInstSelector(AddMachinePass &) const

Error buildCodeGenPipeline(ModulePassManager &MPM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, const CGPassBuilderOption &Opt, PassInstrumentationCallbacks *PIC) override

R600TargetMachine(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)

TargetPassConfig * createPassConfig(PassManagerBase &PM) override

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

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

Create the target's instance of MachineFunctionInfo.

TargetTransformInfo getTargetTransformInfo(const Function &F) const override

Get a TargetTransformInfo implementation for the target.

A ScheduleDAG for scheduling lists of MachineInstr.

ScheduleDAGMILive is an implementation of ScheduleDAGInstrs that schedules machine instructions while...

SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...

void append(StringRef RHS)

Append from a StringRef.

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

Primary interface to the complete machine description for the target machine.

Triple TargetTriple

Triple string, CPU name, and target feature strings the TargetMachine instance is created with.

void setRequiresStructuredCFG(bool Value)

std::unique_ptr< const MCSubtargetInfo > STI

void resetTargetOptions(const Function &F) const

Reset the target options based on the function's attributes.

Target-Independent Code Generator Pass Configuration Options.

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

An abstract base class for streams implementations that also support a pwrite operation.

@ C

The default llvm calling convention, compatible with C.

initializer< Ty > init(const Ty &Val)

LocationClass< Ty > location(Ty &L)

This is an optimization pass for GlobalISel generic memory operations.

char & FinalizeMachineBundlesID

FinalizeMachineBundles - This pass finalize machine instruction bundles (created earlier,...

FunctionPass * createR600ExpandSpecialInstrsPass()

Pass * createStructurizeCFGPass(bool SkipUniformRegions=false)

When SkipUniformRegions is true the structizer will not structurize regions that only contain uniform...

FunctionPass * createR600Packetizer()

CodeGenFileType

These enums are meant to be passed into addPassesToEmitFile to indicate what type of file to emit,...

FunctionPass * createR600EmitClauseMarkers()

CodeGenOptLevel

Code generation optimization level.

FunctionPass * createR600ISelDag(TargetMachine &TM, CodeGenOptLevel OptLevel)

This pass converts a legalized DAG into a R600-specific.

FunctionPass * createR600ControlFlowFinalizer()

FunctionPass * createR600ClauseMergePass()

FunctionPass * createR600VectorRegMerger()

char & IfConverterID

IfConverter - This pass performs machine code if conversion.

FunctionPass * createR600MachineCFGStructurizerPass()

bool RequiresCodeGenSCCOrder

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

MachineSchedContext provides enough context from the MachineScheduler pass for the target to instanti...

This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...