computation was totally wrong, but somehow it didn't really show up with
llc.
I've added an assert that triggers on multiple existing test cases and
updated one of them to show the correct value.
There appear to still be more bugs lurking around insertps's mask. =/
However, note that this only really impacts the new vector shuffle
lowering.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217289
91177308-0d34-0410-b5e6-
96231b3b80d8
if ((ZMask | 1 << V2Index) == 0xF)
V1 = DAG.getUNDEF(MVT::v4f32);
+ unsigned InsertPSMask = (Mask[V2Index] - 4) << 6 | V2Index << 4 | ZMask;
+ assert((InsertPSMask & ~0xFFu) == 0 && "Invalid mask!");
+
// Insert the V2 element into the desired position.
- SDValue InsertPSMask =
- DAG.getIntPtrConstant(Mask[V2Index] << 6 | V2Index << 4 | ZMask);
return DAG.getNode(X86ISD::INSERTPS, DL, MVT::v4f32, V1, V2,
- InsertPSMask);
+ DAG.getConstant(InsertPSMask, MVT::i8));
}
}
; CHECK-NEXT: retl
;
; CHECK-EXP-LABEL: test:
-; CHECK-EXP: insertps $285, {{.*}}, %xmm0
+; CHECK-EXP: insertps $29, {{.*}}, %xmm0
; CHECK-EXP-NEXT: retl
entry: