[Mlir-commits] [mlir] [mlir][spirv] Add basic support for SPV_EXT_replicated_composites (PR #147067)

Jakub Kuderski llvmlistbot at llvm.org
Thu Jul 10 10:19:53 PDT 2025


================
@@ -798,15 +798,21 @@ LogicalResult spirv::EXTConstantCompositeReplicateOp::verify() {
   Type valueType = dyn_cast<TypedAttr>(getValue()).getType();
   Type compositeElementType =
       dyn_cast<spirv::CompositeType>(getType()).getElementType(0);
-  while (compositeElementType != valueType &&
-         isa<spirv::CompositeType>(compositeElementType)) {
-    compositeElementType =
-        dyn_cast<spirv::CompositeType>(compositeElementType).getElementType(0);
-  }
-
-  if (compositeElementType != valueType)
+  SmallVector<Type, 3> possibleTypes = {compositeElementType};
+  while (auto type = dyn_cast<spirv::CompositeType>(compositeElementType)) {
+    compositeElementType = type.getElementType(0);
+    possibleTypes.push_back(compositeElementType);
+  }
+
+  if (!is_contained(possibleTypes, valueType)) {
+    std::string strTypes;
+    llvm::raw_string_ostream os(strTypes);
+    interleave(
+        possibleTypes, os, [&](Type type) { os << "'" << type << "'"; },
+        " or ");
     return emitError("expected value attribute type ")
-           << compositeElementType << ", but got: " << valueType;
+           << strTypes << ", but got: " << valueType;
----------------
kuhar wrote:

This should work and be much more concise
```suggestion
           << llvm::interleaved_array(possibleTypes) << ", but got: " << valueType;
```

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


More information about the Mlir-commits mailing list