Lines Matching refs:DAG
249 const SDLoc &DL, SelectionDAG &DAG) const { in LowerReturn()
251 return LowerReturn_64(Chain, CallConv, IsVarArg, Outs, OutVals, DL, DAG); in LowerReturn()
252 return LowerReturn_32(Chain, CallConv, IsVarArg, Outs, OutVals, DL, DAG); in LowerReturn()
260 const SDLoc &DL, SelectionDAG &DAG) const { in LowerReturn_32()
261 MachineFunction &MF = DAG.getMachineFunction(); in LowerReturn_32()
267 CCState CCInfo(CallConv, IsVarArg, DAG.getMachineFunction(), RVLocs, in LowerReturn_32()
268 *DAG.getContext()); in LowerReturn_32()
292 SDValue Part0 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, MVT::i32, in LowerReturn_32()
294 DAG.getConstant(0, DL, getVectorIdxTy(DAG.getDataLayout()))); in LowerReturn_32()
295 SDValue Part1 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, MVT::i32, in LowerReturn_32()
297 DAG.getConstant(1, DL, getVectorIdxTy(DAG.getDataLayout()))); in LowerReturn_32()
299 Chain = DAG.getCopyToReg(Chain, DL, VA.getLocReg(), Part0, Glue); in LowerReturn_32()
301 RetOps.push_back(DAG.getRegister(VA.getLocReg(), VA.getLocVT())); in LowerReturn_32()
303 Chain = DAG.getCopyToReg(Chain, DL, VA.getLocReg(), Part1, in LowerReturn_32()
306 Chain = DAG.getCopyToReg(Chain, DL, VA.getLocReg(), Arg, Glue); in LowerReturn_32()
310 RetOps.push_back(DAG.getRegister(VA.getLocReg(), VA.getLocVT())); in LowerReturn_32()
320 auto PtrVT = getPointerTy(DAG.getDataLayout()); in LowerReturn_32()
321 SDValue Val = DAG.getCopyFromReg(Chain, DL, Reg, PtrVT); in LowerReturn_32()
322 Chain = DAG.getCopyToReg(Chain, DL, SP::I0, Val, Glue); in LowerReturn_32()
324 RetOps.push_back(DAG.getRegister(SP::I0, PtrVT)); in LowerReturn_32()
329 RetOps[1] = DAG.getConstant(RetAddrOffset, DL, MVT::i32); in LowerReturn_32()
335 return DAG.getNode(SPISD::RET_GLUE, DL, MVT::Other, RetOps); in LowerReturn_32()
345 const SDLoc &DL, SelectionDAG &DAG) const { in LowerReturn_64()
350 CCState CCInfo(CallConv, IsVarArg, DAG.getMachineFunction(), RVLocs, in LowerReturn_64()
351 *DAG.getContext()); in LowerReturn_64()
361 RetOps.push_back(DAG.getConstant(8, DL, MVT::i32)); in LowerReturn_64()
373 OutVal = DAG.getNode(ISD::SIGN_EXTEND, DL, VA.getLocVT(), OutVal); in LowerReturn_64()
376 OutVal = DAG.getNode(ISD::ZERO_EXTEND, DL, VA.getLocVT(), OutVal); in LowerReturn_64()
379 OutVal = DAG.getNode(ISD::ANY_EXTEND, DL, VA.getLocVT(), OutVal); in LowerReturn_64()
388 OutVal = DAG.getNode(ISD::SHL, DL, MVT::i64, OutVal, in LowerReturn_64()
389 DAG.getConstant(32, DL, MVT::i32)); in LowerReturn_64()
394 SDValue NV = DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i64, OutVals[i+1]); in LowerReturn_64()
395 OutVal = DAG.getNode(ISD::OR, DL, MVT::i64, OutVal, NV); in LowerReturn_64()
401 Chain = DAG.getCopyToReg(Chain, DL, VA.getLocReg(), OutVal, Glue); in LowerReturn_64()
405 RetOps.push_back(DAG.getRegister(VA.getLocReg(), VA.getLocVT())); in LowerReturn_64()
414 return DAG.getNode(SPISD::RET_GLUE, DL, MVT::Other, RetOps); in LowerReturn_64()
420 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const { in LowerFormalArguments() argument
423 DL, DAG, InVals); in LowerFormalArguments()
425 DL, DAG, InVals); in LowerFormalArguments()
434 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const { in LowerFormalArguments_32() argument
435 MachineFunction &MF = DAG.getMachineFunction(); in LowerFormalArguments_32()
441 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(), ArgLocs, in LowerFormalArguments_32()
442 *DAG.getContext()); in LowerFormalArguments_32()
446 bool IsLittleEndian = DAG.getDataLayout().isLittleEndian(); in LowerFormalArguments_32()
457 SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32); in LowerFormalArguments_32()
459 DAG.getLoad(MVT::i32, dl, Chain, FIPtr, MachinePointerInfo()); in LowerFormalArguments_32()
470 SDValue HiVal = DAG.getCopyFromReg(Chain, dl, VRegHi, MVT::i32); in LowerFormalArguments_32()
479 SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32); in LowerFormalArguments_32()
480 LoVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr, MachinePointerInfo()); in LowerFormalArguments_32()
484 LoVal = DAG.getCopyFromReg(Chain, dl, loReg, MVT::i32); in LowerFormalArguments_32()
491 DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, LoVal, HiVal); in LowerFormalArguments_32()
492 WholeValue = DAG.getNode(ISD::BITCAST, dl, VA.getLocVT(), WholeValue); in LowerFormalArguments_32()
498 SDValue Arg = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i32); in LowerFormalArguments_32()
500 Arg = DAG.getNode(ISD::BITCAST, dl, MVT::f32, Arg); in LowerFormalArguments_32()
502 Arg = DAG.getNode(ISD::AssertSext, dl, MVT::i32, Arg, in LowerFormalArguments_32()
503 DAG.getValueType(VA.getLocVT())); in LowerFormalArguments_32()
504 Arg = DAG.getNode(ISD::TRUNCATE, dl, VA.getLocVT(), Arg); in LowerFormalArguments_32()
513 auto PtrVT = getPointerTy(DAG.getDataLayout()); in LowerFormalArguments_32()
522 SDValue FIPtr = DAG.getFrameIndex(FI, PtrVT); in LowerFormalArguments_32()
524 DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr, MachinePointerInfo()); in LowerFormalArguments_32()
532 SDValue FIPtr = DAG.getFrameIndex(FI, PtrVT); in LowerFormalArguments_32()
534 DAG.getLoad(MVT::i32, dl, Chain, FIPtr, MachinePointerInfo()); in LowerFormalArguments_32()
538 SDValue FIPtr2 = DAG.getFrameIndex(FI2, PtrVT); in LowerFormalArguments_32()
541 DAG.getLoad(MVT::i32, dl, Chain, FIPtr2, MachinePointerInfo()); in LowerFormalArguments_32()
547 DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, LoVal, HiVal); in LowerFormalArguments_32()
548 WholeValue = DAG.getNode(ISD::BITCAST, dl, VA.getValVT(), WholeValue); in LowerFormalArguments_32()
556 SDValue FIPtr = DAG.getFrameIndex(FI, PtrVT); in LowerFormalArguments_32()
559 Load = DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr, MachinePointerInfo()); in LowerFormalArguments_32()
578 SDValue Copy = DAG.getCopyToReg(DAG.getEntryNode(), dl, Reg, InVals[0]); in LowerFormalArguments_32()
579 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Copy, Chain); in LowerFormalArguments_32()
605 SDValue Arg = DAG.getCopyFromReg(DAG.getRoot(), dl, VReg, MVT::i32); in LowerFormalArguments_32()
609 SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32); in LowerFormalArguments_32()
612 DAG.getStore(DAG.getRoot(), dl, Arg, FIPtr, MachinePointerInfo())); in LowerFormalArguments_32()
618 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains); in LowerFormalArguments_32()
629 SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const { in LowerFormalArguments_64() argument
630 MachineFunction &MF = DAG.getMachineFunction(); in LowerFormalArguments_64()
634 CCState CCInfo(CallConv, IsVarArg, DAG.getMachineFunction(), ArgLocs, in LowerFormalArguments_64()
635 *DAG.getContext()); in LowerFormalArguments_64()
649 SDValue Arg = DAG.getCopyFromReg(Chain, DL, VReg, VA.getLocVT()); in LowerFormalArguments_64()
653 Arg = DAG.getNode(ISD::SRL, DL, VA.getLocVT(), Arg, in LowerFormalArguments_64()
654 DAG.getConstant(32, DL, MVT::i32)); in LowerFormalArguments_64()
660 Arg = DAG.getNode(ISD::AssertSext, DL, VA.getLocVT(), Arg, in LowerFormalArguments_64()
661 DAG.getValueType(VA.getValVT())); in LowerFormalArguments_64()
664 Arg = DAG.getNode(ISD::AssertZext, DL, VA.getLocVT(), Arg, in LowerFormalArguments_64()
665 DAG.getValueType(VA.getValVT())); in LowerFormalArguments_64()
673 Arg = DAG.getNode(ISD::TRUNCATE, DL, VA.getValVT(), Arg); in LowerFormalArguments_64()
692 DAG.getLoad(VA.getValVT(), DL, Chain, in LowerFormalArguments_64()
693 DAG.getFrameIndex(FI, getPointerTy(MF.getDataLayout())), in LowerFormalArguments_64()
719 SDValue VArg = DAG.getCopyFromReg(Chain, DL, VReg, MVT::i64); in LowerFormalArguments_64()
723 DAG.getStore(Chain, DL, VArg, DAG.getFrameIndex(FI, PtrVT), in LowerFormalArguments_64()
728 Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, OutChains); in LowerFormalArguments_64()
765 static bool hasReturnsTwiceAttr(SelectionDAG &DAG, SDValue Callee, in hasReturnsTwiceAttr() argument
775 const Function &Fn = DAG.getMachineFunction().getFunction(); in hasReturnsTwiceAttr()
823 SelectionDAG &DAG = CLI.DAG; in LowerCall_32() local
833 MachineFunction &MF = DAG.getMachineFunction(); in LowerCall_32()
837 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(), ArgLocs, in LowerCall_32()
838 *DAG.getContext()); in LowerCall_32()
842 CCInfo, CLI, DAG.getMachineFunction()); in LowerCall_32()
850 MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo(); in LowerCall_32()
865 SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout())); in LowerCall_32()
866 SDValue SizeNode = DAG.getConstant(Size, dl, MVT::i32); in LowerCall_32()
868 Chain = DAG.getMemcpy(Chain, dl, FIPtr, Arg, SizeNode, Alignment, in LowerCall_32()
884 Chain = DAG.getCALLSEQ_START(Chain, ArgsSize, 0, dl); in LowerCall_32()
914 Arg = DAG.getNode(ISD::SIGN_EXTEND, dl, VA.getLocVT(), Arg); in LowerCall_32()
917 Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, VA.getLocVT(), Arg); in LowerCall_32()
920 Arg = DAG.getNode(ISD::ANY_EXTEND, dl, VA.getLocVT(), Arg); in LowerCall_32()
923 Arg = DAG.getNode(ISD::BITCAST, dl, VA.getLocVT(), Arg); in LowerCall_32()
934 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32); in LowerCall_32()
935 SDValue PtrOff = DAG.getIntPtrConstant(64, dl); in LowerCall_32()
936 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff); in LowerCall_32()
938 DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo())); in LowerCall_32()
943 DAG.getDataLayout().getTypeAllocSize(CLI.getArgs()[0].IndirectType); in LowerCall_32()
954 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32); in LowerCall_32()
955 SDValue PtrOff = DAG.getIntPtrConstant(Offset, dl); in LowerCall_32()
956 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff); in LowerCall_32()
958 DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo())); in LowerCall_32()
967 Arg = bitcastConstantFPToInt(C, dl, DAG); in LowerCall_32()
969 Arg = DAG.getNode(ISD::BITCAST, dl, MVT::v2i32, Arg); in LowerCall_32()
972 SDValue Part0 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i32, in LowerCall_32()
974 DAG.getConstant(0, dl, getVectorIdxTy(DAG.getDataLayout()))); in LowerCall_32()
975 SDValue Part1 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i32, in LowerCall_32()
977 DAG.getConstant(1, dl, getVectorIdxTy(DAG.getDataLayout()))); in LowerCall_32()
988 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32); in LowerCall_32()
989 SDValue PtrOff = DAG.getIntPtrConstant(Offset, dl); in LowerCall_32()
990 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff); in LowerCall_32()
992 DAG.getStore(Chain, dl, Part1, PtrOff, MachinePointerInfo())); in LowerCall_32()
997 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32); in LowerCall_32()
998 SDValue PtrOff = DAG.getIntPtrConstant(Offset, dl); in LowerCall_32()
999 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff); in LowerCall_32()
1001 DAG.getStore(Chain, dl, Part0, PtrOff, MachinePointerInfo())); in LowerCall_32()
1003 PtrOff = DAG.getIntPtrConstant(Offset + 4, dl); in LowerCall_32()
1004 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff); in LowerCall_32()
1006 DAG.getStore(Chain, dl, Part1, PtrOff, MachinePointerInfo())); in LowerCall_32()
1018 Arg = DAG.getNode(ISD::BITCAST, dl, MVT::i32, Arg); in LowerCall_32()
1026 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32); in LowerCall_32()
1027 SDValue PtrOff = DAG.getIntPtrConstant(VA.getLocMemOffset() + StackOffset, in LowerCall_32()
1029 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff); in LowerCall_32()
1031 DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo())); in LowerCall_32()
1037 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains); in LowerCall_32()
1048 Chain = DAG.getCopyToReg(Chain, dl, Reg, RegsToPass[i].second, InGlue); in LowerCall_32()
1052 bool hasReturnsTwice = hasReturnsTwiceAttr(DAG, Callee, CLI.CB); in LowerCall_32()
1060 Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl, MVT::i32, 0, TF); in LowerCall_32()
1062 Callee = DAG.getTargetExternalSymbol(E->getSymbol(), MVT::i32, TF); in LowerCall_32()
1065 SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Glue); in LowerCall_32()
1070 Ops.push_back(DAG.getTargetConstant(SRetArgSize, dl, MVT::i32)); in LowerCall_32()
1075 Ops.push_back(DAG.getRegister(Reg, RegsToPass[i].second.getValueType())); in LowerCall_32()
1083 : TRI->getCallPreservedMask(DAG.getMachineFunction(), CallConv)); in LowerCall_32()
1089 Ops.push_back(DAG.getRegisterMask(Mask)); in LowerCall_32()
1095 DAG.getMachineFunction().getFrameInfo().setHasTailCall(); in LowerCall_32()
1096 return DAG.getNode(SPISD::TAIL_CALL, dl, MVT::Other, Ops); in LowerCall_32()
1099 Chain = DAG.getNode(SPISD::CALL, dl, NodeTys, Ops); in LowerCall_32()
1102 Chain = DAG.getCALLSEQ_END(Chain, ArgsSize, 0, InGlue, dl); in LowerCall_32()
1107 CCState RVInfo(CallConv, isVarArg, DAG.getMachineFunction(), RVLocs, in LowerCall_32()
1108 *DAG.getContext()); in LowerCall_32()
1116 SDValue Vec = DAG.getNode(ISD::UNDEF, dl, MVT::v2i32); in LowerCall_32()
1117 SDValue Lo = DAG.getCopyFromReg( in LowerCall_32()
1121 Vec = DAG.getNode(ISD::INSERT_VECTOR_ELT, dl, MVT::v2i32, Vec, Lo, in LowerCall_32()
1122 DAG.getConstant(0, dl, MVT::i32)); in LowerCall_32()
1123 SDValue Hi = DAG.getCopyFromReg( in LowerCall_32()
1127 Vec = DAG.getNode(ISD::INSERT_VECTOR_ELT, dl, MVT::v2i32, Vec, Hi, in LowerCall_32()
1128 DAG.getConstant(1, dl, MVT::i32)); in LowerCall_32()
1132 DAG.getCopyFromReg(Chain, dl, toCallerWindow(RVLocs[i].getLocReg()), in LowerCall_32()
1224 SelectionDAG &DAG = CLI.DAG; in LowerCall_64() local
1227 auto PtrVT = getPointerTy(DAG.getDataLayout()); in LowerCall_64()
1228 MachineFunction &MF = DAG.getMachineFunction(); in LowerCall_64()
1232 CCState CCInfo(CLI.CallConv, CLI.IsVarArg, DAG.getMachineFunction(), ArgLocs, in LowerCall_64()
1233 *DAG.getContext()); in LowerCall_64()
1237 CCInfo, CLI, DAG.getMachineFunction()); in LowerCall_64()
1259 Chain = DAG.getCALLSEQ_START(Chain, ArgsSize, 0, DL); in LowerCall_64()
1282 Arg = DAG.getNode(ISD::SIGN_EXTEND, DL, VA.getLocVT(), Arg); in LowerCall_64()
1285 Arg = DAG.getNode(ISD::ZERO_EXTEND, DL, VA.getLocVT(), Arg); in LowerCall_64()
1288 Arg = DAG.getNode(ISD::ANY_EXTEND, DL, VA.getLocVT(), Arg); in LowerCall_64()
1295 Arg = DAG.getNode(ISD::BITCAST, DL, VA.getLocVT(), Arg); in LowerCall_64()
1305 SDValue StackPtr = DAG.getRegister(SP::O6, PtrVT); in LowerCall_64()
1306 SDValue HiPtrOff = DAG.getIntPtrConstant(StackOffset, DL); in LowerCall_64()
1307 HiPtrOff = DAG.getNode(ISD::ADD, DL, PtrVT, StackPtr, HiPtrOff); in LowerCall_64()
1308 SDValue LoPtrOff = DAG.getIntPtrConstant(StackOffset + 8, DL); in LowerCall_64()
1309 LoPtrOff = DAG.getNode(ISD::ADD, DL, PtrVT, StackPtr, LoPtrOff); in LowerCall_64()
1313 DAG.getStore(Chain, DL, Arg, HiPtrOff, MachinePointerInfo()); in LowerCall_64()
1316 DAG.getLoad(MVT::i64, DL, Store, HiPtrOff, MachinePointerInfo()); in LowerCall_64()
1318 DAG.getLoad(MVT::i64, DL, Store, LoPtrOff, MachinePointerInfo()); in LowerCall_64()
1335 Arg = DAG.getNode(ISD::SHL, DL, MVT::i64, Arg, in LowerCall_64()
1336 DAG.getConstant(32, DL, MVT::i32)); in LowerCall_64()
1342 SDValue NV = DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i64, in LowerCall_64()
1344 Arg = DAG.getNode(ISD::OR, DL, MVT::i64, Arg, NV); in LowerCall_64()
1360 SDValue StackPtr = DAG.getRegister(SP::O6, PtrVT); in LowerCall_64()
1363 SDValue PtrOff = DAG.getIntPtrConstant(VA.getLocMemOffset() + in LowerCall_64()
1366 PtrOff = DAG.getNode(ISD::ADD, DL, PtrVT, StackPtr, PtrOff); in LowerCall_64()
1368 DAG.getStore(Chain, DL, Arg, PtrOff, MachinePointerInfo())); in LowerCall_64()
1373 Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, MemOpChains); in LowerCall_64()
1381 Chain = DAG.getCopyToReg(Chain, DL, in LowerCall_64()
1390 bool hasReturnsTwice = hasReturnsTwiceAttr(DAG, Callee, CLI.CB); in LowerCall_64()
1394 Callee = DAG.getTargetGlobalAddress(G->getGlobal(), DL, PtrVT, 0, TF); in LowerCall_64()
1396 Callee = DAG.getTargetExternalSymbol(E->getSymbol(), PtrVT, TF); in LowerCall_64()
1403 Ops.push_back(DAG.getRegister(RegsToPass[i].first, in LowerCall_64()
1410 : TRI->getCallPreservedMask(DAG.getMachineFunction(), in LowerCall_64()
1417 Ops.push_back(DAG.getRegisterMask(Mask)); in LowerCall_64()
1426 DAG.getMachineFunction().getFrameInfo().setHasTailCall(); in LowerCall_64()
1427 return DAG.getNode(SPISD::TAIL_CALL, DL, MVT::Other, Ops); in LowerCall_64()
1429 SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Glue); in LowerCall_64()
1430 Chain = DAG.getNode(SPISD::CALL, DL, NodeTys, Ops); in LowerCall_64()
1434 Chain = DAG.getCALLSEQ_END(Chain, ArgsSize, 0, InGlue, DL); in LowerCall_64()
1442 CCState RVInfo(CLI.CallConv, CLI.IsVarArg, DAG.getMachineFunction(), RVLocs, in LowerCall_64()
1443 *DAG.getContext()); in LowerCall_64()
1468 RV = DAG.getCopyFromReg(Chain, DL, Reg, RVLocs[i].getLocVT(), InGlue); in LowerCall_64()
1475 RV = DAG.getNode(ISD::SRL, DL, VA.getLocVT(), RV, in LowerCall_64()
1476 DAG.getConstant(32, DL, MVT::i32)); in LowerCall_64()
1482 RV = DAG.getNode(ISD::AssertSext, DL, VA.getLocVT(), RV, in LowerCall_64()
1483 DAG.getValueType(VA.getValVT())); in LowerCall_64()
1486 RV = DAG.getNode(ISD::AssertZext, DL, VA.getLocVT(), RV, in LowerCall_64()
1487 DAG.getValueType(VA.getValVT())); in LowerCall_64()
1495 RV = DAG.getNode(ISD::TRUNCATE, DL, VA.getValVT(), RV); in LowerCall_64()
2056 const SelectionDAG &DAG, in computeKnownBitsForTargetNode() argument
2066 Known = DAG.computeKnownBits(Op.getOperand(1), Depth + 1); in computeKnownBitsForTargetNode()
2067 Known2 = DAG.computeKnownBits(Op.getOperand(0), Depth + 1); in computeKnownBitsForTargetNode()
2096 SelectionDAG &DAG) const { in withTargetFlags()
2098 return DAG.getTargetGlobalAddress(GA->getGlobal(), in withTargetFlags()
2104 return DAG.getTargetConstantPool(CP->getConstVal(), CP->getValueType(0), in withTargetFlags()
2108 return DAG.getTargetBlockAddress(BA->getBlockAddress(), in withTargetFlags()
2114 return DAG.getTargetExternalSymbol(ES->getSymbol(), in withTargetFlags()
2124 SelectionDAG &DAG) const { in makeHiLoPair()
2127 SDValue Hi = DAG.getNode(SPISD::Hi, DL, VT, withTargetFlags(Op, HiTF, DAG)); in makeHiLoPair()
2128 SDValue Lo = DAG.getNode(SPISD::Lo, DL, VT, withTargetFlags(Op, LoTF, DAG)); in makeHiLoPair()
2129 return DAG.getNode(ISD::ADD, DL, VT, Hi, Lo); in makeHiLoPair()
2134 SDValue SparcTargetLowering::makeAddress(SDValue Op, SelectionDAG &DAG) const { in makeAddress()
2136 EVT VT = getPointerTy(DAG.getDataLayout()); in makeAddress()
2140 const Module *M = DAG.getMachineFunction().getFunction().getParent(); in makeAddress()
2146 Idx = DAG.getNode(SPISD::Lo, DL, Op.getValueType(), in makeAddress()
2147 withTargetFlags(Op, SparcMCExpr::VK_Sparc_GOT13, DAG)); in makeAddress()
2151 SparcMCExpr::VK_Sparc_GOT10, DAG); in makeAddress()
2154 SDValue GlobalBase = DAG.getNode(SPISD::GLOBAL_BASE_REG, DL, VT); in makeAddress()
2155 SDValue AbsAddr = DAG.getNode(ISD::ADD, DL, VT, GlobalBase, Idx); in makeAddress()
2158 MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo(); in makeAddress()
2160 return DAG.getLoad(VT, DL, DAG.getEntryNode(), AbsAddr, in makeAddress()
2161 MachinePointerInfo::getGOT(DAG.getMachineFunction())); in makeAddress()
2171 SparcMCExpr::VK_Sparc_LO, DAG); in makeAddress()
2175 SparcMCExpr::VK_Sparc_M44, DAG); in makeAddress()
2176 H44 = DAG.getNode(ISD::SHL, DL, VT, H44, DAG.getConstant(12, DL, MVT::i32)); in makeAddress()
2177 SDValue L44 = withTargetFlags(Op, SparcMCExpr::VK_Sparc_L44, DAG); in makeAddress()
2178 L44 = DAG.getNode(SPISD::Lo, DL, VT, L44); in makeAddress()
2179 return DAG.getNode(ISD::ADD, DL, VT, H44, L44); in makeAddress()
2184 SparcMCExpr::VK_Sparc_HM, DAG); in makeAddress()
2185 Hi = DAG.getNode(ISD::SHL, DL, VT, Hi, DAG.getConstant(32, DL, MVT::i32)); in makeAddress()
2187 SparcMCExpr::VK_Sparc_LO, DAG); in makeAddress()
2188 return DAG.getNode(ISD::ADD, DL, VT, Hi, Lo); in makeAddress()
2194 SelectionDAG &DAG) const { in LowerGlobalAddress()
2195 return makeAddress(Op, DAG); in LowerGlobalAddress()
2199 SelectionDAG &DAG) const { in LowerConstantPool()
2200 return makeAddress(Op, DAG); in LowerConstantPool()
2204 SelectionDAG &DAG) const { in LowerBlockAddress()
2205 return makeAddress(Op, DAG); in LowerBlockAddress()
2209 SelectionDAG &DAG) const { in LowerGlobalTLSAddress()
2212 if (DAG.getTarget().useEmulatedTLS()) in LowerGlobalTLSAddress()
2213 return LowerToTLSEmulatedModel(GA, DAG); in LowerGlobalTLSAddress()
2217 EVT PtrVT = getPointerTy(DAG.getDataLayout()); in LowerGlobalTLSAddress()
2235 SDValue HiLo = makeHiLoPair(Op, HiTF, LoTF, DAG); in LowerGlobalTLSAddress()
2236 SDValue Base = DAG.getNode(SPISD::GLOBAL_BASE_REG, DL, PtrVT); in LowerGlobalTLSAddress()
2237 SDValue Argument = DAG.getNode(SPISD::TLS_ADD, DL, PtrVT, Base, HiLo, in LowerGlobalTLSAddress()
2238 withTargetFlags(Op, addTF, DAG)); in LowerGlobalTLSAddress()
2240 SDValue Chain = DAG.getEntryNode(); in LowerGlobalTLSAddress()
2243 Chain = DAG.getCALLSEQ_START(Chain, 1, 0, DL); in LowerGlobalTLSAddress()
2244 Chain = DAG.getCopyToReg(Chain, DL, SP::O0, Argument, InGlue); in LowerGlobalTLSAddress()
2246 SDValue Callee = DAG.getTargetExternalSymbol("__tls_get_addr", PtrVT); in LowerGlobalTLSAddress()
2247 SDValue Symbol = withTargetFlags(Op, callTF, DAG); in LowerGlobalTLSAddress()
2249 SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Glue); in LowerGlobalTLSAddress()
2251 DAG.getMachineFunction(), CallingConv::C); in LowerGlobalTLSAddress()
2256 DAG.getRegister(SP::O0, PtrVT), in LowerGlobalTLSAddress()
2257 DAG.getRegisterMask(Mask), in LowerGlobalTLSAddress()
2259 Chain = DAG.getNode(SPISD::TLS_CALL, DL, NodeTys, Ops); in LowerGlobalTLSAddress()
2261 Chain = DAG.getCALLSEQ_END(Chain, 1, 0, InGlue, DL); in LowerGlobalTLSAddress()
2263 SDValue Ret = DAG.getCopyFromReg(Chain, DL, SP::O0, PtrVT, InGlue); in LowerGlobalTLSAddress()
2268 SDValue Hi = DAG.getNode(SPISD::Hi, DL, PtrVT, in LowerGlobalTLSAddress()
2269 withTargetFlags(Op, SparcMCExpr::VK_Sparc_TLS_LDO_HIX22, DAG)); in LowerGlobalTLSAddress()
2270 SDValue Lo = DAG.getNode(SPISD::Lo, DL, PtrVT, in LowerGlobalTLSAddress()
2271 withTargetFlags(Op, SparcMCExpr::VK_Sparc_TLS_LDO_LOX10, DAG)); in LowerGlobalTLSAddress()
2272 HiLo = DAG.getNode(ISD::XOR, DL, PtrVT, Hi, Lo); in LowerGlobalTLSAddress()
2273 return DAG.getNode(SPISD::TLS_ADD, DL, PtrVT, Ret, HiLo, in LowerGlobalTLSAddress()
2274 withTargetFlags(Op, SparcMCExpr::VK_Sparc_TLS_LDO_ADD, DAG)); in LowerGlobalTLSAddress()
2281 SDValue Base = DAG.getNode(SPISD::GLOBAL_BASE_REG, DL, PtrVT); in LowerGlobalTLSAddress()
2285 MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo(); in LowerGlobalTLSAddress()
2290 SparcMCExpr::VK_Sparc_TLS_IE_LO10, DAG); in LowerGlobalTLSAddress()
2291 SDValue Ptr = DAG.getNode(ISD::ADD, DL, PtrVT, Base, TGA); in LowerGlobalTLSAddress()
2292 SDValue Offset = DAG.getNode(SPISD::TLS_LD, in LowerGlobalTLSAddress()
2294 withTargetFlags(Op, ldTF, DAG)); in LowerGlobalTLSAddress()
2295 return DAG.getNode(SPISD::TLS_ADD, DL, PtrVT, in LowerGlobalTLSAddress()
2296 DAG.getRegister(SP::G7, PtrVT), Offset, in LowerGlobalTLSAddress()
2298 SparcMCExpr::VK_Sparc_TLS_IE_ADD, DAG)); in LowerGlobalTLSAddress()
2302 SDValue Hi = DAG.getNode(SPISD::Hi, DL, PtrVT, in LowerGlobalTLSAddress()
2303 withTargetFlags(Op, SparcMCExpr::VK_Sparc_TLS_LE_HIX22, DAG)); in LowerGlobalTLSAddress()
2304 SDValue Lo = DAG.getNode(SPISD::Lo, DL, PtrVT, in LowerGlobalTLSAddress()
2305 withTargetFlags(Op, SparcMCExpr::VK_Sparc_TLS_LE_LOX10, DAG)); in LowerGlobalTLSAddress()
2306 SDValue Offset = DAG.getNode(ISD::XOR, DL, PtrVT, Hi, Lo); in LowerGlobalTLSAddress()
2308 return DAG.getNode(ISD::ADD, DL, PtrVT, in LowerGlobalTLSAddress()
2309 DAG.getRegister(SP::G7, PtrVT), Offset); in LowerGlobalTLSAddress()
2315 SelectionDAG &DAG) const { in LowerF128_LibCallArg()
2316 MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo(); in LowerF128_LibCallArg()
2318 Type *ArgTy = ArgVT.getTypeForEVT(*DAG.getContext()); in LowerF128_LibCallArg()
2327 SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout())); in LowerF128_LibCallArg()
2328 Chain = DAG.getStore(Chain, DL, Entry.Node, FIPtr, MachinePointerInfo(), in LowerF128_LibCallArg()
2339 SparcTargetLowering::LowerF128Op(SDValue Op, SelectionDAG &DAG, in LowerF128Op() argument
2345 MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo(); in LowerF128Op()
2346 auto PtrVT = getPointerTy(DAG.getDataLayout()); in LowerF128Op()
2348 SDValue Callee = DAG.getExternalSymbol(LibFuncName, PtrVT); in LowerF128Op()
2349 Type *RetTy = Op.getValueType().getTypeForEVT(*DAG.getContext()); in LowerF128Op()
2351 SDValue Chain = DAG.getEntryNode(); in LowerF128Op()
2358 RetPtr = DAG.getFrameIndex(RetFI, PtrVT); in LowerF128Op()
2367 RetTyABI = Type::getVoidTy(*DAG.getContext()); in LowerF128Op()
2372 Chain = LowerF128_LibCallArg(Chain, Args, Op.getOperand(i), SDLoc(Op), DAG); in LowerF128Op()
2374 TargetLowering::CallLoweringInfo CLI(DAG); in LowerF128Op()
2389 return DAG.getLoad(Op.getValueType(), SDLoc(Op), Chain, RetPtr, in LowerF128Op()
2395 SelectionDAG &DAG) const { in LowerF128Compare()
2417 auto PtrVT = getPointerTy(DAG.getDataLayout()); in LowerF128Compare()
2418 SDValue Callee = DAG.getExternalSymbol(LibCall, PtrVT); in LowerF128Compare()
2419 Type *RetTy = Type::getInt32Ty(*DAG.getContext()); in LowerF128Compare()
2421 SDValue Chain = DAG.getEntryNode(); in LowerF128Compare()
2422 Chain = LowerF128_LibCallArg(Chain, Args, LHS, DL, DAG); in LowerF128Compare()
2423 Chain = LowerF128_LibCallArg(Chain, Args, RHS, DL, DAG); in LowerF128Compare()
2425 TargetLowering::CallLoweringInfo CLI(DAG); in LowerF128Compare()
2436 SDValue RHS = DAG.getConstant(0, DL, Result.getValueType()); in LowerF128Compare()
2438 return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS); in LowerF128Compare()
2441 SDValue Mask = DAG.getConstant(1, DL, Result.getValueType()); in LowerF128Compare()
2442 Result = DAG.getNode(ISD::AND, DL, Result.getValueType(), Result, Mask); in LowerF128Compare()
2443 SDValue RHS = DAG.getConstant(0, DL, Result.getValueType()); in LowerF128Compare()
2445 return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS); in LowerF128Compare()
2448 SDValue RHS = DAG.getConstant(2, DL, Result.getValueType()); in LowerF128Compare()
2450 return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS); in LowerF128Compare()
2453 SDValue RHS = DAG.getConstant(1, DL, Result.getValueType()); in LowerF128Compare()
2455 return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS); in LowerF128Compare()
2458 SDValue RHS = DAG.getConstant(1, DL, Result.getValueType()); in LowerF128Compare()
2460 return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS); in LowerF128Compare()
2464 SDValue RHS = DAG.getConstant(3, DL, Result.getValueType()); in LowerF128Compare()
2466 return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS); in LowerF128Compare()
2469 SDValue RHS = DAG.getConstant(3, DL, Result.getValueType()); in LowerF128Compare()
2471 return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS); in LowerF128Compare()
2474 SDValue Mask = DAG.getConstant(3, DL, Result.getValueType()); in LowerF128Compare()
2475 Result = DAG.getNode(ISD::AND, DL, Result.getValueType(), Result, Mask); in LowerF128Compare()
2476 SDValue RHS = DAG.getConstant(0, DL, Result.getValueType()); in LowerF128Compare()
2478 return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS); in LowerF128Compare()
2481 SDValue Mask = DAG.getConstant(3, DL, Result.getValueType()); in LowerF128Compare()
2482 Result = DAG.getNode(ISD::AND, DL, Result.getValueType(), Result, Mask); in LowerF128Compare()
2483 SDValue RHS = DAG.getConstant(0, DL, Result.getValueType()); in LowerF128Compare()
2485 return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS); in LowerF128Compare()
2491 LowerF128_FPEXTEND(SDValue Op, SelectionDAG &DAG, in LowerF128_FPEXTEND() argument
2495 return TLI.LowerF128Op(Op, DAG, in LowerF128_FPEXTEND()
2499 return TLI.LowerF128Op(Op, DAG, in LowerF128_FPEXTEND()
2507 LowerF128_FPROUND(SDValue Op, SelectionDAG &DAG, in LowerF128_FPROUND() argument
2514 return TLI.LowerF128Op(Op, DAG, in LowerF128_FPROUND()
2517 return TLI.LowerF128Op(Op, DAG, in LowerF128_FPROUND()
2524 static SDValue LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG, in LowerFP_TO_SINT() argument
2537 return TLI.LowerF128Op(Op, DAG, libName, 1); in LowerFP_TO_SINT()
2546 Op = DAG.getNode(SPISD::FTOI, dl, MVT::f32, Op.getOperand(0)); in LowerFP_TO_SINT()
2548 Op = DAG.getNode(SPISD::FTOX, dl, MVT::f64, Op.getOperand(0)); in LowerFP_TO_SINT()
2550 return DAG.getNode(ISD::BITCAST, dl, VT, Op); in LowerFP_TO_SINT()
2553 static SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG, in LowerSINT_TO_FP() argument
2568 return TLI.LowerF128Op(Op, DAG, libName, 1); in LowerSINT_TO_FP()
2576 SDValue Tmp = DAG.getNode(ISD::BITCAST, dl, floatVT, Op.getOperand(0)); in LowerSINT_TO_FP()
2578 return DAG.getNode(opcode, dl, Op.getValueType(), Tmp); in LowerSINT_TO_FP()
2581 static SDValue LowerFP_TO_UINT(SDValue Op, SelectionDAG &DAG, in LowerFP_TO_UINT() argument
2595 return TLI.LowerF128Op(Op, DAG, in LowerFP_TO_UINT()
2602 static SDValue LowerUINT_TO_FP(SDValue Op, SelectionDAG &DAG, in LowerUINT_TO_FP() argument
2614 return TLI.LowerF128Op(Op, DAG, in LowerUINT_TO_FP()
2621 static SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG, in LowerBR_CC() argument
2644 return DAG.getNode(SPISD::BR_REG, dl, MVT::Other, Chain, Dest, in LowerBR_CC()
2645 DAG.getConstant(intCondCCodeToRcond(CC), dl, MVT::i32), in LowerBR_CC()
2648 CompareFlag = DAG.getNode(SPISD::CMPICC, dl, MVT::Glue, LHS, RHS); in LowerBR_CC()
2659 CompareFlag = TLI.LowerF128Compare(LHS, RHS, SPCC, dl, DAG); in LowerBR_CC()
2663 CompareFlag = DAG.getNode(CmpOpc, dl, MVT::Glue, LHS, RHS); in LowerBR_CC()
2668 return DAG.getNode(Opc, dl, MVT::Other, Chain, Dest, in LowerBR_CC()
2669 DAG.getConstant(SPCC, dl, MVT::i32), CompareFlag); in LowerBR_CC()
2672 static SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG, in LowerSELECT_CC() argument
2702 return DAG.getNode( in LowerSELECT_CC()
2704 DAG.getConstant(intCondCCodeToRcond(CC), dl, MVT::i32), LHS); in LowerSELECT_CC()
2706 CompareFlag = DAG.getNode(SPISD::CMPICC, dl, MVT::Glue, LHS, RHS); in LowerSELECT_CC()
2713 CompareFlag = TLI.LowerF128Compare(LHS, RHS, SPCC, dl, DAG); in LowerSELECT_CC()
2717 CompareFlag = DAG.getNode(CmpOpc, dl, MVT::Glue, LHS, RHS); in LowerSELECT_CC()
2722 return DAG.getNode(Opc, dl, TrueVal.getValueType(), TrueVal, FalseVal, in LowerSELECT_CC()
2723 DAG.getConstant(SPCC, dl, MVT::i32), CompareFlag); in LowerSELECT_CC()
2726 static SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG, in LowerVASTART() argument
2728 MachineFunction &MF = DAG.getMachineFunction(); in LowerVASTART()
2730 auto PtrVT = TLI.getPointerTy(DAG.getDataLayout()); in LowerVASTART()
2739 DAG.getNode(ISD::ADD, DL, PtrVT, DAG.getRegister(SP::I6, PtrVT), in LowerVASTART()
2740 DAG.getIntPtrConstant(FuncInfo->getVarArgsFrameOffset(), DL)); in LowerVASTART()
2742 return DAG.getStore(Op.getOperand(0), DL, Offset, Op.getOperand(1), in LowerVASTART()
2746 static SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) { in LowerVAARG() argument
2755 DAG.getLoad(PtrVT, DL, InChain, VAListPtr, MachinePointerInfo(SV)); in LowerVAARG()
2757 SDValue NextPtr = DAG.getNode(ISD::ADD, DL, PtrVT, VAList, in LowerVAARG()
2758 DAG.getIntPtrConstant(VT.getSizeInBits()/8, in LowerVAARG()
2761 InChain = DAG.getStore(VAList.getValue(1), DL, NextPtr, VAListPtr, in LowerVAARG()
2765 return DAG.getLoad( in LowerVAARG()
2770 static SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG, in LowerDYNAMIC_STACKALLOC() argument
2784 const MachineFunction &MF = DAG.getMachineFunction(); in LowerDYNAMIC_STACKALLOC()
2816 Size = DAG.getNode(ISD::ADD, dl, VT, Size, in LowerDYNAMIC_STACKALLOC()
2817 DAG.getConstant(8, dl, VT)); in LowerDYNAMIC_STACKALLOC()
2822 SDValue SP = DAG.getCopyFromReg(Chain, dl, SPReg, VT); in LowerDYNAMIC_STACKALLOC()
2823 SDValue NewSP = DAG.getNode(ISD::SUB, dl, VT, SP, Size); // Value in LowerDYNAMIC_STACKALLOC()
2824 Chain = DAG.getCopyToReg(SP.getValue(1), dl, SPReg, NewSP); // Output chain in LowerDYNAMIC_STACKALLOC()
2828 SDValue NewVal = DAG.getNode(ISD::ADD, dl, VT, NewSP, in LowerDYNAMIC_STACKALLOC()
2829 DAG.getConstant(regSpillArea, dl, VT)); in LowerDYNAMIC_STACKALLOC()
2831 return DAG.getMergeValues(Ops, dl); in LowerDYNAMIC_STACKALLOC()
2835 static SDValue getFLUSHW(SDValue Op, SelectionDAG &DAG) { in getFLUSHW() argument
2837 SDValue Chain = DAG.getNode(SPISD::FLUSHW, in getFLUSHW()
2838 dl, MVT::Other, DAG.getEntryNode()); in getFLUSHW()
2842 static SDValue getFRAMEADDR(uint64_t depth, SDValue Op, SelectionDAG &DAG, in getFRAMEADDR() argument
2845 MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo(); in getFRAMEADDR()
2857 Chain = (depth || AlwaysFlush) ? getFLUSHW(Op, DAG) : DAG.getEntryNode(); in getFRAMEADDR()
2859 FrameAddr = DAG.getCopyFromReg(Chain, dl, FrameReg, VT); in getFRAMEADDR()
2864 SDValue Ptr = DAG.getNode(ISD::ADD, dl, VT, FrameAddr, in getFRAMEADDR()
2865 DAG.getIntPtrConstant(Offset, dl)); in getFRAMEADDR()
2866 FrameAddr = DAG.getLoad(VT, dl, Chain, Ptr, MachinePointerInfo()); in getFRAMEADDR()
2869 FrameAddr = DAG.getNode(ISD::ADD, dl, VT, FrameAddr, in getFRAMEADDR()
2870 DAG.getIntPtrConstant(stackBias, dl)); in getFRAMEADDR()
2875 static SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG, in LowerFRAMEADDR() argument
2880 return getFRAMEADDR(depth, Op, DAG, Subtarget); in LowerFRAMEADDR()
2884 static SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG, in LowerRETURNADDR() argument
2887 MachineFunction &MF = DAG.getMachineFunction(); in LowerRETURNADDR()
2891 if (TLI.verifyReturnAddressArgumentIsConstant(Op, DAG)) in LowerRETURNADDR()
2900 auto PtrVT = TLI.getPointerTy(DAG.getDataLayout()); in LowerRETURNADDR()
2902 RetAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl, RetReg, VT); in LowerRETURNADDR()
2907 SDValue FrameAddr = getFRAMEADDR(depth - 1, Op, DAG, Subtarget, true); in LowerRETURNADDR()
2910 SDValue Ptr = DAG.getNode(ISD::ADD, in LowerRETURNADDR()
2913 DAG.getIntPtrConstant(Offset, dl)); in LowerRETURNADDR()
2914 RetAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), Ptr, MachinePointerInfo()); in LowerRETURNADDR()
2919 static SDValue LowerF64Op(SDValue SrcReg64, const SDLoc &dl, SelectionDAG &DAG, in LowerF64Op() argument
2933 SDValue Hi32 = DAG.getTargetExtractSubreg(SP::sub_even, dl, MVT::f32, in LowerF64Op()
2935 SDValue Lo32 = DAG.getTargetExtractSubreg(SP::sub_odd, dl, MVT::f32, in LowerF64Op()
2938 if (DAG.getDataLayout().isLittleEndian()) in LowerF64Op()
2939 Lo32 = DAG.getNode(opcode, dl, MVT::f32, Lo32); in LowerF64Op()
2941 Hi32 = DAG.getNode(opcode, dl, MVT::f32, Hi32); in LowerF64Op()
2943 SDValue DstReg64 = SDValue(DAG.getMachineNode(TargetOpcode::IMPLICIT_DEF, in LowerF64Op()
2945 DstReg64 = DAG.getTargetInsertSubreg(SP::sub_even, dl, MVT::f64, in LowerF64Op()
2947 DstReg64 = DAG.getTargetInsertSubreg(SP::sub_odd, dl, MVT::f64, in LowerF64Op()
2953 static SDValue LowerF128Load(SDValue Op, SelectionDAG &DAG) in LowerF128Load() argument
2962 DAG.getLoad(MVT::f64, dl, LdNode->getChain(), LdNode->getBasePtr(), in LowerF128Load()
2965 SDValue LoPtr = DAG.getNode(ISD::ADD, dl, addrVT, in LowerF128Load()
2967 DAG.getConstant(8, dl, addrVT)); in LowerF128Load()
2968 SDValue Lo64 = DAG.getLoad(MVT::f64, dl, LdNode->getChain(), LoPtr, in LowerF128Load()
2972 SDValue SubRegEven = DAG.getTargetConstant(SP::sub_even64, dl, MVT::i32); in LowerF128Load()
2973 SDValue SubRegOdd = DAG.getTargetConstant(SP::sub_odd64, dl, MVT::i32); in LowerF128Load()
2975 SDNode *InFP128 = DAG.getMachineNode(TargetOpcode::IMPLICIT_DEF, in LowerF128Load()
2977 InFP128 = DAG.getMachineNode(TargetOpcode::INSERT_SUBREG, dl, in LowerF128Load()
2982 InFP128 = DAG.getMachineNode(TargetOpcode::INSERT_SUBREG, dl, in LowerF128Load()
2989 SDValue OutChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains); in LowerF128Load()
2991 return DAG.getMergeValues(Ops, dl); in LowerF128Load()
2994 static SDValue LowerLOAD(SDValue Op, SelectionDAG &DAG) in LowerLOAD() argument
3000 return LowerF128Load(Op, DAG); in LowerLOAD()
3006 static SDValue LowerF128Store(SDValue Op, SelectionDAG &DAG) { in LowerF128Store() argument
3011 SDValue SubRegEven = DAG.getTargetConstant(SP::sub_even64, dl, MVT::i32); in LowerF128Store()
3012 SDValue SubRegOdd = DAG.getTargetConstant(SP::sub_odd64, dl, MVT::i32); in LowerF128Store()
3014 SDNode *Hi64 = DAG.getMachineNode(TargetOpcode::EXTRACT_SUBREG, in LowerF128Store()
3019 SDNode *Lo64 = DAG.getMachineNode(TargetOpcode::EXTRACT_SUBREG, in LowerF128Store()
3029 DAG.getStore(StNode->getChain(), dl, SDValue(Hi64, 0), in LowerF128Store()
3033 SDValue LoPtr = DAG.getNode(ISD::ADD, dl, addrVT, in LowerF128Store()
3035 DAG.getConstant(8, dl, addrVT)); in LowerF128Store()
3036 OutChains[1] = DAG.getStore(StNode->getChain(), dl, SDValue(Lo64, 0), LoPtr, in LowerF128Store()
3039 return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains); in LowerF128Store()
3042 static SDValue LowerSTORE(SDValue Op, SelectionDAG &DAG) in LowerSTORE() argument
3049 return LowerF128Store(Op, DAG); in LowerSTORE()
3054 SDValue Val = DAG.getNode(ISD::BITCAST, dl, MVT::v2i32, St->getValue()); in LowerSTORE()
3055 SDValue Chain = DAG.getStore( in LowerSTORE()
3065 static SDValue LowerFNEGorFABS(SDValue Op, SelectionDAG &DAG, bool isV9) { in LowerFNEGorFABS() argument
3072 return LowerF64Op(Op.getOperand(0), dl, DAG, Op.getOpcode()); in LowerFNEGorFABS()
3082 SDValue Hi64 = DAG.getTargetExtractSubreg(SP::sub_even64, dl, MVT::f64, in LowerFNEGorFABS()
3084 SDValue Lo64 = DAG.getTargetExtractSubreg(SP::sub_odd64, dl, MVT::f64, in LowerFNEGorFABS()
3087 if (DAG.getDataLayout().isLittleEndian()) { in LowerFNEGorFABS()
3089 Lo64 = DAG.getNode(Op.getOpcode(), dl, MVT::f64, Lo64); in LowerFNEGorFABS()
3091 Lo64 = LowerF64Op(Lo64, dl, DAG, Op.getOpcode()); in LowerFNEGorFABS()
3094 Hi64 = DAG.getNode(Op.getOpcode(), dl, MVT::f64, Hi64); in LowerFNEGorFABS()
3096 Hi64 = LowerF64Op(Hi64, dl, DAG, Op.getOpcode()); in LowerFNEGorFABS()
3099 SDValue DstReg128 = SDValue(DAG.getMachineNode(TargetOpcode::IMPLICIT_DEF, in LowerFNEGorFABS()
3101 DstReg128 = DAG.getTargetInsertSubreg(SP::sub_even64, dl, MVT::f128, in LowerFNEGorFABS()
3103 DstReg128 = DAG.getTargetInsertSubreg(SP::sub_odd64, dl, MVT::f128, in LowerFNEGorFABS()
3108 static SDValue LowerADDC_ADDE_SUBC_SUBE(SDValue Op, SelectionDAG &DAG) { in LowerADDC_ADDE_SUBC_SUBE() argument
3115 SDValue Src1Lo = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src1); in LowerADDC_ADDE_SUBC_SUBE()
3116 SDValue Src1Hi = DAG.getNode(ISD::SRL, dl, MVT::i64, Src1, in LowerADDC_ADDE_SUBC_SUBE()
3117 DAG.getConstant(32, dl, MVT::i64)); in LowerADDC_ADDE_SUBC_SUBE()
3118 Src1Hi = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src1Hi); in LowerADDC_ADDE_SUBC_SUBE()
3121 SDValue Src2Lo = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src2); in LowerADDC_ADDE_SUBC_SUBE()
3122 SDValue Src2Hi = DAG.getNode(ISD::SRL, dl, MVT::i64, Src2, in LowerADDC_ADDE_SUBC_SUBE()
3123 DAG.getConstant(32, dl, MVT::i64)); in LowerADDC_ADDE_SUBC_SUBE()
3124 Src2Hi = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src2Hi); in LowerADDC_ADDE_SUBC_SUBE()
3137 SDVTList VTs = DAG.getVTList(MVT::i32, MVT::Glue); in LowerADDC_ADDE_SUBC_SUBE()
3139 Lo = DAG.getNode(Op.getOpcode(), dl, VTs, Src1Lo, Src2Lo, in LowerADDC_ADDE_SUBC_SUBE()
3142 Lo = DAG.getNode(Op.getOpcode(), dl, VTs, Src1Lo, Src2Lo); in LowerADDC_ADDE_SUBC_SUBE()
3144 SDValue Hi = DAG.getNode(hiOpc, dl, VTs, Src1Hi, Src2Hi, Lo.getValue(1)); in LowerADDC_ADDE_SUBC_SUBE()
3147 Lo = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i64, Lo); in LowerADDC_ADDE_SUBC_SUBE()
3148 Hi = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i64, Hi); in LowerADDC_ADDE_SUBC_SUBE()
3149 Hi = DAG.getNode(ISD::SHL, dl, MVT::i64, Hi, in LowerADDC_ADDE_SUBC_SUBE()
3150 DAG.getConstant(32, dl, MVT::i64)); in LowerADDC_ADDE_SUBC_SUBE()
3152 SDValue Dst = DAG.getNode(ISD::OR, dl, MVT::i64, Hi, Lo); in LowerADDC_ADDE_SUBC_SUBE()
3154 return DAG.getMergeValues(Ops, dl); in LowerADDC_ADDE_SUBC_SUBE()
3159 static SDValue LowerUMULO_SMULO(SDValue Op, SelectionDAG &DAG, in LowerUMULO_SMULO() argument
3174 SDValue ShiftAmt = DAG.getConstant(63, dl, VT); in LowerUMULO_SMULO()
3179 HiLHS = DAG.getNode(ISD::SRA, dl, VT, LHS, ShiftAmt); in LowerUMULO_SMULO()
3180 HiRHS = DAG.getNode(ISD::SRA, dl, MVT::i64, RHS, ShiftAmt); in LowerUMULO_SMULO()
3182 HiLHS = DAG.getConstant(0, dl, VT); in LowerUMULO_SMULO()
3183 HiRHS = DAG.getConstant(0, dl, MVT::i64); in LowerUMULO_SMULO()
3190 SDValue MulResult = TLI.makeLibCall(DAG, in LowerUMULO_SMULO()
3194 std::tie(BottomHalf, TopHalf) = DAG.SplitScalar(MulResult, dl, VT, VT); in LowerUMULO_SMULO()
3196 SDValue Tmp1 = DAG.getNode(ISD::SRA, dl, VT, BottomHalf, ShiftAmt); in LowerUMULO_SMULO()
3197 TopHalf = DAG.getSetCC(dl, MVT::i32, TopHalf, Tmp1, ISD::SETNE); in LowerUMULO_SMULO()
3199 TopHalf = DAG.getSetCC(dl, MVT::i32, TopHalf, DAG.getConstant(0, dl, VT), in LowerUMULO_SMULO()
3209 return DAG.getMergeValues(Ops, dl); in LowerUMULO_SMULO()
3212 static SDValue LowerATOMIC_LOAD_STORE(SDValue Op, SelectionDAG &DAG) { in LowerATOMIC_LOAD_STORE() argument
3223 SelectionDAG &DAG) const { in LowerINTRINSIC_WO_CHAIN()
3229 EVT PtrVT = getPointerTy(DAG.getDataLayout()); in LowerINTRINSIC_WO_CHAIN()
3230 return DAG.getRegister(SP::G7, PtrVT); in LowerINTRINSIC_WO_CHAIN()
3236 LowerOperation(SDValue Op, SelectionDAG &DAG) const { in LowerOperation()
3245 case ISD::RETURNADDR: return LowerRETURNADDR(Op, DAG, *this, in LowerOperation()
3247 case ISD::FRAMEADDR: return LowerFRAMEADDR(Op, DAG, in LowerOperation()
3249 case ISD::GlobalTLSAddress: return LowerGlobalTLSAddress(Op, DAG); in LowerOperation()
3250 case ISD::GlobalAddress: return LowerGlobalAddress(Op, DAG); in LowerOperation()
3251 case ISD::BlockAddress: return LowerBlockAddress(Op, DAG); in LowerOperation()
3252 case ISD::ConstantPool: return LowerConstantPool(Op, DAG); in LowerOperation()
3253 case ISD::FP_TO_SINT: return LowerFP_TO_SINT(Op, DAG, *this, in LowerOperation()
3255 case ISD::SINT_TO_FP: return LowerSINT_TO_FP(Op, DAG, *this, in LowerOperation()
3257 case ISD::FP_TO_UINT: return LowerFP_TO_UINT(Op, DAG, *this, in LowerOperation()
3259 case ISD::UINT_TO_FP: return LowerUINT_TO_FP(Op, DAG, *this, in LowerOperation()
3262 return LowerBR_CC(Op, DAG, *this, hasHardQuad, isV9, is64Bit); in LowerOperation()
3264 return LowerSELECT_CC(Op, DAG, *this, hasHardQuad, isV9, is64Bit); in LowerOperation()
3265 case ISD::VASTART: return LowerVASTART(Op, DAG, *this); in LowerOperation()
3266 case ISD::VAARG: return LowerVAARG(Op, DAG); in LowerOperation()
3267 case ISD::DYNAMIC_STACKALLOC: return LowerDYNAMIC_STACKALLOC(Op, DAG, in LowerOperation()
3270 case ISD::LOAD: return LowerLOAD(Op, DAG); in LowerOperation()
3271 case ISD::STORE: return LowerSTORE(Op, DAG); in LowerOperation()
3272 case ISD::FADD: return LowerF128Op(Op, DAG, in LowerOperation()
3274 case ISD::FSUB: return LowerF128Op(Op, DAG, in LowerOperation()
3276 case ISD::FMUL: return LowerF128Op(Op, DAG, in LowerOperation()
3278 case ISD::FDIV: return LowerF128Op(Op, DAG, in LowerOperation()
3280 case ISD::FSQRT: return LowerF128Op(Op, DAG, in LowerOperation()
3283 case ISD::FNEG: return LowerFNEGorFABS(Op, DAG, isV9); in LowerOperation()
3284 case ISD::FP_EXTEND: return LowerF128_FPEXTEND(Op, DAG, *this); in LowerOperation()
3285 case ISD::FP_ROUND: return LowerF128_FPROUND(Op, DAG, *this); in LowerOperation()
3289 case ISD::SUBE: return LowerADDC_ADDE_SUBC_SUBE(Op, DAG); in LowerOperation()
3291 case ISD::SMULO: return LowerUMULO_SMULO(Op, DAG, *this); in LowerOperation()
3293 case ISD::ATOMIC_STORE: return LowerATOMIC_LOAD_STORE(Op, DAG); in LowerOperation()
3294 case ISD::INTRINSIC_WO_CHAIN: return LowerINTRINSIC_WO_CHAIN(Op, DAG); in LowerOperation()
3300 SelectionDAG &DAG) const { in bitcastConstantFPToInt()
3302 SDValue Lo = DAG.getConstant(V.zextOrTrunc(32), DL, MVT::i32); in bitcastConstantFPToInt()
3303 SDValue Hi = DAG.getConstant(V.lshr(32).zextOrTrunc(32), DL, MVT::i32); in bitcastConstantFPToInt()
3304 if (DAG.getDataLayout().isLittleEndian()) in bitcastConstantFPToInt()
3306 return DAG.getBuildVector(MVT::v2i32, DL, {Hi, Lo}); in bitcastConstantFPToInt()
3316 return bitcastConstantFPToInt(cast<ConstantFPSDNode>(Src), dl, DCI.DAG); in PerformBITCASTCombine()
3467 SelectionDAG &DAG) const { in LowerAsmOperandForConstraint()
3480 Result = DAG.getTargetConstant(C->getSExtValue(), SDLoc(Op), in LowerAsmOperandForConstraint()
3492 TargetLowering::LowerAsmOperandForConstraint(Op, Constraint, Ops, DAG); in LowerAsmOperandForConstraint()
3594 SelectionDAG &DAG) const { in ReplaceNodeResults()
3615 DAG, in ReplaceNodeResults()
3621 SDValue Lo = DAG.getCopyFromReg(N->getOperand(0), dl, SP::ASR23, MVT::i32); in ReplaceNodeResults()
3622 SDValue Hi = DAG.getCopyFromReg(Lo, dl, SP::G0, MVT::i32); in ReplaceNodeResults()
3624 SDValue Pair = DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, Ops); in ReplaceNodeResults()
3641 DAG, in ReplaceNodeResults()
3653 SDValue LoadRes = DAG.getExtLoad( in ReplaceNodeResults()
3659 SDValue Res = DAG.getNode(ISD::BITCAST, dl, MVT::i64, LoadRes); in ReplaceNodeResults()