@@ -48,6 +48,27 @@ struct TargetEnvAttributeStorage : public AttributeStorage {
48
48
} // namespace spirv
49
49
} // namespace mlir
50
50
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
+
51
72
spirv::TargetEnvAttr spirv::TargetEnvAttr::get (IntegerAttr version,
52
73
ArrayAttr extensions,
53
74
ArrayAttr capabilities,
@@ -98,8 +119,8 @@ ArrayAttr spirv::TargetEnvAttr::getCapabilitiesAttr() {
98
119
return getImpl ()->capabilities .cast <ArrayAttr>();
99
120
}
100
121
101
- DictionaryAttr spirv::TargetEnvAttr::getResourceLimits () {
102
- return getImpl ()->limits .cast <DictionaryAttr >();
122
+ spirv::ResourceLimitsAttr spirv::TargetEnvAttr::getResourceLimits () {
123
+ return getImpl ()->limits .cast <spirv::ResourceLimitsAttr >();
103
124
}
104
125
105
126
LogicalResult spirv::TargetEnvAttr::verifyConstructionInvariants (
0 commit comments