• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/llvm-project/llvm/lib/Target/Hexagon/

Lines Matching refs:SDValue

160 SDValue
161 HexagonTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG)
163 return SDValue();
171 static SDValue CreateCopyOfByValArgument(SDValue Src, SDValue Dst,
172 SDValue Chain, ISD::ArgFlagsTy Flags,
174 SDValue SizeNode = DAG.getConstant(Flags.getByValSize(), dl, MVT::i32);
197 SDValue
198 HexagonTargetLowering::LowerReturn(SDValue Chain, CallingConv::ID CallConv,
201 const SmallVectorImpl<SDValue> &OutVals,
216 SDValue Flag;
217 SmallVector<SDValue, 4> RetOps(1, Chain);
323 SDValue HexagonTargetLowering::LowerCallResult(
324 SDValue Chain, SDValue Glue, CallingConv::ID CallConv, bool IsVarArg,
326 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals,
327 const SmallVectorImpl<SDValue> &OutVals, SDValue Callee) const {
341 SDValue RetVal;
349 SDValue FR0 = DAG.getCopyFromReg(Chain, dl, RVLocs[i].getLocReg(),
353 SDValue TPR = DAG.getCopyToReg(FR0.getValue(1), dl, PredR,
376 SDValue
378 SmallVectorImpl<SDValue> &InVals) const {
382 SmallVectorImpl<SDValue> &OutVals = CLI.OutVals;
384 SDValue Chain = CLI.Chain;
385 SDValue Callee = CLI.Callee;
432 SmallVector<std::pair<unsigned, SDValue>, 16> RegsToPass;
433 SmallVector<SDValue, 8> MemOpChains;
436 SDValue StackPtr =
444 SDValue Arg = OutVals[i];
473 SDValue MemAddr = DAG.getConstant(LocMemOffset, dl,
487 SDValue S = DAG.getStore(Chain, dl, Arg, MemAddr, LocPI);
510 SDValue Glue;
537 Glue = SDValue();
543 Glue = SDValue();
561 SmallVector<SDValue, 8> Ops;
608 SDValue &Base, SDValue &Offset, ISD::MemIndexedMode &AM,
636 SDValue
637 HexagonTargetLowering::LowerINLINEASM(SDValue Op, SelectionDAG &DAG) const {
685 SDValue HexagonTargetLowering::LowerPREFETCH(SDValue Op,
687 SDValue Chain = Op.getOperand(0);
688 SDValue Addr = Op.getOperand(1);
692 SDValue Zero = DAG.getConstant(0, DL, MVT::i32);
700 SDValue HexagonTargetLowering::LowerREADCYCLECOUNTER(SDValue Op,
702 SDValue Chain = Op.getOperand(0);
708 SDValue HexagonTargetLowering::LowerINTRINSIC_VOID(SDValue Op,
710 SDValue Chain = Op.getOperand(0);
714 SDValue Addr = Op.getOperand(2);
716 SDValue Zero = DAG.getConstant(0, DL, MVT::i32);
719 return SDValue();
722 SDValue
723 HexagonTargetLowering::LowerDYNAMIC_STACKALLOC(SDValue Op,
725 SDValue Chain = Op.getOperand(0);
726 SDValue Size = Op.getOperand(1);
727 SDValue Align = Op.getOperand(2);
745 SDValue AC = DAG.getConstant(A, dl, MVT::i32);
747 SDValue AA = DAG.getNode(HexagonISD::ALLOCA, dl, VTs, Chain, Size, AC);
753 SDValue HexagonTargetLowering::LowerFormalArguments(
754 SDValue Chain, CallingConv::ID CallConv, bool IsVarArg,
756 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
824 SDValue Copy = DAG.getCopyFromReg(Chain, dl, VReg, RegVT);
831 SDValue T = DAG.getNode(ISD::AND, dl, RegVT,
857 SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
865 SDValue L = DAG.getLoad(VA.getValVT(), dl, Chain, FIN,
923 SDValue
924 HexagonTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
929 SDValue Addr = DAG.getFrameIndex(QFI->getVarArgsFrameIndex(), MVT::i32);
939 SmallVector<SDValue, 8> MemOps;
942 SDValue FIN = Op.getOperand(1);
950 SDValue SavedRegAreaStartFrameIndex =
963 SDValue Store =
990 SDValue
991 HexagonTargetLowering::LowerVACOPY(SDValue Op, SelectionDAG &DAG) const {
994 SDValue Chain = Op.getOperand(0);
995 SDValue DestPtr = Op.getOperand(1);
996 SDValue SrcPtr = Op.getOperand(2);
1008 SDValue HexagonTargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
1010 SDValue LHS = Op.getOperand(0);
1011 SDValue RHS = Op.getOperand(1);
1033 auto isSExtFree = [this](SDValue N) {
1037 SDValue Op = N.getOperand(0);
1064 return SDValue();
1067 SDValue
1068 HexagonTargetLowering::LowerVSELECT(SDValue Op, SelectionDAG &DAG) const {
1069 SDValue PredOp = Op.getOperand(0);
1070 SDValue Op1 = Op.getOperand(1), Op2 = Op.getOperand(2);
1087 return SDValue();
1090 SDValue
1091 HexagonTargetLowering::LowerConstantPool(SDValue Op, SelectionDAG &DAG) const {
1115 SDValue T;
1133 SDValue
1134 HexagonTargetLowering::LowerJumpTable(SDValue Op, SelectionDAG &DAG) const {
1138 SDValue T = DAG.getTargetJumpTable(Idx, VT, HexagonII::MO_PCREL);
1142 SDValue T = DAG.getTargetJumpTable(Idx, VT);
1146 SDValue
1147 HexagonTargetLowering::LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const {
1154 return SDValue();
1160 SDValue FrameAddr = LowerFRAMEADDR(Op, DAG);
1161 SDValue Offset = DAG.getConstant(4, dl, MVT::i32);
1172 SDValue
1173 HexagonTargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
1181 SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl,
1189 SDValue
1190 HexagonTargetLowering::LowerATOMIC_FENCE(SDValue Op, SelectionDAG& DAG) const {
1195 SDValue
1196 HexagonTargetLowering::LowerGLOBALADDRESS(SDValue Op, SelectionDAG &DAG) const {
1207 SDValue GA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, Offset);
1216 SDValue GA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, Offset,
1222 SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(PtrVT);
1223 SDValue GA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, HexagonII::MO_GOT);
1224 SDValue Off = DAG.getConstant(Offset, dl, MVT::i32);
1229 SDValue
1230 HexagonTargetLowering::LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const {
1237 SDValue A = DAG.getTargetBlockAddress(BA, PtrVT);
1241 SDValue A = DAG.getTargetBlockAddress(BA, PtrVT, 0, HexagonII::MO_PCREL);
1245 SDValue
1246 HexagonTargetLowering::LowerGLOBAL_OFFSET_TABLE(SDValue Op, SelectionDAG &DAG)
1249 SDValue GOTSym = DAG.getTargetExternalSymbol(HEXAGON_GOT_SYM_NAME, PtrVT,
1254 SDValue
1255 HexagonTargetLowering::GetDynamicTLSAddr(SelectionDAG &DAG, SDValue Chain,
1256 GlobalAddressSDNode *GA, SDValue Glue, EVT PtrVT, unsigned ReturnReg,
1262 SDValue TGA = DAG.getTargetGlobalAddress(GA->getGlobal(), dl,
1267 // 1. Chain SDValue
1277 SDValue Ops[] = { Chain, TGA, DAG.getRegister(Hexagon::R0, PtrVT),
1291 SDValue
1299 SDValue TP = DAG.getCopyFromReg(DAG.getEntryNode(), dl, Hexagon::UGP, PtrVT);
1306 SDValue TGA = DAG.getTargetGlobalAddress(GA->getGlobal(), dl, PtrVT,
1309 SDValue Sym = DAG.getNode(HexagonISD::CONST32, dl, PtrVT, TGA);
1313 SDValue GOT = LowerGLOBAL_OFFSET_TABLE(Sym, DAG);
1322 SDValue LoadOffset =
1333 SDValue
1341 SDValue TP = DAG.getCopyFromReg(DAG.getEntryNode(), dl, Hexagon::UGP, PtrVT);
1343 SDValue TGA = DAG.getTargetGlobalAddress(GA->getGlobal(), dl, PtrVT, Offset,
1345 SDValue Sym = DAG.getNode(HexagonISD::CONST32, dl, PtrVT, TGA);
1355 SDValue
1363 SDValue TGA = DAG.getTargetGlobalAddress(GA->getGlobal(), dl, PtrVT, Offset,
1367 SDValue GOT = LowerGLOBAL_OFFSET_TABLE(TGA, DAG);
1370 SDValue Sym = DAG.getNode(HexagonISD::CONST32, dl, PtrVT, TGA);
1371 SDValue Chain = DAG.getNode(ISD::ADD, dl, PtrVT, GOT, Sym);
1374 SDValue InFlag;
1392 SDValue
1393 HexagonTargetLowering::LowerGlobalTLSAddress(SDValue Op,
1871 HexagonTargetLowering::validateConstPtrAlignment(SDValue Ptr, const SDLoc &dl,
2028 bool HexagonTargetLowering::hasBitTest(SDValue X, SDValue Y) const {
2090 std::pair<SDValue, int>
2091 HexagonTargetLowering::getBaseAndOffset(SDValue Addr) const {
2093 SDValue Op1 = Addr.getOperand(1);
2102 SDValue
2103 HexagonTargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG)
2115 SDValue Op0 = Op.getOperand(0);
2116 SDValue Op1 = Op.getOperand(1);
2123 return SDValue();
2172 SDValue T0 = DAG.getBitcast(MVT::i32, Op0);
2173 SDValue T1 = DAG.getNode(ISD::BSWAP, dl, MVT::i32, T0);
2178 SDValue Concat10 = DAG.getNode(HexagonISD::COMBINE, dl,
2185 SDValue Concat01 = DAG.getNode(HexagonISD::COMBINE, dl,
2199 SDValue T0 = DAG.getBitcast(MVT::i64, Op0);
2200 SDValue T1 = DAG.getNode(ISD::BSWAP, dl, MVT::i64, T0);
2225 return SDValue();
2229 SDValue
2230 HexagonTargetLowering::getVectorShiftByInt(SDValue Op, SelectionDAG &DAG)
2233 if (SDValue S = BVN->getSplatValue()) {
2252 return SDValue();
2255 SDValue
2256 HexagonTargetLowering::LowerVECTOR_SHIFT(SDValue Op, SelectionDAG &DAG) const {
2260 SDValue
2261 HexagonTargetLowering::LowerROTL(SDValue Op, SelectionDAG &DAG) const {
2264 return SDValue();
2267 SDValue
2268 HexagonTargetLowering::LowerBITCAST(SDValue Op, SelectionDAG &DAG) const {
2270 SDValue InpV = Op.getOperand(0);
2278 SDValue Sc = DAG.getBitcast(tyScalar(InpTy), InpV);
2279 SDValue Ext = DAG.getZExtOrTrunc(Sc, dl, MVT::i32);
2282 return SDValue();
2289 HexagonTargetLowering::getBuildVectorConstInts(ArrayRef<SDValue> Values,
2298 SDValue V = Values[i];
2318 SDValue
2319 HexagonTargetLowering::buildVector32(ArrayRef<SDValue> Elem, const SDLoc &dl,
2345 SDValue N = getInstr(Hexagon::A2_combine_ll, dl, MVT::i32,
2372 SDValue Ext = DAG.getZExtOrTrunc(Elem[First], dl, MVT::i32);
2380 SDValue Vs[4];
2385 SDValue S8 = DAG.getConstant(8, dl, MVT::i32);
2386 SDValue T0 = DAG.getNode(ISD::SHL, dl, MVT::i32, {Vs[1], S8});
2387 SDValue T1 = DAG.getNode(ISD::SHL, dl, MVT::i32, {Vs[3], S8});
2388 SDValue B0 = DAG.getNode(ISD::OR, dl, MVT::i32, {Vs[0], T0});
2389 SDValue B1 = DAG.getNode(ISD::OR, dl, MVT::i32, {Vs[2], T1});
2391 SDValue R = getInstr(Hexagon::A2_combine_ll, dl, MVT::i32, {B1, B0}, DAG);
2401 SDValue
2402 HexagonTargetLowering::buildVector64(ArrayRef<SDValue> Elem, const SDLoc &dl,
2434 SDValue Ext = DAG.getZExtOrTrunc(Elem[First], dl, MVT::i32);
2447 SDValue V0 = DAG.getConstant(Val, dl, MVT::i64);
2453 SDValue L = (ElemTy == MVT::i32)
2456 SDValue H = (ElemTy == MVT::i32)
2462 SDValue
2463 HexagonTargetLowering::extractVector(SDValue VecV, SDValue IdxV,
2491 SDValue A0 = getInstr(Hexagon::C2_tfrpr, dl, MVT::i32, {VecV}, DAG);
2492 SDValue M0 = DAG.getConstant(8 / VecWidth, dl, MVT::i32);
2493 SDValue I0 = DAG.getNode(ISD::MUL, dl, MVT::i32, IdxV, M0);
2507 SDValue S0 = DAG.getNode(ISD::MUL, dl, MVT::i32, IdxV,
2509 SDValue T0 = DAG.getNode(HexagonISD::P2D, dl, MVT::i64, VecV);
2510 SDValue T1 = DAG.getNode(ISD::SRL, dl, MVT::i64, T0, S0);
2528 SDValue WidthV = DAG.getConstant(ValWidth, dl, MVT::i32);
2529 SDValue ExtV;
2540 SDValue OffV = DAG.getConstant(Off, dl, MVT::i32);
2549 SDValue OffV = DAG.getNode(ISD::MUL, dl, MVT::i32, IdxV,
2561 SDValue
2562 HexagonTargetLowering::insertVector(SDValue VecV, SDValue ValV, SDValue IdxV,
2569 SDValue ValR = DAG.getNode(HexagonISD::P2D, dl, MVT::i64, ValV);
2584 SDValue Width = DAG.getConstant(ValBytes*8, dl, MVT::i32);
2585 SDValue Idx = DAG.getNode(ISD::MUL, dl, MVT::i32, IdxV,
2587 SDValue VecR = DAG.getNode(HexagonISD::P2D, dl, MVT::i64, VecV);
2588 SDValue Ins = DAG.getNode(HexagonISD::INSERT, dl, MVT::i32,
2608 SDValue WidthV = DAG.getConstant(ValWidth, dl, MVT::i32);
2609 SDValue InsV;
2613 SDValue OffV = DAG.getConstant(W, dl, MVT::i32);
2619 SDValue OffV = DAG.getNode(ISD::MUL, dl, MVT::i32, IdxV, WidthV);
2627 SDValue
2628 HexagonTargetLowering::expandPredicate(SDValue Vec32, const SDLoc &dl,
2636 SDValue
2637 HexagonTargetLowering::contractPredicate(SDValue Vec64, const SDLoc &dl,
2645 SDValue
2663 SDValue
2664 HexagonTargetLowering::LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const {
2668 SmallVector<SDValue,8> Ops;
2680 for (SDValue P : Ops) {
2698 SDValue Rs[8];
2699 SDValue Z = getZero(dl, MVT::i32, DAG);
2703 SDValue S = DAG.getConstant(1ull << i, dl, MVT::i32);
2706 for (ArrayRef<SDValue> A(Rs); A.size() != 1; A = A.drop_back(A.size()/2)) {
2714 return SDValue();
2717 SDValue
2718 HexagonTargetLowering::LowerCONCAT_VECTORS(SDValue Op,
2741 SmallVector<SDValue,4> Words[2];
2744 for (SDValue P : Op.getNode()->op_values()) {
2745 SDValue W = DAG.getNode(HexagonISD::P2D, dl, MVT::i64, P);
2756 SDValue WidthV = DAG.getConstant(64 / Scale, dl, MVT::i32);
2760 SDValue W0 = Words[IdxW][i], W1 = Words[IdxW][i+1];
2762 SDValue T = DAG.getNode(HexagonISD::INSERT, dl, MVT::i32,
2774 SDValue WW = DAG.getNode(HexagonISD::COMBINE, dl, MVT::i64,
2779 return SDValue();
2782 SDValue
2783 HexagonTargetLowering::LowerEXTRACT_VECTOR_ELT(SDValue Op,
2785 SDValue Vec = Op.getOperand(0);
2790 SDValue
2791 HexagonTargetLowering::LowerEXTRACT_SUBVECTOR(SDValue Op,
2797 SDValue
2798 HexagonTargetLowering::LowerINSERT_VECTOR_ELT(SDValue Op,
2804 SDValue
2805 HexagonTargetLowering::LowerINSERT_SUBVECTOR(SDValue Op,
2807 SDValue ValV = Op.getOperand(1);
2825 SDValue
2826 HexagonTargetLowering::LowerLoad(SDValue Op, SelectionDAG &DAG) const {
2835 SDValue
2836 HexagonTargetLowering::LowerStore(SDValue Op, SelectionDAG &DAG) const {
2839 SDValue Ptr = SN->getBasePtr();
2850 SDValue
2851 HexagonTargetLowering::LowerUnalignedLoad(SDValue Op, SelectionDAG &DAG)
2885 std::pair<SDValue, SDValue> P = expandUnalignedLoad(LN, DAG);
2897 SDValue Base = LN->getBasePtr();
2898 SDValue Chain = LN->getChain();
2909 SDValue BaseNoOff = (BaseOpc != HexagonISD::VALIGNADDR)
2913 SDValue Base0 = DAG.getMemBasePlusOffset(BaseNoOff, BO.second, dl);
2914 SDValue Base1 = DAG.getMemBasePlusOffset(BaseNoOff, BO.second+LoadLen, dl);
2925 SDValue Load0 = DAG.getLoad(LoadTy, dl, Chain, Base0, WideMMO);
2926 SDValue Load1 = DAG.getLoad(LoadTy, dl, Chain, Base1, WideMMO);
2928 SDValue Aligned = DAG.getNode(HexagonISD::VALIGN, dl, LoadTy,
2930 SDValue NewChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
2932 SDValue M = DAG.getMergeValues({Aligned, NewChain}, dl);
2936 SDValue
2937 HexagonTargetLowering::LowerUAddSubO(SDValue Op, SelectionDAG &DAG) const {
2938 SDValue X = Op.getOperand(0), Y = Op.getOperand(1);
2941 return SDValue();
2954 return SDValue();
2957 SDValue Op = DAG.getNode(ISD::ADD, dl, VTs.VTs[0], {X, Y});
2958 SDValue Ov = DAG.getSetCC(dl, MVT::i1, Op, getZero(dl, ty(Op), DAG),
2963 SDValue Op = DAG.getNode(ISD::SUB, dl, VTs.VTs[0], {X, Y});
2964 SDValue Ov = DAG.getSetCC(dl, MVT::i1, Op,
2970 return SDValue();
2973 SDValue
2974 HexagonTargetLowering::LowerAddSubCarry(SDValue Op, SelectionDAG &DAG) const {
2977 SDValue X = Op.getOperand(0), Y = Op.getOperand(1), C = Op.getOperand(2);
2984 SDValue SubC = DAG.getNode(HexagonISD::SUBC, dl, Op.getNode()->getVTList(),
2986 SDValue Out[] = { SubC.getValue(0),
2991 SDValue
2992 HexagonTargetLowering::LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const {
2993 SDValue Chain = Op.getOperand(0);
2994 SDValue Offset = Op.getOperand(1);
2995 SDValue Handler = Op.getOperand(2);
3006 SDValue StoreAddr =
3018 SDValue
3019 HexagonTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
3028 if (SDValue V = LowerHvxOperation(Op, DAG))
3080 return SDValue();
3085 SmallVectorImpl<SDValue> &Results,
3104 SmallVectorImpl<SDValue> &Results,
3121 SDValue P = getInstr(Hexagon::C2_tfrpr, dl, MVT::i32,
3123 SDValue T = DAG.getAnyExtOrTrunc(P, dl, MVT::i8);
3130 SDValue
3133 SDValue Op(N, 0);
3135 if (SDValue V = PerformHvxDAGCombine(N, DCI))
3137 return SDValue();
3144 SDValue P = Op.getOperand(0);
3157 SDValue Cond = Op.getOperand(0);
3159 SDValue C0 = Cond.getOperand(0), C1 = Cond.getOperand(1);
3161 SDValue VSel = DCI.DAG.getNode(ISD::VSELECT, dl, ty(Op), C0,
3168 return SDValue();
3172 SDValue
3173 HexagonTargetLowering::getPICJumpTableRelocBase(SDValue Table,
3177 SDValue T = DAG.getTargetJumpTable(Idx, VT, HexagonII::MO_PCREL);
3324 SDValue Callee,
3330 const SmallVectorImpl<SDValue> &OutVals,
3442 std::pair<SDValue,int> BO = getBaseAndOffset(L->getBasePtr());