47using namespace OperandCategory;
49using namespace Environment;
50using namespace Capability;
51using namespace InstructionSet;
52#define GET_SymbolicOperands_DECL
53#define GET_SymbolicOperands_IMPL
54#define GET_ExtensionEntries_DECL
55#define GET_ExtensionEntries_IMPL
56#define GET_CapabilityEntries_DECL
57#define GET_CapabilityEntries_IMPL
58#define GET_EnvironmentEntries_DECL
59#define GET_EnvironmentEntries_IMPL
60#define GET_ExtendedBuiltins_DECL
61#define GET_ExtendedBuiltins_IMPL
62#include "SPIRVGenTables.inc"
69 SPIRV::lookupSymbolicOperandByCategoryAndValue(Category,
Value);
72 return Lookup->Mnemonic.str();
73 if (Category != SPIRV::OperandCategory::ImageOperandOperand &&
74 Category != SPIRV::OperandCategory::FPFastMathModeOperand &&
75 Category != SPIRV::OperandCategory::SelectionControlOperand &&
76 Category != SPIRV::OperandCategory::LoopControlOperand &&
77 Category != SPIRV::OperandCategory::FunctionControlOperand &&
78 Category != SPIRV::OperandCategory::MemorySemanticsOperand &&
79 Category != SPIRV::OperandCategory::MemoryOperandOperand &&
80 Category != SPIRV::OperandCategory::KernelProfilingInfoOperand &&
81 Category != SPIRV::OperandCategory::SpecConstantOpOperandsOperand)
85 std::string Separator;
87 SPIRV::lookupSymbolicOperandByCategory(Category);
89 auto TableEnd =
ArrayRef(SPIRV::SymbolicOperands).
end();
90 while (EnumValueInCategory && EnumValueInCategory->
Category == Category) {
91 if ((EnumValueInCategory->
Value != 0) &&
96 if (++EnumValueInCategory == TableEnd)
107 SPIRV::lookupSymbolicOperandByCategoryAndValue(Category,
Value);
119 SPIRV::lookupSymbolicOperandByCategoryAndValue(Category,
Value);
132 SPIRV::lookupCapabilityByCategoryAndValue(Category,
Value);
133 auto TableEnd =
ArrayRef(SPIRV::CapabilityEntries).
end();
134 while (Capability && Capability->
Category == Category &&
137 static_cast<SPIRV::Capability::Capability
>(Capability->
ReqCapability));
138 if (++Capability == TableEnd)
146 SPIRV::OperandCategory::OperandCategory Category,
uint32_t Value) {
149 SPIRV::lookupEnvironmentByCategoryAndValue(Category,
Value);
150 auto TableEnd =
ArrayRef(SPIRV::EnvironmentEntries).
end();
151 while (Environment && Environment->
Category == Category &&
153 Environments.
push_back(
static_cast<SPIRV::Environment::Environment
>(
155 if (++Environment == TableEnd)
165 SPIRV::lookupSymbolicOperandsEnabledByExtension(
166 Extension, SPIRV::OperandCategory::CapabilityOperand);
169 auto TableEnd =
ArrayRef(SPIRV::ExtensionEntries).
end();
171 Entry->Category == SPIRV::OperandCategory::CapabilityOperand) {
175 static_cast<SPIRV::Capability::Capability
>(Entry->Value));
176 if (++Entry == TableEnd)
187 SPIRV::lookupExtensionByCategoryAndValue(Category,
Value);
190 auto TableEnd =
ArrayRef(SPIRV::ExtensionEntries).
end();
194 static_cast<SPIRV::Extension::Extension
>(
Extension->ReqExtension));
204 SPIRV::lookupSymbolicOperandByCategoryAndValue(
205 SPIRV::OperandCategory::BuiltInOperand, BuiltInValue);
208 return "__spirv_BuiltIn" +
Lookup->Mnemonic.str();
209 return "UNKNOWN_BUILTIN";
213 SPIRV::BuiltIn::BuiltIn &BI) {
214 const std::string Prefix =
"__spirv_BuiltIn";
215 if (!
Name.starts_with(Prefix))
219 SPIRV::lookupSymbolicOperandByCategoryAndMnemonic(
220 SPIRV::OperandCategory::BuiltInOperand,
221 Name.drop_front(Prefix.length()));
226 BI =
static_cast<SPIRV::BuiltIn::BuiltIn
>(
Lookup->Value);
232 case SPIRV::InstructionSet::OpenCL_std:
234 case SPIRV::InstructionSet::GLSL_std_450:
235 return "GLSL.std.450";
236 case SPIRV::InstructionSet::NonSemantic_Shader_DebugInfo_100:
237 return "NonSemantic.Shader.DebugInfo.100";
238 case SPIRV::InstructionSet::SPV_AMD_shader_trinary_minmax:
239 return "SPV_AMD_shader_trinary_minmax";
241 return "UNKNOWN_EXT_INST_SET";
244SPIRV::InstructionSet::InstructionSet
247 {SPIRV::InstructionSet::GLSL_std_450, SPIRV::InstructionSet::OpenCL_std,
248 SPIRV::InstructionSet::NonSemantic_Shader_DebugInfo_100}) {
258 SPIRV::lookupExtendedBuiltinBySetAndNumber(Set, InstructionNumber);
261 return "UNKNOWN_EXT_INST";
263 return Lookup->Name.str();
static cl::opt< std::set< SPIRV::Extension::Extension >, false, SPIRVExtensionsParser > Extensions("spirv-ext", cl::desc("Specify list of enabled SPIR-V extensions"))
static int Lookup(ArrayRef< TableEntry > Table, unsigned Opcode)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
void push_back(const T &Elt)
StringRef - Represent a constant reference to a string, i.e.
std::string str() const
str - Get the contents as an std::string.
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.
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)
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)
SmallVector< SPIRV::Extension::Extension, 8 > ExtensionList
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