@@ -555,6 +555,22 @@ def BroadcastOp : LinalgStructuredBase_Op<"broadcast", [
555555// Op definition for MatmulOp
556556//===----------------------------------------------------------------------===//
557557
558+
559+ // DONOTMERGE(rolfmorel): explain why the below is necessary
560+ def DefaultValuedMatmulIndexingMapsAttr :
561+ Attr<AffineMapArrayAttr.predicate, AffineMapArrayAttr.summary> {
562+ let storageType = AffineMapArrayAttr.storageType;
563+ let returnType = AffineMapArrayAttr.returnType;
564+ let convertFromStorage = AffineMapArrayAttr.convertFromStorage;
565+ let constBuilderCall = "$_builder.getAffineMapArrayAttr($0.empty() ? MatmulOp::getDefaultIndexingMaps($_builder.getContext()) : $0)";
566+ let defaultValue = "SmallVector<AffineMap>()";
567+ let valueType = AffineMapArrayAttr.valueType;
568+ let isOptional = 1;
569+
570+ let baseAttr = AffineMapArrayAttr;
571+ }
572+
573+
558574def MatmulOp : LinalgStructuredBase_Op<"matmul", [
559575 AttrSizedOperandSegments,
560576 LinalgContractionOpInterface]> {
@@ -606,7 +622,7 @@ def MatmulOp : LinalgStructuredBase_Op<"matmul", [
606622 let arguments = (ins
607623 Variadic<AnyType>:$inputs,
608624 Variadic<AnyShaped>:$outputs,
609- DefaultValuedOptionalAttr<AffineMapArrayAttr, "{}"> :$indexing_maps,
625+ DefaultValuedMatmulIndexingMapsAttr :$indexing_maps, // DONOTMERGE(rolfmorel): explain why this is necessary
610626 DefaultValuedOptionalAttr<TypeFnAttr, "TypeFn::cast_signed">:$cast
611627 );
612628 let results = (outs Variadic<AnyRankedTensor>:$result_tensors);
0 commit comments