reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

lib/Target/X86/X86ISelLowering.cpp
26245   assert(VT.isVector() && "Custom lowering only for vector rotates!");
26251   unsigned EltSizeInBits = VT.getScalarSizeInBits();
26252   int NumElts = VT.getVectorNumElements();
26275       return DAG.getNode(Op, DL, VT, R,
26289     if (VT.is256BitVector())
26291     assert(VT.is128BitVector() && "Only rotate 128-bit vectors!");
26296       return DAG.getNode(X86ISD::VROTLI, DL, VT, R,
26305   if (VT.is256BitVector() && !Subtarget.hasAVX2())
26308   assert((VT == MVT::v4i32 || VT == MVT::v8i16 || VT == MVT::v16i8 ||
26308   assert((VT == MVT::v4i32 || VT == MVT::v8i16 || VT == MVT::v16i8 ||
26308   assert((VT == MVT::v4i32 || VT == MVT::v8i16 || VT == MVT::v16i8 ||
26309           ((VT == MVT::v8i32 || VT == MVT::v16i16 || VT == MVT::v32i8) &&
26309           ((VT == MVT::v8i32 || VT == MVT::v16i16 || VT == MVT::v32i8) &&
26309           ((VT == MVT::v8i32 || VT == MVT::v16i16 || VT == MVT::v32i8) &&
26332         V0 = DAG.getBitcast(VT, V0);
26333         V1 = DAG.getBitcast(VT, V1);
26334         Sel = DAG.getBitcast(VT, Sel);
26335         return DAG.getBitcast(SelVT, DAG.getSelect(DL, VT, Sel, V0, V1));
26350     Amt = DAG.getBitcast(VT, Amt);
26355         ISD::OR, DL, VT,
26356         DAG.getNode(ISD::SHL, DL, VT, R, DAG.getConstant(4, DL, VT)),
26356         DAG.getNode(ISD::SHL, DL, VT, R, DAG.getConstant(4, DL, VT)),
26357         DAG.getNode(ISD::SRL, DL, VT, R, DAG.getConstant(4, DL, VT)));
26357         DAG.getNode(ISD::SRL, DL, VT, R, DAG.getConstant(4, DL, VT)));
26358     R = SignBitSelect(VT, Amt, M, R);
26361     Amt = DAG.getNode(ISD::ADD, DL, VT, Amt, Amt);
26365         ISD::OR, DL, VT,
26366         DAG.getNode(ISD::SHL, DL, VT, R, DAG.getConstant(2, DL, VT)),
26366         DAG.getNode(ISD::SHL, DL, VT, R, DAG.getConstant(2, DL, VT)),
26367         DAG.getNode(ISD::SRL, DL, VT, R, DAG.getConstant(6, DL, VT)));
26367         DAG.getNode(ISD::SRL, DL, VT, R, DAG.getConstant(6, DL, VT)));
26368     R = SignBitSelect(VT, Amt, M, R);
26371     Amt = DAG.getNode(ISD::ADD, DL, VT, Amt, Amt);
26375         ISD::OR, DL, VT,
26376         DAG.getNode(ISD::SHL, DL, VT, R, DAG.getConstant(1, DL, VT)),
26376         DAG.getNode(ISD::SHL, DL, VT, R, DAG.getConstant(1, DL, VT)),
26377         DAG.getNode(ISD::SRL, DL, VT, R, DAG.getConstant(7, DL, VT)));
26377         DAG.getNode(ISD::SRL, DL, VT, R, DAG.getConstant(7, DL, VT)));
26378     return SignBitSelect(VT, Amt, M, R);
26382   Amt = DAG.getNode(ISD::AND, DL, VT, Amt,
26383                     DAG.getConstant(EltSizeInBits - 1, DL, VT));
26386   bool LegalVarShifts = SupportedVectorVarShift(VT, Subtarget, ISD::SHL) &&
26387                         SupportedVectorVarShift(VT, Subtarget, ISD::SRL);
26392     SDValue AmtR = DAG.getConstant(EltSizeInBits, DL, VT);
26393     AmtR = DAG.getNode(ISD::SUB, DL, VT, AmtR, Amt);
26394     SDValue SHL = DAG.getNode(ISD::SHL, DL, VT, R, Amt);
26395     SDValue SRL = DAG.getNode(ISD::SRL, DL, VT, R, AmtR);
26396     return DAG.getNode(ISD::OR, DL, VT, SHL, SRL);
26405     SDValue Lo = DAG.getNode(ISD::MUL, DL, VT, R, Scale);
26406     SDValue Hi = DAG.getNode(ISD::MULHU, DL, VT, R, Scale);
26407     return DAG.getNode(ISD::OR, DL, VT, Lo, Hi);
26413   assert(VT == MVT::v4i32 && "Only v4i32 vector rotate expected");
26415   SDValue R13 = DAG.getVectorShuffle(VT, DL, R, R, OddMask);
26416   SDValue Scale13 = DAG.getVectorShuffle(VT, DL, Scale, Scale, OddMask);
26424   Res02 = DAG.getBitcast(VT, Res02);
26425   Res13 = DAG.getBitcast(VT, Res13);
26427   return DAG.getNode(ISD::OR, DL, VT,
26428                      DAG.getVectorShuffle(VT, DL, Res02, Res13, {0, 4, 2, 6}),
26429                      DAG.getVectorShuffle(VT, DL, Res02, Res13, {1, 5, 3, 7}));