[Mlir-commits] [mlir] [mlir][spirv] add ExecutionModeIdOp (PR #186241)

Igor Wodiany llvmlistbot at llvm.org
Sat Mar 14 06:52:59 PDT 2026


================
@@ -919,6 +919,74 @@ void spirv::ExecutionModeOp::print(OpAsmPrinter &printer) {
     printer << ", " << llvm::interleaved(values.getAsValueRange<IntegerAttr>());
 }
 
+//===----------------------------------------------------------------------===//
+// spirv.ExecutionModeId
+//===----------------------------------------------------------------------===//
+
+void spirv::ExecutionModeIdOp::build(OpBuilder &builder, OperationState &state,
+                                     FuncOp function,
+                                     ExecutionMode executionMode,
+                                     ArrayRef<Attribute> params) {
+  build(builder, state, SymbolRefAttr::get(function),
+        ExecutionModeAttr::get(builder.getContext(), executionMode),
+        builder.getArrayAttr(params));
+}
+
+ParseResult spirv::ExecutionModeIdOp::parse(OpAsmParser &parser,
+                                            OperationState &result) {
+  ExecutionMode execMode;
+  if (Attribute fn;
+      parser.parseAttribute(fn, kFnNameAttrName, result.attributes) ||
+      parseEnumStrAttr<ExecutionModeAttr>(execMode, parser, result)) {
+    return failure();
+  }
+
+  SmallVector<Attribute, 4> values;
+  while (!parser.parseOptionalComma()) {
+    FlatSymbolRefAttr attr;
+    if (parser.parseAttribute(attr)) {
+      return failure();
+    }
+    values.push_back(attr);
+  }
+
+  StringRef valuesAttrName = getValuesAttrName(result.name);
+  ArrayAttr valuesAttr = parser.getBuilder().getArrayAttr(values);
+  result.addAttribute(valuesAttrName, valuesAttr);
+  return success();
+}
+
+void spirv::ExecutionModeIdOp::print(OpAsmPrinter &printer) {
+  printer << " ";
+  printer.printSymbolName(getFn());
+  printer << " \"" << stringifyExecutionMode(getExecutionMode()) << "\"";
+  for (const auto &value : getValues()) {
+    printer << ", ";
+    printer.printSymbolName(cast<FlatSymbolRefAttr>(value).getValue());
+  }
+}
+
+LogicalResult spirv::ExecutionModeIdOp::verify() {
+  // TODO: Add check to ensure that ExecutionMode is an execution mode that
----------------
IgWod wrote:

I think it's okay to hardcode a list in a case like this. If someone wants to enable a new extension that extends that list, it's on them to do it.

https://github.com/llvm/llvm-project/pull/186241


More information about the Mlir-commits mailing list