Skip to content

Commit 2b57008

Browse files
committed
Emit target specific nodes for isSHUFPMask
llvm-svn: 113048
1 parent 2f7af36 commit 2b57008

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5471,12 +5471,21 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const {
54715471
// FIXME: pshufb, blends, shifts.
54725472
if (VT.getVectorNumElements() == 2 ||
54735473
ShuffleVectorSDNode::isSplatMask(&M[0], VT) ||
5474-
isSHUFPMask(M, VT) ||
54755474
isPSHUFHWMask(M, VT) ||
54765475
isPSHUFLWMask(M, VT) ||
54775476
isPALIGNRMask(M, VT, Subtarget->hasSSSE3()))
54785477
return Op;
54795478

5479+
if (isSHUFPMask(M, VT)) {
5480+
unsigned TargetMask = X86::getShuffleSHUFImmediate(SVOp);
5481+
if (VT == MVT::v4f32 || VT == MVT::v4i32)
5482+
return getTargetShuffleNode(X86ISD::SHUFPS, dl, VT, V1, V2,
5483+
TargetMask, DAG);
5484+
if (VT == MVT::v2f64 || VT == MVT::v2i64)
5485+
return getTargetShuffleNode(X86ISD::SHUFPD, dl, VT, V1, V2,
5486+
TargetMask, DAG);
5487+
}
5488+
54805489
if (X86::isUNPCKL_v_undef_Mask(SVOp))
54815490
if (VT != MVT::v2i64 && VT != MVT::v2f64)
54825491
return getTargetShuffleNode(getUNPCKLOpcode(VT), dl, VT, V1, V1, DAG);

0 commit comments

Comments
 (0)