Remove transform.structured.lower_vectors This op has been upstreamed as transform.lower_vectors.
diff --git a/llvm-external-projects/iree-dialects/BUILD b/llvm-external-projects/iree-dialects/BUILD index b9b7628..276494a 100644 --- a/llvm-external-projects/iree-dialects/BUILD +++ b/llvm-external-projects/iree-dialects/BUILD
@@ -689,5 +689,6 @@ "@llvm-project//mlir:TensorDialect", "@llvm-project//mlir:TransformDialect", "@llvm-project//mlir:Transforms", + "@llvm-project//mlir:VectorTransformOps", ], )
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgTransform/StructuredTransformOpsExt.td b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgTransform/StructuredTransformOpsExt.td index c3d7f00..a0197c5 100644 --- a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgTransform/StructuredTransformOpsExt.td +++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgTransform/StructuredTransformOpsExt.td
@@ -70,28 +70,6 @@ let cppNamespace = "mlir::transform_ext"; } -def LowerVectorsOp : Op<Transform_Dialect, "lower_vectors", - [FunctionalStyleTransformOpTrait, - MemoryEffectsOpInterface, - DeclareOpInterfaceMethods<TransformOpInterface>]> { - let description = [{Indicates that the vector operations in the entire - module should be lowered to simpler primitives (multiple stages of lowering - be executed at once).}]; - - let arguments = - (ins DefaultValuedAttr<I64ArrayAttr, "{0, 1, 2, 3, 4, 5, 6}">:$stages, - DefaultValuedAttr<StrAttr, "\"outerproduct\"">:$contraction_lowering, - DefaultValuedAttr<StrAttr, "\"innerparallel\"">:$multireduction_lowering, - DefaultValuedAttr<StrAttr, "\"linalg-copy\"">:$split_transfers, - DefaultValuedAttr<BoolAttr, "true">:$unroll_vector_transfers, - DefaultValuedAttr<StrAttr, "\"eltwise\"">:$transpose_lowering, - DefaultValuedAttr<BoolAttr, "false">:$transpose_avx2_lowering - ); - - let assemblyFormat = "attr-dict"; - let cppNamespace = "mlir::transform_ext"; -} - def LowerToLLVMOp : Op<Transform_Dialect, "lower_to_llvm", [FunctionalStyleTransformOpTrait, MemoryEffectsOpInterface,
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/StructuredTransformOpsExt.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/StructuredTransformOpsExt.cpp index 82b3063..f7392d1 100644 --- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/StructuredTransformOpsExt.cpp +++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/StructuredTransformOpsExt.cpp
@@ -1006,119 +1006,6 @@ } //===---------------------------------------------------------------------===// -// LowerVectorsOp -//===---------------------------------------------------------------------===// - -/// Returns true of the numbered vector lowering stage is included into the list -/// of stages specified on the given lowerVectors operation. -static bool stageIncluded(int stage, - transform_ext::LowerVectorsOp lowerVectorsOp) { - for (auto s : lowerVectorsOp.getStages().getAsValueRange<IntegerAttr>()) { - if (s.getSExtValue() == stage) - return true; - } - return false; -} - -// Applies the transformation specified by the given lower vectors operation -/// to the given function. -DiagnosedSilenceableFailure -transform_ext::LowerVectorsOp::apply(mlir::transform::TransformResults &results, - mlir::transform::TransformState &state) { - MLIRContext *ctx = getContext(); - RewritePatternSet patterns(ctx); - - vector::VectorTransposeLowering vectorTransposeLowering = - llvm::StringSwitch<vector::VectorTransposeLowering>( - getTransposeLowering()) - .Case("eltwise", vector::VectorTransposeLowering::EltWise) - .Case("flat_transpose", vector::VectorTransposeLowering::Flat) - .Case("shuffle", vector::VectorTransposeLowering::Shuffle) - .Default(vector::VectorTransposeLowering::EltWise); - vector::VectorMultiReductionLowering vectorMultiReductionLowering = - llvm::StringSwitch<vector::VectorMultiReductionLowering>( - getMultireductionLowering()) - .Case("innerreduction", - vector::VectorMultiReductionLowering::InnerReduction) - .Default(vector::VectorMultiReductionLowering::InnerParallel); - vector::VectorContractLowering vectorContractLowering = - llvm::StringSwitch<vector::VectorContractLowering>( - getContractionLowering()) - .Case("matrixintrinsics", vector::VectorContractLowering::Matmul) - .Case("dot", vector::VectorContractLowering::Dot) - .Case("outerproduct", vector::VectorContractLowering::OuterProduct) - .Default(vector::VectorContractLowering::OuterProduct); - // TODO: fix the annoying name mismatch (vector-transfers vs vector-transfer). - vector::VectorTransferSplit vectorTransferSplit = - llvm::StringSwitch<vector::VectorTransferSplit>(getSplitTransfers()) - .Case("none", vector::VectorTransferSplit::None) - .Case("linalg-copy", vector::VectorTransferSplit::LinalgCopy) - .Case("vector-transfers", vector::VectorTransferSplit::VectorTransfer) - .Default(vector::VectorTransferSplit::None); - - vector::VectorTransformsOptions vectorTransformOptions; - vectorTransformOptions.setVectorTransformsOptions(vectorContractLowering) - .setVectorMultiReductionLowering(vectorMultiReductionLowering) - .setVectorTransposeLowering(vectorTransposeLowering) - .setVectorTransferSplit(vectorTransferSplit); - - VectorTransferToSCFOptions vectorTransferToSCFOptions = - VectorTransferToSCFOptions().enableFullUnroll(getUnrollVectorTransfers()); - - int maxTransferRank = 1; - - auto avx2LoweringOptions = - x86vector::avx2::LoweringOptions().setTransposeOptions( - x86vector::avx2::TransposeLoweringOptions() - .lower4x8xf32(getTransposeAvx2Lowering()) - .lower8x8xf32(getTransposeAvx2Lowering())); - - // TODO: this is copy-pasta from LinalgStrategyLowerVectorsPass, shouldn't be. - vector::populateVectorToVectorCanonicalizationPatterns(patterns); - if (stageIncluded(1, *this)) { - patterns.add<mlir::vector::ContractionOpToOuterProductOpLowering, - mlir::vector::ContractionOpToMatmulOpLowering, - mlir::vector::ContractionOpLowering>(vectorTransformOptions, - ctx); - vector::populateVectorTransferPermutationMapLoweringPatterns(patterns); - } - if (stageIncluded(2, *this)) { - vector::populateVectorMultiReductionLoweringPatterns( - patterns, vectorTransformOptions.vectorMultiReductionLowering); - } - if (stageIncluded(3, *this)) { - patterns.add<vector::VectorTransferFullPartialRewriter>( - ctx, vectorTransformOptions); - } - if (stageIncluded(4, *this)) { - vector::populateVectorTransferLoweringPatterns(patterns, maxTransferRank); - } - if (stageIncluded(5, *this)) { - populateVectorToSCFConversionPatterns( - patterns, vectorTransferToSCFOptions.setTargetRank(maxTransferRank)); - } - if (stageIncluded(6, *this)) { - vector::populateVectorShapeCastLoweringPatterns(patterns); - } - if (stageIncluded(7, (*this))) { - vector::populateVectorTransposeLoweringPatterns(patterns, - vectorTransformOptions); - if (getTransposeAvx2Lowering()) - x86vector::avx2::populateSpecializedTransposeLoweringPatterns( - patterns, avx2LoweringOptions, /*benefit=*/10); - } - - // TODO: these transformations are currently not targeted at concrete ops. - // LinalgTransformationFilter filter = makeTransformationFilter(target); - if (failed(applyPatternsAndFoldGreedily(state.getTopLevel(), - std::move(patterns)))) - return DiagnosedSilenceableFailure::definiteFailure(); - - // TODO: make composable... - return DiagnosedSilenceableFailure::success(); -} - -//===---------------------------------------------------------------------===// // MatchCallbackOp //===---------------------------------------------------------------------===//
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/roundtrip.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/roundtrip.mlir index 518e04b..3097c74 100644 --- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/roundtrip.mlir +++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/roundtrip.mlir
@@ -19,8 +19,10 @@ transform.structured.vectorize %5 // CHECK: bufferize bufferize - // CHECK: lower_vectors {multireduction_lowering = "innerreduce"} - lower_vectors { multireduction_lowering = "innerreduce"} + // CHECK: %[[FUNC:.*]] = transform.structured.match ops{["func.func"]} in %arg0 + // CHECK: lower_vectors %[[FUNC]] {multireduction_lowering = "innerreduce"} + %6 = transform.structured.match ops{["func.func"]} in %arg0 + transform.vector.lower_vectors %6 { multireduction_lowering = "innerreduce"} // CHECK: lower_to_llvm lower_to_llvm }
diff --git a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/single-tiling-full-script.mlir b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/single-tiling-full-script.mlir index d0df60f..c832533 100644 --- a/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/single-tiling-full-script.mlir +++ b/llvm-external-projects/iree-dialects/test/Dialect/linalg_transform/single-tiling-full-script.mlir
@@ -20,6 +20,7 @@ %2 = get_closest_isolated_parent %1 : (!pdl.operation) -> !pdl.operation transform.structured.vectorize %2 { vectorize_padding } bufferize - lower_vectors { multireduction_lowering = "innerreduce"} + %3 = transform.structured.match ops{["func.func"]} in %module_op + transform.vector.lower_vectors %3 { multireduction_lowering = "innerreduce"} lower_to_llvm }
diff --git a/llvm-external-projects/iree-dialects/test/python/dialects/iree_structured_transform.py b/llvm-external-projects/iree-dialects/test/python/dialects/iree_structured_transform.py deleted file mode 100644 index 57e76a8..0000000 --- a/llvm-external-projects/iree-dialects/test/python/dialects/iree_structured_transform.py +++ /dev/null
@@ -1,30 +0,0 @@ -# RUN: %PYTHON %s | FileCheck %s - -import iree.compiler.ir as ir -import iree.compiler.dialects.transform.iree_structured as iree_structured_transform -import iree.compiler._mlir_libs._ireeDialects.transform - - -def constructAndPrintInModule(f): - print("\nTEST:", f.__name__) - with ir.Context() as ctx, ir.Location.unknown(): - iree.compiler._mlir_libs._ireeDialects.transform.register_dialect(ctx) - module = ir.Module.create() - with ir.InsertionPoint(module.body): - f() - print(module) - return f - - -# CHECK-LABEL: TEST: testLowerVectorsOp -# CHECK: transform.lower_vectors {contraction_lowering = "outerproduct", multireduction_lowering = "innerparallel", split_transfers = "linalg-copy", stages = [1], transpose_avx2_lowering = false, transpose_lowering = "shuffle", unroll_vector_transfers = true} -@constructAndPrintInModule -def testLowerVectorsOp(): - op = iree_structured_transform.LowerVectorsOp( - contraction_lowering="outerproduct", - multireduction_lowering="innerparallel", - split_transfers="linalg-copy", - stages=[1], - transpose_avx2_lowering=False, - transpose_lowering="shuffle", - unroll_vector_transfers=True)
diff --git a/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/CMakeLists.txt b/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/CMakeLists.txt index 3741c34..9b87ed5 100644 --- a/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/CMakeLists.txt +++ b/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/CMakeLists.txt
@@ -28,6 +28,7 @@ MLIRSCFTransforms MLIRTensorDialect MLIRTransforms + MLIRVectorTransformOps ) add_llvm_tool(iree-dialects-opt
diff --git a/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/iree-dialects-opt.cpp b/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/iree-dialects-opt.cpp index a3021ce..d4d8826 100644 --- a/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/iree-dialects-opt.cpp +++ b/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/iree-dialects-opt.cpp
@@ -28,6 +28,7 @@ #include "mlir/Dialect/SCF/Transforms/Passes.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Transform/IR/TransformDialect.h" +#include "mlir/Dialect/Vector/TransformOps/VectorTransformOps.h" #include "mlir/IR/AsmState.h" #include "mlir/IR/Dialect.h" #include "mlir/Tools/mlir-opt/MlirOptMain.h" @@ -67,7 +68,8 @@ mlir::pdl_interp::PDLInterpDialect, mlir::scf::SCFDialect, mlir::tensor::TensorDialect, - mlir::transform::TransformDialect + mlir::transform::TransformDialect, + mlir::vector::VectorDialect // clang-format on >(); @@ -91,6 +93,7 @@ transform_ext::StructuredTransformOpsExtension>(); mlir::linalg::registerTransformDialectExtension(registry); mlir::scf::registerTransformDialectExtension(registry); + mlir::vector::registerTransformDialectExtension(registry); return mlir::asMainReturnCode( mlir::MlirOptMain(argc, argv, "MLIR modular optimizer driver\n", registry,