@@ -702,9 +702,6 @@ NVPTXTargetLowering::NVPTXTargetLowering(const NVPTXTargetMachine &TM,
702702 setOperationAction (ISD::BR_JT, MVT::Other, Custom);
703703 setOperationAction (ISD::BRIND, MVT::Other, Expand);
704704
705- setOperationAction (ISD::GlobalAddress, MVT::i32 , Custom);
706- setOperationAction (ISD::GlobalAddress, MVT::i64 , Custom);
707-
708705 // We want to legalize constant related memmove and memcopy
709706 // intrinsics.
710707 setOperationAction (ISD::INTRINSIC_W_CHAIN, MVT::Other, Custom);
@@ -1055,45 +1052,24 @@ const char *NVPTXTargetLowering::getTargetNodeName(unsigned Opcode) const {
10551052 case NVPTXISD::FIRST_NUMBER:
10561053 break ;
10571054
1058- MAKE_CASE (NVPTXISD::CALL)
10591055 MAKE_CASE (NVPTXISD::RET_GLUE)
1060- MAKE_CASE (NVPTXISD::LOAD_PARAM)
1061- MAKE_CASE (NVPTXISD::Wrapper)
10621056 MAKE_CASE (NVPTXISD::DeclareParam)
10631057 MAKE_CASE (NVPTXISD::DeclareScalarParam)
10641058 MAKE_CASE (NVPTXISD::DeclareRet)
1065- MAKE_CASE (NVPTXISD::DeclareScalarRet)
10661059 MAKE_CASE (NVPTXISD::DeclareRetParam)
1067- MAKE_CASE (NVPTXISD::PrintCall)
1068- MAKE_CASE (NVPTXISD::PrintConvergentCall)
1069- MAKE_CASE (NVPTXISD::PrintCallUni)
1070- MAKE_CASE (NVPTXISD::PrintConvergentCallUni)
1060+ MAKE_CASE (NVPTXISD::CALL)
10711061 MAKE_CASE (NVPTXISD::LoadParam)
10721062 MAKE_CASE (NVPTXISD::LoadParamV2)
10731063 MAKE_CASE (NVPTXISD::LoadParamV4)
10741064 MAKE_CASE (NVPTXISD::StoreParam)
10751065 MAKE_CASE (NVPTXISD::StoreParamV2)
10761066 MAKE_CASE (NVPTXISD::StoreParamV4)
1077- MAKE_CASE (NVPTXISD::StoreParamS32)
1078- MAKE_CASE (NVPTXISD::StoreParamU32)
1079- MAKE_CASE (NVPTXISD::CallArgBegin)
1080- MAKE_CASE (NVPTXISD::CallArg)
1081- MAKE_CASE (NVPTXISD::LastCallArg)
1082- MAKE_CASE (NVPTXISD::CallArgEnd)
1083- MAKE_CASE (NVPTXISD::CallVoid)
1084- MAKE_CASE (NVPTXISD::CallVal)
1085- MAKE_CASE (NVPTXISD::CallSymbol)
1086- MAKE_CASE (NVPTXISD::Prototype)
10871067 MAKE_CASE (NVPTXISD::MoveParam)
10881068 MAKE_CASE (NVPTXISD::StoreRetval)
10891069 MAKE_CASE (NVPTXISD::StoreRetvalV2)
10901070 MAKE_CASE (NVPTXISD::StoreRetvalV4)
1091- MAKE_CASE (NVPTXISD::PseudoUseParam)
10921071 MAKE_CASE (NVPTXISD::UNPACK_VECTOR)
10931072 MAKE_CASE (NVPTXISD::BUILD_VECTOR)
1094- MAKE_CASE (NVPTXISD::RETURN)
1095- MAKE_CASE (NVPTXISD::CallSeqBegin)
1096- MAKE_CASE (NVPTXISD::CallSeqEnd)
10971073 MAKE_CASE (NVPTXISD::CallPrototype)
10981074 MAKE_CASE (NVPTXISD::ProxyReg)
10991075 MAKE_CASE (NVPTXISD::LoadV2)
@@ -1115,7 +1091,6 @@ const char *NVPTXTargetLowering::getTargetNodeName(unsigned Opcode) const {
11151091 MAKE_CASE (NVPTXISD::STACKSAVE)
11161092 MAKE_CASE (NVPTXISD::SETP_F16X2)
11171093 MAKE_CASE (NVPTXISD::SETP_BF16X2)
1118- MAKE_CASE (NVPTXISD::Dummy)
11191094 MAKE_CASE (NVPTXISD::MUL_WIDE_SIGNED)
11201095 MAKE_CASE (NVPTXISD::MUL_WIDE_UNSIGNED)
11211096 MAKE_CASE (NVPTXISD::BrxEnd)
@@ -1189,15 +1164,6 @@ SDValue NVPTXTargetLowering::getSqrtEstimate(SDValue Operand, SelectionDAG &DAG,
11891164 }
11901165}
11911166
1192- SDValue
1193- NVPTXTargetLowering::LowerGlobalAddress (SDValue Op, SelectionDAG &DAG) const {
1194- SDLoc dl (Op);
1195- const GlobalAddressSDNode *GAN = cast<GlobalAddressSDNode>(Op);
1196- auto PtrVT = getPointerTy (DAG.getDataLayout (), GAN->getAddressSpace ());
1197- Op = DAG.getTargetGlobalAddress (GAN->getGlobal (), dl, PtrVT);
1198- return DAG.getNode (NVPTXISD::Wrapper, dl, PtrVT, Op);
1199- }
1200-
12011167std::string NVPTXTargetLowering::getPrototype (
12021168 const DataLayout &DL, Type *retTy, const ArgListTy &Args,
12031169 const SmallVectorImpl<ISD::OutputArg> &Outs, MaybeAlign RetAlign,
@@ -1601,9 +1567,9 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
16011567 ? promoteScalarArgumentSize (TypeSize * 8 )
16021568 : TypeSize * 8 ;
16031569
1604- Chain = DAG. getNode (
1605- NVPTXISD::DeclareScalarParam, dl, {MVT::Other, MVT::Glue},
1606- {Chain, GetI32 (ArgI), GetI32 (PromotedSize), GetI32 ( 0 ), InGlue});
1570+ Chain =
1571+ DAG. getNode ( NVPTXISD::DeclareScalarParam, dl, {MVT::Other, MVT::Glue},
1572+ {Chain, GetI32 (ArgI), GetI32 (PromotedSize), InGlue});
16071573 }
16081574 InGlue = Chain.getValue (1 );
16091575
@@ -1740,16 +1706,13 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
17401706 const unsigned ResultSize = DL.getTypeAllocSizeInBits (RetTy);
17411707 if (!shouldPassAsArray (RetTy)) {
17421708 const unsigned PromotedResultSize = promoteScalarArgumentSize (ResultSize);
1743- SDValue DeclareRetOps[] = {Chain, GetI32 (1 ), GetI32 (PromotedResultSize),
1744- GetI32 (0 ), InGlue};
17451709 Chain = DAG.getNode (NVPTXISD::DeclareRet, dl, {MVT::Other, MVT::Glue},
1746- DeclareRetOps );
1710+ {Chain, GetI32 (PromotedResultSize), InGlue} );
17471711 InGlue = Chain.getValue (1 );
17481712 } else {
1749- SDValue DeclareRetOps[] = {Chain, GetI32 (RetAlign->value ()),
1750- GetI32 (ResultSize / 8 ), GetI32 (0 ), InGlue};
1751- Chain = DAG.getNode (NVPTXISD::DeclareRetParam, dl,
1752- {MVT::Other, MVT::Glue}, DeclareRetOps);
1713+ Chain = DAG.getNode (
1714+ NVPTXISD::DeclareRetParam, dl, {MVT::Other, MVT::Glue},
1715+ {Chain, GetI32 (RetAlign->value ()), GetI32 (ResultSize / 8 ), InGlue});
17531716 InGlue = Chain.getValue (1 );
17541717 }
17551718 }
@@ -1800,25 +1763,11 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
18001763 HasVAArgs ? std::optional (FirstVAArg) : std::nullopt , *CB,
18011764 UniqueCallSite);
18021765 const char *ProtoStr = nvTM->getStrPool ().save (Proto).data ();
1803- SDValue ProtoOps[] = {
1804- Chain,
1805- DAG.getTargetExternalSymbol (ProtoStr, MVT::i32 ),
1806- InGlue,
1807- };
1808- Chain = DAG.getNode (NVPTXISD::CallPrototype, dl, {MVT::Other, MVT::Glue},
1809- ProtoOps);
1766+ Chain = DAG.getNode (
1767+ NVPTXISD::CallPrototype, dl, {MVT::Other, MVT::Glue},
1768+ {Chain, DAG.getTargetExternalSymbol (ProtoStr, MVT::i32 ), InGlue});
18101769 InGlue = Chain.getValue (1 );
18111770 }
1812- // Op to just print "call"
1813- SDValue PrintCallOps[] = {Chain, GetI32 (Ins.empty () ? 0 : 1 ), InGlue};
1814- // We model convergent calls as separate opcodes.
1815- unsigned Opcode =
1816- IsIndirectCall ? NVPTXISD::PrintCall : NVPTXISD::PrintCallUni;
1817- if (CLI.IsConvergent )
1818- Opcode = Opcode == NVPTXISD::PrintCallUni ? NVPTXISD::PrintConvergentCallUni
1819- : NVPTXISD::PrintConvergentCall;
1820- Chain = DAG.getNode (Opcode, dl, {MVT::Other, MVT::Glue}, PrintCallOps);
1821- InGlue = Chain.getValue (1 );
18221771
18231772 if (ConvertToIndirectCall) {
18241773 // Copy the function ptr to a ptx register and use the register to call the
@@ -1832,38 +1781,17 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
18321781 Callee = DAG.getCopyFromReg (RegCopy, dl, DestReg, DestVT);
18331782 }
18341783
1835- // Ops to print out the function name
1836- SDValue CallVoidOps[] = { Chain, Callee, InGlue };
1837- Chain =
1838- DAG.getNode (NVPTXISD::CallVoid, dl, {MVT::Other, MVT::Glue}, CallVoidOps);
1839- InGlue = Chain.getValue (1 );
1840-
1841- // Ops to print out the param list
1842- SDValue CallArgBeginOps[] = { Chain, InGlue };
1843- Chain = DAG.getNode (NVPTXISD::CallArgBegin, dl, {MVT::Other, MVT::Glue},
1844- CallArgBeginOps);
1784+ const unsigned Proto = IsIndirectCall ? UniqueCallSite : 0 ;
1785+ const unsigned NumArgs =
1786+ std::min<unsigned >(CLI.NumFixedArgs + 1 , Args.size ());
1787+ // / CALL(Chain, IsConvergent, IsIndirectCall/IsUniform, NumReturns,
1788+ // / NumParams, Callee, Proto, InGlue)
1789+ Chain = DAG.getNode (NVPTXISD::CALL, dl, {MVT::Other, MVT::Glue},
1790+ {Chain, GetI32 (CLI.IsConvergent ), GetI32 (IsIndirectCall),
1791+ GetI32 (Ins.empty () ? 0 : 1 ), GetI32 (NumArgs), Callee,
1792+ GetI32 (Proto), InGlue});
18451793 InGlue = Chain.getValue (1 );
18461794
1847- const unsigned E = std::min<unsigned >(CLI.NumFixedArgs + 1 , Args.size ());
1848- for (const unsigned I : llvm::seq (E)) {
1849- const unsigned Opcode =
1850- I == (E - 1 ) ? NVPTXISD::LastCallArg : NVPTXISD::CallArg;
1851- SDValue CallArgOps[] = {Chain, GetI32 (1 ), GetI32 (I), InGlue};
1852- Chain = DAG.getNode (Opcode, dl, {MVT::Other, MVT::Glue}, CallArgOps);
1853- InGlue = Chain.getValue (1 );
1854- }
1855- SDValue CallArgEndOps[] = {Chain, GetI32 (IsIndirectCall ? 0 : 1 ), InGlue};
1856- Chain = DAG.getNode (NVPTXISD::CallArgEnd, dl, {MVT::Other, MVT::Glue},
1857- CallArgEndOps);
1858- InGlue = Chain.getValue (1 );
1859-
1860- if (IsIndirectCall) {
1861- SDValue PrototypeOps[] = {Chain, GetI32 (UniqueCallSite), InGlue};
1862- Chain = DAG.getNode (NVPTXISD::Prototype, dl, {MVT::Other, MVT::Glue},
1863- PrototypeOps);
1864- InGlue = Chain.getValue (1 );
1865- }
1866-
18671795 SmallVector<SDValue, 16 > ProxyRegOps;
18681796 // An item of the vector is filled if the element does not need a ProxyReg
18691797 // operation on it and should be added to InVals as is. ProxyRegOps and
@@ -2919,8 +2847,6 @@ NVPTXTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
29192847 return SDValue ();
29202848 case ISD::ADDRSPACECAST:
29212849 return LowerADDRSPACECAST (Op, DAG);
2922- case ISD::GlobalAddress:
2923- return LowerGlobalAddress (Op, DAG);
29242850 case ISD::INTRINSIC_W_CHAIN:
29252851 return Op;
29262852 case ISD::INTRINSIC_WO_CHAIN:
@@ -3129,8 +3055,7 @@ SDValue NVPTXTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
31293055 EVT PtrVT = TLI->getPointerTy (DAG.getDataLayout ());
31303056
31313057 // Store the address of unsized array <function>_vararg[] in the ap object.
3132- SDValue Arg = getParamSymbol (DAG, /* vararg */ -1 , PtrVT);
3133- SDValue VAReg = DAG.getNode (NVPTXISD::Wrapper, DL, PtrVT, Arg);
3058+ SDValue VAReg = getParamSymbol (DAG, /* vararg */ -1 , PtrVT);
31343059
31353060 const Value *SV = cast<SrcValueSDNode>(Op.getOperand (2 ))->getValue ();
31363061 return DAG.getStore (Op.getOperand (0 ), DL, VAReg, Op.getOperand (1 ),
@@ -3370,7 +3295,7 @@ SDValue NVPTXTargetLowering::getParamSymbol(SelectionDAG &DAG, int idx,
33703295 EVT v) const {
33713296 StringRef SavedStr = nvTM->getStrPool ().save (
33723297 getParamName (&DAG.getMachineFunction ().getFunction (), idx));
3373- return DAG.getTargetExternalSymbol (SavedStr.data (), v);
3298+ return DAG.getExternalSymbol (SavedStr.data (), v);
33743299}
33753300
33763301SDValue NVPTXTargetLowering::LowerFormalArguments (
@@ -3438,7 +3363,7 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
34383363
34393364 SDValue P;
34403365 if (isKernelFunction (*F)) {
3441- P = DAG. getNode (NVPTXISD::Wrapper, dl, ByvalIn. VT , ArgSymbol) ;
3366+ P = ArgSymbol;
34423367 P.getNode ()->setIROrder (Arg.getArgNo () + 1 );
34433368 } else {
34443369 P = DAG.getNode (NVPTXISD::MoveParam, dl, ByvalIn.VT , ArgSymbol);
0 commit comments