This fixes issue 62242
This code block can potentially swap the order of V1 and V2 in Ops and therefore
also in the unpck instruction generated.
SDValue &Op = Ops[Elt & 1]; if (M < NumElts && (Op.isUndef() || Op == V1)) Op = V1; else if (NumElts <= M && (Op.isUndef() || Op == V2)) { Op = V2; NormM -= NumElts; } else return SDValue();
But the permute mask is calculated assuming the first operand being V1 and
second V2, therefore causing a mis-compile.
First check if the input operands are swapped, and then calculate the permute
mask based on that.
Is the OpsSwapped logic necessary?
I think there probably needs to be an assertion there as well someplace.