Skip to content

Commit 440ef33

Browse files
committed
[mlir][spirv] Add get() method to TargetEnvAttr taking raw values
Also make the getResourceLimits() method more explicit about its return type. Differential Revision: https://reviews.llvm.org/D75484
1 parent 5891e73 commit 440ef33

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

mlir/include/mlir/Dialect/SPIRV/TargetAndABI.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ class TargetEnvAttr
5252
using Base::Base;
5353

5454
/// Gets a TargetEnvAttr instance.
55+
static TargetEnvAttr get(Version version, ArrayRef<Extension> extensions,
56+
ArrayRef<Capability> capabilities,
57+
DictionaryAttr limits);
5558
static TargetEnvAttr get(IntegerAttr version, ArrayAttr extensions,
5659
ArrayAttr capabilities, DictionaryAttr limits);
5760

@@ -86,7 +89,7 @@ class TargetEnvAttr
8689
ArrayAttr getCapabilitiesAttr();
8790

8891
/// Returns the target resource limits.
89-
DictionaryAttr getResourceLimits();
92+
ResourceLimitsAttr getResourceLimits();
9093

9194
static bool kindof(unsigned kind) { return kind == AttrKind::TargetEnv; }
9295

mlir/lib/Dialect/SPIRV/TargetAndABI.cpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,27 @@ struct TargetEnvAttributeStorage : public AttributeStorage {
4848
} // namespace spirv
4949
} // namespace mlir
5050

51+
spirv::TargetEnvAttr spirv::TargetEnvAttr::get(
52+
spirv::Version version, ArrayRef<spirv::Extension> extensions,
53+
ArrayRef<spirv::Capability> capabilities, DictionaryAttr limits) {
54+
Builder b(limits.getContext());
55+
56+
auto versionAttr = b.getI32IntegerAttr(static_cast<uint32_t>(version));
57+
58+
SmallVector<Attribute, 4> extAttrs;
59+
extAttrs.reserve(extensions.size());
60+
for (spirv::Extension ext : extensions)
61+
extAttrs.push_back(b.getStringAttr(spirv::stringifyExtension(ext)));
62+
63+
SmallVector<Attribute, 4> capAttrs;
64+
capAttrs.reserve(capabilities.size());
65+
for (spirv::Capability cap : capabilities)
66+
capAttrs.push_back(b.getI32IntegerAttr(static_cast<uint32_t>(cap)));
67+
68+
return get(versionAttr, b.getArrayAttr(extAttrs), b.getArrayAttr(capAttrs),
69+
limits);
70+
}
71+
5172
spirv::TargetEnvAttr spirv::TargetEnvAttr::get(IntegerAttr version,
5273
ArrayAttr extensions,
5374
ArrayAttr capabilities,
@@ -98,8 +119,8 @@ ArrayAttr spirv::TargetEnvAttr::getCapabilitiesAttr() {
98119
return getImpl()->capabilities.cast<ArrayAttr>();
99120
}
100121

101-
DictionaryAttr spirv::TargetEnvAttr::getResourceLimits() {
102-
return getImpl()->limits.cast<DictionaryAttr>();
122+
spirv::ResourceLimitsAttr spirv::TargetEnvAttr::getResourceLimits() {
123+
return getImpl()->limits.cast<spirv::ResourceLimitsAttr>();
103124
}
104125

105126
LogicalResult spirv::TargetEnvAttr::verifyConstructionInvariants(

0 commit comments

Comments
 (0)