Lines Matching defs:DAG
1 //===-- CSKYISelLowering.cpp - CSKY DAG Lowering Implementation ----------===//
10 // selection DAG.
166 SelectionDAG &DAG) const {
171 return LowerGlobalAddress(Op, DAG);
173 return LowerExternalSymbol(Op, DAG);
175 return LowerGlobalTLSAddress(Op, DAG);
177 return LowerJumpTable(Op, DAG);
179 return LowerBlockAddress(Op, DAG);
181 return LowerConstantPool(Op, DAG);
183 return LowerVASTART(Op, DAG);
185 return LowerFRAMEADDR(Op, DAG);
187 return LowerRETURNADDR(Op, DAG);
199 static SDValue convertValVTToLocVT(SelectionDAG &DAG, SDValue Val,
209 Val = DAG.getNode(ISD::BITCAST, DL, LocVT, Val);
215 static SDValue convertLocVTToValVT(SelectionDAG &DAG, SDValue Val,
223 Val = DAG.getNode(ISD::BITCAST, DL, VA.getValVT(), Val);
230 SelectionDAG &DAG, SDValue Chain,
232 MachineFunction &MF = DAG.getMachineFunction();
256 Val = DAG.getCopyFromReg(Chain, DL, VReg, LocVT);
258 return convertLocVTToValVT(DAG, Val, VA, DL);
261 static SDValue unpackFromMemLoc(SelectionDAG &DAG, SDValue Chain,
263 MachineFunction &MF = DAG.getMachineFunction();
267 EVT PtrVT = MVT::getIntegerVT(DAG.getDataLayout().getPointerSizeInBits(0));
270 SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
282 Val = DAG.getExtLoad(
284 MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI), ValVT);
288 static SDValue unpack64(SelectionDAG &DAG, SDValue Chain, const CCValAssign &VA,
293 MachineFunction &MF = DAG.getMachineFunction();
300 SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
301 return DAG.getLoad(VA.getValVT(), DL, Chain, FIN,
309 SDValue Lo = DAG.getCopyFromReg(Chain, DL, LoVReg, MVT::i32);
314 SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
315 Hi = DAG.getLoad(MVT::i32, DL, Chain, FIN,
321 Hi = DAG.getCopyFromReg(Chain, DL, HiVReg, MVT::i32);
323 return DAG.getNode(CSKYISD::BITCAST_FROM_LOHI, DL, VA.getValVT(), Lo, Hi);
330 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const {
340 MachineFunction &MF = DAG.getMachineFunction();
347 CCState CCInfo(CallConv, IsVarArg, MF, ArgLocs, *DAG.getContext());
358 ArgValue = unpack64(DAG, Chain, VA, DL);
360 ArgValue = unpackFromRegLoc(Subtarget, DAG, Chain, VA, DL);
362 ArgValue = unpackFromMemLoc(DAG, Chain, VA, DL);
404 SDValue ArgValue = DAG.getCopyFromReg(Chain, DL, Reg, XLenVT);
406 SDValue PtrOff = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
407 SDValue Store = DAG.getStore(Chain, DL, ArgValue, PtrOff,
421 Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, OutChains);
441 const SDLoc &DL, SelectionDAG &DAG) const {
446 CCState CCInfo(CallConv, IsVarArg, DAG.getMachineFunction(), CSKYLocs,
447 *DAG.getContext());
464 SDValue Split64 = DAG.getNode(CSKYISD::BITCAST_TO_LOHI, DL,
465 DAG.getVTList(MVT::i32, MVT::i32), Val);
473 Chain = DAG.getCopyToReg(Chain, DL, RegLo, Lo, Glue);
475 RetOps.push_back(DAG.getRegister(RegLo, MVT::i32));
476 Chain = DAG.getCopyToReg(Chain, DL, RegHi, Hi, Glue);
478 RetOps.push_back(DAG.getRegister(RegHi, MVT::i32));
481 Val = convertValVTToLocVT(DAG, Val, VA, DL);
482 Chain = DAG.getCopyToReg(Chain, DL, VA.getLocReg(), Val, Glue);
486 RetOps.push_back(DAG.getRegister(VA.getLocReg(), VA.getLocVT()));
498 if (DAG.getMachineFunction().getFunction().hasFnAttribute("interrupt"))
499 return DAG.getNode(CSKYISD::NIR, DL, MVT::Other, RetOps);
501 return DAG.getNode(CSKYISD::RET, DL, MVT::Other, RetOps);
508 SelectionDAG &DAG = CLI.DAG;
518 EVT PtrVT = getPointerTy(DAG.getDataLayout());
521 MachineFunction &MF = DAG.getMachineFunction();
525 CCState ArgCCInfo(CallConv, IsVarArg, MF, ArgLocs, *DAG.getContext());
555 SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
556 SDValue SizeNode = DAG.getConstant(Size, DL, XLenVT);
558 Chain = DAG.getMemcpy(Chain, DL, FIPtr, Arg, SizeNode, Alignment,
566 Chain = DAG.getCALLSEQ_START(Chain, NumBytes, 0, CLI.DL);
581 DAG.getNode(CSKYISD::BITCAST_TO_LOHI, DL,
582 DAG.getVTList(MVT::i32, MVT::i32), ArgValue);
593 StackPtr = DAG.getCopyFromReg(Chain, DL, CSKY::R14, PtrVT);
596 DAG.getStore(Chain, DL, Hi, StackPtr, MachinePointerInfo()));
606 ArgValue = convertValVTToLocVT(DAG, ArgValue, VA, DL);
622 StackPtr = DAG.getCopyFromReg(Chain, DL, CSKY::R14, PtrVT);
624 DAG.getNode(ISD::ADD, DL, PtrVT, StackPtr,
625 DAG.getIntPtrConstant(VA.getLocMemOffset(), DL));
629 DAG.getStore(Chain, DL, ArgValue, Address, MachinePointerInfo()));
635 Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, MemOpChains);
641 Chain = DAG.getCopyToReg(Chain, DL, Reg.first, Reg.second, Glue);
646 EVT Ty = getPointerTy(DAG.getDataLayout());
657 Ops.push_back(getAddr<GlobalAddressSDNode, true>(S, DAG, IsLocal));
660 DAG, CSKYII::MO_None));
662 cast<GlobalAddressSDNode>(Callee), Ty, DAG, CSKYII::MO_None));
669 Ops.push_back(getAddr<ExternalSymbolSDNode, true>(S, DAG, IsLocal));
672 DAG, CSKYII::MO_None));
674 cast<ExternalSymbolSDNode>(Callee), Ty, DAG, CSKYII::MO_None));
684 Ops.push_back(DAG.getRegister(Reg.first, Reg.second.getValueType()));
691 Ops.push_back(DAG.getRegisterMask(Mask));
699 SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Glue);
703 return DAG.getNode(IsRegCall ? CSKYISD::TAILReg : CSKYISD::TAIL, DL,
707 Chain = DAG.getNode(IsRegCall ? CSKYISD::CALLReg : CSKYISD::CALL, DL, NodeTys,
709 DAG.addNoMergeSiteInfo(Chain.getNode(), CLI.NoMerge);
713 Chain = DAG.getCALLSEQ_END(Chain, NumBytes, 0, Glue, DL);
718 CCState RetCCInfo(CallConv, IsVarArg, MF, CSKYLocs, *DAG.getContext());
725 DAG.getCopyFromReg(Chain, DL, VA.getLocReg(), VA.getLocVT(), Glue);
735 DAG.getCopyFromReg(Chain, DL, GPRArgRegs[1], MVT::i32, Glue);
738 RetValue = DAG.getNode(CSKYISD::BITCAST_FROM_LOHI, DL, VA.getValVT(),
742 RetValue = convertLocVTToValVT(DAG, RetValue, VA, DL);
785 SelectionDAG &DAG,
790 return DAG.getTargetConstantPool(CPV, Ty);
1046 SelectionDAG &DAG,
1049 CSKYConstantPoolSymbol::Create(Type::getInt32Ty(*DAG.getContext()),
1052 return DAG.getTargetConstantPool(CPV, Ty);
1057 SelectionDAG &DAG,
1060 CSKYConstantPoolJT::Create(Type::getInt32Ty(*DAG.getContext()),
1062 return DAG.getTargetConstantPool(CPV, Ty);
1067 SelectionDAG &DAG,
1073 return DAG.getTargetConstantPool(CPV, Ty);
1078 SelectionDAG &DAG,
1082 N->getConstVal(), Type::getInt32Ty(*DAG.getContext()),
1084 return DAG.getTargetConstantPool(CPV, Ty);
1088 EVT Ty, SelectionDAG &DAG,
1090 return DAG.getTargetGlobalAddress(N->getGlobal(), DL, Ty, 0, Flags);
1094 EVT Ty, SelectionDAG &DAG,
1096 return DAG.getTargetExternalSymbol(N->getSymbol(), Ty, Flags);
1100 SelectionDAG &DAG,
1102 return DAG.getTargetJumpTable(N->getIndex(), Ty, Flags);
1106 EVT Ty, SelectionDAG &DAG,
1108 return DAG.getTargetBlockAddress(N->getBlockAddress(), Ty, N->getOffset(),
1113 EVT Ty, SelectionDAG &DAG,
1116 return DAG.getTargetConstantPool(N->getConstVal(), Ty, N->getAlign(),
1148 SelectionDAG &DAG) const {
1156 SDValue Addr = getAddr<GlobalAddressSDNode, false>(N, DAG, IsLocal);
1163 return DAG.getNode(ISD::ADD, DL, Ty, Addr,
1164 DAG.getConstant(Offset, DL, MVT::i32));
1169 SelectionDAG &DAG) const {
1172 return getAddr(N, DAG, false);
1176 SelectionDAG &DAG) const {
1179 return getAddr<JumpTableSDNode, false>(N, DAG);
1183 SelectionDAG &DAG) const {
1186 return getAddr(N, DAG);
1190 SelectionDAG &DAG) const {
1194 return getAddr(N, DAG);
1197 SDValue CSKYTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
1198 MachineFunction &MF = DAG.getMachineFunction();
1202 SDValue FI = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(),
1208 return DAG.getStore(Op.getOperand(0), DL, FI, Op.getOperand(1),
1213 SelectionDAG &DAG) const {
1215 MachineFunction &MF = DAG.getMachineFunction();
1223 SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl, FrameReg, VT);
1225 FrameAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), FrameAddr,
1231 SelectionDAG &DAG) const {
1233 MachineFunction &MF = DAG.getMachineFunction();
1237 if (verifyReturnAddressArgumentIsConstant(Op, DAG))
1244 SDValue FrameAddr = LowerFRAMEADDR(Op, DAG);
1245 SDValue Offset = DAG.getConstant(4, dl, MVT::i32);
1246 return DAG.getLoad(VT, dl, DAG.getEntryNode(),
1247 DAG.getNode(ISD::ADD, dl, VT, FrameAddr, Offset),
1253 return DAG.getCopyFromReg(DAG.getEntryNode(), dl, Reg, VT);
1267 SelectionDAG &DAG) const {
1278 Addr = getStaticTLSAddr(N, DAG, /*UseGOT=*/false);
1281 Addr = getStaticTLSAddr(N, DAG, /*UseGOT=*/true);
1285 Addr = getDynamicTLSAddr(N, DAG);
1294 return DAG.getNode(ISD::ADD, DL, Ty, Addr,
1295 DAG.getConstant(Offset, DL, XLenVT));
1300 SelectionDAG &DAG,
1302 MachineFunction &MF = DAG.getMachineFunction();
1308 EVT Ty = getPointerTy(DAG.getDataLayout());
1317 SDValue CAddr = DAG.getTargetConstantPool(CPV, Ty);
1321 SDValue PICLabel = DAG.getTargetConstant(CSKYPCLabelIndex, DL, MVT::i32);
1322 auto *LRWGRS = DAG.getMachineNode(CSKY::PseudoTLSLA32, DL, {Ty, Ty},
1325 DAG.getNode(ISD::ADD, DL, Ty, SDValue(LRWGRS, 0), SDValue(LRWGRS, 1));
1326 Load = DAG.getLoad(Ty, DL, DAG.getEntryNode(), LRWADDGRS,
1329 Load = SDValue(DAG.getMachineNode(CSKY::LRW32, DL, Ty, CAddr), 0);
1333 SDValue TPReg = DAG.getRegister(CSKY::R31, MVT::i32);
1334 return DAG.getNode(ISD::ADD, DL, Ty, Load, TPReg);
1338 SelectionDAG &DAG) const {
1339 MachineFunction &MF = DAG.getMachineFunction();
1345 EVT Ty = getPointerTy(DAG.getDataLayout());
1346 IntegerType *CallTy = Type::getIntNTy(*DAG.getContext(), Ty.getSizeInBits());
1351 SDValue Addr = DAG.getTargetConstantPool(CPV, Ty);
1352 SDValue PICLabel = DAG.getTargetConstant(CSKYPCLabelIndex, DL, MVT::i32);
1355 DAG.getMachineNode(CSKY::PseudoTLSLA32, DL, {Ty, Ty}, {Addr, PICLabel});
1358 DAG.getNode(ISD::ADD, DL, Ty, SDValue(LRWGRS, 0), SDValue(LRWGRS, 1));
1368 TargetLowering::CallLoweringInfo CLI(DAG);
1370 .setChain(DAG.getEntryNode())
1372 DAG.getExternalSymbol("__tls_get_addr", Ty),