This patch adds a the `LowerVectorToArmNeonPattern` patterns to the ArmNeon. This pattern inspects `vector.contract` ops that can be 1-1 mapped to an `arm.neon.smmla` intrinsic. The contract ops must be separated into tiles who's inputs must fit that of a single smmla op (`2x8xi32` inputs and `2x2xi32` output). The `vector.contract` inputs must be sign extended from narrow types (<=i8) to be converted. If all conditions are met, an smmla op is inserted with additional `vector.shape_casts` to handle linearizing the input and output dimension.
48 lines
923 B
CMake
48 lines
923 B
CMake
add_mlir_conversion_library(MLIRVectorToLLVM
|
|
PARTIAL_SOURCES_INTENDED
|
|
ConvertVectorToLLVM.cpp
|
|
|
|
ADDITIONAL_HEADER_DIRS
|
|
${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/VectorToLLVM
|
|
|
|
DEPENDS
|
|
MLIRConversionPassIncGen
|
|
intrinsics_gen
|
|
|
|
LINK_COMPONENTS
|
|
Core
|
|
|
|
LINK_LIBS PUBLIC
|
|
MLIRArithDialect
|
|
MLIRLLVMCommonConversion
|
|
MLIRLLVMDialect
|
|
MLIRMemRefDialect
|
|
MLIRTargetLLVMIRExport
|
|
MLIRTransforms
|
|
MLIRVectorDialect
|
|
MLIRVectorTransforms
|
|
)
|
|
|
|
add_mlir_conversion_library(MLIRVectorToLLVMPass
|
|
PARTIAL_SOURCES_INTENDED
|
|
|
|
ConvertVectorToLLVMPass.cpp
|
|
ADDITIONAL_HEADER_DIRS
|
|
${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/VectorToLLVM
|
|
|
|
LINK_LIBS PUBLIC
|
|
MLIRVectorToLLVM
|
|
|
|
MLIRArmNeonDialect
|
|
MLIRArmNeonTransforms
|
|
MLIRArmSMEDialect
|
|
MLIRArmSMETransforms
|
|
MLIRArmSVEDialect
|
|
MLIRArmSVETransforms
|
|
MLIRVectorToArmSME
|
|
MLIRAMXDialect
|
|
MLIRAMXTransforms
|
|
MLIRX86VectorDialect
|
|
MLIRX86VectorTransforms
|
|
)
|