[Mlir-commits] [mlir] [mlir][spirv] Add basic support for SPV_EXT_replicated_composites (PR #147067)
Mohammadreza Ameri Mahabadian
llvmlistbot at llvm.org
Fri Jul 11 03:55:27 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;
----------------
mahabadm wrote:
Thank you. I ended up using `interleaved(possibleTypes, " or ")` which is concise and addresses your point and also that I didn't want the `[` and `]` which interleaved_array creates.
https://github.com/llvm/llvm-project/pull/147067
More information about the Mlir-commits
mailing list