LLVM: lib/Target/SPIRV/SPIRVSubtarget.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

22

23using namespace llvm;

24

25#define DEBUG_TYPE "spirv-subtarget"

26

27#define GET_SUBTARGETINFO_TARGET_DESC

28#define GET_SUBTARGETINFO_CTOR

29#include "SPIRVGenSubtargetInfo.inc"

30

33 cl::desc("SPIR-V Translator compatibility mode"),

35

39 cl::desc("Specify list of enabled SPIR-V extensions"));

40

41

42

44 const std::setSPIRV::Extension::Extension &AllowList) {

45 Extensions.insert(AllowList.begin(), AllowList.end());

46}

47

48

50 return Target.empty() || Target >= VerToCompareTo;

51}

52

54 const std::string &FS,

57 PointerSize(TM.getPointerSizeInBits( 0)), InstrInfo(),

58 FrameLowering(initSubtargetDependencies(CPU, FS)), TLInfo(TM, *this),

59 TargetTriple(TT) {

60 switch (TT.getSubArch()) {

63 break;

66 break;

69 break;

72 break;

74 default:

76 break;

79 break;

82 break;

83 }

85

86

87 initAvailableExtensions();

88 initAvailableExtInstSets();

89

90 GR = std::make_unique(PointerSize);

91 CallLoweringInfo = std::make_unique(TLInfo, GR.get());

92 InlineAsmInfo = std::make_unique(TLInfo);

93 Legalizer = std::make_unique(*this);

94 RegBankInfo = std::make_unique();

95 InstSelector.reset(

97}

98

102 return *this;

103}

104

106 return AvailableExtensions.contains(E);

107}

108

110 SPIRV::InstructionSet::InstructionSet E) const {

111 return AvailableExtInstSets.contains(E);

112}

113

114SPIRV::InstructionSet::InstructionSet

117 return SPIRV::InstructionSet::OpenCL_std;

118 else

119 return SPIRV::InstructionSet::GLSL_std_450;

120}

121

123 return isAtLeastVer(SPIRVVersion, VerToCompareTo);

124}

125

128 return false;

129 return isAtLeastVer(OpenCLVersion, VerToCompareTo);

130}

131

132

133

136}

137

138void SPIRVSubtarget::initAvailableExtensions() {

139 AvailableExtensions.clear();

141}

142

143

144

145void SPIRVSubtarget::initAvailableExtInstSets() {

146 AvailableExtInstSets.clear();

148 AvailableExtInstSets.insert(SPIRV::InstructionSet::GLSL_std_450);

149 else

150 AvailableExtInstSets.insert(SPIRV::InstructionSet::OpenCL_std);

151

152

154 SPIRV::Extension::SPV_AMD_shader_trinary_minmax_extension)) {

155 AvailableExtInstSets.insert(

156 SPIRV::InstructionSet::SPV_AMD_shader_trinary_minmax);

157 }

158}

static bool isAtLeastVer(VersionTuple Target, VersionTuple VerToCompareTo)

static cl::opt< bool > SPVTranslatorCompat("translator-compatibility-mode", cl::desc("SPIR-V Translator compatibility mode"), cl::Optional, cl::init(false))

static cl::opt< std::set< SPIRV::Extension::Extension >, false, SPIRVExtensionsParser > Extensions("spirv-ext", cl::desc("Specify list of enabled SPIR-V extensions"))

SPIRVSubtarget & initSubtargetDependencies(StringRef CPU, StringRef FS)

static void addExtensionsToClOpt(const std::set< SPIRV::Extension::Extension > &AllowList)

bool canDirectlyComparePointers() const

bool isAtLeastSPIRVVer(VersionTuple VerToCompareTo) const

bool isAtLeastOpenCLVer(VersionTuple VerToCompareTo) const

void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)

bool canUseExtInstSet(SPIRV::InstructionSet::InstructionSet E) const

SPIRVSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, const SPIRVTargetMachine &TM)

SPIRV::InstructionSet::InstructionSet getPreferredInstructionSet() const

bool canUseExtension(SPIRV::Extension::Extension E) const

bool contains(const T &V) const

Check if the SmallSet contains the given element.

std::pair< const_iterator, bool > insert(const T &V)

insert - Insert an element into the set if it isn't already there.

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

Target - Wrapper for Target specific information.

Triple - Helper class for working with autoconf configuration names.

Represents a version number in the form major[.minor[.subminor[.build]]].

initializer< Ty > init(const Ty &Val)

This is an optimization pass for GlobalISel generic memory operations.

InstructionSelector * createSPIRVInstructionSelector(const SPIRVTargetMachine &TM, const SPIRVSubtarget &Subtarget, const RegisterBankInfo &RBI)

Command line parser for toggling SPIR-V extensions.