Home | History | Annotate | Download | only in Mips

Lines Matching defs:DAG

1 //===-- MipsISelLowering.cpp - Mips DAG Lowering Implementation -----------===//
11 // selection DAG.
51 static SDValue GetGlobalReg(SelectionDAG &DAG, EVT Ty) {
52 MipsFunctionInfo *FI = DAG.getMachineFunction().getInfo<MipsFunctionInfo>();
53 return DAG.getRegister(FI->getGlobalBaseReg(), Ty);
444 static SDValue PerformADDECombine(SDNode *N, SelectionDAG& DAG,
451 SelectMadd(N, &DAG))
457 static SDValue PerformSUBECombine(SDNode *N, SelectionDAG& DAG,
464 SelectMsub(N, &DAG))
470 static SDValue PerformDivRemCombine(SDNode *N, SelectionDAG& DAG,
483 SDValue DivRem = DAG.getNode(opc, dl, MVT::Glue,
485 SDValue InChain = DAG.getEntryNode();
490 SDValue CopyFromLo = DAG.getCopyFromReg(InChain, dl, LO, Ty,
492 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), CopyFromLo);
499 SDValue CopyFromHi = DAG.getCopyFromReg(InChain, dl,
501 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), CopyFromHi);
547 static SDValue CreateFPCmp(SelectionDAG& DAG, const SDValue& Op) {
564 return DAG.getNode(MipsISD::FPCmp, dl, MVT::Glue, LHS, RHS,
565 DAG.getConstant(FPCondCCodeToFCC(CC), MVT::i32));
569 static SDValue CreateCMovFP(SelectionDAG& DAG, SDValue Cond, SDValue True,
575 return DAG.getNode((invert ? MipsISD::CMovFP_F : MipsISD::CMovFP_T), DL,
579 static SDValue PerformSELECTCombine(SDNode *N, SelectionDAG& DAG,
606 SetCC = DAG.getSetCC(DL, SetCC.getValueType(), SetCC.getOperand(0),
609 return DAG.getNode(ISD::SELECT, DL, FalseTy, SetCC, False, True);
612 static SDValue PerformANDCombine(SDNode *N, SelectionDAG& DAG,
647 return DAG.getNode(MipsISD::Ext, N->getDebugLoc(), ValTy,
648 ShiftRight.getOperand(0), DAG.getConstant(Pos, MVT::i32),
649 DAG.getConstant(SMSize, MVT::i32));
652 static SDValue PerformORCombine(SDNode *N, SelectionDAG& DAG,
701 return DAG.getNode(MipsISD::Ins, N->getDebugLoc(), ValTy, Shl.getOperand(0),
702 DAG.getConstant(SMPos0, MVT::i32),
703 DAG.getConstant(SMSize0, MVT::i32), And0.getOperand(0));
708 SelectionDAG &DAG = DCI.DAG;
714 return PerformADDECombine(N, DAG, DCI, Subtarget);
716 return PerformSUBECombine(N, DAG, DCI, Subtarget);
719 return PerformDivRemCombine(N, DAG, DCI, Subtarget);
721 return PerformSELECTCombine(N, DAG, DCI, Subtarget);
723 return PerformANDCombine(N, DAG, DCI, Subtarget);
725 return PerformORCombine(N, DAG, DCI, Subtarget);
732 LowerOperation(SDValue Op, SelectionDAG &DAG) const
736 case ISD::BRCOND: return LowerBRCOND(Op, DAG);
737 case ISD::ConstantPool: return LowerConstantPool(Op, DAG);
738 case ISD::DYNAMIC_STACKALLOC: return LowerDYNAMIC_STACKALLOC(Op, DAG);
739 case ISD::GlobalAddress: return LowerGlobalAddress(Op, DAG);
740 case ISD::BlockAddress: return LowerBlockAddress(Op, DAG);
741 case ISD::GlobalTLSAddress: return LowerGlobalTLSAddress(Op, DAG);
742 case ISD::JumpTable: return LowerJumpTable(Op, DAG);
743 case ISD::SELECT: return LowerSELECT(Op, DAG);
744 case ISD::SETCC: return LowerSETCC(Op, DAG);
745 case ISD::VASTART: return LowerVASTART(Op, DAG);
746 case ISD::FCOPYSIGN: return LowerFCOPYSIGN(Op, DAG);
747 case ISD::FABS: return LowerFABS(Op, DAG);
748 case ISD::FRAMEADDR: return LowerFRAMEADDR(Op, DAG);
749 case ISD::MEMBARRIER: return LowerMEMBARRIER(Op, DAG);
750 case ISD::ATOMIC_FENCE: return LowerATOMIC_FENCE(Op, DAG);
1441 LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const
1443 MachineFunction &MF = DAG.getMachineFunction();
1457 SDValue StackPointer = DAG.getCopyFromReg(Chain, dl, SP, getPointerTy());
1461 SDValue Sub = DAG.getNode(ISD::SUB, dl, getPointerTy(), StackPointer, Size);
1465 Chain = DAG.getCopyToReg(StackPointer.getValue(1), dl, SP, Sub, SDValue());
1469 SDVTList VTLs = DAG.getVTList(getPointerTy(), MVT::Other);
1470 SDValue Ptr = DAG.getFrameIndex(MipsFI->getDynAllocFI(), getPointerTy());
1473 return DAG.getNode(MipsISD::DynAlloc, dl, VTLs, Ops, 3);
1477 LowerBRCOND(SDValue Op, SelectionDAG &DAG) const
1485 SDValue CondRes = CreateFPCmp(DAG, Op.getOperand(1));
1494 SDValue BrCode = DAG.getConstant(GetFPBranchCodeFromCond(CC), MVT::i32);
1496 return DAG.getNode(MipsISD::FPBrcond, dl, Op.getValueType(), Chain, BrCode,
1501 LowerSELECT(SDValue Op, SelectionDAG &DAG) const
1503 SDValue Cond = CreateFPCmp(DAG, Op.getOperand(0));
1509 return CreateCMovFP(DAG, Cond, Op.getOperand(1), Op.getOperand(2),
1513 SDValue MipsTargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
1514 SDValue Cond = CreateFPCmp(DAG, Op);
1519 SDValue True = DAG.getConstant(1, MVT::i32);
1520 SDValue False = DAG.getConstant(0, MVT::i32);
1522 return CreateCMovFP(DAG, Cond, True, False, Op.getDebugLoc());
1526 SelectionDAG &DAG) const {
1532 SDVTList VTs = DAG.getVTList(MVT::i32);
1538 SDValue GA = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
1540 SDValue GPRelNode = DAG.getNode(MipsISD::GPRel, dl, VTs, &GA, 1);
1541 SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(MVT::i32);
1542 return DAG.getNode(ISD::ADD, dl, MVT::i32, GOT, GPRelNode);
1545 SDValue GAHi = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
1547 SDValue GALo = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
1549 SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, VTs, &GAHi, 1);
1550 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, GALo);
1551 return DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
1560 SDValue GA = DAG.getTargetGlobalAddress(GV, dl, ValTy, 0, GotFlag);
1561 GA = DAG.getNode(MipsISD::Wrapper, dl, ValTy, GetGlobalReg(DAG, ValTy), GA);
1562 SDValue ResNode = DAG.getLoad(ValTy, dl, DAG.getEntryNode(), GA,
1568 SDValue GALo = DAG.getTargetGlobalAddress(GV, dl, ValTy, 0,
1571 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, ValTy, GALo);
1572 return DAG.getNode(ISD::ADD, dl, ValTy, ResNode, Lo);
1576 SelectionDAG &DAG) const {
1583 SDValue BAHi = DAG.getBlockAddress(BA, MVT::i32, true, MipsII::MO_ABS_HI);
1584 SDValue BALo = DAG.getBlockAddress(BA, MVT::i32, true, MipsII::MO_ABS_LO);
1585 SDValue Hi = DAG.getNode(MipsISD::Hi, dl, MVT::i32, BAHi);
1586 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, BALo);
1587 return DAG.getNode(ISD::ADD, dl, MVT::i32, Hi, Lo);
1593 SDValue BAGOTOffset = DAG.getBlockAddress(BA, ValTy, true, GOTFlag);
1594 BAGOTOffset = DAG.getNode(MipsISD::Wrapper, dl, ValTy,
1595 GetGlobalReg(DAG, ValTy), BAGOTOffset);
1596 SDValue BALOOffset = DAG.getBlockAddress(BA, ValTy, true, OFSTFlag);
1597 SDValue Load = DAG.getLoad(ValTy, dl, DAG.getEntryNode(), BAGOTOffset,
1599 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, ValTy, BALOOffset);
1600 return DAG.getNode(ISD::ADD, dl, ValTy, Load, Lo);
1604 LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const
1619 SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, Flag);
1620 SDValue Argument = DAG.getNode(MipsISD::Wrapper, dl, PtrVT,
1621 GetGlobalReg(DAG, PtrVT), TGA);
1623 IntegerType *PtrTy = Type::getIntNTy(*DAG.getContext(), PtrSize);
1625 SDValue TlsGetAddr = DAG.getExternalSymbol("__tls_get_addr", PtrVT);
1634 LowerCallTo(DAG.getEntryNode(), PtrTy,
1638 TlsGetAddr, Args, DAG, dl);
1645 SDValue TGAHi = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0,
1647 SDValue Hi = DAG.getNode(MipsISD::Hi, dl, PtrVT, TGAHi);
1648 SDValue TGALo = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0,
1650 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, PtrVT, TGALo);
1651 SDValue Add = DAG.getNode(ISD::ADD, dl, PtrVT, Hi, Ret);
1652 return DAG.getNode(ISD::ADD, dl, PtrVT, Add, Lo);
1658 SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0,
1660 TGA = DAG.getNode(MipsISD::Wrapper, dl, PtrVT, GetGlobalReg(DAG, PtrVT),
1662 Offset = DAG.getLoad(PtrVT, dl,
1663 DAG.getEntryNode(), TGA, MachinePointerInfo(),
1667 SDValue TGAHi = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0,
1669 SDValue TGALo = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0,
1671 SDValue Hi = DAG.getNode(MipsISD::Hi, dl, PtrVT, TGAHi);
1672 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, PtrVT, TGALo);
1673 Offset = DAG.getNode(ISD::ADD, dl, PtrVT, Hi, Lo);
1676 SDValue ThreadPointer = DAG.getNode(MipsISD::ThreadPointer, dl, PtrVT);
1677 return DAG.getNode(ISD::ADD, dl, PtrVT, ThreadPointer, Offset);
1681 LowerJumpTable(SDValue Op, SelectionDAG &DAG) const
1691 JTI = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, MipsII::MO_ABS_HI);
1692 HiPart = DAG.getNode(MipsISD::Hi, dl, PtrVT, JTI);
1693 JTILo = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, MipsII::MO_ABS_LO);
1697 JTI = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, GOTFlag);
1698 JTI = DAG.getNode(MipsISD::Wrapper, dl, PtrVT, GetGlobalReg(DAG, PtrVT),
1700 HiPart = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), JTI,
1702 JTILo = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, OfstFlag);
1705 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, PtrVT, JTILo);
1706 return DAG.getNode(ISD::ADD, dl, PtrVT, HiPart, Lo);
1710 LowerConstantPool(SDValue Op, SelectionDAG &DAG) const
1724 // SDValue GPRelNode = DAG.getNode(MipsISD::GPRel, MVT::i32, CP);
1725 // SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(MVT::i32);
1726 // ResNode = DAG.getNode(ISD::ADD, MVT::i32, GOT, GPRelNode);
1729 SDValue CPHi = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
1731 SDValue CPLo = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
1733 SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, MVT::i32, CPHi);
1734 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, CPLo);
1735 ResNode = DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
1740 SDValue CP = DAG.getTargetConstantPool(C, ValTy, N->getAlignment(),
1742 CP = DAG.getNode(MipsISD::Wrapper, dl, ValTy, GetGlobalReg(DAG, ValTy), CP);
1743 SDValue Load = DAG.getLoad(ValTy, dl, DAG.getEntryNode(), CP,
1746 SDValue CPLo = DAG.getTargetConstantPool(C, ValTy, N->getAlignment(),
1748 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, ValTy, CPLo);
1749 ResNode = DAG.getNode(ISD::ADD, dl, ValTy, Load, Lo);
1755 SDValue MipsTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
1756 MachineFunction &MF = DAG.getMachineFunction();
1760 SDValue FI = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(),
1766 return DAG.getStore(Op.getOperand(0), dl, FI, Op.getOperand(1),
1770 static SDValue LowerFCOPYSIGN32(SDValue Op, SelectionDAG &DAG, bool HasR2) {
1773 SDValue Const1 = DAG.getConstant(1, MVT::i32);
1774 SDValue Const31 = DAG.getConstant(31, MVT::i32);
1781 DAG.getNode(ISD::BITCAST, DL, MVT::i32, Op.getOperand(0)) :
1782 DAG.getNode(MipsISD::ExtractElementF64, DL, MVT::i32, Op.getOperand(0),
1785 DAG.getNode(ISD::BITCAST, DL, MVT::i32, Op.getOperand(1)) :
1786 DAG.getNode(MipsISD::ExtractElementF64, DL, MVT::i32, Op.getOperand(1),
1792 SDValue E = DAG.getNode(MipsISD::Ext, DL, MVT::i32, Y, Const31, Const1);
1793 Res = DAG.getNode(MipsISD::Ins, DL, MVT::i32, E, Const31, Const1, X);
1800 SDValue SllX = DAG.getNode(ISD::SHL, DL, MVT::i32, X, Const1);
1801 SDValue SrlX = DAG.getNode(ISD::SRL, DL, MVT::i32, SllX, Const1);
1802 SDValue SrlY = DAG.getNode(ISD::SRL, DL, MVT::i32, Y, Const31);
1803 SDValue SllY = DAG.getNode(ISD::SHL, DL, MVT::i32, SrlY, Const31);
1804 Res = DAG.getNode(ISD::OR, DL, MVT::i32, SrlX, SllY);
1808 return DAG.getNode(ISD::BITCAST, DL, Op.getOperand(0).getValueType(), Res);
1810 SDValue LowX = DAG.getNode(MipsISD::ExtractElementF64, DL, MVT::i32,
1811 Op.getOperand(0), DAG.getConstant(0, MVT::i32));
1812 return DAG.getNode(MipsISD::BuildPairF64, DL, MVT::f64, LowX, Res);
1815 static SDValue LowerFCOPYSIGN64(SDValue Op, SelectionDAG &DAG, bool HasR2) {
1819 SDValue Const1 = DAG.getConstant(1, MVT::i32);
1823 SDValue X = DAG.getNode(ISD::BITCAST, DL, TyX, Op.getOperand(0));
1824 SDValue Y = DAG.getNode(ISD::BITCAST, DL, TyY, Op.getOperand(1));
1829 SDValue E = DAG.getNode(MipsISD::Ext, DL, TyY, Y,
1830 DAG.getConstant(WidthY - 1, MVT::i32), Const1);
1833 E = DAG.getNode(ISD::ZERO_EXTEND, DL, TyX, E);
1835 E = DAG.getNode(ISD::TRUNCATE, DL, TyX, E);
1837 SDValue I = DAG.getNode(MipsISD::Ins, DL, TyX, E,
1838 DAG.getConstant(WidthX - 1, MVT::i32), Const1, X);
1839 return DAG.getNode(ISD::BITCAST, DL, Op.getOperand(0).getValueType(), I);
1847 SDValue SllX = DAG.getNode(ISD::SHL, DL, TyX, X, Const1);
1848 SDValue SrlX = DAG.getNode(ISD::SRL, DL, TyX, SllX, Const1);
1849 SDValue SrlY = DAG.getNode(ISD::SRL, DL, TyY, Y,
1850 DAG.getConstant(WidthY - 1, MVT::i32));
1853 SrlY = DAG.getNode(ISD::ZERO_EXTEND, DL, TyX, SrlY);
1855 SrlY = DAG.getNode(ISD::TRUNCATE, DL, TyX, SrlY);
1857 SDValue SllY = DAG.getNode(ISD::SHL, DL, TyX, SrlY,
1858 DAG.getConstant(WidthX - 1, MVT::i32));
1859 SDValue Or = DAG.getNode(ISD::OR, DL, TyX, SrlX, SllY);
1860 return DAG.getNode(ISD::BITCAST, DL, Op.getOperand(0).getValueType(), Or);
1864 MipsTargetLowering::LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const {
1866 return LowerFCOPYSIGN64(Op, DAG, Subtarget->hasMips32r2());
1868 return LowerFCOPYSIGN32(Op, DAG, Subtarget->hasMips32r2());
1871 static SDValue LowerFABS32(SDValue Op, SelectionDAG &DAG, bool HasR2) {
1872 SDValue Res, Const1 = DAG.getConstant(1, MVT::i32);
1878 DAG.getNode(ISD::BITCAST, DL, MVT::i32, Op.getOperand(0)) :
1879 DAG.getNode(MipsISD::ExtractElementF64, DL, MVT::i32, Op.getOperand(0),
1884 Res = DAG.getNode(MipsISD::Ins, DL, MVT::i32,
1885 DAG.getRegister(Mips::ZERO, MVT::i32),
1886 DAG.getConstant(31, MVT::i32), Const1, X);
1888 SDValue SllX = DAG.getNode(ISD::SHL, DL, MVT::i32, X, Const1);
1889 Res = DAG.getNode(ISD::SRL, DL, MVT::i32, SllX, Const1);
1893 return DAG.getNode(ISD::BITCAST, DL, MVT::f32, Res);
1895 SDValue LowX = DAG.getNode(MipsISD::ExtractElementF64, DL, MVT::i32,
1896 Op.getOperand(0), DAG.getConstant(0, MVT::i32));
1897 return DAG.getNode(MipsISD::BuildPairF64, DL, MVT::f64, LowX, Res);
1900 static SDValue LowerFABS64(SDValue Op, SelectionDAG &DAG, bool HasR2) {
1901 SDValue Res, Const1 = DAG.getConstant(1, MVT::i32);
1905 SDValue X = DAG.getNode(ISD::BITCAST, DL, MVT::i64, Op.getOperand(0));
1909 Res = DAG.getNode(MipsISD::Ins, DL, MVT::i64,
1910 DAG.getRegister(Mips::ZERO_64, MVT::i64),
1911 DAG.getConstant(63, MVT::i32), Const1, X);
1913 SDValue SllX = DAG.getNode(ISD::SHL, DL, MVT::i64, X, Const1);
1914 Res = DAG.getNode(ISD::SRL, DL, MVT::i64, SllX, Const1);
1917 return DAG.getNode(ISD::BITCAST, DL, MVT::f64, Res);
1921 MipsTargetLowering::LowerFABS(SDValue Op, SelectionDAG &DAG) const {
1923 return LowerFABS64(Op, DAG, Subtarget->hasMips32r2());
1925 return LowerFABS32(Op, DAG, Subtarget->hasMips32r2());
1929 LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
1934 MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
1938 SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl,
1945 MipsTargetLowering::LowerMEMBARRIER(SDValue Op, SelectionDAG& DAG) const {
1948 return DAG.getNode(MipsISD::Sync, dl, MVT::Other, Op.getOperand(0),
1949 DAG.getConstant(SType, MVT::i32));
1953 SelectionDAG& DAG) const {
1958 return DAG.getNode(MipsISD::Sync, dl, MVT::Other, Op.getOperand(0),
1959 DAG.getConstant(SType, MVT::i32));
2157 MachineFrameInfo *MFI, SelectionDAG &DAG, SDValue Arg,
2170 SDValue LoadPtr = DAG.getNode(ISD::ADD, dl, MVT::i32, Arg,
2171 DAG.getConstant(Offset, MVT::i32));
2172 SDValue LoadVal = DAG.getLoad(MVT::i32, dl, Chain, LoadPtr,
2189 SDValue LoadPtr = DAG.getNode(ISD::ADD, dl, MVT::i32, Arg,
2190 DAG.getConstant(Offset, MVT::i32));
2192 SDValue LoadVal = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, Chain,
2201 LoadVal = DAG.getNode(ISD::SHL, dl, MVT::i32, LoadVal,
2202 DAG.getConstant(32 - LoadSize * 8, MVT::i32));
2210 LoadPtr = DAG.getNode(ISD::ADD, dl, MVT::i32, Arg,
2211 DAG.getConstant(Offset, MVT::i32));
2213 SDValue Subword = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, Chain,
2220 SDValue Shift = DAG.getNode(ISD::SHL, dl, MVT::i32, Subword,
2221 DAG.getConstant(ShiftAmt, MVT::i32));
2222 LoadVal = DAG.getNode(ISD::OR, dl, MVT::i32, LoadVal, Shift);
2232 SDValue Src = DAG.getNode(ISD::ADD, dl, MVT::i32, Arg,
2233 DAG.getConstant(Offset, MVT::i32));
2235 SDValue Dst = DAG.getFrameIndex(LastFI, PtrType);
2236 ByValChain = DAG.getMemcpy(ByValChain, dl, Dst, Src,
2237 DAG.getConstant(RemainingSize, MVT::i32),
2248 MachineFrameInfo *MFI, SelectionDAG &DAG, SDValue Arg,
2267 SDValue LoadPtr = DAG.getNode(ISD::ADD, dl, PtrTy, Arg,
2268 DAG.getConstant(Offset, PtrTy));
2269 SDValue LoadVal = DAG.getLoad(MVT::i64, dl, Chain, LoadPtr,
2292 SDValue LoadPtr = DAG.getNode(ISD::ADD, dl, PtrTy, Arg,
2293 DAG.getConstant(Offset, PtrTy));
2295 DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i64, Chain, LoadPtr,
2303 SDValue Shift = DAG.getNode(ISD::SHL, dl, MVT::i64, LoadVal,
2304 DAG.getConstant(Shamt, MVT::i32));
2306 Val = Val.getNode() ? DAG.getNode(ISD::OR, dl, MVT::i64, Val, Shift) :
2321 SDValue Src = DAG.getNode(ISD::ADD, dl, PtrTy, Arg,
2322 DAG.getConstant(Offset, PtrTy));
2324 SDValue Dst = DAG.getFrameIndex(LastFI, PtrTy);
2325 ByValChain = DAG.getMemcpy(ByValChain, dl, Dst, Src,
2326 DAG.getConstant(MemCpySize, PtrTy), Alignment,
2341 DebugLoc dl, SelectionDAG &DAG,
2346 MachineFunction &MF = DAG.getMachineFunction();
2354 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
2355 getTargetMachine(), ArgLocs, *DAG.getContext());
2371 SDValue NextStackOffsetVal = DAG.getIntPtrConstant(NextStackOffset, true);
2372 Chain = CallSeqStart = DAG.getCALLSEQ_START(InChain, NextStackOffsetVal);
2427 MFI, DAG, Arg, VA, Flags, getPointerTy(),
2431 MFI, DAG, Arg, VA, Flags, getPointerTy(),
2443 Arg = DAG.getNode(ISD::BITCAST, dl, LocVT, Arg);
2445 SDValue Lo = DAG.getNode(MipsISD::ExtractElementF64, dl, MVT::i32,
2446 Arg, DAG.getConstant(0, MVT::i32));
2447 SDValue Hi = DAG.getNode(MipsISD::ExtractElementF64, dl, MVT::i32,
2448 Arg, DAG.getConstant(1, MVT::i32));
2460 Arg = DAG.getNode(ISD::SIGN_EXTEND, dl, LocVT, Arg);
2463 Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, LocVT, Arg);
2466 Arg = DAG.getNode(ISD::ANY_EXTEND, dl, LocVT, Arg);
2483 SDValue PtrOff = DAG.getFrameIndex(LastFI, getPointerTy());
2487 MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
2500 DAG.UpdateNodeOperands(CallSeqStart.getNode(), ByValChain,
2506 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
2521 Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl, getPointerTy(), 0,
2523 CalleeLo = DAG.getTargetGlobalAddress(G->getGlobal(), dl, getPointerTy(),
2527 Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl,
2540 Callee = DAG.getTargetExternalSymbol(S->getSymbol(), getPointerTy(),
2551 Callee = DAG.getNode(MipsISD::Wrapper, dl, getPointerTy(),
2552 GetGlobalReg(DAG, getPointerTy()), Callee);
2553 SDValue LoadValue = DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
2559 SDValue Lo = DAG.getNode(MipsISD::Lo, dl, getPointerTy(), CalleeLo);
2560 Callee = DAG.getNode(ISD::ADD, dl, getPointerTy(), LoadValue, Lo);
2571 Chain = DAG.getCopyToReg(Chain, dl, T9Reg, Callee, SDValue(0, 0));
2573 Callee = DAG.getRegister(T9Reg, getPointerTy());
2581 Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first,
2590 SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Glue);
2598 Ops.push_back(DAG.getRegister(RegsToPass[i].first,
2605 Ops.push_back(DAG.getRegisterMask(Mask));
2610 Chain = DAG.getNode(MipsISD::JmpLink, dl, NodeTys, &Ops[0], Ops.size());
2614 Chain = DAG.getCALLSEQ_END(Chain,
2615 DAG.getIntPtrConstant(NextStackOffset, true),
2616 DAG.getIntPtrConstant(0, true), InFlag);
2622 Ins, dl, DAG, InVals);
2631 DebugLoc dl, SelectionDAG &DAG,
2635 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
2636 getTargetMachine(), RVLocs, *DAG.getContext());
2642 Chain = DAG.getCopyFromReg(Chain, dl, RVLocs[i].getLocReg(),
2656 SelectionDAG &DAG, unsigned NumWords, SDValue FIN,
2670 SDValue StorePtr = DAG.getNode(ISD::ADD, dl, MVT::i32, FIN,
2671 DAG.getConstant(i * 4, MVT::i32));
2672 SDValue Store = DAG.getStore(Chain, dl, DAG.getRegister(Reg, MVT::i32),
2682 std::vector<SDValue>& OutChains, SelectionDAG &DAG,
2700 SDValue FIN = DAG.getFrameIndex(LastFI, PtrTy);
2707 SDValue StorePtr = DAG.getNode(ISD::ADD, dl, PtrTy, FIN,
2708 DAG.getConstant(I * 8, PtrTy));
2709 SDValue Store = DAG.getStore(Chain, dl, DAG.getRegister(VReg, MVT::i64),
2725 DebugLoc dl, SelectionDAG &DAG,
2728 MachineFunction &MF = DAG.getMachineFunction();
2739 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
2740 getTargetMachine(), ArgLocs, *DAG.getContext());
2748 DAG.getMachineFunction().getFunction()->arg_begin();
2764 SDValue FIN = DAG.getFrameIndex(LastFI, getPointerTy());
2766 ReadByValArg(MF, Chain, dl, OutChains, DAG, NumWords, FIN, VA, Flags,
2769 LastFI = CopyMips64ByValRegs(MF, Chain, dl, OutChains, DAG, VA, Flags,
2794 unsigned Reg = AddLiveIn(DAG.getMachineFunction(), ArgReg, RC);
2795 SDValue ArgValue = DAG.getCopyFromReg(Chain, dl, Reg, RegVT);
2807 ArgValue = DAG.getNode(Opcode, dl, RegVT, ArgValue,
2808 DAG.getValueType(ValVT));
2809 ArgValue = DAG.getNode(ISD::TRUNCATE, dl, ValVT, ArgValue);
2815 ArgValue = DAG.getNode(ISD::BITCAST, dl, ValVT, ArgValue);
2817 unsigned Reg2 = AddLiveIn(DAG.getMachineFunction(),
2819 SDValue ArgValue2 = DAG.getCopyFromReg(Chain, dl, Reg2, RegVT);
2822 ArgValue = DAG.getNode(MipsISD::BuildPairF64, dl, MVT::f64,
2837 SDValue FIN = DAG.getFrameIndex(LastFI, getPointerTy());
2838 InVals.push_back(DAG.getLoad(ValVT, dl, Chain, FIN,
2847 if (DAG.getMachineFunction().getFunction()->hasStructRetAttr()) {
2853 SDValue Copy = DAG.getCopyToReg(DAG.getEntryNode(), dl, Reg, InVals[0]);
2854 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Copy, Chain);
2887 unsigned Reg = AddLiveIn(DAG.getMachineFunction(), ArgRegs[Idx], RC);
2888 SDValue ArgValue = DAG.getCopyFromReg(Chain, dl, Reg,
2891 SDValue PtrOff = DAG.getFrameIndex(LastFI, getPointerTy());
2892 OutChains.push_back(DAG.getStore(Chain, dl, ArgValue, PtrOff,
2903 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
2919 DebugLoc dl, SelectionDAG &DAG) const {
2926 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
2927 getTargetMachine(), RVLocs, *DAG.getContext());
2934 if (DAG.getMachineFunction().getRegInfo().liveout_empty()) {
2937 DAG.getMachineFunction().getRegInfo().addLiveOut(RVLocs[i].getLocReg());
2947 Chain = DAG.getCopyToReg(Chain, dl, VA.getLocReg(), OutVals[i], Flag);
2958 if (DAG.getMachineFunction().getFunction()->hasStructRetAttr()) {
2959 MachineFunction &MF = DAG.getMachineFunction();
2965 SDValue Val = DAG.getCopyFromReg(Chain, dl, Reg, getPointerTy());
2967 Chain = DAG.getCopyToReg(Chain, dl, Mips::V0, Val, Flag);
2973 return DAG.getNode(MipsISD::Ret, dl, MVT::Other,
2974 Chain, DAG.getRegister(Mips::RA, MVT::i32), Flag);
2976 return DAG.getNode(MipsISD::Ret, dl, MVT::Other,
2977 Chain, DAG.getRegister(Mips::RA, MVT::i32));