[Mlir-commits] [mlir] [MLIR][SPIRV] Add definition and (de)serialization for cache controls (PR #115461)
Jakub Kuderski
llvmlistbot at llvm.org
Fri Nov 8 07:17:53 PST 2024
================
@@ -217,10 +217,43 @@ static std::string getDecorationName(StringRef attrName) {
// similar here
if (attrName == "fp_rounding_mode")
return "FPRoundingMode";
+ // convertToCamelFromSnakeCase will not capitalize "INTEL".
+ if (attrName == "cache_control_load_intel")
+ return "CacheControlLoadINTEL";
+ if (attrName == "cache_control_store_intel")
+ return "CacheControlStoreINTEL";
return llvm::convertToCamelFromSnakeCase(attrName, /*capitalizeFirst=*/true);
}
+template <typename AttrTy, typename EmitF>
+LogicalResult processDecorationList(Location loc, Decoration decoration,
+ Attribute attrList, StringRef attrName,
+ EmitF emitter) {
+ auto arrayAttr = dyn_cast<ArrayAttr>(attrList);
+ if (!arrayAttr) {
+ return emitError(loc, "expecting array attribute of ")
+ << attrName << " for " << stringifyDecoration(decoration);
+ }
+ if (arrayAttr.empty()) {
+ return emitError(loc, "expecting non-empty array attribute of ")
+ << attrName << " for " << stringifyDecoration(decoration);
+ }
+ for (Attribute attr : arrayAttr.getValue()) {
+ auto cacheControlAttr = dyn_cast<AttrTy>(attr);
+ if (!cacheControlAttr) {
+ return emitError(loc, "expecting array attribute of ")
+ << attrName << " for " << stringifyDecoration(decoration);
+ }
+ // This named attribute encodes several decorations. Emit one per
+ // element in the array.
+ LogicalResult res = emitter(cacheControlAttr);
+ if (failed(res))
+ return res;
----------------
kuhar wrote:
nit
```suggestion
if (failed(emitter(cacheControlAttr)))
return failure();
```
https://github.com/llvm/llvm-project/pull/115461
More information about the Mlir-commits
mailing list