Home | History | Annotate | Download | only in X86

Lines Matching refs:SVOp

3828 SDValue Compact8x32ShuffleNode(ShuffleVectorSDNode *SVOp,
3830 MVT VT = SVOp->getValueType(0).getSimpleVT();
3831 SDLoc dl(SVOp);
3836 ArrayRef<int> Mask = SVOp->getMask();
3855 SDValue Op0 = SVOp->getOperand(0);
3856 SDValue Op1 = SVOp->getOperand(1);
4074 static unsigned getShuffleVPERM2X128Immediate(ShuffleVectorSDNode *SVOp) {
4075 MVT VT = SVOp->getValueType(0).getSimpleVT();
4081 if (SVOp->getMaskElt(i) > 0) {
4082 FstHalf = SVOp->getMaskElt(i)/HalfSize;
4087 if (SVOp->getMaskElt(i) > 0) {
4088 SndHalf = SVOp->getMaskElt(i)/HalfSize;
4372 static unsigned getShufflePALIGNRImmediate(ShuffleVectorSDNode *SVOp) {
4373 MVT VT = SVOp->getValueType(0).getSimpleVT();
4383 Val = SVOp->getMaskElt(i);
4485 static SDValue CommuteVectorShuffle(ShuffleVectorSDNode *SVOp,
4487 MVT VT = SVOp->getValueType(0).getSimpleVT();
4492 int Idx = SVOp->getMaskElt(i);
4501 return DAG.getVectorShuffle(VT, SDLoc(SVOp), SVOp->getOperand(1),
4502 SVOp->getOperand(0), &MaskVec[0]);
4995 static unsigned getNumOfConsecutiveZeros(ShuffleVectorSDNode *SVOp,
5002 SDValue Elt = getShuffleScalarElt(SVOp, Index, DAG, 0);
5021 bool isShuffleMaskConsecutive(ShuffleVectorSDNode *SVOp,
5028 int Idx = SVOp->getMaskElt(i);
5049 static bool isVectorShiftRight(ShuffleVectorSDNode *SVOp, SelectionDAG &DAG,
5051 unsigned NumElems = SVOp->getValueType(0).getVectorNumElements();
5053 SVOp, NumElems, false /* check zeros from right */, DAG,
5054 SVOp->getMaskElt(0));
5067 if (!isShuffleMaskConsecutive(SVOp,
5077 ShVal = SVOp->getOperand(OpSrc);
5083 static bool isVectorShiftLeft(ShuffleVectorSDNode *SVOp, SelectionDAG &DAG,
5085 unsigned NumElems = SVOp->getValueType(0).getVectorNumElements();
5087 SVOp, NumElems, true /* check zeros from left */, DAG,
5088 NumElems - SVOp->getMaskElt(NumElems - 1) - 1);
5101 if (!isShuffleMaskConsecutive(SVOp,
5111 ShVal = SVOp->getOperand(OpSrc);
5117 static bool isVectorShift(ShuffleVectorSDNode *SVOp, SelectionDAG &DAG,
5121 if (!SVOp->getValueType(0).is128BitVector())
5124 if (isVectorShiftLeft(SVOp, DAG, isLeft, ShVal, ShAmt) ||
5125 isVectorShiftRight(SVOp, DAG, isLeft, ShVal, ShAmt))
5438 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(Op);
5442 if ((!SVOp->isSplat()) || SVOp->getMaskElt(0) != 0)
6071 LowerVECTOR_SHUFFLEtoBlend(ShuffleVectorSDNode *SVOp,
6073 SDValue V1 = SVOp->getOperand(0);
6074 SDValue V2 = SVOp->getOperand(1);
6075 SDLoc dl(SVOp);
6076 MVT VT = SVOp->getValueType(0).getSimpleVT();
6095 SVOp->getMaskElt(i + NumElemsInLane) : -1;
6096 int EltIdx = SVOp->getMaskElt(i);
6133 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(Op);
6134 SDValue V1 = SVOp->getOperand(0);
6135 SDValue V2 = SVOp->getOperand(1);
6136 SDLoc dl(SVOp);
6147 int EltIdx = SVOp->getMaskElt(i);
6248 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(NewV.getNode());
6249 TargetMask = pshufhw ? getShufflePSHUFHWImmediate(SVOp):
6250 getShufflePSHUFLWImmediate(SVOp);
6258 if (SVOp->isSplat())
6259 return PromoteSplat(SVOp, DAG);
6322 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(NewV.getNode());
6325 getShufflePSHUFLWImmediate(SVOp), DAG);
6346 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(NewV.getNode());
6349 getShufflePSHUFHWImmediate(SVOp), DAG);
6386 SDValue LowerVECTOR_SHUFFLEv16i8(ShuffleVectorSDNode *SVOp,
6389 SDValue V1 = SVOp->getOperand(0);
6390 SDValue V2 = SVOp->getOperand(1);
6391 SDLoc dl(SVOp);
6392 ArrayRef<int> MaskVals = SVOp->getMask();
6396 if (SVOp->isSplat())
6397 return PromoteSplat(SVOp, DAG);
6514 SDValue LowerVECTOR_SHUFFLEv32i8(ShuffleVectorSDNode *SVOp,
6517 MVT VT = SVOp->getValueType(0).getSimpleVT();
6518 SDValue V1 = SVOp->getOperand(0);
6519 SDValue V2 = SVOp->getOperand(1);
6520 SDLoc dl(SVOp);
6521 SmallVector<int, 32> MaskVals(SVOp->getMask().begin(), SVOp->getMask().end());
6563 SDValue RewriteAsNarrowerShuffle(ShuffleVectorSDNode *SVOp,
6565 MVT VT = SVOp->getValueType(0).getSimpleVT();
6566 SDLoc dl(SVOp);
6584 int EltIdx = SVOp->getMaskElt(i+j);
6595 SDValue V1 = DAG.getNode(ISD::BITCAST, dl, NewVT, SVOp->getOperand(0));
6596 SDValue V2 = DAG.getNode(ISD::BITCAST, dl, NewVT, SVOp->getOperand(1));
6638 LowerVECTOR_SHUFFLE_256(ShuffleVectorSDNode *SVOp, SelectionDAG &DAG) {
6640 SDValue NewOp = Compact8x32ShuffleNode(SVOp, DAG);
6644 MVT VT = SVOp->getValueType(0).getSimpleVT();
6649 SDLoc dl(SVOp);
6665 int Idx = SVOp->getMaskElt(i+LaneStart);
6706 int Idx = SVOp->getMaskElt(i+LaneStart);
6720 SVOp->getOperand(Input),
6731 SDValue Op0 = Extract128BitVector(SVOp->getOperand(InputUsed[0] / 2),
6736 Extract128BitVector(SVOp->getOperand(InputUsed[1] / 2),
6752 LowerVECTOR_SHUFFLE_128v4(ShuffleVectorSDNode *SVOp, SelectionDAG &DAG) {
6753 SDValue V1 = SVOp->getOperand(0);
6754 SDValue V2 = SVOp->getOperand(1);
6755 SDLoc dl(SVOp);
6756 MVT VT = SVOp->getValueType(0).getSimpleVT();
6762 SmallVector<int, 8> PermMask(SVOp->getMask().begin(), SVOp->getMask().end());
6976 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(Op);
6983 if (SVOp->getMaskElt(1) != -1)
6996 if (NumElems == 2 || !isMOVLMask(SVOp->getMask(), VT))
7005 getShuffleSHUFImmediate(SVOp), DAG);
7021 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(Op);
7036 if (SVOp->getMaskElt(1U << Shift) == 1)
7047 int EltIdx = SVOp->getMaskElt(i);
7099 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(Op);
7105 if (isZeroShuffle(SVOp))
7109 if (SVOp->isSplat()) {
7125 SDValue NewOp = RewriteAsNarrowerShuffle(SVOp, DAG);
7133 SDValue NewOp = RewriteAsNarrowerShuffle(SVOp, DAG);
7142 SDValue NewOp = RewriteAsNarrowerShuffle(SVOp, DAG);
7156 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(Op);
7201 SmallVector<int, 8> M(SVOp->getMask().begin(), SVOp->getMask().end());
7229 unsigned TargetMask = getShuffleSHUFImmediate(SVOp);
7244 getShufflePALIGNRImmediate(SVOp),
7251 bool isShift = HasSSE2 && isVectorShift(SVOp, DAG, isLeft, ShVal, ShAmt);
7290 return CommuteVectorShuffle(SVOp, DAG);
7358 return CommuteVectorShuffle(SVOp, DAG);
7365 SVOp->getSplatIndex() == 0 && V2IsUndef) {
7372 getShufflePSHUFHWImmediate(SVOp),
7377 getShufflePSHUFLWImmediate(SVOp),
7382 getShuffleSHUFImmediate(SVOp), DAG);
7402 getShuffleSHUFImmediate(SVOp), DAG);
7404 getShuffleSHUFImmediate(SVOp), DAG);
7410 V2, getShuffleVPERM2X128Immediate(SVOp), DAG);
7412 SDValue BlendOp = LowerVECTOR_SHUFFLEtoBlend(SVOp, Subtarget, DAG);
7430 getShuffleCLImmediate(SVOp), DAG);
7446 SDValue NewOp = LowerVECTOR_SHUFFLEv16i8(SVOp, DAG, *this);
7452 SDValue NewOp = LowerVECTOR_SHUFFLEv32i8(SVOp, Subtarget, DAG);
7460 return LowerVECTOR_SHUFFLE_128v4(SVOp, DAG);
7464 return LowerVECTOR_SHUFFLE_256(SVOp, DAG);
15492 static bool isShuffleHigh128VectorInsertLow(ShuffleVectorSDNode *SVOp) {
15493 EVT VT = SVOp->getValueType(0);
15498 if (!isUndefOrEqual(SVOp->getMaskElt(i), j) ||
15499 SVOp->getMaskElt(j) >= 0)
15508 static bool isShuffleLow128VectorInsertHigh(ShuffleVectorSDNode *SVOp) {
15509 EVT VT = SVOp->getValueType(0);
15514 if (!isUndefOrEqual(SVOp->getMaskElt(i), j) ||
15515 SVOp->getMaskElt(j) >= 0)
15526 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(N);
15527 SDValue V1 = SVOp->getOperand(0);
15528 SDValue V2 = SVOp->getOperand(1);
15529 EVT VT = SVOp->getValueType(0);
15556 if (!isUndefOrEqual(SVOp->getMaskElt(i), i) ||
15557 !isUndefOrEqual(SVOp->getMaskElt(i+NumElems/2), NumElems))
15601 if (isShuffleHigh128VectorInsertLow(SVOp)) {
15608 if (isShuffleLow128VectorInsertHigh(SVOp)) {