Commit 3a7a74c8 authored by Simon Pilgrim's avatar Simon Pilgrim
Browse files

[X86] truncateVectorWithPACKUS - use getZeroExtendInReg helper. NFCI.

SelectionDAG::getZeroExtendInReg does exactly the same masking.
parent c15ccfb2
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -20090,17 +20090,14 @@ static SDValue truncateVectorWithPACK(unsigned Opcode, EVT DstVT, SDValue In,
  return truncateVectorWithPACK(Opcode, DstVT, Res, DL, DAG, Subtarget);
}
/// Truncate using ISD::AND mask and X86ISD::PACKUS.
/// Truncate using inreg zero extension (AND mask) and X86ISD::PACKUS.
/// e.g. trunc <8 x i32> X to <8 x i16> -->
/// MaskX = X & 0xffff (clear high bits to prevent saturation)
/// packus (extract_subv MaskX, 0), (extract_subv MaskX, 1)
static SDValue truncateVectorWithPACKUS(EVT DstVT, SDValue In, const SDLoc &DL,
                                        const X86Subtarget &Subtarget,
                                        SelectionDAG &DAG) {
  EVT SrcVT = In.getValueType();
  APInt Mask = APInt::getLowBitsSet(SrcVT.getScalarSizeInBits(),
                                    DstVT.getScalarSizeInBits());
  In = DAG.getNode(ISD::AND, DL, SrcVT, In, DAG.getConstant(Mask, DL, SrcVT));
  In = DAG.getZeroExtendInReg(In, DL, DstVT);
  return truncateVectorWithPACK(X86ISD::PACKUS, DstVT, In, DL, DAG, Subtarget);
}