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)
109 SPIRV::lookupSymbolicOperandByCategoryAndValue(Category,
Value);
121 SPIRV::lookupSymbolicOperandByCategoryAndValue(Category,
Value);
134 SPIRV::lookupCapabilityByCategoryAndValue(Category,
Value);
135 auto TableEnd =
ArrayRef(SPIRV::CapabilityEntries).end();
136 while (Capability && Capability->Category == Category &&
137 Capability->Value ==
Value) {
139 static_cast<SPIRV::Capability::Capability
>(Capability->ReqCapability));
140 if (++Capability == TableEnd)
148 SPIRV::OperandCategory::OperandCategory Category,
uint32_t Value) {
151 SPIRV::lookupEnvironmentByCategoryAndValue(Category,
Value);
152 auto TableEnd =
ArrayRef(SPIRV::EnvironmentEntries).end();
153 while (Environment && Environment->Category == Category &&
154 Environment->Value ==
Value) {
155 Environments.
push_back(
static_cast<SPIRV::Environment::Environment
>(
156 Environment->AllowedEnvironment));
157 if (++Environment == TableEnd)
167 SPIRV::lookupSymbolicOperandsEnabledByExtension(
168 Extension, SPIRV::OperandCategory::CapabilityOperand);
171 auto TableEnd =
ArrayRef(SPIRV::ExtensionEntries).end();
173 Entry->Category == SPIRV::OperandCategory::CapabilityOperand) {
175 if (Entry->ReqExtension == Extension)
177 static_cast<SPIRV::Capability::Capability
>(Entry->Value));
178 if (++Entry == TableEnd)
189 SPIRV::lookupExtensionByCategoryAndValue(Category,
Value);
192 auto TableEnd =
ArrayRef(SPIRV::ExtensionEntries).end();
193 while (Extension && Extension->Category == Category &&
194 Extension->Value ==
Value) {
196 static_cast<SPIRV::Extension::Extension
>(Extension->ReqExtension));
197 if (++Extension == TableEnd)
206 SPIRV::lookupSymbolicOperandByCategoryAndValue(
207 SPIRV::OperandCategory::BuiltInOperand, BuiltInValue);
210 return "__spirv_BuiltIn" +
211 SPIRV::getSymbolicOperandStr(
Lookup->Mnemonic).str();
212 return "UNKNOWN_BUILTIN";
216 SPIRV::BuiltIn::BuiltIn &BI) {
217 const std::string Prefix =
"__spirv_BuiltIn";
218 if (!Name.starts_with(Prefix))
222 SPIRV::lookupSymbolicOperandByCategoryAndMnemonic(
223 SPIRV::OperandCategory::BuiltInOperand,
224 Name.drop_front(Prefix.length()));
229 BI =
static_cast<SPIRV::BuiltIn::BuiltIn
>(
Lookup->Value);
235 case SPIRV::InstructionSet::OpenCL_std:
237 case SPIRV::InstructionSet::GLSL_std_450:
238 return "GLSL.std.450";
239 case SPIRV::InstructionSet::NonSemantic_Shader_DebugInfo_100:
240 return "NonSemantic.Shader.DebugInfo.100";
241 case SPIRV::InstructionSet::NonSemantic_AuxData:
242 return "NonSemantic.AuxData";
243 case SPIRV::InstructionSet::SPV_AMD_shader_trinary_minmax:
244 return "SPV_AMD_shader_trinary_minmax";
246 return "UNKNOWN_EXT_INST_SET";
249SPIRV::InstructionSet::InstructionSet
252 {SPIRV::InstructionSet::GLSL_std_450, SPIRV::InstructionSet::OpenCL_std,
253 SPIRV::InstructionSet::NonSemantic_Shader_DebugInfo_100,
254 SPIRV::InstructionSet::NonSemantic_AuxData}) {
264 SPIRV::lookupExtendedBuiltinBySetAndNumber(Set, InstructionNumber);
267 return "UNKNOWN_EXT_INST";
269 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)
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