[Mlir-commits] [mlir] [MLIR][Transform] Enable strict property assembly format (PR #217290)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Aug 19 03:52:34 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir
Author: Mehdi Amini (joker-eph)
<details>
<summary>Changes</summary>
Enable strict property assembly format mode for the Transform dialect and its extensions. Bind transform operation options directly in declarative assembly formats so strict parsing does not rely on fallback handling.
Update transform dialect, extension, and transform-driven tests to use the direct property spelling.
Assisted-by: Codex
---
Patch is 448.20 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/217290.diff
125 Files Affected:
- (modified) mlir/include/mlir/Dialect/Affine/TransformOps/AffineTransformOps.td (+1-2)
- (modified) mlir/include/mlir/Dialect/ArmNeon/TransformOps/ArmNeonVectorTransformOps.td (+2-2)
- (modified) mlir/include/mlir/Dialect/ArmSVE/TransformOps/ArmSVEVectorTransformOps.td (+2-2)
- (modified) mlir/include/mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.td (+10-1)
- (modified) mlir/include/mlir/Dialect/Func/TransformOps/FuncTransformOps.td (+2-2)
- (modified) mlir/include/mlir/Dialect/GPU/TransformOps/GPUTransformOps.td (+6-8)
- (modified) mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgMatchOps.td (+16-15)
- (modified) mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td (+46-56)
- (modified) mlir/include/mlir/Dialect/MemRef/TransformOps/MemRefTransformOps.td (+12-12)
- (modified) mlir/include/mlir/Dialect/NVGPU/TransformOps/NVGPUTransformOps.td (+7-8)
- (modified) mlir/include/mlir/Dialect/SCF/TransformOps/SCFTransformOps.td (+9-10)
- (modified) mlir/include/mlir/Dialect/Tensor/TransformOps/TensorTransformOps.td (+9-9)
- (modified) mlir/include/mlir/Dialect/Transform/DebugExtension/DebugExtensionOps.td (+1-1)
- (modified) mlir/include/mlir/Dialect/Transform/IR/TransformDialect.td (+1)
- (modified) mlir/include/mlir/Dialect/Transform/IR/TransformOps.td (+10-12)
- (modified) mlir/include/mlir/Dialect/Transform/TuneExtension/TuneExtensionOps.td (+1-2)
- (modified) mlir/include/mlir/Dialect/Vector/TransformOps/VectorTransformOps.td (+28-30)
- (modified) mlir/include/mlir/Dialect/X86/TransformOps/X86TransformOps.td (+6-6)
- (modified) mlir/include/mlir/Dialect/XeGPU/TransformOps/XeGPUTransformOps.td (+4-8)
- (modified) mlir/test/CAPI/transform_interpreter.c (+1-1)
- (modified) mlir/test/Conversion/FuncToLLVM/func-memref-return.mlir (+2-5)
- (modified) mlir/test/Conversion/FuncToLLVM/func-to-llvm.mlir (+2-5)
- (modified) mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm-32b.mlir (+4-10)
- (modified) mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir (+4-11)
- (modified) mlir/test/Conversion/NVGPUToNVVM/nvgpu-to-nvvm.mlir (+2-2)
- (modified) mlir/test/Dialect/Bufferization/Transforms/transform-ops.mlir (+4-4)
- (modified) mlir/test/Dialect/Func/func-transform.mlir (+3-3)
- (modified) mlir/test/Dialect/GPU/transform-gpu-failing.mlir (+18-19)
- (modified) mlir/test/Dialect/GPU/transform-gpu.mlir (+18-18)
- (modified) mlir/test/Dialect/LLVM/lower-to-llvm-transform-symbol-def.mlir (+2-8)
- (modified) mlir/test/Dialect/LLVM/transform-e2e.mlir (+2-2)
- (modified) mlir/test/Dialect/Linalg/continuous-tiling-full.mlir (+6-6)
- (modified) mlir/test/Dialect/Linalg/continuous-tiling-multiway-split.mlir (+4-4)
- (modified) mlir/test/Dialect/Linalg/convert-conv2d-to-img2col.mlir (+12-12)
- (modified) mlir/test/Dialect/Linalg/hoisting.mlir (+4-4)
- (modified) mlir/test/Dialect/Linalg/match-ops-interpreter.mlir (+14-14)
- (modified) mlir/test/Dialect/Linalg/match-ops-invalid.mlir (+12-12)
- (modified) mlir/test/Dialect/Linalg/matmul-shared-memory-padding.mlir (+8-12)
- (modified) mlir/test/Dialect/Linalg/multisize-tiling-full.mlir (+8-8)
- (modified) mlir/test/Dialect/Linalg/pad-to-specific-memory-space.mlir (+7-15)
- (modified) mlir/test/Dialect/Linalg/promote.mlir (+4-4)
- (modified) mlir/test/Dialect/Linalg/promotion_options.mlir (+2-2)
- (modified) mlir/test/Dialect/Linalg/td/decompose-pack.mlir (+1-1)
- (modified) mlir/test/Dialect/Linalg/td/decompose-unpack.mlir (+1-1)
- (modified) mlir/test/Dialect/Linalg/td/propagate-data-layout.mlir (+1-1)
- (modified) mlir/test/Dialect/Linalg/td/vectorize-with-patterns.mlir (+2-2)
- (modified) mlir/test/Dialect/Linalg/transform-lower-pack.mlir (+2-2)
- (modified) mlir/test/Dialect/Linalg/transform-op-bufferize-to-allocation.mlir (+10-10)
- (modified) mlir/test/Dialect/Linalg/transform-op-fuse.mlir (+20-20)
- (modified) mlir/test/Dialect/Linalg/transform-op-hoist-pad-build-packing-loop-nest.mlir (+5-20)
- (modified) mlir/test/Dialect/Linalg/transform-op-hoist-pad.mlir (+5-25)
- (modified) mlir/test/Dialect/Linalg/transform-op-multitile-sizes.mlir (+4-4)
- (modified) mlir/test/Dialect/Linalg/transform-op-pad-tiling-interface-multiple-of.mlir (+12-32)
- (modified) mlir/test/Dialect/Linalg/transform-op-pad-tiling-interface.mlir (+4-12)
- (modified) mlir/test/Dialect/Linalg/transform-op-pad.mlir (+18-65)
- (modified) mlir/test/Dialect/Linalg/transform-op-rewrite-in-destination-passing-style.mlir (+3-3)
- (modified) mlir/test/Dialect/Linalg/transform-op-specialize-matmul.mlir (+1-1)
- (modified) mlir/test/Dialect/Linalg/transform-op-split-reduction-by-scaling.mlir (+1-1)
- (modified) mlir/test/Dialect/Linalg/transform-op-split-reduction.mlir (+10-10)
- (modified) mlir/test/Dialect/Linalg/transform-op-split.mlir (+11-11)
- (modified) mlir/test/Dialect/Linalg/transform-op-vectorize.mlir (+6-6)
- (modified) mlir/test/Dialect/Linalg/transform-ops-invalid.mlir (+4-4)
- (modified) mlir/test/Dialect/Linalg/transform-ops.mlir (+2-2)
- (modified) mlir/test/Dialect/Linalg/transform-promotion.mlir (+4-4)
- (modified) mlir/test/Dialect/Linalg/transform-tile-and-fuse-pack-unpack.mlir (+2-2)
- (modified) mlir/test/Dialect/Linalg/transform-winograd-conv2d.mlir (+5-5)
- (modified) mlir/test/Dialect/Linalg/vectorization/contraction-interface.mlir (+12-12)
- (modified) mlir/test/Dialect/Linalg/vectorization/convolution-with-patterns-flatten.mlir (+8-8)
- (modified) mlir/test/Dialect/Linalg/vectorization/convolution-with-patterns.mlir (+25-25)
- (modified) mlir/test/Dialect/Linalg/vectorization/extract.mlir (+10-10)
- (modified) mlir/test/Dialect/Linalg/vectorization/insert-slice-with-patterns.mlir (+4-4)
- (modified) mlir/test/Dialect/Linalg/vectorization/linalg-ops-with-patterns.mlir (+79-79)
- (modified) mlir/test/Dialect/Linalg/vectorization/linalg-ops.mlir (+2-2)
- (modified) mlir/test/Dialect/Linalg/vectorization/pad-with-patterns.mlir (+14-14)
- (modified) mlir/test/Dialect/Linalg/vectorization/unsupported.mlir (+1-1)
- (modified) mlir/test/Dialect/MemRef/make-loop-independent.mlir (+2-2)
- (modified) mlir/test/Dialect/MemRef/transform-ops.mlir (+8-8)
- (modified) mlir/test/Dialect/NVGPU/transform-create-async-groups.mlir (+4-4)
- (modified) mlir/test/Dialect/NVGPU/transform-pipeline-shared.mlir (+4-4)
- (modified) mlir/test/Dialect/SCF/transform-op-coalesce.mlir (+1-1)
- (modified) mlir/test/Dialect/SCF/transform-ops-invalid.mlir (+15-15)
- (modified) mlir/test/Dialect/SCF/transform-ops.mlir (+28-28)
- (modified) mlir/test/Dialect/Tensor/fold-empty-op.mlir (+1-1)
- (modified) mlir/test/Dialect/Tensor/transform-op-make-loop-independent.mlir (+5-5)
- (modified) mlir/test/Dialect/Transform/Library/lower-to-llvm-transform-symbol-def.mlir (+2-8)
- (modified) mlir/test/Dialect/Transform/check-use-after-free.mlir (+1-1)
- (modified) mlir/test/Dialect/Transform/expensive-checks.mlir (+3-3)
- (modified) mlir/test/Dialect/Transform/include/Library/lower-to-llvm.mlir (+2-8)
- (modified) mlir/test/Dialect/Transform/interpreter-entry-point-2.mlir (+2-2)
- (modified) mlir/test/Dialect/Transform/normal-forms.mlir (+7-11)
- (modified) mlir/test/Dialect/Transform/ops-invalid.mlir (+8-8)
- (modified) mlir/test/Dialect/Transform/ops.mlir (+7-7)
- (modified) mlir/test/Dialect/Transform/selective-targeting.mlir (+2-2)
- (modified) mlir/test/Dialect/Transform/test-dialect-injection.mlir (+1-1)
- (modified) mlir/test/Dialect/Transform/test-interpreter-printing.mlir (+7-7)
- (modified) mlir/test/Dialect/Transform/test-interpreter.mlir (+35-35)
- (modified) mlir/test/Dialect/Transform/test-loop-transforms.mlir (+1-1)
- (modified) mlir/test/Dialect/Transform/test-pass-application.mlir (+12-18)
- (modified) mlir/test/Dialect/Transform/test-pattern-application.mlir (+10-14)
- (modified) mlir/test/Dialect/Transform/test-tune-extension.mlir (+1-1)
- (modified) mlir/test/Dialect/Vector/transform-op-vector-to-llvm.mlir (+1-1)
- (modified) mlir/test/Dialect/Vector/transform-vector.mlir (+2-2)
- (modified) mlir/test/Dialect/Vector/vector-transfer-drop-unit-dims-patterns.mlir (+2-2)
- (modified) mlir/test/Examples/transform-opt/external-def.mlir (+1-1)
- (modified) mlir/test/Examples/transform-opt/self-contained.mlir (+1-1)
- (modified) mlir/test/Examples/transform/Ch1/invalidation-2.mlir (+1-1)
- (modified) mlir/test/Examples/transform/Ch1/sequence.mlir (+1-1)
- (modified) mlir/test/Examples/transform/Ch2/sequence.mlir (+1-1)
- (modified) mlir/test/Examples/transform/Ch3/sequence.mlir (+1-1)
- (modified) mlir/test/Examples/transform/Ch4/features.mlir (+3-3)
- (modified) mlir/test/Examples/transform/ChH/full.mlir (+2-3)
- (modified) mlir/test/Integration/Dialect/EmitC/td.mlir (+5-8)
- (modified) mlir/test/Integration/Dialect/Linalg/CPU/ArmSVE/pack-scalable-inner-tile.mlir (+2-2)
- (modified) mlir/test/Integration/Dialect/Linalg/CPU/ArmSVE/pack-unpack-mmt4d.mlir (+6-6)
- (modified) mlir/test/Integration/Dialect/Linalg/CPU/ArmSVE/td/pack-unpack.mlir (+7-7)
- (modified) mlir/test/Integration/Dialect/Linalg/CPU/mmt4d.mlir (+1-1)
- (modified) mlir/test/Integration/Dialect/Linalg/CPU/pack-dynamic-inner-tile.mlir (+2-2)
- (modified) mlir/test/Integration/Dialect/Linalg/CPU/pack-unpack-mmt4d.mlir (+1-1)
- (modified) mlir/test/Integration/Dialect/Linalg/CPU/unpack-dynamic-inner-tile.mlir (+2-2)
- (modified) mlir/test/Integration/Dialect/Transform/match_matmul_common.mlir (+1-1)
- (modified) mlir/test/Integration/Dialect/Transform/match_reduction.mlir (+9-9)
- (modified) mlir/test/Interfaces/TilingInterface/tile-and-fuse-using-interface.mlir (+1-1)
- (modified) mlir/test/Transforms/test-block-legalization.mlir (+1-4)
- (modified) mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.td (+14-14)
- (modified) mlir/test/lib/Interfaces/TilingInterface/TestTilingInterfaceTransformOps.td (+8-13)
``````````diff
diff --git a/mlir/include/mlir/Dialect/Affine/TransformOps/AffineTransformOps.td b/mlir/include/mlir/Dialect/Affine/TransformOps/AffineTransformOps.td
index 8edc531e11bb5..446e54c64c0a8 100644
--- a/mlir/include/mlir/Dialect/Affine/TransformOps/AffineTransformOps.td
+++ b/mlir/include/mlir/Dialect/Affine/TransformOps/AffineTransformOps.td
@@ -122,8 +122,7 @@ def SuperVectorizeOp
let assemblyFormat = [{
$target $vector_sizes
(`fastest_varying_pattern` `=` $fastest_varying_pattern^)?
- (`vectorize_reductions` `=` $vectorize_reductions^)?
- attr-dict `:` type($target)
+ (`vectorize_reductions` `=` $vectorize_reductions^)? attr-dict `:` type($target)
}];
let hasVerifier = 1;
}
diff --git a/mlir/include/mlir/Dialect/ArmNeon/TransformOps/ArmNeonVectorTransformOps.td b/mlir/include/mlir/Dialect/ArmNeon/TransformOps/ArmNeonVectorTransformOps.td
index 35747126d3db1..925d86e4e982d 100644
--- a/mlir/include/mlir/Dialect/ArmNeon/TransformOps/ArmNeonVectorTransformOps.td
+++ b/mlir/include/mlir/Dialect/ArmNeon/TransformOps/ArmNeonVectorTransformOps.td
@@ -21,7 +21,7 @@ def ApplyArmNeonContractionToI8MMPatternsOp
to ArmNeon dialect operations mapping to instructions from FEAT_I8MM.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyArmNeonContractionToBFMMLAPatternsOp
@@ -32,7 +32,7 @@ def ApplyArmNeonContractionToBFMMLAPatternsOp
to ArmNeon dialect operations mapping to instructions from FEAT_BF16.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
#endif // ARM_NEON_VECTOR_TRANSFORM_OPS
diff --git a/mlir/include/mlir/Dialect/ArmSVE/TransformOps/ArmSVEVectorTransformOps.td b/mlir/include/mlir/Dialect/ArmSVE/TransformOps/ArmSVEVectorTransformOps.td
index 7777e6060ea76..d24cf4768c803 100644
--- a/mlir/include/mlir/Dialect/ArmSVE/TransformOps/ArmSVEVectorTransformOps.td
+++ b/mlir/include/mlir/Dialect/ArmSVE/TransformOps/ArmSVEVectorTransformOps.td
@@ -20,7 +20,7 @@ def ApplyArmSVELowerContractionToI8MMPatternsOp
to ArmSVE dialect operations mapping to instructions from FEAT_I8MM.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyArmSVELowerContractionToBFMMLAPatternsOp
@@ -31,6 +31,6 @@ def ApplyArmSVELowerContractionToBFMMLAPatternsOp
ArmSVE dialect operations mapping to instructions from FEAT_BF16.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
#endif // ARMSVE_VECTOR_TRANSFORM_OPS
diff --git a/mlir/include/mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.td b/mlir/include/mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.td
index 53b3b0505b399..132d841a4aa91 100644
--- a/mlir/include/mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.td
+++ b/mlir/include/mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.td
@@ -96,7 +96,16 @@ def OneShotBufferizeOp
let hasVerifier = 1;
let assemblyFormat = [{
(`layout` `{` $function_boundary_type_conversion^ `}`)?
- $target attr-dict `:` functional-type($target, results)
+ $target oilist(
+ `allow_return_allocs_from_loops` `=` $allow_return_allocs_from_loops |
+ `allow_unknown_ops` `=` $allow_unknown_ops |
+ `bufferize_function_boundaries` `=` $bufferize_function_boundaries |
+ `dump_alias_sets` `=` $dump_alias_sets |
+ `test_analysis_only` `=` $test_analysis_only |
+ `print_conflicts` `=` $print_conflicts |
+ `check_parallel_regions` `=` $check_parallel_regions |
+ `memcpy_op` `=` $memcpy_op
+ ) attr-dict `:` functional-type($target, results)
}];
}
diff --git a/mlir/include/mlir/Dialect/Func/TransformOps/FuncTransformOps.td b/mlir/include/mlir/Dialect/Func/TransformOps/FuncTransformOps.td
index b64b3fcdb275b..2fbc374084eb7 100644
--- a/mlir/include/mlir/Dialect/Func/TransformOps/FuncTransformOps.td
+++ b/mlir/include/mlir/Dialect/Func/TransformOps/FuncTransformOps.td
@@ -25,7 +25,7 @@ def ApplyFuncToLLVMConversionPatternsOp : Op<Transform_Dialect,
These patterns require an "LLVMTypeConverter".
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def CastAndCallOp : Op<Transform_Dialect,
@@ -130,7 +130,7 @@ def ReplaceFuncSignatureOp
$function_name
`args_interchange` `=` $args_interchange
`results_interchange` `=` $results_interchange
- `at` $module attr-dict `:` functional-type(operands, results)
+ `at` $module oilist(`adjust_func_calls` $adjust_func_calls) attr-dict `:` functional-type(operands, results)
}];
}
diff --git a/mlir/include/mlir/Dialect/GPU/TransformOps/GPUTransformOps.td b/mlir/include/mlir/Dialect/GPU/TransformOps/GPUTransformOps.td
index 3a8caf8aa42e2..f8e30f75ae58b 100644
--- a/mlir/include/mlir/Dialect/GPU/TransformOps/GPUTransformOps.td
+++ b/mlir/include/mlir/Dialect/GPU/TransformOps/GPUTransformOps.td
@@ -27,7 +27,7 @@ def ApplyGPUToNVVMConversionPatternsOp : Op<Transform_Dialect,
patterns require an "LLVMTypeConverter".
}];
let arguments = (ins DefaultValuedAttr<I16Attr, "1">:$benefit);
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " oilist(`benefit` `=` $benefit) attr-dict";
}
def ApplyGPUWwmaToNVVMConversionPatternsOp : Op<Transform_Dialect,
@@ -39,7 +39,7 @@ def ApplyGPUWwmaToNVVMConversionPatternsOp : Op<Transform_Dialect,
to NVVM dialect ops.
These patterns require an "LLVMTypeConverter".
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyGPUSubgroupReduceToNVVMConversionPatternsOp : Op<Transform_Dialect,
@@ -51,7 +51,7 @@ def ApplyGPUSubgroupReduceToNVVMConversionPatternsOp : Op<Transform_Dialect,
to NVVM dialect ops.
These patterns require an "LLVMTypeConverter".
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyGPUToROCDLConversionPatternsOp : Op<Transform_Dialect,
@@ -81,7 +81,7 @@ def ApplyGPURewritePatternsOp : Op<Transform_Dialect,
2. GpuGlobalIdRewriter patterns
3. GpuShuffleRewriter patterns
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyUnrollVectorsSubgroupMmaOp : Op<Transform_Dialect,
@@ -245,8 +245,7 @@ def MapNestedForallToThreads :
$target
`block_dims` `=` $block_dims
(`sync_after_distribute` `=` $sync_after_distribute^)?
- (`warp_size` `=` $warp_size^)?
- attr-dict
+ (`warp_size` `=` $warp_size^)? attr-dict
`:` functional-type($target, $result)
}];
let extraClassDeclaration = [{
@@ -309,8 +308,7 @@ def MapForallToBlocks :
let assemblyFormat = [{
$target
(`generate_gpu_launch` $generate_gpu_launch^)?
- (`grid_dims` `=` $grid_dims^)?
- attr-dict
+ (`grid_dims` `=` $grid_dims^)? attr-dict
`:` functional-type($target, $result)
}];
let hasVerifier = 1;
diff --git a/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgMatchOps.td b/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgMatchOps.td
index 2da52bbf86166..76f8846fbac4e 100644
--- a/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgMatchOps.td
+++ b/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgMatchOps.td
@@ -71,7 +71,7 @@ def MatchStructuredOp : Op<Transform_Dialect, "match.structured", [
let assemblyFormat =
"(`failures` `(` $failure_propagation_mode^ `)`)?"
"$current `:` custom<SemiFunctionType>(type($current), type($outputs))"
- "attr-dict-with-keyword regions";
+ " attr-dict-with-keyword regions";
let hasVerifier = 1;
let extraClassDeclaration = SingleOpMatcher.extraDeclaration # [{
@@ -128,7 +128,7 @@ def MatchStructuredBodyOp : Op<Transform_Dialect, "match.structured.body", [
UnitAttr:$passthrough,
UnitAttr:$elementwise,
OptionalAttr<StrArrayAttr>:$contraction);
- let assemblyFormat = "$operand_handle attr-dict `:` type($operand_handle)";
+ let assemblyFormat = "$operand_handle oilist(`reduction_position` `=` $reduction_position | `passthrough` $passthrough | `elementwise` $elementwise | `contraction` `=` $contraction) attr-dict `:` type($operand_handle)";
let extraClassDeclaration = SingleOpMatcher.extraDeclaration;
let hasVerifier = 1;
}
@@ -148,7 +148,7 @@ def MatchStructuredClassifyContractionDimsOp
C(batch, m, n) += A(batch, m, k) * B(batch, k, n)
That is:
-
+
- 'batch' are parallel dimensions used in inputs and result;
- 'm' are parallel dimensions used in the LHS and result;
- 'n' are parallel dimensions used in rhe RHS and result;
@@ -256,7 +256,7 @@ def MatchStructuredDimOp : Op<Transform_Dialect, "match.structured.dim", [
the criteria specified as attributes. May capture the numeric value of the
dimension into a parameter that it returns.
- }],
+ }],
StructuredDimDescription<"dimension">.description,
[{
@@ -272,7 +272,7 @@ def MatchStructuredDimOp : Op<Transform_Dialect, "match.structured.dim", [
parameter will be associated with the value of the second-to-last dimension
followed by the last dimension. If the dimension is dynamic, the parameter
will contain a negative value corresponding to kDynamic in C++.
-
+
}], StructuredPredicate.extraDescription, [{
#### Return modes
@@ -293,7 +293,7 @@ def MatchStructuredDimOp : Op<Transform_Dialect, "match.structured.dim", [
let assemblyFormat =
"$operand_handle `[`"
"custom<TransformMatchDims>($raw_dim_list, $is_inverted, $is_all)"
- "`]` attr-dict `:` "
+ "`]` oilist(`parallel` $parallel | `reduction` $reduction) attr-dict `:` "
"custom<SemiFunctionType>(type($operand_handle), type($result))";
let extraClassDeclaration = SingleOpMatcher.extraDeclaration # [{
@@ -335,7 +335,7 @@ class MatchStructuredOperandOp<string opname> : Op<Transform_Dialect, opname, [
SingleOpMatcher,
MatchOpInterface,
MemoryEffectsOpInterface]> {
-
+
// TODO: consider an attribute controlling whether to fail or succeed on
// out-of-bounds accesses.
let arguments = (ins TransformHandleTypeInterface:$operand_handle,
@@ -352,7 +352,8 @@ class MatchStructuredOperandOp<string opname> : Op<Transform_Dialect, opname, [
let assemblyFormat =
"$operand_handle `[`"
"custom<TransformMatchDims>($raw_position_list, $is_inverted, $is_all)"
- "`]` attr-dict "
+ "`]` oilist(`permutation` $permutation | "
+ "`projected_permutation` $projected_permutation) attr-dict "
"`:` custom<SemiFunctionType>(type($operand_handle), type($result))";
let extraClassDeclaration = SingleOpMatcher.extraDeclaration # [{
@@ -369,7 +370,7 @@ def MatchStructuredInputOp : MatchStructuredOperandOp<"match.structured.input">
"Captures input operand(s) of a structured operation";
let description = !strconcat([{
Produces a transform dialect value depending on the result type:
-
+
- If the result type is a value handle, it will be associated with the input
operand(s) of the payload operation associated with the operand handle.
- If the result type is an operation handle, it will be associated with the
@@ -397,7 +398,7 @@ def MatchStructuredInputOp : MatchStructuredOperandOp<"match.structured.input">
The match succeeds if the conditions specified as attributes succeed.
- }],
+ }],
StructuredDimDescription<"input">.description,
[{
@@ -446,7 +447,7 @@ def MatchStructuredInitOp : MatchStructuredOperandOp<"match.structured.init"> {
The match succeeds if the conditions specified as attributes succeed.
- }],
+ }],
StructuredDimDescription<"init">.description,
[{
@@ -488,7 +489,7 @@ def MatchStructuredNumInputsOp
let arguments = (ins TransformHandleTypeInterface:$operand_handle);
let results = (outs TransformParamTypeInterface:$result);
let assemblyFormat =
- "$operand_handle attr-dict `:` functional-type(operands, results)";
+ "$operand_handle attr-dict `:` functional-type(operands, results)";
let extraClassDeclaration = SingleOpMatcher.extraDeclaration;
}
@@ -516,7 +517,7 @@ def MatchStructuredNumInitsOp
let arguments = (ins TransformHandleTypeInterface:$operand_handle);
let results = (outs TransformParamTypeInterface:$result);
let assemblyFormat =
- "$operand_handle attr-dict `:` functional-type(operands, results)";
+ "$operand_handle attr-dict `:` functional-type(operands, results)";
let extraClassDeclaration = SingleOpMatcher.extraDeclaration;
}
@@ -587,9 +588,9 @@ def MatchStructuredResultOp : Op<Transform_Dialect, "match.structured.result", [
UnitAttr:$any,
UnitAttr:$single);
let results = (outs TransformAnyHandle:$result);
- let assemblyFormat =
+ let assemblyFormat =
"$operand_handle `[` $position `]` (`any` $any^)? (`single` $single^)?"
- "attr-dict `:` functional-type(operands, results)";
+ " attr-dict `:` functional-type(operands, results)";
let hasVerifier = 1;
let extraClassDeclaration = SingleOpMatcher.extraDeclaration # [{
diff --git a/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td b/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td
index 9a6796f999931..529f265c742d4 100644
--- a/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td
+++ b/mlir/include/mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.td
@@ -33,7 +33,7 @@ def ApplyEraseUnnecessaryInputsPatternsOp : Op<Transform_Dialect,
`linalg.generic` ops.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyDecomposeTensorPackUnpackPatternsOp
@@ -44,7 +44,7 @@ def ApplyDecomposeTensorPackUnpackPatternsOp
tensor::PadOp, linalg::transposeOp Ops. Requires all outer dims to be unit.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyDecomposeTensorPadPatternsOp
@@ -55,7 +55,7 @@ def ApplyDecomposeTensorPadPatternsOp
linalg::FillOp and tensor::InsertSliceOp.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyFoldUnitExtentDimsViaReshapesPatternsOp : Op<Transform_Dialect,
@@ -66,7 +66,7 @@ def ApplyFoldUnitExtentDimsViaReshapesPatternsOp : Op<Transform_Dialect,
linalg ops on tensors via reassociative reshape ops.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyFoldUnitExtentDimsViaSlicesPatternsOp : Op<Transform_Dialect,
@@ -77,7 +77,7 @@ def ApplyFoldUnitExtentDimsViaSlicesPatternsOp : Op<Transform_Dialect,
linalg ops on tensors via rank-reducing slices.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyTilingCanonicalizationPatternsOp : Op<Transform_Dialect,
@@ -87,7 +87,7 @@ def ApplyTilingCanonicalizationPatternsOp : Op<Transform_Dialect,
Collects canonicalization patterns relevant to apply after tiling patterns.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyFoldAddIntoDestPatternsOp : Op<Transform_Dialect,
@@ -98,7 +98,7 @@ def ApplyFoldAddIntoDestPatternsOp : Op<Transform_Dialect,
for achieving the sum.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyPadVectorizationPatternsOp : Op<Transform_Dialect,
@@ -110,7 +110,7 @@ def ApplyPadVectorizationPatternsOp : Op<Transform_Dialect,
These patterns rewrite tensor.pad Ops using vector.transfer_read and
vector.transfer_write operations. This is done either by:
1. Folding tensor.pad with an existing vector.transfer_read /
- vector.transfer_write Op (generated prior to running these patterns).
+ vector.transfer_write Op (generated prior to running these patterns).
2. Rewriting it (when matched together with q tensor.insert_slice
consumer Op) as a vector.transfer_read + vector.transfer_write pair.
@@ -118,7 +118,7 @@ def ApplyPadVectorizationPatternsOp : Op<Transform_Dialect,
matched tensor.pad Op to find opportunities for vectorization.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyFoldIntoPackAndUnpackPatternsOp : Op<Transform_Dialect,
@@ -129,7 +129,7 @@ def ApplyFoldIntoPackAndUnpackPatternsOp : Op<Transform_Dialect,
be folded into linalg.pack and linalg.unpack operations, respectively.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
def ApplyFoldPackUnpackIntoEmptyPatternsOp : Op<Transform_Dialect,
@@ -140,7 +140,7 @@ def ApplyFoldPackUnpackIntoEmptyPatternsOp : Op<Transform_Dialect,
}];
let arguments = (ins DefaultValuedAttr<BoolAttr, "false">:$fold_single_use_only);
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " oilist(`fold_single_use_only` `=` $fold_single_use_only) attr-dict";
}
def ApplyDataLayoutPropagationPatternsOp : Op<Transform_Dialect,
@@ -152,7 +152,7 @@ def ApplyDataLayoutPropagationPatternsOp : Op<Transform_Dialect,
}];
let arguments = (ins DefaultValuedAttr<BoolAttr, "false">:$poison_padding);
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " oilist(`poison_padding` `=` $poison_padding) attr-dict";
}
def ApplyExtractSliceSinkingPatternsOp : Op<Transform_Dialect,
@@ -162,7 +162,7 @@ def ApplyExtractSliceSinkingPatternsOp : Op<Transform_Dialect,
Patterns to sink extract slice across other operations.
}];
- let assemblyFormat = "attr-dict";
+ let assemblyFormat = " attr-dict";
}
//===----------------------------------------------------------------------===//
@@ -250,7 +250,7 @@ def BufferizeToAllocationOp : Op<Transform_Dialect,
UnitAttr:$emit_dealloc);
let results = (outs Transform_AnyValue:$allocated_buffer,
Transform_AnyOpType:$new_ops);
- let assemblyFormat = "$target attr-dict `:` type($target)";
+ let assemblyFormat = "$target oilist(`memory_space` `=` qualified($memory_space) | `memcpy_op` `=` $memcpy_op | `alloc_op` `=` $alloc_op | `bufferize_destination_only` $bufferize_destination_only | `emit_dealloc` $emit_dealloc) attr-dict `:` type($target)";
let hasVerifier = 1;
}
@@ -482,7 +482,9 @@ def FuseOp : Op<Transform_Dialect, "structured.fuse",
`tile_sizes` custom<PackedOrDynamicIndexList>($packed_tile_sizes,
$tile_sizes,
$static_tile_sizes) |
- `interchange` custom<DynamicIndexList>($tile_interchange, $static_tile_interchange)
+ `interchange` custom<DynamicIndexList>($tile_interchange, $static_tile_interchange) |
+ `apply_cleanup` $apply_cleanup |
+ `use_forall` $use_forall
)
(`inner_tile_alignments` `=`
custom<InnerTileAlignmentArray>($inner_tile_alignments)^)?
@@ -594,7 +596,7 @@ def GeneralizeOp : Op<Transform_Dialect, "structured.generalize",
let arguments = (ins TransformHandleTypeInterface:$target);
let results = (outs TransformHandleTypeInterface:$transformed);
let assemblyFormat = [{
- $target attr-dict `:`
+ $target attr-dict `:`
custom<SemiFunctionType>(type($target), type($transformed), "false")
}];
@@ -634,7 +636,7 @@ def SpecializeOp : Op<Transform_Dialect, "structured.specialize",
DefaultValuedAttr<BoolAttr, "false">:$emit_category);
let results = (outs TransformHandleTypeInterface:$transformed);
let assemblyFormat = [{
- $target attr-dict `:`
+ $target oilist(`emit_category` `=` $emit_category) attr-dict `:`
custom<SemiFunctionType>(type($target), type($transformed), "false")
}];
@@ -750,7 +752,7 @@ def LowerPackOp : Op<Transform_Dialect, "structured.lower_pack", [
Transform_ConcreteOpType<"tensor.expand_shape">:$expand_shape_op,
Transform_ConcreteOpType<"linalg.transpose">:$transpose_op);
let assemblyFormat = [{
- $target attr-dict `:` functional-type(operands, results)
+ $target oilist(`lowerPadLikeWithInsertSlice` `=` $lowerPadLikeWithInsertSlice) attr-dict `:` functional-type(operands, results)
}];
let extraClassDeclaration = [{
@@ -792,7 +794,7 @@ def LowerUnPackOp : Op<Transform_Dialect, ...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/217290
More information about the Mlir-commits
mailing list