53#define GET_SymbolicOperands_DECL
54#define GET_SymbolicOperands_IMPL
55#define GET_ExtensionEntries_DECL
56#define GET_ExtensionEntries_IMPL
57#define GET_CapabilityEntries_DECL
58#define GET_CapabilityEntries_IMPL
59#define GET_EnvironmentEntries_DECL
60#define GET_EnvironmentEntries_IMPL
61#define GET_ExtendedBuiltins_DECL
62#define GET_ExtendedBuiltins_IMPL
63#include "SPIRVGenTables.inc"
70 SPIRV::lookupSymbolicOperandByCategoryAndValue(Category,
Value);
73 return SPIRV::getSymbolicOperandStr(
Lookup->Mnemonic).str();
74 if (Category != SPIRV::OperandCategory::ImageOperandOperand &&
75 Category != SPIRV::OperandCategory::FPFastMathModeOperand &&
76 Category != SPIRV::OperandCategory::SelectionControlOperand &&
77 Category != SPIRV::OperandCategory::LoopControlOperand &&
78 Category != SPIRV::OperandCategory::FunctionControlOperand &&
79 Category != SPIRV::OperandCategory::MemorySemanticsOperand &&
80 Category != SPIRV::OperandCategory::MemoryOperandOperand &&
81 Category != SPIRV::OperandCategory::KernelProfilingInfoOperand &&
82 Category != SPIRV::OperandCategory::SpecConstantOpOperandsOperand)
86 std::string Separator;
88 SPIRV::lookupSymbolicOperandByCategory(Category);
90 auto TableEnd =
ArrayRef(SPIRV::SymbolicOperands).end();
91 while (EnumValueInCategory && EnumValueInCategory->
Category == Category) {
92 if ((EnumValueInCategory->
Value != 0) &&
95 SPIRV::getSymbolicOperandStr(EnumValueInCategory->
Mnemonic).str();
98 if (++EnumValueInCategory == TableEnd)
114 SPIRV::lookupSymbolicOperandByCategoryAndValue(Category,
Value);
126 SPIRV::lookupSymbolicOperandByCategoryAndValue(Category,
Value);
139 SPIRV::lookupCapabilityByCategoryAndValue(Category,
Value);
140 auto TableEnd =
ArrayRef(SPIRV::CapabilityEntries).end();
141 while (Capability && Capability->Category == Category &&
142 Capability->Value ==
Value) {
144 static_cast<SPIRV::Capability::Capability
>(Capability->ReqCapability));
145 if (++Capability == TableEnd)
153 SPIRV::OperandCategory::OperandCategory Category,
uint32_t Value) {
156 SPIRV::lookupEnvironmentByCategoryAndValue(Category,
Value);
157 auto TableEnd =
ArrayRef(SPIRV::EnvironmentEntries).end();
158 while (Environment && Environment->Category == Category &&
159 Environment->Value ==
Value) {
160 Environments.
push_back(
static_cast<SPIRV::Environment::Environment
>(
161 Environment->AllowedEnvironment));
162 if (++Environment == TableEnd)
172 SPIRV::lookupSymbolicOperandsEnabledByExtension(
173 Extension, SPIRV::OperandCategory::CapabilityOperand);
176 auto TableEnd =
ArrayRef(SPIRV::ExtensionEntries).end();
178 Entry->Category == SPIRV::OperandCategory::CapabilityOperand) {
180 if (Entry->ReqExtension == Extension)
182 static_cast<SPIRV::Capability::Capability
>(Entry->Value));
183 if (++Entry == TableEnd)
194 SPIRV::lookupExtensionByCategoryAndValue(Category,
Value);
197 auto TableEnd =
ArrayRef(SPIRV::ExtensionEntries).end();
198 while (Extension && Extension->Category == Category &&
199 Extension->Value ==
Value) {
201 static_cast<SPIRV::Extension::Extension
>(Extension->ReqExtension));
202 if (++Extension == TableEnd)
211 SPIRV::lookupSymbolicOperandByCategoryAndValue(
212 SPIRV::OperandCategory::BuiltInOperand, BuiltInValue);
215 return "__spirv_BuiltIn" +
216 SPIRV::getSymbolicOperandStr(
Lookup->Mnemonic).str();
217 return "UNKNOWN_BUILTIN";
221 SPIRV::BuiltIn::BuiltIn &BI) {
222 const std::string Prefix =
"__spirv_BuiltIn";
223 if (!Name.starts_with(Prefix))
227 SPIRV::lookupSymbolicOperandByCategoryAndMnemonic(
228 SPIRV::OperandCategory::BuiltInOperand,
229 Name.drop_front(Prefix.length()));
234 BI =
static_cast<SPIRV::BuiltIn::BuiltIn
>(
Lookup->Value);
240 case SPIRV::InstructionSet::OpenCL_std:
242 case SPIRV::InstructionSet::GLSL_std_450:
243 return "GLSL.std.450";
244 case SPIRV::InstructionSet::NonSemantic_Shader_DebugInfo_100:
245 return "NonSemantic.Shader.DebugInfo.100";
246 case SPIRV::InstructionSet::NonSemantic_AuxData:
247 return "NonSemantic.AuxData";
248 case SPIRV::InstructionSet::SPV_AMD_shader_trinary_minmax:
249 return "SPV_AMD_shader_trinary_minmax";
251 return "UNKNOWN_EXT_INST_SET";
254SPIRV::InstructionSet::InstructionSet
257 {SPIRV::InstructionSet::GLSL_std_450, SPIRV::InstructionSet::OpenCL_std,
258 SPIRV::InstructionSet::NonSemantic_Shader_DebugInfo_100,
259 SPIRV::InstructionSet::NonSemantic_AuxData}) {
269 SPIRV::lookupExtendedBuiltinBySetAndNumber(Set, InstructionNumber);
272 return "UNKNOWN_EXT_INST";
274 return SPIRV::getExtendedBuiltinStr(
Lookup->Name).str();
static cl::opt< ExtensionSet, false, SPIRVExtensionsParser > Extensions("spirv-ext", cl::desc("Specify list of enabled SPIR-V extensions"))
static int Lookup(ArrayRef< TableEntry > Table, unsigned Opcode)
void push_back(const T &Elt)
Represent a constant reference to a string, i.e.
LLVM Value Representation.
Represents a version number in the form major[.minor[.subminor[.build]]].
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
This is an optimization pass for GlobalISel generic memory operations.
SmallVector< SPIRV::Environment::Environment, 8 > EnvironmentList
ExtensionList getSymbolicOperandExtensions(SPIRV::OperandCategory::OperandCategory Category, uint32_t Value)
std::string getExtInstName(SPIRV::InstructionSet::InstructionSet Set, uint32_t InstructionNumber)
CapabilityList getSymbolicOperandCapabilities(SPIRV::OperandCategory::OperandCategory Category, uint32_t Value)
SmallVector< SPIRV::Extension::Extension, 8 > ExtensionList
std::string getExtInstSetName(SPIRV::InstructionSet::InstructionSet Set)
bool getSpirvBuiltInIdByName(llvm::StringRef Name, SPIRV::BuiltIn::BuiltIn &BI)
VersionTuple getSymbolicOperandMaxVersion(SPIRV::OperandCategory::OperandCategory Category, uint32_t Value)
EnvironmentList getSymbolicOperandAllowedEnvironments(SPIRV::OperandCategory::OperandCategory Category, uint32_t Value)
static VersionTuple decodeVersion(uint32_t V)
CapabilityList getCapabilitiesEnabledByExtension(SPIRV::Extension::Extension Extension)
SPIRV::InstructionSet::InstructionSet getExtInstSetFromString(std::string SetName)
std::string getSymbolicOperandMnemonic(SPIRV::OperandCategory::OperandCategory Category, int32_t Value)
ArrayRef(const T &OneElt) -> ArrayRef< T >
VersionTuple getSymbolicOperandMinVersion(SPIRV::OperandCategory::OperandCategory Category, uint32_t Value)
SmallVector< SPIRV::Capability::Capability, 8 > CapabilityList
std::string getLinkStringForBuiltIn(SPIRV::BuiltIn::BuiltIn BuiltInValue)
Capability::Capability ReqCapability
OperandCategory::OperandCategory Category
Environment::Environment AllowedEnvironment
OperandCategory::OperandCategory Category
Extension::Extension ReqExtension
OperandCategory::OperandCategory Category
OperandCategory::OperandCategory Category
StringTable::Offset Mnemonic