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"
37 struct XeGPUVectorLinearizePass final
38 :
public xegpu::impl::XeGPUVectorLinearizeBase<XeGPUVectorLinearizePass> {
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,
105 LDBG() <<
"Linearization failed.";
106 return signalPassFailure();
static MLIRContext * getContext(OpFoldResult val)
This class describes a specific conversion target.
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
LogicalResult applyPartialConversion(ArrayRef< Operation * > ops, const ConversionTarget &target, const FrozenRewritePatternSet &patterns, ConversionConfig config=ConversionConfig())
Below we define several entry points for operation conversion.
Options that control the vector unrolling.
UnrollVectorOptions & setNativeShapeFn(NativeShapeFnType fn)