DefaultValuedOptionalAttr<DenseI64ArrayAttr, "{}">:$interchange);
let results = (outs PDL_Operation:$tiled_linalg_op,
Variadic<PDL_Operation>:$loops);
+ let builders = [
+ OpBuilder<(ins "Value":$target,
+ "ArrayRef<int64_t>":$staticTileSizes,
+ CArg<"ArrayRef<int64_t>", "{}">:$interchange)>,
+ OpBuilder<(ins "Value":$target,
+ "ArrayRef<OpFoldResult>":$mixedTileSizes,
+ CArg<"ArrayRef<int64_t>", "{}">:$interchange)>
+ ];
let hasCustomAssemblyFormat = 1;
//===----------------------------------------------------------------------===//
// TileOp
//===----------------------------------------------------------------------===//
+void transform::TileOp::build(OpBuilder &builder, OperationState &result,
+ Value target, ArrayRef<int64_t> staticTileSizes,
+ ArrayRef<int64_t> interchange) {
+ return build(builder, result,
+ /*target=*/target,
+ /*mixedTileSizes=*/
+ getAsOpFoldResult(builder.getI64ArrayAttr(staticTileSizes)),
+ interchange);
+}
+
+void transform::TileOp::build(OpBuilder &builder, OperationState &result,
+ Value target,
+ ArrayRef<OpFoldResult> mixedTileSizes,
+ ArrayRef<int64_t> interchange) {
+ SmallVector<int64_t> staticTileSizes;
+ SmallVector<Value> dynamicTileSizes;
+ dispatchIndexOpFoldResults(mixedTileSizes, dynamicTileSizes, staticTileSizes);
+ // Call the default builder which sets up the proper operands segment sizes
+ // attributes for multiple variadic operands. In the absence of this, horrible
+ // bugs ensue.
+ MLIRContext *ctx = builder.getContext();
+ auto operationType = pdl::OperationType::get(ctx);
+ auto staticTileSizesAttr = builder.getDenseI64ArrayAttr(staticTileSizes);
+ build(builder, result,
+ /*resultTypes=*/TypeRange{operationType, operationType},
+ /*target=*/target,
+ /*dynamic_sizes=*/dynamicTileSizes,
+ /*static_sizes=*/staticTileSizesAttr,
+ /*interchange=*/builder.getDenseI64ArrayAttr(interchange));
+}
DiagnosedSilenceableFailure
transform::TileOp::apply(TransformResults &transformResults,