Skip to content

Commit a758bcd

Browse files
authored
[mlir][td] Rename pack_paddings in structured.pad (#111036)
The pack_paddings attribute in the structure.pad TD Op is used to set the `nofold` attribute in the generated tensor.pad Op. The current name is confusing and suggests that there's a relation with the tensor.pack Op. This patch renames it as `nofold_flags` to better match the actual usage.
1 parent 87db0c0 commit a758bcd

File tree

10 files changed

+44
-44
lines changed

10 files changed

+44
-44
lines changed

mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1028,7 +1028,7 @@ def PadOp : Op<Transform_Dialect, "structured.pad",
10281028
Variadic<TransformAnyParamTypeOrAnyHandle>:$pad_to_multiple_of,
10291029
DefaultValuedOptionalAttr<DenseI64ArrayAttr, "{}">:
10301030
$static_pad_to_multiple_of,
1031-
DefaultValuedAttr<I64ArrayAttr, "{}">:$pack_paddings,
1031+
DefaultValuedAttr<I64ArrayAttr, "{}">:$nofold_flags,
10321032
DefaultValuedAttr<
10331033
TypedArrayAttrBase<I64ArrayAttr, "array of arrays of i64">,
10341034
"{}">:$transpose_paddings,

mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,9 @@ struct LinalgPaddingOptions {
296296
}
297297
/// A flag for every operand to mark the PadOp as nofold which enables
298298
/// packing for statically shaped operands.
299-
SmallVector<bool> packPaddings;
299+
SmallVector<bool> nofoldFlags;
300300
LinalgPaddingOptions &setPackPaddings(ArrayRef<bool> pp) {
301-
packPaddings.assign(pp.begin(), pp.end());
301+
nofoldFlags.assign(pp.begin(), pp.end());
302302
return *this;
303303
}
304304
/// A number of loops to hoist the PadOp out for every operand.
@@ -530,7 +530,7 @@ void peelLoops(RewriterBase &rewriter, ArrayRef<scf::ForOp> loops);
530530
///
531531
/// * "options.padToMultipleOf" indicates that each padding dimension should be
532532
/// padded to the specified multiple.
533-
/// * Use "options.paddingValues" and "options.packPaddings" to set padding
533+
/// * Use "options.paddingValues" and "options.nofoldFlags" to set padding
534534
/// value and nofold attribute of the created tensor::PadOps, respectively.
535535
/// * The unpadded results (extracted slice of the cloned operation) are
536536
/// returned via `replacements`.

mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1727,7 +1727,7 @@ transform::PackTransposeOp::apply(transform::TransformRewriter &rewriter,
17271727
void transform::PadOp::build(OpBuilder &b, OperationState &result, Value target,
17281728
ArrayRef<int64_t> paddingDimensions,
17291729
ArrayRef<int64_t> padToMultipleOf,
1730-
ArrayRef<int64_t> packPaddings,
1730+
ArrayRef<int64_t> nofoldFlags,
17311731
ArrayRef<Attribute> transposePaddings,
17321732
StringRef copyBackOp) {
17331733
auto resultType = transform::AnyOpType::get(b.getContext());
@@ -1742,15 +1742,15 @@ void transform::PadOp::build(OpBuilder &b, OperationState &result, Value target,
17421742
(padToMultipleOf.empty()
17431743
? DenseI64ArrayAttr()
17441744
: b.getDenseI64ArrayAttr(padToMultipleOf)),
1745-
/*packPaddings=*/b.getI64ArrayAttr(packPaddings),
1745+
/*nofoldFlags=*/b.getI64ArrayAttr(nofoldFlags),
17461746
/*transposePaddings=*/b.getArrayAttr(transposePaddings),
17471747
/*copyBackOp=*/b.getStringAttr(copyBackOp));
17481748
}
17491749

17501750
void transform::PadOp::build(OpBuilder &b, OperationState &result, Value target,
17511751
ArrayRef<int64_t> paddingDimensions,
17521752
ArrayRef<OpFoldResult> mixedPadToMultipleOf,
1753-
ArrayRef<int64_t> packPaddings,
1753+
ArrayRef<int64_t> nofoldFlags,
17541754
ArrayRef<Attribute> transposePaddings,
17551755
StringRef copyBackOp) {
17561756
auto resultType = transform::AnyOpType::get(b.getContext());
@@ -1766,7 +1766,7 @@ void transform::PadOp::build(OpBuilder &b, OperationState &result, Value target,
17661766
/*paddingDimensions=*/b.getI64ArrayAttr(paddingDimensions),
17671767
/*padToMultipleOf=*/dynamicPadToMultipleOf,
17681768
/*padToMultipleOf=*/staticPadToMultipleOf,
1769-
/*packPaddings=*/b.getI64ArrayAttr(packPaddings),
1769+
/*nofoldFlags=*/b.getI64ArrayAttr(nofoldFlags),
17701770
/*transposePaddings=*/b.getArrayAttr(transposePaddings),
17711771
/*copyBackOp=*/b.getStringAttr(copyBackOp));
17721772
}
@@ -1800,10 +1800,10 @@ transform::PadOp::apply(transform::TransformRewriter &rewriter,
18001800
}
18011801

18021802
// Convert the integer packing flags to booleans.
1803-
SmallVector<bool> packPaddings;
1803+
SmallVector<bool> nofoldFlags;
18041804
for (int64_t packPadding :
1805-
extractFromIntegerArrayAttr<int64_t>(getPackPaddings()))
1806-
packPaddings.push_back(static_cast<bool>(packPadding));
1805+
extractFromIntegerArrayAttr<int64_t>(getNofoldFlags()))
1806+
nofoldFlags.push_back(static_cast<bool>(packPadding));
18071807

18081808
// Convert the padding values to attributes.
18091809
SmallVector<Attribute> paddingValues;
@@ -1861,7 +1861,7 @@ transform::PadOp::apply(transform::TransformRewriter &rewriter,
18611861

18621862
options.padToMultipleOf = padToMultipleOf;
18631863
options.paddingValues = paddingValues;
1864-
options.packPaddings = packPaddings;
1864+
options.nofoldFlags = nofoldFlags;
18651865
if (getCopyBackOp() ==
18661866
bufferization::MaterializeInDestinationOp::getOperationName()) {
18671867
options.copyBackOp = LinalgPaddingOptions::CopyBackOp::
@@ -1907,14 +1907,14 @@ transform::PadOp::apply(transform::TransformRewriter &rewriter,
19071907
}
19081908

19091909
LogicalResult transform::PadOp::verify() {
1910-
SmallVector<int64_t> packPaddings =
1911-
extractFromIntegerArrayAttr<int64_t>(getPackPaddings());
1912-
if (any_of(packPaddings, [](int64_t packPadding) {
1910+
SmallVector<int64_t> nofoldFlags =
1911+
extractFromIntegerArrayAttr<int64_t>(getNofoldFlags());
1912+
if (any_of(nofoldFlags, [](int64_t packPadding) {
19131913
return packPadding != 0 && packPadding != 1;
19141914
})) {
19151915
return emitOpError()
1916-
<< "expects pack_paddings to contain booleans (0/1), found "
1917-
<< getPackPaddings();
1916+
<< "expects nofold_flags to contain booleans (0/1), found "
1917+
<< getNofoldFlags();
19181918
}
19191919

19201920
SmallVector<int64_t> paddingDimensions =

mlir/lib/Dialect/Linalg/Transforms/Padding.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ static LogicalResult computePaddedShape(linalg::LinalgOp opToPad,
8888
}
8989

9090
/// Pad the `opOperand` in the "paddingDimensions" using the padding value and
91-
/// the nofold flag found in "paddingValues" and "packPaddings", respectively.
91+
/// the nofold flag found in "paddingValues" and "nofoldFlags", respectively.
9292
///
9393
/// Exit early and return the `opOperand` value if it already has the requested
9494
/// shape. i.e.:
@@ -117,8 +117,8 @@ static FailureOr<Value> padOperandToSmallestStaticBoundingBox(
117117

118118
// Return the unpadded operand if padding to a static shape is not needed and
119119
// if the nofold flag is not set.
120-
bool nofold = opOperand->getOperandNumber() < options.packPaddings.size()
121-
? options.packPaddings[opOperand->getOperandNumber()]
120+
bool nofold = opOperand->getOperandNumber() < options.nofoldFlags.size()
121+
? bool(options.nofoldFlags[opOperand->getOperandNumber()])
122122
: false;
123123
if (!nofold && alreadyHasRequestedShape)
124124
return opOperand->get();

mlir/python/mlir/dialects/transform/structured.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ def __init__(
377377
pad_to_multiple_of: Optional[Union[DynamicIndexList, ArrayAttr]] = None,
378378
padding_values: Optional[Union[ArrayAttr, Sequence[Attribute]]] = None,
379379
padding_dimensions: OptionalIntList = None,
380-
pack_paddings: OptionalIntList = None,
380+
nofold_flags: OptionalIntList = None,
381381
transpose_paddings: Optional[
382382
Union[ArrayAttr, Sequence[Union[ArrayAttr, IntOrAttrList]]]
383383
] = None,
@@ -407,7 +407,7 @@ def __init__(
407407
padding_values=padding_values,
408408
padding_dimensions=padding_dimensions,
409409
static_pad_to_multiple_of=static_pad_to_multiple_of,
410-
pack_paddings=pack_paddings,
410+
nofold_flags=nofold_flags,
411411
transpose_paddings=transpose_paddings,
412412
copy_back_op=copy_back_op,
413413
loc=loc,

mlir/test/Dialect/Linalg/matmul-shared-memory-padding.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ module attributes {transform.with_named_sequence} {
5959
// Pad linalg.matmul.
6060
%padded, %pad, %copy_back = transform.structured.pad %tiled_linalg_op
6161
{padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
62-
padding_dimensions=[0, 1, 2], pack_paddings=[1, 1, 1],
62+
padding_dimensions=[0, 1, 2], nofold_flags=[1, 1, 1],
6363
copy_back_op = "linalg.copy"}
6464
: (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
6565

@@ -180,7 +180,7 @@ module attributes {transform.with_named_sequence} {
180180
// Pad linalg.matmul.
181181
%padded, %pad, %copy_back = transform.structured.pad %tiled_linalg_op
182182
{padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
183-
padding_dimensions=[0, 1, 2], pack_paddings=[1, 1, 1],
183+
padding_dimensions=[0, 1, 2], nofold_flags=[1, 1, 1],
184184
copy_back_op = "linalg.copy"}
185185
: (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
186186

mlir/test/Dialect/Linalg/pad-to-specific-memory-space.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ module attributes {transform.with_named_sequence} {
5454
%padded, %pad, %copy_back = transform.structured.pad %0 {
5555
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
5656
padding_dimensions=[0, 1, 2],
57-
pack_paddings=[1, 1, 1]
57+
nofold_flags=[1, 1, 1]
5858
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
5959
%buffer, %new_ops = transform.structured.bufferize_to_allocation %pad {memory_space = 3, emit_dealloc} : !transform.any_op
6060
%2 = transform.bufferization.one_shot_bufferize %arg1 {bufferize_function_boundaries=true} : (!transform.any_op) -> !transform.any_op
@@ -115,7 +115,7 @@ module attributes {transform.with_named_sequence} {
115115
%padded, %pad, %copy_back = transform.structured.pad %0 {
116116
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
117117
padding_dimensions=[0, 1, 2],
118-
pack_paddings=[1, 1, 1]
118+
nofold_flags=[1, 1, 1]
119119
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
120120
transform.structured.vectorize %pad vector_sizes [10, 12] : !transform.any_op
121121
%vector_write = transform.structured.match ops{["vector.transfer_write"]} in %arg1 : (!transform.any_op) -> !transform.any_op

mlir/test/Dialect/Linalg/transform-op-pad.mlir

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ module attributes {transform.with_named_sequence} {
3939
%padded, %pad, %copy_back = transform.structured.pad %0 {
4040
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
4141
padding_dimensions=[0, 1, 2],
42-
pack_paddings=[1, 1, 0]
42+
nofold_flags=[1, 1, 0]
4343
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.op<"bufferization.materialize_in_destination">)
4444
%p = transform.num_associations %copy_back : (!transform.op<"bufferization.materialize_in_destination">) -> !transform.param<i64>
4545
// expected-remark @below {{1}}
@@ -76,7 +76,7 @@ module attributes {transform.with_named_sequence} {
7676
%padded, %pad, %copy_back = transform.structured.pad %0 pad_to_multiple_of [2, 2, 1] {
7777
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
7878
padding_dimensions=[0, 1, 2],
79-
pack_paddings=[1, 1, 0]
79+
nofold_flags=[1, 1, 0]
8080
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
8181
transform.yield
8282
}
@@ -112,7 +112,7 @@ module attributes {transform.with_named_sequence} {
112112
%padded, %pad, %copy_back = transform.structured.pad %0 pad_to_multiple_of [%c2, 2, 1] {
113113
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
114114
padding_dimensions=[0, 1, 2],
115-
pack_paddings=[1, 1, 0]
115+
nofold_flags=[1, 1, 0]
116116
} : (!transform.any_op, !transform.param<i64>) -> (!transform.any_op, !transform.any_op, !transform.any_op)
117117
transform.yield
118118
}
@@ -155,7 +155,7 @@ module attributes {transform.with_named_sequence} {
155155
%padded, %pad, %copy_back = transform.structured.pad %0 {
156156
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
157157
padding_dimensions=[0, 1, 2],
158-
pack_paddings=[1, 1, 0]
158+
nofold_flags=[1, 1, 0]
159159
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
160160
transform.yield
161161
}
@@ -178,7 +178,7 @@ module attributes {transform.with_named_sequence} {
178178
%padded, %pad, %copy_back = transform.structured.pad %0 {
179179
padding_values=[0: i32, 0.0 : f32, 0.0 : f32],
180180
padding_dimensions=[0, 1, 2],
181-
pack_paddings=[1, 1, 0]
181+
nofold_flags=[1, 1, 0]
182182
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
183183
transform.yield
184184
}
@@ -201,7 +201,7 @@ module attributes {transform.with_named_sequence} {
201201
%padded, %pad, %copy_back = transform.structured.pad %0 {
202202
padding_values=["{foo}", 0.0 : f32, 0.0 : f32],
203203
padding_dimensions=[0, 1, 2],
204-
pack_paddings=[1, 1, 0]
204+
nofold_flags=[1, 1, 0]
205205
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
206206
transform.yield
207207
}
@@ -210,7 +210,7 @@ module attributes {transform.with_named_sequence} {
210210
// -----
211211

212212
// With all padded being static, there's nothing to pad. However, with the
213-
// `nofold` attribute set (see `pack_paddings`), the corresponding pad Ops are
213+
// `nofold` attribute set (see `nofold_flags`), the corresponding pad Ops are
214214
// preserved.
215215

216216
// CHECK-LABEL: @zero_pad_static(
@@ -239,7 +239,7 @@ module attributes {transform.with_named_sequence} {
239239
%padded, %pad, %copy_back = transform.structured.pad %0 {
240240
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
241241
padding_dimensions=[0, 1, 2],
242-
pack_paddings=[1, 1, 0]
242+
nofold_flags=[1, 1, 0]
243243
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
244244
transform.yield
245245
}
@@ -248,7 +248,7 @@ module attributes {transform.with_named_sequence} {
248248
// -----
249249

250250
// With all padded dims being static, there's nothing to pad. However, with the
251-
// `nofold` attribute set (see `pack_paddings`), the corresponding pad Ops are
251+
// `nofold` attribute set (see `nofold_flags`), the corresponding pad Ops are
252252
// preserved. Same as above, but some dims are now dynamic.
253253

254254
// CHECK-LABEL: @zero_pad_dynamic(
@@ -278,7 +278,7 @@ module attributes {transform.with_named_sequence} {
278278
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
279279
// Note - only the static dim is padded
280280
padding_dimensions=[2],
281-
pack_paddings=[1, 1, 1]
281+
nofold_flags=[1, 1, 1]
282282
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
283283
transform.yield
284284
}
@@ -305,7 +305,7 @@ module attributes {transform.with_named_sequence} {
305305
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
306306
// Note - attempting to pad non-static dim
307307
padding_dimensions=[1],
308-
pack_paddings=[1, 1, 1]
308+
nofold_flags=[1, 1, 1]
309309
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
310310
transform.yield
311311
}
@@ -362,7 +362,7 @@ module attributes {transform.with_named_sequence} {
362362
%padded, %pad, %copy_back = transform.structured.pad %0 {
363363
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
364364
padding_dimensions=[0, 1, 2],
365-
pack_paddings=[1, 1, 1]
365+
nofold_flags=[1, 1, 1]
366366
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
367367
transform.yield
368368
}
@@ -414,7 +414,7 @@ module attributes {transform.with_named_sequence} {
414414
%padded, %pad, %copy_back = transform.structured.pad %0 {
415415
padding_values=[0.0 : f32, 0.0 : f32, 0.0 : f32],
416416
padding_dimensions=[0, 1, 2],
417-
pack_paddings=[1, 1, 1]
417+
nofold_flags=[1, 1, 1]
418418
} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
419419
transform.yield
420420
}

mlir/test/Dialect/Linalg/transform-ops-invalid.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ transform.sequence failures(propagate) {
1818

1919
transform.sequence failures(propagate) {
2020
^bb0(%arg0: !transform.any_op):
21-
// expected-error@below {{expects pack_paddings to contain booleans (0/1), found [1, 7]}}
22-
transform.structured.pad %arg0 {pack_paddings=[1, 7]} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
21+
// expected-error@below {{expects nofold_flags to contain booleans (0/1), found [1, 7]}}
22+
transform.structured.pad %arg0 {nofold_flags=[1, 7]} : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op)
2323
}
2424

2525
// -----

mlir/test/python/dialects/transform_structured_ext.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ def testPadOpNoArgs(target):
304304
# CHECK: transform.sequence
305305
# CHECK: transform.structured.pad
306306
# CHECK-NOT: copy_back_op
307-
# CHECK-NOT: pack_paddings
307+
# CHECK-NOT: nofold_flags
308308
# CHECK-NOT: pad_to_multiple_of
309309
# CHECK-NOT: padding_dimensions
310310
# CHECK-NOT: padding_values
@@ -319,7 +319,7 @@ def testPadOpArgs(target):
319319
pad_to_multiple_of=[128],
320320
padding_values=[FloatAttr.get_f32(42.0), StringAttr.get("0")],
321321
padding_dimensions=Attribute.parse("[1]"),
322-
pack_paddings=[0],
322+
nofold_flags=[0],
323323
transpose_paddings=[[1, Attribute.parse("0")], Attribute.parse("[0, 1]")],
324324
copy_back_op="linalg.copy",
325325
)
@@ -328,7 +328,7 @@ def testPadOpArgs(target):
328328
# CHECK: transform.structured.pad
329329
# CHECK-DAG: pad_to_multiple_of [128]
330330
# CHECK-DAG: copy_back_op = "linalg.copy"
331-
# CHECK-DAG: pack_paddings = [0]
331+
# CHECK-DAG: nofold_flags = [0]
332332
# CHECK-DAG: padding_dimensions = [1]
333333
# CHECK-DAG: padding_values = [4.200000e+01 : f32, "0"]
334334
# CHECK-DAG: transpose_paddings = {{\[}}[1, 0], [0, 1]]

0 commit comments

Comments
 (0)