32void transform::ApplyVectorToLLVMConversionPatternsOp::populatePatterns(
36 getReassociateFpReductions(), getForce_32bitVectorIndices(),
37 getUseVectorAlignment());
41transform::ApplyVectorToLLVMConversionPatternsOp::verifyTypeConverter(
42 transform::TypeConverterBuilderOpInterface builder) {
43 if (builder.getTypeConverterType() !=
"LLVMTypeConverter")
44 return emitOpError(
"expected LLVMTypeConverter");
48void transform::ApplyVectorLinearizeConversionPatternsOp::populatePatterns(
51 vector::populateVectorLinearizeBasePatterns(typeConverter,
target, patterns);
52 if (getShuffleLikeOps())
53 vector::populateVectorLinearizeShuffleLikeOpsPatterns(typeConverter,
target,
57void transform::ApplyVectorLinearizeConversionPatternsOp::
58 populateConversionTargetRules(
const TypeConverter &typeConverter,
62 vector::populateForVectorLinearize(linearizer, conversionTarget);
63 if (std::optional<int64_t> bitwidth = getTargetVectorBitwidth())
64 vector::populateVectorLinearizeBitWidthTargetRules(conversionTarget,
69transform::ApplyVectorLinearizeConversionPatternsOp::verifyTypeConverter(
70 transform::TypeConverterBuilderOpInterface builder) {
71 if (builder.getTypeConverterType() !=
72 VectorLinearizeTypeConverterOp::getTypeConverterType())
73 return emitOpError(
"expected VectorLinearizeTypeConverter");
77std::unique_ptr<TypeConverter>
78transform::VectorLinearizeTypeConverterOp::getTypeConverter() {
79 auto typeConverter = std::make_unique<TypeConverter>();
81 vector::populateForVectorLinearize(*typeConverter,
target);
85StringRef transform::VectorLinearizeTypeConverterOp::getTypeConverterType() {
86 return "VectorLinearizeTypeConverter";
93void transform::ApplyCastAwayVectorLeadingOneDimPatternsOp::populatePatterns(
95 vector::populateCastAwayVectorLeadingOneDimPatterns(patterns);
98void transform::ApplyFoldArithExtensionPatternsOp::populatePatterns(
103void transform::ApplyFoldElementwiseToVectorPatternsOp::populatePatterns(
108void transform::ApplyVectorReductionToContractPatternsOp::populatePatterns(
113void transform::ApplyLowerCreateMaskPatternsOp::populatePatterns(
118void transform::ApplyRankReducingSubviewPatternsOp::populatePatterns(
120 vector::populateVectorTransferDropUnitDimsPatterns(patterns);
123void transform::ApplyTransferPermutationPatternsOp::populatePatterns(
128void transform::ApplyDropUnitDimWithShapeCastPatternsOp::populatePatterns(
130 vector::populateDropUnitDimWithShapeCastPatterns(patterns);
133void transform::ApplyDropInnerMostUnitDimsFromXferOpsPatternsOp::
138void transform::ApplyLowerBitCastPatternsOp::populatePatterns(
143void transform::ApplyLowerBroadcastPatternsOp::populatePatterns(
148void transform::ApplyLowerContractionPatternsOp::populatePatterns(
155void transform::ApplyLowerMasksPatternsOp::populatePatterns(
160void transform::ApplyLowerMaskedTransfersPatternsOp::populatePatterns(
165void transform::ApplyMaterializeMasksPatternsOp::populatePatterns(
167 populateVectorMaskMaterializationPatterns(patterns,
174void transform::ApplyReorderMultiReductionPatternsOp::populatePatterns(
182void transform::ApplyMultiReductionFlatteningPatternsOp::populatePatterns(
190void transform::ApplyMultiReductionUnrollingPatternsOp::populatePatterns(
198void transform::ApplyLowerOuterProductPatternsOp::populatePatterns(
203void transform::ApplyLowerGatherPatternsOp::populatePatterns(
208void transform::ApplyUnrollFromElementsPatternsOp::populatePatterns(
210 vector::populateVectorFromElementsUnrollPatterns(patterns);
213void transform::ApplyUnrollContractPatternsOp::populatePatterns(
225 auto contract = dyn_cast<vector::ContractionOp>(op);
229 auto iterators =
contract.getIteratorTypesArray();
230 if (iterators.size() != 3 ||
231 iterators[0] != vector::IteratorType::parallel ||
232 iterators[1] != vector::IteratorType::parallel ||
233 iterators[2] != vector::IteratorType::reduction)
236 auto type = dyn_cast<VectorType>(
contract.getType());
237 if (!type || type.getRank() != 2)
242 vector::populateVectorContractUnrollPatterns(
244 .setNativeShapeFn(nativeShapeFn)
245 .setFilterConstraint(constraint));
248void transform::ApplyUnrollToElementsPatternsOp::populatePatterns(
250 vector::populateVectorToElementsUnrollPatterns(patterns);
253void transform::ApplyLowerScanPatternsOp::populatePatterns(
258void transform::ApplyLowerShapeCastPatternsOp::populatePatterns(
263void transform::ApplyLowerStepPatternsOp::populatePatterns(
268void transform::ApplyLowerTransferPatternsOp::populatePatterns(
271 getMaxTransferRank());
274void transform::ApplyLowerTransposePatternsOp::populatePatterns(
277 getLoweringStrategy());
278 if (getAvx2LoweringStrategy()) {
283 patterns, avx2LoweringOptions, 10);
287void transform::ApplyLowerInterleavePatternsOp::populatePatterns(
292void transform::ApplyInterleaveAndDeinterleaveToShufflePatternsOp::
298void transform::ApplyRewriteNarrowTypePatternsOp::populatePatterns(
300 populateVectorNarrowTypeRewritePatterns(patterns);
301 populateVectorTransposeNarrowTypeRewritePatterns(patterns);
304void transform::ApplySplitTransferFullPartialPatternsOp::populatePatterns(
311void transform::ApplyTransferToScfPatternsOp::populatePatterns(
320void transform::ApplySinkVectorPatternsOp::populatePatterns(
325void transform::ApplySinkVectorMemPatternsOp::populatePatterns(
327 vector::populateSinkVectorMemOpsPatterns(patterns);
330void transform::ApplyFlattenVectorTransferOpsPatternsOp::populatePatterns(
332 vector::populateFlattenVectorTransferPatterns(patterns,
333 getTargetVectorBitwidth());
343class VectorTransformDialectExtension
345 VectorTransformDialectExtension> {
349 VectorTransformDialectExtension() {
350 declareGeneratedDialect<vector::VectorDialect>();
351 declareGeneratedDialect<arith::ArithDialect>();
352 declareGeneratedDialect<LLVM::LLVMDialect>();
353 registerTransformOps<
355#include "mlir/Dialect/Vector/TransformOps/VectorTransformOps.cpp.inc"
361#define GET_OP_CLASSES
362#include "mlir/Dialect/Vector/TransformOps/VectorTransformOps.cpp.inc"
static uint64_t getIndexBitwidth(DataLayoutEntryListRef params)
Returns the bitwidth of the index type if specified in the param list.
static void contract(RootOrderingGraph &graph, ArrayRef< Value > cycle, const DenseMap< Value, unsigned > &parentDepths, DenseMap< Value, Value > &actualSource, DenseMap< Value, Value > &actualTarget)
Contracts the specified cycle in the given graph in-place.
#define MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(CLASS_NAME)
The DialectRegistry maps a dialect namespace to a constructor for the matching dialect.
void addExtensions()
Add the given extensions to the registry.
Conversion from types to the LLVM IR dialect.
Operation is the basic unit of execution within MLIR.
Base class for extensions of the Transform dialect that supports injecting operations into the Transf...
uint64_t getN(LevelType lt)
uint64_t getM(LevelType lt)
void populateVectorTransferPermutationMapLoweringPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Collect a set of transfer read/write lowering patterns that simplify the permutation map (e....
void populateElementwiseToVectorOpsPatterns(RewritePatternSet &patterns)
Collect a set of patterns that fold elementwise op on vectors to the vector dialect.
void populateVectorInterleaveToShufflePatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
void populateVectorShapeCastLoweringPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorGatherLoweringPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorTransferLoweringPatterns(RewritePatternSet &patterns, std::optional< unsigned > maxTransferRank=std::nullopt, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateDropInnerMostUnitDimsXferOpPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Collect a set of patterns to collapse the most inner unit dims in xfer Ops.
void registerTransformDialectExtension(DialectRegistry ®istry)
void populateVectorTransposeLoweringPatterns(RewritePatternSet &patterns, VectorTransposeLowering vectorTransposeLowering, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateFoldArithExtensionPatterns(RewritePatternSet &patterns)
Collect a set of patterns that fold arithmetic extension on floating point into vector contract for t...
void populateSinkVectorOpsPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Patterns that remove redundant Vector Ops by re-ordering them with e.g.
void populateVectorMultiReductionUnrollingPatterns(RewritePatternSet &patterns, VectorMultiReductionLowering options, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorBroadcastLoweringPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorBitCastLoweringPatterns(RewritePatternSet &patterns, int64_t targetRank=1, PatternBenefit benefit=1)
Populates the pattern set with the following patterns:
void populateVectorMultiReductionFlatteningPatterns(RewritePatternSet &patterns, VectorMultiReductionLowering options, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorOuterProductLoweringPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorMaskOpLoweringPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorReductionToContractPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Collect patterns to convert reduction op to vector.contract and fold transpose/broadcast ops into the...
void populateVectorStepLoweringPatterns(RewritePatternSet &patterns, unsigned indexBitwidth=64, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorTransferFullPartialPatterns(RewritePatternSet &patterns, const VectorTransformsOptions &options)
Populate patterns with the following patterns.
void populateVectorMaskLoweringPatternsForSideEffectingOps(RewritePatternSet &patterns)
Populates instances of MaskOpRewritePattern to lower masked operations with vector....
void populateVectorInterleaveLoweringPatterns(RewritePatternSet &patterns, int64_t targetRank=1, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorDeinterleaveToShufflePatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
void populateVectorContractLoweringPatterns(RewritePatternSet &patterns, VectorContractLowering vectorContractLoweringOption, PatternBenefit benefit=1, bool disableOuterProductLowering=false)
Populate the pattern set with the following patterns:
void populateVectorMultiReductionReorderPatterns(RewritePatternSet &patterns, VectorMultiReductionLowering options, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorScanLoweringPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateSpecializedTransposeLoweringPatterns(RewritePatternSet &patterns, LoweringOptions options=LoweringOptions(), int benefit=10)
Insert specialized transpose lowering patterns.
Include the generated interface declarations.
void populateVectorToLLVMConversionPatterns(const LLVMTypeConverter &converter, RewritePatternSet &patterns, bool reassociateFPReductions=false, bool force32BitVectorIndices=false, bool useVectorAlignment=false, bool enableGEPInboundsNuw=false)
Collect a set of patterns to convert from the Vector dialect to LLVM.
void populateVectorToSCFConversionPatterns(RewritePatternSet &patterns, const VectorTransferToSCFOptions &options=VectorTransferToSCFOptions())
Collect a set of patterns to convert from the Vector dialect to SCF + func.
When lowering an N-d vector transfer op to an (N-1)-d vector transfer op, a temporary buffer is creat...
VectorTransferToSCFOptions & setTargetRank(unsigned r)
VectorTransferToSCFOptions & enableFullUnroll(bool u=true)
Options that control the vector unrolling.
Options for controlling specialized AVX2 lowerings.
LoweringOptions & setTransposeOptions(TransposeLoweringOptions options)
Structure to control the behavior of specialized AVX2 transpose lowering.