Home | History | Annotate | Download | only in Hexagon

Lines Matching defs:DAG

1 //===-- HexagonISelLowering.cpp - Hexagon DAG Lowering Implementation -----===//
11 // into a selection DAG.
289 HexagonTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG)
301 ISD::ArgFlagsTy Flags, SelectionDAG &DAG,
304 SDValue SizeNode = DAG.getConstant(Flags.getByValSize(), MVT::i32);
305 return DAG.getMemcpy(Chain, dl, Dst, Src, SizeNode, Flags.getByValAlign(),
319 SDLoc dl, SelectionDAG &DAG) const {
325 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
326 getTargetMachine(), RVLocs, *DAG.getContext());
338 Chain = DAG.getCopyToReg(Chain, dl, VA.getLocReg(), OutVals[i], Flag);
342 RetOps.push_back(DAG.getRegister(VA.getLocReg(), VA.getLocVT()));
351 return DAG.getNode(HexagonISD::RET_FLAG, dl, MVT::Other, RetOps);
367 SDLoc dl, SelectionDAG &DAG,
375 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
376 getTargetMachine(), RVLocs, *DAG.getContext());
382 Chain = DAG.getCopyFromReg(Chain, dl,
397 SelectionDAG &DAG = CLI.DAG;
415 Callee = DAG.getTargetGlobalAddress(GA->getGlobal(), dl, MVT::i32);
430 HexagonCCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
431 getTargetMachine(), ArgLocs, *DAG.getContext(),
442 DAG.getMachineFunction().getFunction()->hasStructRetAttr();
446 Outs, OutVals, Ins, DAG);
467 DAG.getTarget().getRegisterInfo());
469 DAG.getCopyFromReg(Chain, dl, QRI->getStackRegister(), getPointerTy());
485 Arg = DAG.getNode(ISD::SIGN_EXTEND, dl, VA.getLocVT(), Arg);
488 Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, VA.getLocVT(), Arg);
491 Arg = DAG.getNode(ISD::ANY_EXTEND, dl, VA.getLocVT(), Arg);
497 SDValue PtrOff = DAG.getConstant(LocMemOffset, StackPtr.getValueType());
498 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
504 Flags, DAG, dl));
508 MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
525 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains);
529 Chain = DAG.getCALLSEQ_START(Chain, DAG.getConstant(NumBytes,
540 Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first,
558 Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first,
572 DAG.getTargetExternalSymbol(MemcpyName, getPointerTy());
575 Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl, getPointerTy());
578 Callee = DAG.getTargetExternalSymbol(S->getSymbol(), getPointerTy());
582 SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Glue);
590 Ops.push_back(DAG.getRegister(RegsToPass[i].first,
599 return DAG.getNode(HexagonISD::TC_RETURN, dl, NodeTys, Ops);
601 Chain = DAG.getNode(HexagonISD::CALL, dl, NodeTys, Ops);
605 Chain = DAG.getCALLSEQ_END(Chain, DAG.getIntPtrConstant(NumBytes, true),
606 DAG.getIntPtrConstant(0, true), InFlag, dl);
611 return LowerCallResult(Chain, InFlag, CallConv, isVarArg, Ins, dl, DAG,
618 SelectionDAG &DAG) {
657 SelectionDAG &DAG) const
677 isInc, DAG);
689 SelectionDAG &DAG) const {
691 MachineFunction &MF = DAG.getMachineFunction();
726 DAG.getTarget().getRegisterInfo());
746 LowerBR_JT(SDValue Op, SelectionDAG &DAG) const
754 MachineFunction &MF = DAG.getMachineFunction();
756 SDValue TargetJT = DAG.getTargetJumpTable(JT->getIndex(), MVT::i32);
769 SDValue JumpTableBase = DAG.getNode(HexagonISD::WrapperJT, dl,
771 SDValue ShiftIndex = DAG.getNode(ISD::SHL, dl, MVT::i32, Index,
772 DAG.getConstant(2, MVT::i32));
773 SDValue JTAddress = DAG.getNode(ISD::ADD, dl, MVT::i32, JumpTableBase,
775 SDValue LoadTarget = DAG.getLoad(MVT::i32, dl, Chain, JTAddress,
778 return DAG.getNode(HexagonISD::BR_JT, dl, MVT::Other, Chain, LoadTarget);
784 SelectionDAG &DAG) const {
792 SDValue StackPointer = DAG.getCopyFromReg(Chain, dl, SPReg, MVT::i32);
796 SDValue Sub = DAG.getNode(ISD::SUB, dl, MVT::i32, StackPointer, Size);
812 SDValue ArgAdjust = DAG.getNode(HexagonISD::ADJDYNALLOC, dl,
815 DAG.getConstant(0, MVT::i32));
820 DAG.getTarget().getRegisterInfo());
821 SDValue CopyChain = DAG.getCopyToReg(Chain, dl, QRI->getStackRegister(), Sub);
824 return DAG.getMergeValues(Ops, dl);
833 SDLoc dl, SelectionDAG &DAG,
837 MachineFunction &MF = DAG.getMachineFunction();
846 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
847 getTargetMachine(), ArgLocs, *DAG.getContext());
878 InVals.push_back(DAG.getCopyFromReg(Chain, dl, VReg, RegVT));
883 InVals.push_back(DAG.getCopyFromReg(Chain, dl, VReg, RegVT));
907 SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
915 InVals.push_back(DAG.getLoad(VA.getLocVT(), dl, Chain, FIN,
923 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOps);
938 HexagonTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
941 MachineFunction &MF = DAG.getMachineFunction();
943 SDValue Addr = DAG.getFrameIndex(QFI->getVarArgsFrameIndex(), MVT::i32);
945 return DAG.getStore(Op.getOperand(0), SDLoc(Op), Addr,
951 HexagonTargetLowering::LowerConstantPool(SDValue Op, SelectionDAG &DAG) const {
957 Res = DAG.getTargetConstantPool(CP->getMachineCPVal(), ValTy,
960 Res = DAG.getTargetConstantPool(CP->getConstVal(), ValTy,
962 return DAG.getNode(HexagonISD::CONST32, dl, ValTy, Res);
966 HexagonTargetLowering::LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const {
967 const TargetRegisterInfo *TRI = DAG.getTarget().getRegisterInfo();
968 MachineFunction &MF = DAG.getMachineFunction();
972 if (verifyReturnAddressArgumentIsConstant(Op, DAG))
979 SDValue FrameAddr = LowerFRAMEADDR(Op, DAG);
980 SDValue Offset = DAG.getConstant(4, MVT::i32);
981 return DAG.getLoad(VT, dl, DAG.getEntryNode(),
982 DAG.getNode(ISD::ADD, dl, VT, FrameAddr, Offset),
988 return DAG.getCopyFromReg(DAG.getEntryNode(), dl, Reg, VT);
992 HexagonTargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
994 static_cast<const HexagonRegisterInfo *>(DAG.getTarget().getRegisterInfo());
995 MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
1001 SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl,
1004 FrameAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), FrameAddr,
1011 SelectionDAG& DAG) const {
1013 return DAG.getNode(HexagonISD::BARRIER, dl, MVT::Other, Op.getOperand(0));
1018 SelectionDAG &DAG) const {
1023 Result = DAG.getTargetGlobalAddress(GV, dl, getPointerTy(), Offset);
1028 return DAG.getNode(HexagonISD::CONST32_GP, dl, getPointerTy(), Result);
1031 return DAG.getNode(HexagonISD::CONST32, dl, getPointerTy(), Result);
1035 HexagonTargetLowering::LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const {
1037 SDValue BA_SD = DAG.getTargetBlockAddress(BA, MVT::i32);
1039 return DAG.getNode(HexagonISD::CONST32_GP, dl, getPointerTy(), BA_SD);
1519 HexagonTargetLowering::LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const {
1527 DAG.getMachineFunction().getInfo<HexagonMachineFunctionInfo>();
1532 SDValue StoreAddr = DAG.getNode(ISD::ADD, dl, getPointerTy(),
1533 DAG.getRegister(Hexagon::R30, getPointerTy()),
1534 DAG.getIntPtrConstant(4));
1535 Chain = DAG.getStore(Chain, dl, Handler, StoreAddr, MachinePointerInfo(),
1537 Chain = DAG.getCopyToReg(Chain, dl, OffsetReg, Offset);
1542 return DAG.getNode(HexagonISD::EH_RETURN, dl, MVT::Other, Chain);
1546 HexagonTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
1549 case ISD::ConstantPool: return LowerConstantPool(Op, DAG);
1550 case ISD::EH_RETURN: return LowerEH_RETURN(Op, DAG);
1552 case ISD::RETURNADDR: return LowerRETURNADDR(Op, DAG);
1553 case ISD::FRAMEADDR: return LowerFRAMEADDR(Op, DAG);
1556 case ISD::ATOMIC_FENCE: return LowerATOMIC_FENCE(Op, DAG);
1557 case ISD::GlobalAddress: return LowerGLOBALADDRESS(Op, DAG);
1558 case ISD::BlockAddress: return LowerBlockAddress(Op, DAG);
1559 case ISD::VASTART: return LowerVASTART(Op, DAG);
1560 case ISD::BR_JT: return LowerBR_JT(Op, DAG);
1562 case ISD::DYNAMIC_STACKALLOC: return LowerDYNAMIC_STACKALLOC(Op, DAG);
1564 case ISD::INTRINSIC_WO_CHAIN: return LowerINTRINSIC_WO_CHAIN(Op, DAG);
1565 case ISD::INLINEASM: return LowerINLINEASM(Op, DAG);
1674 SelectionDAG& DAG) const {
1675 const Function *CallerF = DAG.getMachineFunction().getFunction();