@@ -636,22 +636,19 @@ struct VectorDeinterleaveOpConvert final
636
636
Location loc = deinterleaveOp->getLoc ();
637
637
638
638
// Deinterleave the indices.
639
+ Value sourceVector = adaptor.getSource ();
639
640
VectorType sourceType = deinterleaveOp.getSourceVectorType ();
640
641
int n = sourceType.getNumElements ();
641
642
642
643
// Output vectors of size 1 are converted to scalars by the type converter.
643
644
// We cannot use `spirv::VectorShuffleOp` directly in this case, and need to
644
645
// use `spirv::CompositeExtractOp`.
645
646
if (n == 2 ) {
646
- auto elem0 =
647
- rewriter.create <spirv::CompositeExtractOp>(
648
- loc, newResultType, adaptor.getSource (),
649
- rewriter.getI32ArrayAttr ({0 }));
647
+ auto elem0 = rewriter.create <spirv::CompositeExtractOp>(
648
+ loc, newResultType, sourceVector, rewriter.getI32ArrayAttr ({0 }));
650
649
651
- auto elem1 =
652
- rewriter.create <spirv::CompositeExtractOp>(
653
- loc, newResultType, adaptor.getSource (),
654
- rewriter.getI32ArrayAttr ({1 }));
650
+ auto elem1 = rewriter.create <spirv::CompositeExtractOp>(
651
+ loc, newResultType, sourceVector, rewriter.getI32ArrayAttr ({1 }));
655
652
656
653
rewriter.replaceOp (deinterleaveOp, {elem0, elem1});
657
654
return success ();
@@ -670,11 +667,11 @@ struct VectorDeinterleaveOpConvert final
670
667
// Create two SPIR-V shuffles.
671
668
spirv::VectorShuffleOp shuffleEven =
672
669
rewriter.create <spirv::VectorShuffleOp>(
673
- loc, newResultType, adaptor. getSource (), adaptor. getSource () ,
670
+ loc, newResultType, sourceVector, sourceVector ,
674
671
rewriter.getI32ArrayAttr (indicesEven));
675
672
676
673
spirv::VectorShuffleOp shuffleOdd = rewriter.create <spirv::VectorShuffleOp>(
677
- loc, newResultType, adaptor. getSource (), adaptor. getSource () ,
674
+ loc, newResultType, sourceVector, sourceVector ,
678
675
rewriter.getI32ArrayAttr (indicesOdd));
679
676
680
677
rewriter.replaceOp (deinterleaveOp, {shuffleEven, shuffleOdd});
0 commit comments