[llvm] [mlir] [mlir][spirv] Add vector.interleave to spirv.VectorShuffle conversion (PR #93240)
Jakub Kuderski via llvm-commits
llvm-commits at lists.llvm.org
Mon May 27 09:55:03 PDT 2024
================
@@ -578,6 +578,49 @@ struct VectorShuffleOpConvert final
}
};
+struct VectorInterleaveOpConvert final
+ : public OpConversionPattern<vector::InterleaveOp> {
+ using OpConversionPattern::OpConversionPattern;
+
+ LogicalResult
+ matchAndRewrite(vector::InterleaveOp interleaveOp, OpAdaptor adaptor,
+ ConversionPatternRewriter &rewriter) const override {
+ // Check the result vector type
+ VectorType oldResultType = interleaveOp.getResultVectorType();
+ Type newResultType = getTypeConverter()->convertType(oldResultType);
+ if (!newResultType)
+ return rewriter.notifyMatchFailure(interleaveOp,
+ "unsupported result vector type");
+
+ // Interleave the indices
+ VectorType sourceType = interleaveOp.getSourceVectorType();
+ int n = sourceType.getNumElements();
+
+ // Input vectors of size 1 are converted to scalars by the type converter.
+ // We cannot use spirv::VectorShuffleOp directly in this case, and need to
+ // use spirv::CompositeConstructOp.
+ if (n == 1) {
+ SmallVector<Value> newOperands(2);
+ newOperands[0] = adaptor.getLhs();
+ newOperands[1] = adaptor.getRhs();
----------------
kuhar wrote:
```suggestion
Value newOperands[] = {adaptor.getLhs(), adaptor.getRhs()};
```
https://github.com/llvm/llvm-project/pull/93240
More information about the llvm-commits
mailing list