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(); },
104 PatternBenefit benefit = 1);
138 RewritePatternSet &patterns,
const VectorTransformsOptions &
options);
147 PatternBenefit benefit = 1);
164 PatternBenefit benefit = 1);
177void populateSinkVectorMemOpsPatterns(RewritePatternSet &patterns,
178 PatternBenefit benefit = 1);
196void populateChainedVectorReductionFoldingPatterns(RewritePatternSet &patterns,
197 PatternBenefit benefit = 1);
214void populateBreakDownVectorReductionPatterns(
215 RewritePatternSet &patterns,
unsigned maxNumElementsToExtract = 2,
216 PatternBenefit benefit = 1);
240void populateVectorInsertExtractStridedSliceDecompositionPatterns(
241 RewritePatternSet &patterns, PatternBenefit benefit = 1);
249void populateVectorExtractStridedSliceToExtractInsertChainPatterns(
250 RewritePatternSet &patterns,
251 std::function<
bool(ExtractStridedSliceOp)> controlFn =
nullptr,
252 PatternBenefit benefit = 1);
265void populateBreakDownVectorBitCastOpPatterns(
266 RewritePatternSet &patterns,
267 std::function<
bool(BitCastOp)> controlFn =
nullptr,
268 PatternBenefit benefit = 1);
288void populateVectorInsertExtractStridedSliceTransforms(
289 RewritePatternSet &patterns, PatternBenefit benefit = 1);
321void populateVectorUnrollPatterns(RewritePatternSet &patterns,
322 const UnrollVectorOptions &
options,
323 PatternBenefit benefit = 1);
326SmallVector<Value> sliceTransferIndices(ArrayRef<int64_t> elementOffsets,
328 AffineMap permutationMap, Location loc,
333void populateVectorContractUnrollPatterns(RewritePatternSet &patterns,
334 const UnrollVectorOptions &
options,
335 PatternBenefit benefit = 1);
339void populateVectorToElementsUnrollPatterns(RewritePatternSet &patterns,
340 PatternBenefit benefit = 1);
344void populateVectorFromElementsUnrollPatterns(RewritePatternSet &patterns,
345 PatternBenefit benefit = 1);
353void populateCastAwayVectorLeadingOneDimPatterns(RewritePatternSet &patterns,
354 PatternBenefit benefit = 1);
361void populateVectorTransferDropUnitDimsPatterns(RewritePatternSet &patterns,
362 PatternBenefit benefit = 1);
370void populateDropUnitDimWithShapeCastPatterns(RewritePatternSet &patterns,
371 PatternBenefit benefit = 1);
382void populateFlattenVectorTransferPatterns(
383 RewritePatternSet &patterns,
384 unsigned targetVectorBitwidth = std::numeric_limits<unsigned>::max(),
385 PatternBenefit benefit = 1);
392void populateBubbleVectorBitCastOpPatterns(RewritePatternSet &patterns,
393 PatternBenefit benefit = 1);
396void populateVectorMaskMaterializationPatterns(RewritePatternSet &patterns,
397 bool force32BitVectorIndices,
398 PatternBenefit benefit = 1);
408void populateVectorNarrowTypeEmulationPatterns(
409 const arith::NarrowTypeEmulationConverter &typeConverter,
410 RewritePatternSet &patterns,
bool disableAtomicRMW =
false,
411 bool assumeAligned =
false);
419void populateMemRefFlattenAndVectorNarrowTypeEmulationPatterns(
420 arith::NarrowTypeEmulationConverter &typeConverter,
421 RewritePatternSet &patterns);
426void populateVectorNarrowTypeRewritePatterns(RewritePatternSet &patterns,
427 PatternBenefit benefit = 1);
430void populateVectorTransposeNarrowTypeRewritePatterns(
431 RewritePatternSet &patterns, PatternBenefit benefit = 1);
456void populateVectorLinearizeBitWidthTargetRules(
462void populateVectorLinearizeBasePatterns(
const TypeConverter &,
464 RewritePatternSet &patterns);
468void populateVectorLinearizeShuffleLikeOpsPatterns(
const TypeConverter &,
470 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 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 populateVectorReductionToContractPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Collect patterns to convert reduction op to vector.contract and fold transpose/broadcast ops into the...
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