[llvm] [GlobalISel] Make scalar G_SHUFFLE_VECTOR illegal. (PR #140508)
Pierre van Houtryve via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 30 03:03:12 PDT 2025
================
@@ -3331,6 +3331,55 @@ bool IRTranslator::translateShuffleVector(const User &U,
Mask = SVI->getShuffleMask();
else
Mask = cast<ConstantExpr>(U).getShuffleMask();
+
+ // As GISel does not represent <1 x > vectors as a separate type from scalars,
+ // we transform shuffle_vector with a scalar output to an
+ // ExtractVectorElement. If the input type is also scalar it becomes a Copy.
+ unsigned DstElts = cast<FixedVectorType>(U.getType())->getNumElements();
+ unsigned SrcElts =
+ cast<FixedVectorType>(U.getOperand(0)->getType())->getNumElements();
+ if (DstElts == 1) {
+ unsigned M = Mask[0];
+ if (SrcElts == 1) {
+ if (M == 0 || M == 1) {
+ return translateCopy(U, *U.getOperand(M), MIRBuilder);
+ }
----------------
Pierre-vh wrote:
nit: {} unnecessary, can also just check `< 2` or `<= 1` ?
https://github.com/llvm/llvm-project/pull/140508
More information about the llvm-commits
mailing list