aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp')
-rw-r--r--llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp b/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp
index 0b7b0160dee7..1af7b7a5d784 100644
--- a/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp
+++ b/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp
@@ -129,6 +129,24 @@ getSymbolicOperandCapabilities(SPIRV::OperandCategory::OperandCategory Category,
return Capabilities;
}
+CapabilityList
+getCapabilitiesEnabledByExtension(SPIRV::Extension::Extension Extension) {
+ const SPIRV::ExtensionEntry *Entry =
+ SPIRV::lookupSymbolicOperandsEnabledByExtension(
+ Extension, SPIRV::OperandCategory::CapabilityOperand);
+
+ CapabilityList Capabilities;
+ while (Entry &&
+ Entry->Category == SPIRV::OperandCategory::CapabilityOperand &&
+ Entry->ReqExtension == Extension) {
+ Capabilities.push_back(
+ static_cast<SPIRV::Capability::Capability>(Entry->Value));
+ ++Entry;
+ }
+
+ return Capabilities;
+}
+
ExtensionList
getSymbolicOperandExtensions(SPIRV::OperandCategory::OperandCategory Category,
uint32_t Value) {
@@ -199,8 +217,7 @@ getExtInstSetFromString(std::string SetName) {
std::string getExtInstName(SPIRV::InstructionSet::InstructionSet Set,
uint32_t InstructionNumber) {
const SPIRV::ExtendedBuiltin *Lookup =
- SPIRV::lookupExtendedBuiltinBySetAndNumber(
- SPIRV::InstructionSet::OpenCL_std, InstructionNumber);
+ SPIRV::lookupExtendedBuiltinBySetAndNumber(Set, InstructionNumber);
if (!Lookup)
return "UNKNOWN_EXT_INST";