diff --git a/mlir/docs/Dialects/Vector.md b/mlir/docs/Dialects/Vector.md --- a/mlir/docs/Dialects/Vector.md +++ b/mlir/docs/Dialects/Vector.md @@ -119,7 +119,7 @@ The list of Vector is currently undergoing evolutions and is best kept track of by following the evolution of the -[VectorOps.td](https://github.com/llvm/llvm-project/blob/main/mlir/include/mlir/Dialect/Vector/VectorOps.td) +[VectorOps.td](https://github.com/llvm/llvm-project/blob/main/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td) ODS file (markdown documentation is automatically generated locally when building and populates the [Vector doc](https://github.com/llvm/llvm-project/blob/main/mlir/docs/Dialects/Vector.md)). diff --git a/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h b/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h --- a/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h +++ b/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h @@ -17,7 +17,7 @@ #include "mlir/Dialect/SCF/Utils/Utils.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Utils/StaticValueUtils.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/Dialect/X86Vector/Transforms.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Transforms/DialectConversion.h" diff --git a/mlir/include/mlir/Dialect/Utils/IndexingUtils.h b/mlir/include/mlir/Dialect/Utils/IndexingUtils.h new file mode 100644 --- /dev/null +++ b/mlir/include/mlir/Dialect/Utils/IndexingUtils.h @@ -0,0 +1,39 @@ +//===- IndexingUtils.h - Helpers related to index computations --*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This header file defines utilities and common canonicalization patterns for +// reshape operations. +// +//===----------------------------------------------------------------------===// + +#ifndef MLIR_DIALECT_UTILS_INDEXINGUTILS_H +#define MLIR_DIALECT_UTILS_INDEXINGUTILS_H + +#include "mlir/Support/LLVM.h" +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/SmallVector.h" + +namespace mlir { +class ArrayAttr; + +/// Computes and returns the linearized index of 'offsets' w.r.t. 'basis'. +int64_t linearize(ArrayRef offsets, ArrayRef basis); + +/// Given the strides together with a linear index in the dimension +/// space, returns the vector-space offsets in each dimension for a +/// de-linearized index. +SmallVector delinearize(ArrayRef strides, + int64_t linearIndex); + +/// Helper that returns a subset of `arrayAttr` as a vector of int64_t. +SmallVector getI64SubArray(ArrayAttr arrayAttr, + unsigned dropFront = 0, + unsigned dropBack = 0); +} // namespace mlir + +#endif // MLIR_DIALECT_UTILS_INDEXINGUTILS_H diff --git a/mlir/include/mlir/Dialect/Vector/CMakeLists.txt b/mlir/include/mlir/Dialect/Vector/CMakeLists.txt --- a/mlir/include/mlir/Dialect/Vector/CMakeLists.txt +++ b/mlir/include/mlir/Dialect/Vector/CMakeLists.txt @@ -1,8 +1,2 @@ -add_mlir_dialect(VectorOps vector) -add_mlir_doc(VectorOps VectorOps Dialects/ -gen-op-doc) - -set(LLVM_TARGET_DEFINITIONS VectorOps.td) -mlir_tablegen(VectorOpsEnums.h.inc -gen-enum-decls) -mlir_tablegen(VectorOpsEnums.cpp.inc -gen-enum-defs) -add_public_tablegen_target(MLIRVectorOpsEnumsIncGen) -add_dependencies(mlir-headers MLIRVectorOpsEnumsIncGen) +add_subdirectory(IR) +add_subdirectory(Transforms) diff --git a/mlir/include/mlir/Dialect/Vector/CMakeLists.txt b/mlir/include/mlir/Dialect/Vector/IR/CMakeLists.txt copy from mlir/include/mlir/Dialect/Vector/CMakeLists.txt copy to mlir/include/mlir/Dialect/Vector/IR/CMakeLists.txt diff --git a/mlir/include/mlir/Dialect/Vector/VectorOps.h b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h rename from mlir/include/mlir/Dialect/Vector/VectorOps.h rename to mlir/include/mlir/Dialect/Vector/IR/VectorOps.h --- a/mlir/include/mlir/Dialect/Vector/VectorOps.h +++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.h @@ -10,8 +10,8 @@ // //===----------------------------------------------------------------------===// -#ifndef MLIR_DIALECT_VECTOR_VECTOROPS_H -#define MLIR_DIALECT_VECTOR_VECTOROPS_H +#ifndef MLIR_DIALECT_VECTOR_IR_VECTOROPS_H +#define MLIR_DIALECT_VECTOR_IR_VECTOROPS_H #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" @@ -27,13 +27,15 @@ #include "llvm/ADT/StringExtras.h" // Pull in all enum type definitions and utility function declarations. -#include "mlir/Dialect/Vector/VectorOpsEnums.h.inc" +#include "mlir/Dialect/Vector/IR/VectorOpsEnums.h.inc" namespace mlir { class MLIRContext; class RewritePatternSet; namespace vector { +class TransferReadOp; +class TransferWriteOp; class VectorDialect; namespace detail { @@ -152,18 +154,35 @@ /// return true for memrefs with no strides. bool isLastMemrefDimUnitStride(MemRefType type); -namespace impl { /// Build the default minor identity map suitable for a vector transfer. This /// also handles the case memref<... x vector<...>> -> vector<...> in which the /// rank of the identity map must take the vector element type into account. AffineMap getTransferMinorIdentityMap(ShapedType shapedType, VectorType vectorType); -} // namespace impl + +/// Return true if the transfer_write fully writes the data accessed by the +/// transfer_read. +bool checkSameValueRAW(TransferWriteOp defWrite, TransferReadOp read); + +/// Return true if the write op fully over-write the priorWrite transfer_write +/// op. +bool checkSameValueWAW(TransferWriteOp write, TransferWriteOp priorWrite); + +/// Same behavior as `isDisjointTransferSet` but doesn't require the operations +/// to have the same tensor/memref. This allows comparing operations accessing +/// different tensors. +bool isDisjointTransferIndices(VectorTransferOpInterface transferA, + VectorTransferOpInterface transferB); + +/// Return true if we can prove that the transfer operations access disjoint +/// memory. +bool isDisjointTransferSet(VectorTransferOpInterface transferA, + VectorTransferOpInterface transferB); } // namespace vector } // namespace mlir #define GET_OP_CLASSES -#include "mlir/Dialect/Vector/VectorOps.h.inc" -#include "mlir/Dialect/Vector/VectorOpsDialect.h.inc" +#include "mlir/Dialect/Vector/IR/VectorOps.h.inc" +#include "mlir/Dialect/Vector/IR/VectorOpsDialect.h.inc" -#endif // MLIR_DIALECT_VECTOR_VECTOROPS_H +#endif // MLIR_DIALECT_VECTOR_IR_VECTOROPS_H diff --git a/mlir/include/mlir/Dialect/Vector/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td rename from mlir/include/mlir/Dialect/Vector/VectorOps.td rename to mlir/include/mlir/Dialect/Vector/IR/VectorOps.td diff --git a/mlir/include/mlir/Dialect/Vector/Transforms/CMakeLists.txt b/mlir/include/mlir/Dialect/Vector/Transforms/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/mlir/include/mlir/Dialect/Vector/Transforms/CMakeLists.txt @@ -0,0 +1 @@ +# This dialect does currently not have any passes. diff --git a/mlir/include/mlir/Dialect/Vector/VectorRewritePatterns.h b/mlir/include/mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h rename from mlir/include/mlir/Dialect/Vector/VectorRewritePatterns.h rename to mlir/include/mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h --- a/mlir/include/mlir/Dialect/Vector/VectorRewritePatterns.h +++ b/mlir/include/mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h @@ -6,13 +6,13 @@ // //===----------------------------------------------------------------------===// -#ifndef MLIR_DIALECT_VECTOR_VECTORREWRITEPATTERNS_H -#define MLIR_DIALECT_VECTOR_VECTORREWRITEPATTERNS_H +#ifndef MLIR_DIALECT_VECTOR_TRANSFORMS_VECTORREWRITEPATTERNS_H +#define MLIR_DIALECT_VECTOR_TRANSFORMS_VECTORREWRITEPATTERNS_H #include -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/PatternMatch.h" @@ -513,4 +513,4 @@ } // namespace vector } // namespace mlir -#endif // MLIR_DIALECT_VECTOR_VECTORREWRITEPATTERNS_H +#endif // MLIR_DIALECT_VECTOR_TRANSFORMS_VECTORREWRITEPATTERNS_H diff --git a/mlir/include/mlir/Dialect/Vector/VectorTransforms.h b/mlir/include/mlir/Dialect/Vector/Transforms/VectorTransforms.h rename from mlir/include/mlir/Dialect/Vector/VectorTransforms.h rename to mlir/include/mlir/Dialect/Vector/Transforms/VectorTransforms.h --- a/mlir/include/mlir/Dialect/Vector/VectorTransforms.h +++ b/mlir/include/mlir/Dialect/Vector/Transforms/VectorTransforms.h @@ -6,11 +6,11 @@ // //===----------------------------------------------------------------------===// -#ifndef MLIR_DIALECT_VECTOR_VECTORTRANSFORMS_H -#define MLIR_DIALECT_VECTOR_VECTORTRANSFORMS_H +#ifndef MLIR_DIALECT_VECTOR_TRANSFORMS_VECTORTRANSFORMS_H +#define MLIR_DIALECT_VECTOR_TRANSFORMS_VECTORTRANSFORMS_H -#include "mlir/Dialect/Vector/VectorRewritePatterns.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" namespace mlir { class MLIRContext; @@ -94,4 +94,4 @@ } // namespace vector } // namespace mlir -#endif // MLIR_DIALECT_VECTOR_VECTORTRANSFORMS_H +#endif // MLIR_DIALECT_VECTOR_TRANSFORMS_VECTORTRANSFORMS_H diff --git a/mlir/include/mlir/Dialect/Vector/VectorUtils.h b/mlir/include/mlir/Dialect/Vector/Utils/VectorUtils.h rename from mlir/include/mlir/Dialect/Vector/VectorUtils.h rename to mlir/include/mlir/Dialect/Vector/Utils/VectorUtils.h --- a/mlir/include/mlir/Dialect/Vector/VectorUtils.h +++ b/mlir/include/mlir/Dialect/Vector/Utils/VectorUtils.h @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#ifndef MLIR_DIALECT_VECTOR_VECTORUTILS_H_ -#define MLIR_DIALECT_VECTOR_VECTORUTILS_H_ +#ifndef MLIR_DIALECT_VECTOR_UTILS_VECTORUTILS_H_ +#define MLIR_DIALECT_VECTOR_UTILS_VECTORUTILS_H_ #include "mlir/IR/BuiltinAttributes.h" #include "mlir/Support/LLVM.h" @@ -47,15 +47,6 @@ SmallVector computeStrides(ArrayRef shape, ArrayRef sizes); -/// Computes and returns the linearized index of 'offsets' w.r.t. 'basis'. -int64_t linearize(ArrayRef offsets, ArrayRef basis); - -/// Given the strides together with a linear index in the dimension -/// space, returns the vector-space offsets in each dimension for a -/// de-linearized index. -SmallVector delinearize(ArrayRef strides, - int64_t linearIndex); - /// Given the target sizes of a vector, together with vector-space offsets, /// returns the element-space offsets for each dimension. SmallVector @@ -158,38 +149,6 @@ makePermutationMap(Operation *insertPoint, ArrayRef indices, const DenseMap &loopToVectorDim); -/// Build the default minor identity map suitable for a vector transfer. This -/// also handles the case memref<... x vector<...>> -> vector<...> in which the -/// rank of the identity map must take the vector element type into account. -AffineMap getTransferMinorIdentityMap(ShapedType shapedType, - VectorType vectorType); - -/// Return true if we can prove that the transfer operations access disjoint -/// memory. -bool isDisjointTransferSet(VectorTransferOpInterface transferA, - VectorTransferOpInterface transferB); - -/// Same behavior as `isDisjointTransferSet` but doesn't require the operations -/// to have the same tensor/memref. This allows comparing operations accessing -/// different tensors. -bool isDisjointTransferIndices(VectorTransferOpInterface transferA, - VectorTransferOpInterface transferB); - -/// Return true if the transfer_write fully writes the data accessed by the -/// transfer_read. -bool checkSameValueRAW(vector::TransferWriteOp defWrite, - vector::TransferReadOp read); - -/// Return true if the write op fully over-write the priorWrite transfer_write -/// op. -bool checkSameValueWAW(vector::TransferWriteOp write, - vector::TransferWriteOp priorWrite); - -// Helper that returns a subset of `arrayAttr` as a vector of int64_t. -SmallVector getI64SubArray(ArrayAttr arrayAttr, - unsigned dropFront = 0, - unsigned dropBack = 0); - namespace matcher { /// Matches vector.transfer_read, vector.transfer_write and ops that return a @@ -205,4 +164,4 @@ } // namespace matcher } // namespace mlir -#endif // MLIR_DIALECT_VECTOR_VECTORUTILS_H_ +#endif // MLIR_DIALECT_VECTOR_UTILS_VECTORUTILS_H_ diff --git a/mlir/include/mlir/InitAllDialects.h b/mlir/include/mlir/InitAllDialects.h --- a/mlir/include/mlir/InitAllDialects.h +++ b/mlir/include/mlir/InitAllDialects.h @@ -45,7 +45,7 @@ #include "mlir/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.h" #include "mlir/Dialect/Tensor/IR/TensorTilingInterfaceImpl.h" #include "mlir/Dialect/Tosa/IR/TosaOps.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Dialect/X86Vector/X86VectorDialect.h" #include "mlir/IR/Dialect.h" diff --git a/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp b/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp --- a/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp +++ b/mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp @@ -19,7 +19,7 @@ #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/SCF.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/AffineExprVisitor.h" #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/IR/Builders.h" diff --git a/mlir/lib/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.cpp b/mlir/lib/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.cpp --- a/mlir/lib/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.cpp +++ b/mlir/lib/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.cpp @@ -9,7 +9,7 @@ #include "mlir/Conversion/ArmNeon2dToIntr/ArmNeon2dToIntr.h" #include "../PassDetail.h" #include "mlir/Dialect/ArmNeon/ArmNeonDialect.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Pass/Pass.h" #include "mlir/Pass/PassRegistry.h" diff --git a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp --- a/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp +++ b/mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp @@ -25,7 +25,7 @@ #include "mlir/Dialect/GPU/Passes.h" #include "mlir/Dialect/LLVMIR/ROCDLDialect.h" #include "mlir/Dialect/Math/IR/Math.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" diff --git a/mlir/lib/Conversion/MathToLibm/CMakeLists.txt b/mlir/lib/Conversion/MathToLibm/CMakeLists.txt --- a/mlir/lib/Conversion/MathToLibm/CMakeLists.txt +++ b/mlir/lib/Conversion/MathToLibm/CMakeLists.txt @@ -12,7 +12,9 @@ LINK_LIBS PUBLIC MLIRArithmetic + MLIRDialectUtils MLIRMath MLIRStandardOpsTransforms MLIRVector + MLIRVectorUtils ) diff --git a/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp b/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp --- a/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp +++ b/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp @@ -12,8 +12,9 @@ #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Math/IR/Math.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Utils/IndexingUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/BuiltinDialect.h" #include "mlir/IR/PatternMatch.h" diff --git a/mlir/lib/Conversion/VectorToGPU/CMakeLists.txt b/mlir/lib/Conversion/VectorToGPU/CMakeLists.txt --- a/mlir/lib/Conversion/VectorToGPU/CMakeLists.txt +++ b/mlir/lib/Conversion/VectorToGPU/CMakeLists.txt @@ -14,4 +14,5 @@ MLIRMemRef MLIRTransforms MLIRVector + MLIRVectorUtils ) diff --git a/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp b/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp --- a/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp +++ b/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp @@ -21,8 +21,8 @@ #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/SCF.h" #include "mlir/Dialect/Utils/StructuredOpsUtils.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/Builders.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" diff --git a/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt b/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt --- a/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt +++ b/mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt @@ -25,6 +25,7 @@ MLIRTargetLLVMIRExport MLIRTransforms MLIRVector + MLIRVectorTransforms MLIRX86Vector MLIRX86VectorTransforms ) diff --git a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp --- a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp +++ b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp @@ -14,7 +14,7 @@ #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/Support/MathExtras.h" #include "mlir/Target/LLVMIR/TypeToLLVM.h" diff --git a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVMPass.cpp b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVMPass.cpp --- a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVMPass.cpp +++ b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVMPass.cpp @@ -21,7 +21,7 @@ #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorRewritePatterns.h" +#include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h" #include "mlir/Dialect/X86Vector/Transforms.h" #include "mlir/Dialect/X86Vector/X86VectorDialect.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" diff --git a/mlir/lib/Conversion/VectorToROCDL/VectorToROCDL.cpp b/mlir/lib/Conversion/VectorToROCDL/VectorToROCDL.cpp --- a/mlir/lib/Conversion/VectorToROCDL/VectorToROCDL.cpp +++ b/mlir/lib/Conversion/VectorToROCDL/VectorToROCDL.cpp @@ -22,7 +22,7 @@ #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/LLVMIR/ROCDLDialect.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" diff --git a/mlir/lib/Conversion/VectorToSCF/CMakeLists.txt b/mlir/lib/Conversion/VectorToSCF/CMakeLists.txt --- a/mlir/lib/Conversion/VectorToSCF/CMakeLists.txt +++ b/mlir/lib/Conversion/VectorToSCF/CMakeLists.txt @@ -13,4 +13,5 @@ MLIRMemRef MLIRTransforms MLIRVector + MLIRVectorTransforms ) diff --git a/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp b/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp --- a/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp +++ b/mlir/lib/Conversion/VectorToSCF/VectorToSCF.cpp @@ -19,7 +19,7 @@ #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/SCF.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/IR/Builders.h" #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRV.cpp b/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRV.cpp --- a/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRV.cpp +++ b/mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRV.cpp @@ -17,7 +17,7 @@ #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/Dialect/SPIRV/IR/SPIRVTypes.h" #include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Transforms/DialectConversion.h" #include diff --git a/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt --- a/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt +++ b/mlir/lib/Dialect/Affine/Transforms/CMakeLists.txt @@ -34,6 +34,7 @@ MLIRStandard MLIRTransformUtils MLIRVector + MLIRVectorUtils MLIRVectorToLLVM ) diff --git a/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp b/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp --- a/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp @@ -18,8 +18,8 @@ #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/BlockAndValueMapping.h" #include "mlir/Support/LLVM.h" #include "llvm/ADT/STLExtras.h" diff --git a/mlir/lib/Dialect/ArmNeon/IR/ArmNeonDialect.cpp b/mlir/lib/Dialect/ArmNeon/IR/ArmNeonDialect.cpp --- a/mlir/lib/Dialect/ArmNeon/IR/ArmNeonDialect.cpp +++ b/mlir/lib/Dialect/ArmNeon/IR/ArmNeonDialect.cpp @@ -11,7 +11,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/ArmNeon/ArmNeonDialect.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/Builders.h" #include "mlir/IR/OpImplementation.h" #include "mlir/IR/TypeUtilities.h" diff --git a/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/VectorInterfaceImpl.cpp b/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/VectorInterfaceImpl.cpp --- a/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/VectorInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Linalg/ComprehensiveBufferize/VectorInterfaceImpl.cpp @@ -8,7 +8,7 @@ #include "mlir/Dialect/Linalg/ComprehensiveBufferize/VectorInterfaceImpl.h" #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/Dialect.h" #include "mlir/IR/Operation.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/Bufferize.cpp b/mlir/lib/Dialect/Linalg/Transforms/Bufferize.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Bufferize.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Bufferize.cpp @@ -19,7 +19,7 @@ #include "mlir/Dialect/StandardOps/Transforms/Passes.h" #include "mlir/Dialect/StandardOps/Utils/Utils.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/BuiltinDialect.h" #include "mlir/IR/Operation.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt --- a/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt +++ b/mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt @@ -59,6 +59,8 @@ MLIRTransformUtils MLIRVector MLIRVectorBufferizableOpInterfaceImpl + MLIRVectorTransforms + MLIRVectorUtils MLIRX86VectorTransforms MLIRVectorToSCF ) diff --git a/mlir/lib/Dialect/Linalg/Transforms/CodegenStrategy.cpp b/mlir/lib/Dialect/Linalg/Transforms/CodegenStrategy.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/CodegenStrategy.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/CodegenStrategy.cpp @@ -15,8 +15,8 @@ #include "mlir/Dialect/Linalg/Passes.h" #include "mlir/Dialect/Linalg/Transforms/Hoisting.h" #include "mlir/Dialect/SCF/Transforms.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/Pass/PassManager.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "mlir/Transforms/Passes.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/HoistPadding.cpp b/mlir/lib/Dialect/Linalg/Transforms/HoistPadding.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/HoistPadding.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/HoistPadding.cpp @@ -18,8 +18,8 @@ #include "mlir/Dialect/SCF/Utils/Utils.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/AsmState.h" #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/Dominance.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp b/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp @@ -21,8 +21,8 @@ #include "mlir/Dialect/SCF/Utils/Utils.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/Dominance.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" @@ -202,7 +202,7 @@ continue; } auto read = dyn_cast(user); - if (!read || !isDisjointTransferIndices( + if (!read || !vector::isDisjointTransferIndices( cast(read.getOperation()), cast( write.transferWriteOp.getOperation()))) { @@ -464,14 +464,14 @@ continue; if (auto transferWriteUse = dyn_cast(use.getOwner())) { - if (!isDisjointTransferSet( + if (!vector::isDisjointTransferSet( cast(transferWrite.getOperation()), cast( transferWriteUse.getOperation()))) return WalkResult::advance(); } else if (auto transferReadUse = dyn_cast(use.getOwner())) { - if (!isDisjointTransferSet( + if (!vector::isDisjointTransferSet( cast(transferWrite.getOperation()), cast( transferReadUse.getOperation()))) diff --git a/mlir/lib/Dialect/Linalg/Transforms/Interchange.cpp b/mlir/lib/Dialect/Linalg/Transforms/Interchange.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Interchange.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Interchange.cpp @@ -15,7 +15,7 @@ #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/Utils/StructuredOpsUtils.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/Matchers.h" #include "mlir/IR/PatternMatch.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp b/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/LinalgStrategyPasses.cpp @@ -25,7 +25,7 @@ #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/SCF/Transforms.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/Pass/PassManager.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp b/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp @@ -21,7 +21,7 @@ #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Utils/StaticValueUtils.h" #include "mlir/Dialect/Utils/StructuredOpsUtils.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/Matchers.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp b/mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp @@ -19,8 +19,8 @@ #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Utils/StructuredOpsUtils.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/Matchers.h" #include "mlir/IR/PatternMatch.h" diff --git a/mlir/lib/Dialect/Math/Transforms/AlgebraicSimplification.cpp b/mlir/lib/Dialect/Math/Transforms/AlgebraicSimplification.cpp --- a/mlir/lib/Dialect/Math/Transforms/AlgebraicSimplification.cpp +++ b/mlir/lib/Dialect/Math/Transforms/AlgebraicSimplification.cpp @@ -15,7 +15,7 @@ #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Math/IR/Math.h" #include "mlir/Dialect/Math/Transforms/Passes.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/Builders.h" #include "mlir/IR/Matchers.h" #include "mlir/IR/TypeUtilities.h" diff --git a/mlir/lib/Dialect/Math/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Math/Transforms/CMakeLists.txt --- a/mlir/lib/Dialect/Math/Transforms/CMakeLists.txt +++ b/mlir/lib/Dialect/Math/Transforms/CMakeLists.txt @@ -8,6 +8,7 @@ LINK_LIBS PUBLIC MLIRArithmetic + MLIRDialectUtils MLIRIR MLIRMath MLIRPass @@ -15,4 +16,5 @@ MLIRTransforms MLIRX86Vector MLIRVector + MLIRVectorUtils ) diff --git a/mlir/lib/Dialect/Math/Transforms/PolynomialApproximation.cpp b/mlir/lib/Dialect/Math/Transforms/PolynomialApproximation.cpp --- a/mlir/lib/Dialect/Math/Transforms/PolynomialApproximation.cpp +++ b/mlir/lib/Dialect/Math/Transforms/PolynomialApproximation.cpp @@ -18,8 +18,9 @@ #include "mlir/Dialect/Math/IR/Math.h" #include "mlir/Dialect/Math/Transforms/Approximation.h" #include "mlir/Dialect/Math/Transforms/Passes.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Utils/IndexingUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/Dialect/X86Vector/X86VectorDialect.h" #include "mlir/IR/Builders.h" #include "mlir/IR/ImplicitLocOpBuilder.h" diff --git a/mlir/lib/Dialect/MemRef/Transforms/FoldSubViewOps.cpp b/mlir/lib/Dialect/MemRef/Transforms/FoldSubViewOps.cpp --- a/mlir/lib/Dialect/MemRef/Transforms/FoldSubViewOps.cpp +++ b/mlir/lib/Dialect/MemRef/Transforms/FoldSubViewOps.cpp @@ -16,7 +16,7 @@ #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/MemRef/Transforms/Passes.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" diff --git a/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp b/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp --- a/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp +++ b/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp @@ -24,7 +24,7 @@ #include "mlir/Dialect/SparseTensor/Transforms/Passes.h" #include "mlir/Dialect/SparseTensor/Utils/Merger.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/Matchers.h" #include "mlir/IR/TensorEncoding.h" #include "llvm/ADT/SmallBitVector.h" diff --git a/mlir/lib/Dialect/Utils/CMakeLists.txt b/mlir/lib/Dialect/Utils/CMakeLists.txt --- a/mlir/lib/Dialect/Utils/CMakeLists.txt +++ b/mlir/lib/Dialect/Utils/CMakeLists.txt @@ -1,4 +1,5 @@ add_mlir_library(MLIRDialectUtils + IndexingUtils.cpp ReshapeOpsUtils.cpp StructuredOpsUtils.cpp StaticValueUtils.cpp diff --git a/mlir/lib/Dialect/Utils/IndexingUtils.cpp b/mlir/lib/Dialect/Utils/IndexingUtils.cpp new file mode 100644 --- /dev/null +++ b/mlir/lib/Dialect/Utils/IndexingUtils.cpp @@ -0,0 +1,44 @@ +//===- IndexingUtils.cpp - Helpers related to index computations ----------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "mlir/Dialect/Utils/IndexingUtils.h" + +#include "mlir/IR/BuiltinAttributes.h" + +int64_t mlir::linearize(ArrayRef offsets, ArrayRef basis) { + assert(offsets.size() == basis.size()); + int64_t linearIndex = 0; + for (unsigned idx = 0, e = basis.size(); idx < e; ++idx) + linearIndex += offsets[idx] * basis[idx]; + return linearIndex; +} + +llvm::SmallVector mlir::delinearize(ArrayRef sliceStrides, + int64_t index) { + int64_t rank = sliceStrides.size(); + SmallVector vectorOffsets(rank); + for (int64_t r = 0; r < rank; ++r) { + assert(sliceStrides[r] > 0); + vectorOffsets[r] = index / sliceStrides[r]; + index %= sliceStrides[r]; + } + return vectorOffsets; +} + +llvm::SmallVector mlir::getI64SubArray(ArrayAttr arrayAttr, + unsigned dropFront, + unsigned dropBack) { + assert(arrayAttr.size() > dropFront + dropBack && "Out of bounds"); + auto range = arrayAttr.getAsRange(); + SmallVector res; + res.reserve(arrayAttr.size() - dropFront - dropBack); + for (auto it = range.begin() + dropFront, eit = range.end() - dropBack; + it != eit; ++it) + res.push_back((*it).getValue().getSExtValue()); + return res; +} diff --git a/mlir/lib/Dialect/Vector/CMakeLists.txt b/mlir/lib/Dialect/Vector/CMakeLists.txt --- a/mlir/lib/Dialect/Vector/CMakeLists.txt +++ b/mlir/lib/Dialect/Vector/CMakeLists.txt @@ -1,34 +1,3 @@ -add_mlir_dialect_library(MLIRVector - VectorDropLeadUnitDim.cpp - VectorInsertExtractStridedSliceRewritePatterns.cpp - VectorMultiDimReductionTransforms.cpp - VectorOps.cpp - VectorTransferOpTransforms.cpp - VectorTransferSplitRewritePatterns.cpp - VectorTransferPermutationMapRewritePatterns.cpp - VectorTransforms.cpp - VectorUnrollDistribute.cpp - VectorUtils.cpp - - ADDITIONAL_HEADER_DIRS - ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Vector - - DEPENDS - MLIRVectorOpsIncGen - MLIRVectorOpsEnumsIncGen - - LINK_LIBS PUBLIC - MLIRArithmetic - MLIRDialectUtils - MLIRIR - MLIRStandard - MLIRAffine - MLIRAffineUtils - MLIRLinalg - MLIRMemRef - MLIRSCF - MLIRAffineAnalysis - MLIRDataLayoutInterfaces - MLIRSideEffectInterfaces - MLIRVectorInterfaces - ) +add_subdirectory(IR) +add_subdirectory(Transforms) +add_subdirectory(Utils) diff --git a/mlir/lib/Dialect/Vector/IR/CMakeLists.txt b/mlir/lib/Dialect/Vector/IR/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/mlir/lib/Dialect/Vector/IR/CMakeLists.txt @@ -0,0 +1,22 @@ +add_mlir_dialect_library(MLIRVector + VectorOps.cpp + + ADDITIONAL_HEADER_DIRS + ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Vector/IR + + DEPENDS + MLIRVectorOpsIncGen + MLIRVectorOpsEnumsIncGen + + LINK_LIBS PUBLIC + MLIRAffine + MLIRAffineAnalysis + MLIRAffineUtils + MLIRArithmetic + MLIRDialectUtils + MLIRIR + MLIRMemRef + MLIRStandard + MLIRSideEffectInterfaces + MLIRVectorInterfaces + ) diff --git a/mlir/lib/Dialect/Vector/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp rename from mlir/lib/Dialect/Vector/VectorOps.cpp rename to mlir/lib/Dialect/Vector/IR/VectorOps.cpp --- a/mlir/lib/Dialect/Vector/VectorOps.cpp +++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp @@ -11,14 +11,15 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" + #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/Dialect/StandardOps/Utils/Utils.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" +#include "mlir/Dialect/Utils/IndexingUtils.h" #include "mlir/Dialect/Utils/StructuredOpsUtils.h" -#include "mlir/Dialect/Vector/VectorUtils.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/BlockAndValueMapping.h" @@ -35,9 +36,9 @@ #include "llvm/ADT/bit.h" #include -#include "mlir/Dialect/Vector/VectorOpsDialect.cpp.inc" +#include "mlir/Dialect/Vector/IR/VectorOpsDialect.cpp.inc" // Pull in all enum type and utility function definitions. -#include "mlir/Dialect/Vector/VectorOpsEnums.cpp.inc" +#include "mlir/Dialect/Vector/IR/VectorOpsEnums.cpp.inc" using namespace mlir; using namespace mlir::vector; @@ -119,6 +120,80 @@ return succeeded(successStrides) && (strides.empty() || strides.back() == 1); } +AffineMap mlir::vector::getTransferMinorIdentityMap(ShapedType shapedType, + VectorType vectorType) { + int64_t elementVectorRank = 0; + VectorType elementVectorType = + shapedType.getElementType().dyn_cast(); + if (elementVectorType) + elementVectorRank += elementVectorType.getRank(); + // 0-d transfers are to/from tensor/memref and vector<1xt>. + // TODO: replace once we have 0-d vectors. + if (shapedType.getRank() == 0 && + vectorType.getShape() == ArrayRef{1}) + return AffineMap::get( + /*numDims=*/0, /*numSymbols=*/0, + getAffineConstantExpr(0, shapedType.getContext())); + return AffineMap::getMinorIdentityMap( + shapedType.getRank(), vectorType.getRank() - elementVectorRank, + shapedType.getContext()); +} + +bool mlir::vector::checkSameValueRAW(vector::TransferWriteOp defWrite, + vector::TransferReadOp read) { + return !defWrite.hasOutOfBoundsDim() && !defWrite.mask() && !read.mask() && + defWrite.indices() == read.indices() && + defWrite.getVectorType() == read.getVectorType() && + defWrite.permutation_map() == read.permutation_map(); +} + +bool mlir::vector::checkSameValueWAW(vector::TransferWriteOp write, + vector::TransferWriteOp priorWrite) { + return priorWrite.indices() == write.indices() && + priorWrite.mask() == write.mask() && + priorWrite.getVectorType() == write.getVectorType() && + priorWrite.permutation_map() == write.permutation_map(); +} + +bool mlir::vector::isDisjointTransferIndices( + VectorTransferOpInterface transferA, VectorTransferOpInterface transferB) { + // For simplicity only look at transfer of same type. + if (transferA.getVectorType() != transferB.getVectorType()) + return false; + unsigned rankOffset = transferA.getLeadingShapedRank(); + for (unsigned i = 0, e = transferA.indices().size(); i < e; i++) { + auto indexA = transferA.indices()[i].getDefiningOp(); + auto indexB = transferB.indices()[i].getDefiningOp(); + // If any of the indices are dynamic we cannot prove anything. + if (!indexA || !indexB) + continue; + + if (i < rankOffset) { + // For leading dimensions, if we can prove that index are different we + // know we are accessing disjoint slices. + if (indexA.getValue().cast().getInt() != + indexB.getValue().cast().getInt()) + return true; + } else { + // For this dimension, we slice a part of the memref we need to make sure + // the intervals accessed don't overlap. + int64_t distance = + std::abs(indexA.getValue().cast().getInt() - + indexB.getValue().cast().getInt()); + if (distance >= transferA.getVectorType().getDimSize(i - rankOffset)) + return true; + } + } + return false; +} + +bool mlir::vector::isDisjointTransferSet(VectorTransferOpInterface transferA, + VectorTransferOpInterface transferB) { + if (transferA.source() != transferB.source()) + return false; + return isDisjointTransferIndices(transferA, transferB); +} + //===----------------------------------------------------------------------===// // CombiningKindAttr //===----------------------------------------------------------------------===// @@ -233,7 +308,7 @@ addOperations< #define GET_OP_LIST -#include "mlir/Dialect/Vector/VectorOps.cpp.inc" +#include "mlir/Dialect/Vector/IR/VectorOps.cpp.inc" >(); } @@ -4311,4 +4386,4 @@ } #define GET_OP_CLASSES -#include "mlir/Dialect/Vector/VectorOps.cpp.inc" +#include "mlir/Dialect/Vector/IR/VectorOps.cpp.inc" diff --git a/mlir/lib/Dialect/Vector/CMakeLists.txt b/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt copy from mlir/lib/Dialect/Vector/CMakeLists.txt copy to mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt --- a/mlir/lib/Dialect/Vector/CMakeLists.txt +++ b/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt @@ -1,34 +1,28 @@ -add_mlir_dialect_library(MLIRVector +add_mlir_dialect_library(MLIRVectorTransforms VectorDropLeadUnitDim.cpp VectorInsertExtractStridedSliceRewritePatterns.cpp VectorMultiDimReductionTransforms.cpp - VectorOps.cpp VectorTransferOpTransforms.cpp VectorTransferSplitRewritePatterns.cpp VectorTransferPermutationMapRewritePatterns.cpp VectorTransforms.cpp VectorUnrollDistribute.cpp - VectorUtils.cpp ADDITIONAL_HEADER_DIRS - ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Vector - - DEPENDS - MLIRVectorOpsIncGen - MLIRVectorOpsEnumsIncGen + ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Vector/Transforms LINK_LIBS PUBLIC + MLIRAffine + MLIRAffineAnalysis + MLIRAffineUtils MLIRArithmetic MLIRDialectUtils MLIRIR - MLIRStandard - MLIRAffine - MLIRAffineUtils MLIRLinalg MLIRMemRef MLIRSCF - MLIRAffineAnalysis - MLIRDataLayoutInterfaces - MLIRSideEffectInterfaces + MLIRStandard + MLIRVector MLIRVectorInterfaces + MLIRVectorUtils ) diff --git a/mlir/lib/Dialect/Vector/VectorDropLeadUnitDim.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorDropLeadUnitDim.cpp rename from mlir/lib/Dialect/Vector/VectorDropLeadUnitDim.cpp rename to mlir/lib/Dialect/Vector/Transforms/VectorDropLeadUnitDim.cpp --- a/mlir/lib/Dialect/Vector/VectorDropLeadUnitDim.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/VectorDropLeadUnitDim.cpp @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Vector/VectorRewritePatterns.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/Builders.h" #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/IR/TypeUtilities.h" diff --git a/mlir/lib/Dialect/Vector/VectorInsertExtractStridedSliceRewritePatterns.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorInsertExtractStridedSliceRewritePatterns.cpp rename from mlir/lib/Dialect/Vector/VectorInsertExtractStridedSliceRewritePatterns.cpp rename to mlir/lib/Dialect/Vector/Transforms/VectorInsertExtractStridedSliceRewritePatterns.cpp --- a/mlir/lib/Dialect/Vector/VectorInsertExtractStridedSliceRewritePatterns.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/VectorInsertExtractStridedSliceRewritePatterns.cpp @@ -9,9 +9,10 @@ #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorRewritePatterns.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Utils/IndexingUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/BuiltinTypes.h" using namespace mlir; diff --git a/mlir/lib/Dialect/Vector/VectorMultiDimReductionTransforms.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorMultiDimReductionTransforms.cpp rename from mlir/lib/Dialect/Vector/VectorMultiDimReductionTransforms.cpp rename to mlir/lib/Dialect/Vector/Transforms/VectorMultiDimReductionTransforms.cpp --- a/mlir/lib/Dialect/Vector/VectorMultiDimReductionTransforms.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/VectorMultiDimReductionTransforms.cpp @@ -10,8 +10,8 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Vector/VectorRewritePatterns.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/Builders.h" #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/IR/TypeUtilities.h" diff --git a/mlir/lib/Dialect/Vector/VectorTransferOpTransforms.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorTransferOpTransforms.cpp rename from mlir/lib/Dialect/Vector/VectorTransferOpTransforms.cpp rename to mlir/lib/Dialect/Vector/Transforms/VectorTransferOpTransforms.cpp --- a/mlir/lib/Dialect/Vector/VectorTransferOpTransforms.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/VectorTransferOpTransforms.cpp @@ -12,9 +12,9 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/Dominance.h" #include "llvm/ADT/STLExtras.h" @@ -113,7 +113,7 @@ } else { if (auto read = dyn_cast(user)) { // Don't need to consider disjoint reads. - if (isDisjointTransferSet( + if (vector::isDisjointTransferSet( cast(write.getOperation()), cast(read.getOperation()))) continue; @@ -169,7 +169,7 @@ if (auto write = dyn_cast(user)) { // If there is a write, but we can prove that it is disjoint we can ignore // the write. - if (isDisjointTransferSet( + if (vector::isDisjointTransferSet( cast(write.getOperation()), cast(read.getOperation()))) continue; diff --git a/mlir/lib/Dialect/Vector/VectorTransferPermutationMapRewritePatterns.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorTransferPermutationMapRewritePatterns.cpp rename from mlir/lib/Dialect/Vector/VectorTransferPermutationMapRewritePatterns.cpp rename to mlir/lib/Dialect/Vector/Transforms/VectorTransferPermutationMapRewritePatterns.cpp --- a/mlir/lib/Dialect/Vector/VectorTransferPermutationMapRewritePatterns.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/VectorTransferPermutationMapRewritePatterns.cpp @@ -14,7 +14,7 @@ #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/Interfaces/VectorInterfaces.h" using namespace mlir; diff --git a/mlir/lib/Dialect/Vector/VectorTransferSplitRewritePatterns.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorTransferSplitRewritePatterns.cpp rename from mlir/lib/Dialect/Vector/VectorTransferSplitRewritePatterns.cpp rename to mlir/lib/Dialect/Vector/Transforms/VectorTransferSplitRewritePatterns.cpp --- a/mlir/lib/Dialect/Vector/VectorTransferSplitRewritePatterns.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/VectorTransferSplitRewritePatterns.cpp @@ -21,7 +21,7 @@ #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/Dialect/Utils/StructuredOpsUtils.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/IR/Matchers.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Interfaces/VectorInterfaces.h" diff --git a/mlir/lib/Dialect/Vector/VectorTransforms.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorTransforms.cpp rename from mlir/lib/Dialect/Vector/VectorTransforms.cpp rename to mlir/lib/Dialect/Vector/Transforms/VectorTransforms.cpp --- a/mlir/lib/Dialect/Vector/VectorTransforms.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/VectorTransforms.cpp @@ -20,7 +20,7 @@ #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/Dialect/Utils/StructuredOpsUtils.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/IR/Matchers.h" #include "mlir/IR/PatternMatch.h" diff --git a/mlir/lib/Dialect/Vector/VectorUnrollDistribute.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorUnrollDistribute.cpp rename from mlir/lib/Dialect/Vector/VectorUnrollDistribute.cpp rename to mlir/lib/Dialect/Vector/Transforms/VectorUnrollDistribute.cpp --- a/mlir/lib/Dialect/Vector/VectorUnrollDistribute.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/VectorUnrollDistribute.cpp @@ -11,7 +11,8 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/Affine/IR/AffineOps.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Utils/IndexingUtils.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/Interfaces/VectorInterfaces.h" #include "llvm/ADT/MapVector.h" diff --git a/mlir/lib/Dialect/Vector/Utils/CMakeLists.txt b/mlir/lib/Dialect/Vector/Utils/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/mlir/lib/Dialect/Vector/Utils/CMakeLists.txt @@ -0,0 +1,18 @@ +add_mlir_dialect_library(MLIRVectorUtils + VectorUtils.cpp + + ADDITIONAL_HEADER_DIRS + ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Vector/Utils + + LINK_LIBS PUBLIC + MLIRAffine + MLIRAffineAnalysis + MLIRArithmetic + MLIRDialectUtils + MLIRIR + MLIRMemRef + MLIRStandard + MLIRTensor + MLIRVector + MLIRVectorInterfaces + ) diff --git a/mlir/lib/Dialect/Vector/VectorUtils.cpp b/mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp rename from mlir/lib/Dialect/Vector/VectorUtils.cpp rename to mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp --- a/mlir/lib/Dialect/Vector/VectorUtils.cpp +++ b/mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp @@ -10,14 +10,15 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" + #include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/Builders.h" #include "mlir/IR/IntegerSet.h" #include "mlir/IR/Operation.h" @@ -64,26 +65,6 @@ return sliceStrides; } -int64_t mlir::linearize(ArrayRef offsets, ArrayRef basis) { - assert(offsets.size() == basis.size()); - int64_t linearIndex = 0; - for (unsigned idx = 0, e = basis.size(); idx < e; ++idx) - linearIndex += offsets[idx] * basis[idx]; - return linearIndex; -} - -SmallVector mlir::delinearize(ArrayRef sliceStrides, - int64_t index) { - int64_t rank = sliceStrides.size(); - SmallVector vectorOffsets(rank); - for (int64_t r = 0; r < rank; ++r) { - assert(sliceStrides[r] > 0); - vectorOffsets[r] = index / sliceStrides[r]; - index %= sliceStrides[r]; - } - return vectorOffsets; -} - SmallVector mlir::computeElementOffsetsFromVectorSliceOffsets( ArrayRef sizes, ArrayRef vectorOffsets) { SmallVector result; @@ -233,25 +214,6 @@ return makePermutationMap(op->getBlock(), indices, loopToVectorDim); } -AffineMap mlir::getTransferMinorIdentityMap(ShapedType shapedType, - VectorType vectorType) { - int64_t elementVectorRank = 0; - VectorType elementVectorType = - shapedType.getElementType().dyn_cast(); - if (elementVectorType) - elementVectorRank += elementVectorType.getRank(); - // 0-d transfers are to/from tensor/memref and vector<1xt>. - // TODO: replace once we have 0-d vectors. - if (shapedType.getRank() == 0 && - vectorType.getShape() == ArrayRef{1}) - return AffineMap::get( - /*numDims=*/0, /*numSymbols=*/0, - getAffineConstantExpr(0, shapedType.getContext())); - return AffineMap::getMinorIdentityMap( - shapedType.getRank(), vectorType.getRank() - elementVectorRank, - shapedType.getContext()); -} - bool matcher::operatesOnSuperVectorsOf(Operation &op, VectorType subVectorType) { // First, extract the vector type and distinguish between: @@ -304,71 +266,3 @@ // between parallel, reduction and possibly other cases. return ratio.hasValue(); } - -bool mlir::isDisjointTransferIndices(VectorTransferOpInterface transferA, - VectorTransferOpInterface transferB) { - // For simplicity only look at transfer of same type. - if (transferA.getVectorType() != transferB.getVectorType()) - return false; - unsigned rankOffset = transferA.getLeadingShapedRank(); - for (unsigned i = 0, e = transferA.indices().size(); i < e; i++) { - auto indexA = transferA.indices()[i].getDefiningOp(); - auto indexB = transferB.indices()[i].getDefiningOp(); - // If any of the indices are dynamic we cannot prove anything. - if (!indexA || !indexB) - continue; - - if (i < rankOffset) { - // For leading dimensions, if we can prove that index are different we - // know we are accessing disjoint slices. - if (indexA.getValue().cast().getInt() != - indexB.getValue().cast().getInt()) - return true; - } else { - // For this dimension, we slice a part of the memref we need to make sure - // the intervals accessed don't overlap. - int64_t distance = - std::abs(indexA.getValue().cast().getInt() - - indexB.getValue().cast().getInt()); - if (distance >= transferA.getVectorType().getDimSize(i - rankOffset)) - return true; - } - } - return false; -} - -bool mlir::isDisjointTransferSet(VectorTransferOpInterface transferA, - VectorTransferOpInterface transferB) { - if (transferA.source() != transferB.source()) - return false; - return isDisjointTransferIndices(transferA, transferB); -} - -bool mlir::checkSameValueRAW(vector::TransferWriteOp defWrite, - vector::TransferReadOp read) { - return !defWrite.hasOutOfBoundsDim() && !defWrite.mask() && !read.mask() && - defWrite.indices() == read.indices() && - defWrite.getVectorType() == read.getVectorType() && - defWrite.permutation_map() == read.permutation_map(); -} - -bool mlir::checkSameValueWAW(vector::TransferWriteOp write, - vector::TransferWriteOp priorWrite) { - return priorWrite.indices() == write.indices() && - priorWrite.mask() == write.mask() && - priorWrite.getVectorType() == write.getVectorType() && - priorWrite.permutation_map() == write.permutation_map(); -} - -SmallVector mlir::getI64SubArray(ArrayAttr arrayAttr, - unsigned dropFront, - unsigned dropBack) { - assert(arrayAttr.size() > dropFront + dropBack && "Out of bounds"); - auto range = arrayAttr.getAsRange(); - SmallVector res; - res.reserve(arrayAttr.size() - dropFront - dropBack); - for (auto it = range.begin() + dropFront, eit = range.end() - dropBack; - it != eit; ++it) - res.push_back((*it).getValue().getSExtValue()); - return res; -} diff --git a/mlir/lib/Dialect/X86Vector/Transforms/AVXTranspose.cpp b/mlir/lib/Dialect/X86Vector/Transforms/AVXTranspose.cpp --- a/mlir/lib/Dialect/X86Vector/Transforms/AVXTranspose.cpp +++ b/mlir/lib/Dialect/X86Vector/Transforms/AVXTranspose.cpp @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/LLVMIR/LLVMDialect.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Dialect/X86Vector/Transforms.h" #include "mlir/IR/ImplicitLocOpBuilder.h" #include "mlir/IR/Matchers.h" diff --git a/mlir/python/mlir/dialects/VectorOps.td b/mlir/python/mlir/dialects/VectorOps.td --- a/mlir/python/mlir/dialects/VectorOps.td +++ b/mlir/python/mlir/dialects/VectorOps.td @@ -10,6 +10,6 @@ #define PYTHON_BINDINGS_VECTOR_OPS include "mlir/Bindings/Python/Attributes.td" -include "mlir/Dialect/Vector/VectorOps.td" +include "mlir/Dialect/Vector/IR/VectorOps.td" #endif diff --git a/mlir/test/lib/Dialect/Affine/CMakeLists.txt b/mlir/test/lib/Dialect/Affine/CMakeLists.txt --- a/mlir/test/lib/Dialect/Affine/CMakeLists.txt +++ b/mlir/test/lib/Dialect/Affine/CMakeLists.txt @@ -18,9 +18,10 @@ Core LINK_LIBS PUBLIC + MLIRAffineTransforms + MLIRAffineUtils MLIRIR MLIRPass - MLIRAffineTransforms MLIRSupport - MLIRAffineUtils + MLIRVectorUtils ) diff --git a/mlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp b/mlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp --- a/mlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp +++ b/mlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp @@ -16,8 +16,8 @@ #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/LoopUtils.h" #include "mlir/Dialect/Affine/Utils.h" -#include "mlir/Dialect/Vector/VectorOps.h" -#include "mlir/Dialect/Vector/VectorUtils.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Dialect/Vector/Utils/VectorUtils.h" #include "mlir/IR/Builders.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/Diagnostics.h" diff --git a/mlir/test/lib/Dialect/Linalg/TestComprehensiveBufferize.cpp b/mlir/test/lib/Dialect/Linalg/TestComprehensiveBufferize.cpp --- a/mlir/test/lib/Dialect/Linalg/TestComprehensiveBufferize.cpp +++ b/mlir/test/lib/Dialect/Linalg/TestComprehensiveBufferize.cpp @@ -25,7 +25,7 @@ #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/Dialect/StandardOps/Transforms/BufferizableOpInterfaceImpl.h" #include "mlir/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Pass/PassManager.h" #include "mlir/Transforms/Passes.h" diff --git a/mlir/test/lib/Dialect/Linalg/TestLinalgCodegenStrategy.cpp b/mlir/test/lib/Dialect/Linalg/TestLinalgCodegenStrategy.cpp --- a/mlir/test/lib/Dialect/Linalg/TestLinalgCodegenStrategy.cpp +++ b/mlir/test/lib/Dialect/Linalg/TestLinalgCodegenStrategy.cpp @@ -18,7 +18,7 @@ #include "mlir/Dialect/Linalg/Transforms/CodegenStrategy.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/test/lib/Dialect/Linalg/TestLinalgTransforms.cpp b/mlir/test/lib/Dialect/Linalg/TestLinalgTransforms.cpp --- a/mlir/test/lib/Dialect/Linalg/TestLinalgTransforms.cpp +++ b/mlir/test/lib/Dialect/Linalg/TestLinalgTransforms.cpp @@ -20,7 +20,7 @@ #include "mlir/Dialect/Linalg/Transforms/Transforms.h" #include "mlir/Dialect/Linalg/Utils/Utils.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Pass/PassManager.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" diff --git a/mlir/test/lib/Dialect/Math/TestAlgebraicSimplification.cpp b/mlir/test/lib/Dialect/Math/TestAlgebraicSimplification.cpp --- a/mlir/test/lib/Dialect/Math/TestAlgebraicSimplification.cpp +++ b/mlir/test/lib/Dialect/Math/TestAlgebraicSimplification.cpp @@ -12,7 +12,7 @@ #include "mlir/Dialect/Math/IR/Math.h" #include "mlir/Dialect/Math/Transforms/Passes.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" diff --git a/mlir/test/lib/Dialect/Math/TestPolynomialApproximation.cpp b/mlir/test/lib/Dialect/Math/TestPolynomialApproximation.cpp --- a/mlir/test/lib/Dialect/Math/TestPolynomialApproximation.cpp +++ b/mlir/test/lib/Dialect/Math/TestPolynomialApproximation.cpp @@ -14,7 +14,7 @@ #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Math/IR/Math.h" #include "mlir/Dialect/Math/Transforms/Passes.h" -#include "mlir/Dialect/Vector/VectorOps.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/Dialect/X86Vector/X86VectorDialect.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" diff --git a/mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp b/mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp --- a/mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp +++ b/mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp @@ -17,7 +17,7 @@ #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/SCF.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" -#include "mlir/Dialect/Vector/VectorTransforms.h" +#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h" #include "mlir/Pass/Pass.h" #include "mlir/Pass/PassManager.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" diff --git a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel --- a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel @@ -2264,6 +2264,7 @@ ":Support", ":Transforms", ":VectorOps", + ":VectorUtils", "//llvm:Support", ], ) @@ -2791,26 +2792,20 @@ name = "VectorOps", srcs = glob( [ - "lib/Dialect/Vector/*.cpp", - "lib/Dialect/Vector/*.h", + "lib/Dialect/Vector/IR/*.cpp", ], ), hdrs = glob([ - "include/mlir/Dialect/Vector/*.h", + "include/mlir/Dialect/Vector/IR/*.h", ]), includes = ["include"], deps = [ ":Affine", ":AffineAnalysis", - ":AffineUtils", - ":Analysis", ":ArithmeticDialect", - ":DataLayoutInterfaces", ":DialectUtils", ":IR", - ":LinalgOps", ":MemRefDialect", - ":SCFDialect", ":SideEffectInterfaces", ":StandardOps", ":Support", @@ -2822,6 +2817,64 @@ ], ) +cc_library( + name = "VectorTransforms", + srcs = glob( + [ + "lib/Dialect/Vector/Transforms/*.cpp", + ], + ), + hdrs = glob([ + "include/mlir/Dialect/Vector/Transforms/*.h", + ]), + includes = ["include"], + deps = [ + ":Affine", + ":AffineAnalysis", + ":Analysis", + ":ArithmeticDialect", + ":DialectUtils", + ":IR", + ":LinalgOps", + ":MemRefDialect", + ":SCFDialect", + ":StandardOps", + ":Support", + ":TensorDialect", + ":VectorInterfaces", + ":VectorOps", + ":VectorUtils", + "//llvm:Support", + ], +) + +cc_library( + name = "VectorUtils", + srcs = glob( + [ + "lib/Dialect/Vector/Utils/*.cpp", + ], + ), + hdrs = glob([ + "include/mlir/Dialect/Vector/Utils/*.h", + ]), + includes = ["include"], + deps = [ + ":Affine", + ":AffineAnalysis", + ":ArithmeticDialect", + ":DialectUtils", + ":IR", + ":MemRefDialect", + ":StandardOps", + ":Support", + ":TensorDialect", + ":VectorInterfaces", + ":VectorOps", + "//llvm:Support", + ], +) + cc_library( name = "Support", srcs = glob( @@ -6906,6 +6959,8 @@ ":VectorBufferizableOpInterfaceImpl", ":VectorOps", ":VectorToSCF", + ":VectorTransforms", + ":VectorUtils", ":X86VectorTransforms", "//llvm:Support", ], @@ -6948,7 +7003,7 @@ td_library( name = "VectorOpsTdFiles", - srcs = ["include/mlir/Dialect/Vector/VectorOps.td"], + srcs = ["include/mlir/Dialect/Vector/IR/VectorOps.td"], includes = ["include"], deps = [ ":OpBaseTdFiles", @@ -6964,33 +7019,33 @@ tbl_outs = [ ( ["-gen-op-decls"], - "include/mlir/Dialect/Vector/VectorOps.h.inc", + "include/mlir/Dialect/Vector/IR/VectorOps.h.inc", ), ( ["-gen-op-defs"], - "include/mlir/Dialect/Vector/VectorOps.cpp.inc", + "include/mlir/Dialect/Vector/IR/VectorOps.cpp.inc", ), ( [ "-gen-dialect-decls", "-dialect=vector", ], - "include/mlir/Dialect/Vector/VectorOpsDialect.h.inc", + "include/mlir/Dialect/Vector/IR/VectorOpsDialect.h.inc", ), ( [ "-gen-dialect-defs", "-dialect=vector", ], - "include/mlir/Dialect/Vector/VectorOpsDialect.cpp.inc", + "include/mlir/Dialect/Vector/IR/VectorOpsDialect.cpp.inc", ), ( ["-gen-enum-decls"], - "include/mlir/Dialect/Vector/VectorOpsEnums.h.inc", + "include/mlir/Dialect/Vector/IR/VectorOpsEnums.h.inc", ), ( ["-gen-enum-defs"], - "include/mlir/Dialect/Vector/VectorOpsEnums.cpp.inc", + "include/mlir/Dialect/Vector/IR/VectorOpsEnums.cpp.inc", ), ( ["-gen-op-doc"], @@ -6998,7 +7053,7 @@ ), ], tblgen = ":mlir-tblgen", - td_file = "include/mlir/Dialect/Vector/VectorOps.td", + td_file = "include/mlir/Dialect/Vector/IR/VectorOps.td", deps = [":VectorOpsTdFiles"], ) @@ -7031,6 +7086,7 @@ ":ToLLVMIRTranslation", ":Transforms", ":VectorOps", + ":VectorTransforms", ":X86Vector", ":X86VectorTransforms", "//llvm:Core", @@ -7065,6 +7121,7 @@ ":Support", ":Transforms", ":VectorOps", + ":VectorUtils", "//llvm:Core", "//llvm:Support", ], @@ -7095,6 +7152,7 @@ ":Support", ":Transforms", ":VectorOps", + ":VectorTransforms", "//llvm:Core", "//llvm:Support", ], @@ -7679,6 +7737,7 @@ includes = ["include"], deps = [ ":ArithmeticDialect", + ":DialectUtils", ":IR", ":MathDialect", ":Pass", @@ -7687,6 +7746,7 @@ ":Support", ":Transforms", ":VectorOps", + ":VectorUtils", ":X86Vector", "//llvm:Support", ], @@ -7705,6 +7765,7 @@ deps = [ ":ArithmeticDialect", ":ConversionPassIncGen", + ":DialectUtils", ":IR", ":LLVMDialect", ":MathDialect", @@ -7713,6 +7774,7 @@ ":Support", ":Transforms", ":VectorOps", + ":VectorUtils", "//llvm:Core", "//llvm:Support", ], diff --git a/utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel b/utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel --- a/utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel @@ -338,6 +338,7 @@ "//mlir:Support", "//mlir:Transforms", "//mlir:VectorOps", + "//mlir:VectorUtils", ], ) @@ -526,6 +527,7 @@ "//mlir:TransformUtils", "//mlir:VectorOps", "//mlir:VectorToSCF", + "//mlir:VectorTransforms", "//mlir:X86Vector", ], )