9#ifndef MLIR_DIALECT_VECTOR_TRANSFORMS_VECTORREWRITEPATTERNS_H
10#define MLIR_DIALECT_VECTOR_TRANSFORMS_VECTORREWRITEPATTERNS_H
19#include "mlir/Dialect/Vector/Transforms/VectorTransformsEnums.h.inc"
22class ConversionTarget;
47 std::function<std::optional<SmallVector<int64_t>>(
Operation *op)>;
71 std::function<std::optional<SmallVector<int64_t>>(
Operation *op)>;
97 std::function<LogicalResult(vector::ContractionOp)> constraint =
98 [](vector::ContractionOp) {
return success(); },
108 RewritePatternSet &patterns, PatternBenefit benefit = 1,
109 bool allowFastMathFlagLoss =
true);
143 RewritePatternSet &patterns,
const VectorTransformsOptions &
options);
152 PatternBenefit benefit = 1);
169 PatternBenefit benefit = 1);
182void populateSinkVectorMemOpsPatterns(RewritePatternSet &patterns,
183 PatternBenefit benefit = 1);
201void populateChainedVectorReductionFoldingPatterns(RewritePatternSet &patterns,
202 PatternBenefit benefit = 1);
219void populateBreakDownVectorReductionPatterns(
220 RewritePatternSet &patterns,
unsigned maxNumElementsToExtract = 2,
221 PatternBenefit benefit = 1);
245void populateVectorInsertExtractStridedSliceDecompositionPatterns(
246 RewritePatternSet &patterns, PatternBenefit benefit = 1);
254void populateVectorExtractStridedSliceToExtractInsertChainPatterns(
255 RewritePatternSet &patterns,
256 std::function<
bool(ExtractStridedSliceOp)> controlFn =
nullptr,
257 PatternBenefit benefit = 1);
270void populateBreakDownVectorBitCastOpPatterns(
271 RewritePatternSet &patterns,
272 std::function<
bool(BitCastOp)> controlFn =
nullptr,
273 PatternBenefit benefit = 1);
293void populateVectorInsertExtractStridedSliceTransforms(
294 RewritePatternSet &patterns, PatternBenefit benefit = 1);
326void populateVectorUnrollPatterns(RewritePatternSet &patterns,
327 const UnrollVectorOptions &
options,
328 PatternBenefit benefit = 1);
331SmallVector<Value> sliceTransferIndices(ArrayRef<int64_t> elementOffsets,
333 AffineMap permutationMap, Location loc,
338void populateVectorContractUnrollPatterns(RewritePatternSet &patterns,
339 const UnrollVectorOptions &
options,
340 PatternBenefit benefit = 1);
344void populateVectorToElementsUnrollPatterns(RewritePatternSet &patterns,
345 PatternBenefit benefit = 1);
349void populateVectorFromElementsUnrollPatterns(RewritePatternSet &patterns,
350 PatternBenefit benefit = 1);
358void populateCastAwayVectorLeadingOneDimPatterns(RewritePatternSet &patterns,
359 PatternBenefit benefit = 1);
366void populateVectorTransferDropUnitDimsPatterns(RewritePatternSet &patterns,
367 PatternBenefit benefit = 1);
375void populateDropUnitDimWithShapeCastPatterns(RewritePatternSet &patterns,
376 PatternBenefit benefit = 1);
387void populateFlattenVectorTransferPatterns(
388 RewritePatternSet &patterns,
389 unsigned targetVectorBitwidth = std::numeric_limits<unsigned>::max(),
390 PatternBenefit benefit = 1);
397void populateBubbleVectorBitCastOpPatterns(RewritePatternSet &patterns,
398 PatternBenefit benefit = 1);
401void populateVectorMaskMaterializationPatterns(RewritePatternSet &patterns,
402 bool force32BitVectorIndices,
403 PatternBenefit benefit = 1);
413void populateVectorNarrowTypeEmulationPatterns(
414 const arith::NarrowTypeEmulationConverter &typeConverter,
415 RewritePatternSet &patterns,
bool disableAtomicRMW =
false,
416 bool assumeAligned =
false);
424void populateMemRefFlattenAndVectorNarrowTypeEmulationPatterns(
425 arith::NarrowTypeEmulationConverter &typeConverter,
426 RewritePatternSet &patterns);
431void populateVectorNarrowTypeRewritePatterns(RewritePatternSet &patterns,
432 PatternBenefit benefit = 1);
435void populateVectorTransposeNarrowTypeRewritePatterns(
436 RewritePatternSet &patterns, PatternBenefit benefit = 1);
461void populateVectorLinearizeBitWidthTargetRules(
467void populateVectorLinearizeBasePatterns(
const TypeConverter &,
469 RewritePatternSet &patterns);
473void populateVectorLinearizeShuffleLikeOpsPatterns(
const TypeConverter &,
475 RewritePatternSet &patterns);
static llvm::ManagedStatic< PassManagerOptions > options
Operation is the basic unit of execution within MLIR.
Converts narrow integer or float types that are not supported by the target hardware to wider types.
void populateVectorReductionToContractPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1, bool allowFastMathFlagLoss=true)
Collect patterns to convert reduction op to vector.contract and fold transpose/broadcast ops into the...
void populateDropInnerMostUnitDimsXferOpPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Collect a set of patterns to collapse the most inner unit dims in xfer Ops.
void populateVectorContractCanonicalizeMatmulToMMT(RewritePatternSet &patterns, std::function< LogicalResult(vector::ContractionOp)> constraint=[](vector::ContractionOp) { return success();}, PatternBenefit=1)
Canonicalization of a vector.contract a, b, c with row-major matmul semantics to a contraction with M...
void populateSinkVectorOpsPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Patterns that remove redundant Vector Ops by re-ordering them with e.g.
void populateVectorTransferFullPartialPatterns(RewritePatternSet &patterns, const VectorTransformsOptions &options)
Populate patterns with the following patterns.
Include the generated interface declarations.
Options that control the vector unrolling.
std::function< std::optional< SmallVector< int64_t > >(Operation *op)> UnrollTraversalOrderFnType
Function that returns the traversal order (in terms of "for loop order", i.e.
FilterConstraintFnType filterConstraint
Callback function that indicates whether vector unrolling should be attempted on the operation.
std::function< LogicalResult(Operation *op)> FilterConstraintFnType
NativeShapeFnType nativeShape
Function that returns the shape of the vector to unroll to for a given operation.
UnrollVectorOptions & setFilterConstraint(FilterConstraintFnType constraint)
UnrollVectorOptions & setNativeShape(ArrayRef< int64_t > shape)
Set the native shape to use for unrolling.
UnrollTraversalOrderFnType traversalOrderCallback
UnrollVectorOptions & setNativeShapeFn(NativeShapeFnType fn)
UnrollVectorOptions & setUnrollTraversalOrderFn(UnrollTraversalOrderFnType traversalOrderFn)
std::function< std::optional< SmallVector< int64_t > >(Operation *op)> NativeShapeFnType