|
reference, declaration → definition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
|
References
lib/Target/X86/X86ISelLowering.cpp25777 if (SDValue V = LowerScalarImmediateShift(Op, DAG, Subtarget))
25780 if (SDValue V = LowerScalarVariableShift(Op, DAG, Subtarget))
25791 SDValue Zero = DAG.getConstant(0, dl, VT);
25792 Amt = DAG.getNode(ISD::SUB, dl, VT, Zero, Amt);
25795 return DAG.getNode(X86ISD::VPSHL, dl, VT, R, Amt);
25797 return DAG.getNode(X86ISD::VPSHA, dl, VT, R, Amt);
25804 SDValue Amt0 = DAG.getVectorShuffle(VT, dl, Amt, Amt, {0, 0});
25805 SDValue Amt1 = DAG.getVectorShuffle(VT, dl, Amt, Amt, {1, 1});
25806 SDValue R0 = DAG.getNode(Opc, dl, VT, R, Amt0);
25807 SDValue R1 = DAG.getNode(Opc, dl, VT, R, Amt1);
25808 return DAG.getVectorShuffle(VT, dl, R0, R1, {0, 3});
25816 SDValue S = DAG.getConstant(APInt::getSignMask(64), dl, VT);
25817 SDValue M = DAG.getNode(ISD::SRL, dl, VT, S, Amt);
25818 R = DAG.getNode(ISD::SRL, dl, VT, R, Amt);
25819 R = DAG.getNode(ISD::XOR, dl, VT, R, M);
25820 R = DAG.getNode(ISD::SUB, dl, VT, R, M);
25869 Cst1->getZExtValue(), DAG);
25871 Cst2->getZExtValue(), DAG);
25872 return DAG.getVectorShuffle(VT, dl, Shift1, Shift2, ShuffleMask);
25880 if (SDValue Scale = convertShiftLeftToScale(Amt, dl, Subtarget, DAG))
25881 return DAG.getNode(ISD::MUL, dl, VT, R, Scale);
25887 SDValue EltBits = DAG.getConstant(EltSizeInBits, dl, VT);
25888 SDValue RAmt = DAG.getNode(ISD::SUB, dl, VT, EltBits, Amt);
25889 if (SDValue Scale = convertShiftLeftToScale(RAmt, dl, Subtarget, DAG)) {
25890 SDValue Zero = DAG.getConstant(0, dl, VT);
25891 SDValue ZAmt = DAG.getSetCC(dl, VT, Amt, Zero, ISD::SETEQ);
25892 SDValue Res = DAG.getNode(ISD::MULHU, dl, VT, R, Scale);
25893 return DAG.getSelect(dl, VT, ZAmt, R, Res);
25905 DAG.isKnownNeverZero(Amt))) {
25906 SDValue EltBits = DAG.getConstant(EltSizeInBits, dl, VT);
25907 SDValue RAmt = DAG.getNode(ISD::SUB, dl, VT, EltBits, Amt);
25908 if (SDValue Scale = convertShiftLeftToScale(RAmt, dl, Subtarget, DAG)) {
25910 DAG.getSetCC(dl, VT, Amt, DAG.getConstant(0, dl, VT), ISD::SETEQ);
25910 DAG.getSetCC(dl, VT, Amt, DAG.getConstant(0, dl, VT), ISD::SETEQ);
25912 DAG.getSetCC(dl, VT, Amt, DAG.getConstant(1, dl, VT), ISD::SETEQ);
25912 DAG.getSetCC(dl, VT, Amt, DAG.getConstant(1, dl, VT), ISD::SETEQ);
25914 getTargetVShiftByConstNode(X86ISD::VSRAI, dl, VT, R, 1, DAG);
25915 SDValue Res = DAG.getNode(ISD::MULHS, dl, VT, R, Scale);
25916 Res = DAG.getSelect(dl, VT, Amt0, R, Res);
25917 return DAG.getSelect(dl, VT, Amt1, Sra1, Res);
25929 Amt0 = DAG.getVectorShuffle(VT, dl, Amt, DAG.getUNDEF(VT), {0, 0, 0, 0});
25929 Amt0 = DAG.getVectorShuffle(VT, dl, Amt, DAG.getUNDEF(VT), {0, 0, 0, 0});
25930 Amt1 = DAG.getVectorShuffle(VT, dl, Amt, DAG.getUNDEF(VT), {1, 1, 1, 1});
25930 Amt1 = DAG.getVectorShuffle(VT, dl, Amt, DAG.getUNDEF(VT), {1, 1, 1, 1});
25931 Amt2 = DAG.getVectorShuffle(VT, dl, Amt, DAG.getUNDEF(VT), {2, 2, 2, 2});
25931 Amt2 = DAG.getVectorShuffle(VT, dl, Amt, DAG.getUNDEF(VT), {2, 2, 2, 2});
25932 Amt3 = DAG.getVectorShuffle(VT, dl, Amt, DAG.getUNDEF(VT), {3, 3, 3, 3});
25932 Amt3 = DAG.getVectorShuffle(VT, dl, Amt, DAG.getUNDEF(VT), {3, 3, 3, 3});
25939 SDValue Z = DAG.getConstant(0, dl, VT);
25940 Amt0 = DAG.getVectorShuffle(VT, dl, Amt, Z, {0, 4, -1, -1});
25941 Amt1 = DAG.getVectorShuffle(VT, dl, Amt, Z, {1, 5, -1, -1});
25942 Amt2 = DAG.getVectorShuffle(VT, dl, Amt, Z, {2, 6, -1, -1});
25943 Amt3 = DAG.getVectorShuffle(VT, dl, Amt, Z, {3, 7, -1, -1});
25945 SDValue Amt01 = DAG.getBitcast(MVT::v8i16, Amt);
25946 SDValue Amt23 = DAG.getVectorShuffle(MVT::v8i16, dl, Amt01, Amt01,
25948 Amt0 = DAG.getVectorShuffle(MVT::v8i16, dl, Amt01, Amt01,
25950 Amt1 = DAG.getVectorShuffle(MVT::v8i16, dl, Amt01, Amt01,
25952 Amt2 = DAG.getVectorShuffle(MVT::v8i16, dl, Amt23, Amt23,
25954 Amt3 = DAG.getVectorShuffle(MVT::v8i16, dl, Amt23, Amt23,
25960 SDValue R0 = DAG.getNode(ShOpc, dl, VT, R, DAG.getBitcast(VT, Amt0));
25960 SDValue R0 = DAG.getNode(ShOpc, dl, VT, R, DAG.getBitcast(VT, Amt0));
25961 SDValue R1 = DAG.getNode(ShOpc, dl, VT, R, DAG.getBitcast(VT, Amt1));
25961 SDValue R1 = DAG.getNode(ShOpc, dl, VT, R, DAG.getBitcast(VT, Amt1));
25962 SDValue R2 = DAG.getNode(ShOpc, dl, VT, R, DAG.getBitcast(VT, Amt2));
25962 SDValue R2 = DAG.getNode(ShOpc, dl, VT, R, DAG.getBitcast(VT, Amt2));
25963 SDValue R3 = DAG.getNode(ShOpc, dl, VT, R, DAG.getBitcast(VT, Amt3));
25963 SDValue R3 = DAG.getNode(ShOpc, dl, VT, R, DAG.getBitcast(VT, Amt3));
25968 SDValue R02 = DAG.getVectorShuffle(VT, dl, R0, R2, {0, -1, 6, -1});
25969 SDValue R13 = DAG.getVectorShuffle(VT, dl, R1, R3, {-1, 1, -1, 7});
25970 return DAG.getVectorShuffle(VT, dl, R02, R13, {0, 5, 2, 7});
25972 SDValue R01 = DAG.getVectorShuffle(VT, dl, R0, R1, {0, -1, -1, 5});
25973 SDValue R23 = DAG.getVectorShuffle(VT, dl, R2, R3, {2, -1, -1, 7});
25974 return DAG.getVectorShuffle(VT, dl, R01, R23, {0, 3, 4, 7});
25991 R = DAG.getNode(ExtOpc, dl, ExtVT, R);
25992 Amt = DAG.getNode(ISD::ZERO_EXTEND, dl, ExtVT, Amt);
25993 return DAG.getNode(ISD::TRUNCATE, dl, VT,
25994 DAG.getNode(Opc, dl, ExtVT, R, Amt));
26004 SDValue Cst8 = DAG.getTargetConstant(8, dl, MVT::i8);
26009 Amt = DAG.getZExtOrTrunc(Amt, dl, ExVT);
26010 Amt = DAG.getNode(ISD::SUB, dl, ExVT, DAG.getConstant(8, dl, ExVT), Amt);
26010 Amt = DAG.getNode(ISD::SUB, dl, ExVT, DAG.getConstant(8, dl, ExVT), Amt);
26011 Amt = DAG.getNode(ISD::SHL, dl, ExVT, DAG.getConstant(1, dl, ExVT), Amt);
26011 Amt = DAG.getNode(ISD::SHL, dl, ExVT, DAG.getConstant(1, dl, ExVT), Amt);
26016 R = Opc == ISD::SRA ? DAG.getSExtOrTrunc(R, dl, ExVT)
26017 : DAG.getZExtOrTrunc(R, dl, ExVT);
26018 R = DAG.getNode(ISD::MUL, dl, ExVT, R, Amt);
26019 R = DAG.getNode(X86ISD::VSRLI, dl, ExVT, R, Cst8);
26020 return DAG.getZExtOrTrunc(R, dl, VT);
26032 SDValue LoA = DAG.getBuildVector(VT16, dl, LoAmt);
26033 SDValue HiA = DAG.getBuildVector(VT16, dl, HiAmt);
26035 SDValue LoR = DAG.getBitcast(VT16, getUnpackl(DAG, dl, VT, R, R));
26035 SDValue LoR = DAG.getBitcast(VT16, getUnpackl(DAG, dl, VT, R, R));
26036 SDValue HiR = DAG.getBitcast(VT16, getUnpackh(DAG, dl, VT, R, R));
26036 SDValue HiR = DAG.getBitcast(VT16, getUnpackh(DAG, dl, VT, R, R));
26037 LoR = DAG.getNode(X86OpcI, dl, VT16, LoR, Cst8);
26038 HiR = DAG.getNode(X86OpcI, dl, VT16, HiR, Cst8);
26039 LoR = DAG.getNode(ISD::MUL, dl, VT16, LoR, LoA);
26040 HiR = DAG.getNode(ISD::MUL, dl, VT16, HiR, HiA);
26041 LoR = DAG.getNode(X86ISD::VSRLI, dl, VT16, LoR, Cst8);
26042 HiR = DAG.getNode(X86ISD::VSRLI, dl, VT16, HiR, Cst8);
26043 return DAG.getNode(X86ISD::PACKUS, dl, VT, LoR, HiR);
26057 V0 = DAG.getBitcast(VT, V0);
26058 V1 = DAG.getBitcast(VT, V1);
26059 Sel = DAG.getBitcast(VT, Sel);
26060 Sel = DAG.getSetCC(dl, MaskVT, DAG.getConstant(0, dl, VT), Sel,
26060 Sel = DAG.getSetCC(dl, MaskVT, DAG.getConstant(0, dl, VT), Sel,
26062 return DAG.getBitcast(SelVT, DAG.getSelect(dl, VT, Sel, V0, V1));
26062 return DAG.getBitcast(SelVT, DAG.getSelect(dl, VT, Sel, V0, V1));
26066 V0 = DAG.getBitcast(VT, V0);
26067 V1 = DAG.getBitcast(VT, V1);
26068 Sel = DAG.getBitcast(VT, Sel);
26069 return DAG.getBitcast(SelVT, DAG.getSelect(dl, VT, Sel, V0, V1));
26069 return DAG.getBitcast(SelVT, DAG.getSelect(dl, VT, Sel, V0, V1));
26074 SDValue Z = DAG.getConstant(0, dl, SelVT);
26075 SDValue C = DAG.getNode(X86ISD::PCMPGT, dl, SelVT, Z, Sel);
26076 return DAG.getSelect(dl, SelVT, C, V0, V1);
26082 Amt = DAG.getBitcast(ExtVT, Amt);
26083 Amt = getTargetVShiftByConstNode(X86ISD::VSHLI, dl, ExtVT, Amt, 5, DAG);
26084 Amt = DAG.getBitcast(VT, Amt);
26088 SDValue M = DAG.getNode(Opc, dl, VT, R, DAG.getConstant(4, dl, VT));
26088 SDValue M = DAG.getNode(Opc, dl, VT, R, DAG.getConstant(4, dl, VT));
26092 Amt = DAG.getNode(ISD::ADD, dl, VT, Amt, Amt);
26095 M = DAG.getNode(Opc, dl, VT, R, DAG.getConstant(2, dl, VT));
26095 M = DAG.getNode(Opc, dl, VT, R, DAG.getConstant(2, dl, VT));
26099 Amt = DAG.getNode(ISD::ADD, dl, VT, Amt, Amt);
26102 M = DAG.getNode(Opc, dl, VT, R, DAG.getConstant(1, dl, VT));
26102 M = DAG.getNode(Opc, dl, VT, R, DAG.getConstant(1, dl, VT));
26111 SDValue ALo = getUnpackl(DAG, dl, VT, DAG.getUNDEF(VT), Amt);
26111 SDValue ALo = getUnpackl(DAG, dl, VT, DAG.getUNDEF(VT), Amt);
26112 SDValue AHi = getUnpackh(DAG, dl, VT, DAG.getUNDEF(VT), Amt);
26112 SDValue AHi = getUnpackh(DAG, dl, VT, DAG.getUNDEF(VT), Amt);
26113 SDValue RLo = getUnpackl(DAG, dl, VT, DAG.getUNDEF(VT), R);
26113 SDValue RLo = getUnpackl(DAG, dl, VT, DAG.getUNDEF(VT), R);
26114 SDValue RHi = getUnpackh(DAG, dl, VT, DAG.getUNDEF(VT), R);
26114 SDValue RHi = getUnpackh(DAG, dl, VT, DAG.getUNDEF(VT), R);
26115 ALo = DAG.getBitcast(ExtVT, ALo);
26116 AHi = DAG.getBitcast(ExtVT, AHi);
26117 RLo = DAG.getBitcast(ExtVT, RLo);
26118 RHi = DAG.getBitcast(ExtVT, RHi);
26121 SDValue MLo = getTargetVShiftByConstNode(X86OpcI, dl, ExtVT, RLo, 4, DAG);
26122 SDValue MHi = getTargetVShiftByConstNode(X86OpcI, dl, ExtVT, RHi, 4, DAG);
26127 ALo = DAG.getNode(ISD::ADD, dl, ExtVT, ALo, ALo);
26128 AHi = DAG.getNode(ISD::ADD, dl, ExtVT, AHi, AHi);
26131 MLo = getTargetVShiftByConstNode(X86OpcI, dl, ExtVT, RLo, 2, DAG);
26132 MHi = getTargetVShiftByConstNode(X86OpcI, dl, ExtVT, RHi, 2, DAG);
26137 ALo = DAG.getNode(ISD::ADD, dl, ExtVT, ALo, ALo);
26138 AHi = DAG.getNode(ISD::ADD, dl, ExtVT, AHi, AHi);
26141 MLo = getTargetVShiftByConstNode(X86OpcI, dl, ExtVT, RLo, 1, DAG);
26142 MHi = getTargetVShiftByConstNode(X86OpcI, dl, ExtVT, RHi, 1, DAG);
26148 RLo = getTargetVShiftByConstNode(X86ISD::VSRLI, dl, ExtVT, RLo, 8, DAG);
26149 RHi = getTargetVShiftByConstNode(X86ISD::VSRLI, dl, ExtVT, RHi, 8, DAG);
26150 return DAG.getNode(X86ISD::PACKUS, dl, VT, RLo, RHi);
26156 SDValue Z = DAG.getConstant(0, dl, VT);
26157 SDValue ALo = getUnpackl(DAG, dl, VT, Amt, Z);
26158 SDValue AHi = getUnpackh(DAG, dl, VT, Amt, Z);
26159 SDValue RLo = getUnpackl(DAG, dl, VT, Z, R);
26160 SDValue RHi = getUnpackh(DAG, dl, VT, Z, R);
26161 ALo = DAG.getBitcast(ExtVT, ALo);
26162 AHi = DAG.getBitcast(ExtVT, AHi);
26163 RLo = DAG.getBitcast(ExtVT, RLo);
26164 RHi = DAG.getBitcast(ExtVT, RHi);
26165 SDValue Lo = DAG.getNode(Opc, dl, ExtVT, RLo, ALo);
26166 SDValue Hi = DAG.getNode(Opc, dl, ExtVT, RHi, AHi);
26167 Lo = getTargetVShiftByConstNode(X86ISD::VSRLI, dl, ExtVT, Lo, 16, DAG);
26168 Hi = getTargetVShiftByConstNode(X86ISD::VSRLI, dl, ExtVT, Hi, 16, DAG);
26169 return DAG.getNode(X86ISD::PACKUS, dl, VT, Lo, Hi);
26183 V0 = DAG.getBitcast(ExtVT, V0);
26184 V1 = DAG.getBitcast(ExtVT, V1);
26185 Sel = DAG.getBitcast(ExtVT, Sel);
26186 return DAG.getBitcast(VT, DAG.getSelect(dl, ExtVT, Sel, V0, V1));
26186 return DAG.getBitcast(VT, DAG.getSelect(dl, ExtVT, Sel, V0, V1));
26192 getTargetVShiftByConstNode(X86ISD::VSRAI, dl, VT, Sel, 15, DAG);
26193 return DAG.getSelect(dl, VT, C, V0, V1);
26200 Amt = DAG.getNode(
26202 getTargetVShiftByConstNode(X86ISD::VSHLI, dl, VT, Amt, 4, DAG),
26203 getTargetVShiftByConstNode(X86ISD::VSHLI, dl, VT, Amt, 12, DAG));
26205 Amt = getTargetVShiftByConstNode(X86ISD::VSHLI, dl, VT, Amt, 12, DAG);
26209 SDValue M = getTargetVShiftByConstNode(X86OpcI, dl, VT, R, 8, DAG);
26213 Amt = DAG.getNode(ISD::ADD, dl, VT, Amt, Amt);
26216 M = getTargetVShiftByConstNode(X86OpcI, dl, VT, R, 4, DAG);
26220 Amt = DAG.getNode(ISD::ADD, dl, VT, Amt, Amt);
26223 M = getTargetVShiftByConstNode(X86OpcI, dl, VT, R, 2, DAG);
26227 Amt = DAG.getNode(ISD::ADD, dl, VT, Amt, Amt);
26230 M = getTargetVShiftByConstNode(X86OpcI, dl, VT, R, 1, DAG);
26237 return split256IntArith(Op, DAG);