| //===- ConvertVectorToLLVM.h - Utils to convert from the vector dialect ---===// |
| // |
| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MLIR_CONVERSION_VECTORTOLLVM_CONVERTVECTORTOLLVM_H_ |
| #define MLIR_CONVERSION_VECTORTOLLVM_CONVERTVECTORTOLLVM_H_ |
| |
| #include "mlir/Transforms/DialectConversion.h" |
| |
| namespace mlir { |
| class LLVMTypeConverter; |
| class ModuleOp; |
| template <typename T> |
| class OperationPass; |
| |
| /// Options to control Vector to LLVM lowering. |
| /// |
| /// This should kept in sync with VectorToLLVM options defined for the |
| /// ConvertVectorToLLVM pass in include/mlir/Conversion/Passes.td |
| struct LowerVectorToLLVMOptions { |
| LowerVectorToLLVMOptions() |
| : reassociateFPReductions(false), indexOptimizations(true), |
| armNeon(false), armSVE(false), amx(false), x86Vector(false) {} |
| |
| LowerVectorToLLVMOptions &enableReassociateFPReductions(bool b = true) { |
| reassociateFPReductions = b; |
| return *this; |
| } |
| LowerVectorToLLVMOptions &enableIndexOptimizations(bool b = true) { |
| indexOptimizations = b; |
| return *this; |
| } |
| LowerVectorToLLVMOptions &enableArmNeon(bool b = true) { |
| armNeon = b; |
| return *this; |
| } |
| LowerVectorToLLVMOptions &enableArmSVE(bool b = true) { |
| armSVE = b; |
| return *this; |
| } |
| LowerVectorToLLVMOptions &enableAMX(bool b = true) { |
| amx = b; |
| return *this; |
| } |
| LowerVectorToLLVMOptions &enableX86Vector(bool b = true) { |
| x86Vector = b; |
| return *this; |
| } |
| |
| bool reassociateFPReductions; |
| bool indexOptimizations; |
| bool armNeon; |
| bool armSVE; |
| bool amx; |
| bool x86Vector; |
| }; |
| |
| /// Collect a set of patterns to convert from Vector contractions to LLVM Matrix |
| /// Intrinsics. To lower to assembly, the LLVM flag -lower-matrix-intrinsics |
| /// will be needed when invoking LLVM. |
| void populateVectorToLLVMMatrixConversionPatterns(LLVMTypeConverter &converter, |
| RewritePatternSet &patterns); |
| |
| /// Collect a set of patterns to convert from the Vector dialect to LLVM. |
| void populateVectorToLLVMConversionPatterns( |
| LLVMTypeConverter &converter, RewritePatternSet &patterns, |
| bool reassociateFPReductions = false); |
| |
| /// Create a pass to convert vector operations to the LLVMIR dialect. |
| std::unique_ptr<OperationPass<ModuleOp>> createConvertVectorToLLVMPass( |
| const LowerVectorToLLVMOptions &options = LowerVectorToLLVMOptions()); |
| |
| } // namespace mlir |
| |
| #endif // MLIR_CONVERSION_VECTORTOLLVM_CONVERTVECTORTOLLVM_H_ |