19#include "llvm/Support/Debug.h"
20#include "llvm/Support/DebugLog.h"
21#include "llvm/Support/raw_ostream.h"
27#define GEN_PASS_DEF_XEGPUVECTORLINEARIZE
28#include "mlir/Dialect/XeGPU/Transforms/Passes.h.inc"
32#define DEBUG_TYPE "xegpu-vector-linearize"
37struct XeGPUVectorLinearizePass final
39 void runOnOperation()
override {
49 patterns, vector::VectorTransposeLowering::Shuffle16x16);
51 return signalPassFailure();
61 auto extractVectorType = [](
Operation *op) -> VectorType {
62 if (
auto loadOp = dyn_cast<vector::LoadOp>(op))
63 return loadOp.getVectorType();
64 if (
auto storeOp = dyn_cast<vector::StoreOp>(op))
65 return storeOp.getVectorType();
69 VectorType vecType = extractVectorType(op);
74 int64_t rank = vecType.getRank();
81 native.back() =
shape.back();
84 vector::populateVectorUnrollPatterns(
patterns, vectorOptions);
86 LDBG() <<
"Unroll failed.";
87 return signalPassFailure();
97 vector::populateForVectorLinearize(converter,
target);
98 vector::populateVectorLinearizeBasePatterns(converter,
target,
patterns);
99 vector::populateVectorLinearizeShuffleLikeOpsPatterns(converter,
target,
103 if (failed(applyPartialConversion(getOperation(),
target,
105 LDBG() <<
"Linearization failed.";
106 return signalPassFailure();
MLIRContext is the top-level object for a collection of MLIR operations.
Operation is the basic unit of execution within MLIR.
void populateSCFStructuralTypeConversionsAndLegality(const TypeConverter &typeConverter, RewritePatternSet &patterns, ConversionTarget &target, PatternBenefit benefit=1)
Populates patterns for SCF structural type conversions and sets up the provided ConversionTarget with...
void populateVectorGatherLoweringPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
void populateVectorTransposeLoweringPatterns(RewritePatternSet &patterns, VectorTransposeLowering vectorTransposeLowering, 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 populateVectorGatherToConditionalLoadPatterns(RewritePatternSet &patterns, PatternBenefit benefit=1)
Populate the pattern set with the following patterns:
Include the generated interface declarations.
LogicalResult applyPatternsGreedily(Region ®ion, const FrozenRewritePatternSet &patterns, GreedyRewriteConfig config=GreedyRewriteConfig(), bool *changed=nullptr)
Rewrite ops in the given region, which must be isolated from above, by repeatedly applying the highes...
const FrozenRewritePatternSet & patterns
Options that control the vector unrolling.
UnrollVectorOptions & setNativeShapeFn(NativeShapeFnType fn)