@@ -702,9 +702,6 @@ NVPTXTargetLowering::NVPTXTargetLowering(const NVPTXTargetMachine &TM,
702
702
setOperationAction (ISD::BR_JT, MVT::Other, Custom);
703
703
setOperationAction (ISD::BRIND, MVT::Other, Expand);
704
704
705
- setOperationAction (ISD::GlobalAddress, MVT::i32 , Custom);
706
- setOperationAction (ISD::GlobalAddress, MVT::i64 , Custom);
707
-
708
705
// We want to legalize constant related memmove and memcopy
709
706
// intrinsics.
710
707
setOperationAction (ISD::INTRINSIC_W_CHAIN, MVT::Other, Custom);
@@ -1055,45 +1052,24 @@ const char *NVPTXTargetLowering::getTargetNodeName(unsigned Opcode) const {
1055
1052
case NVPTXISD::FIRST_NUMBER:
1056
1053
break ;
1057
1054
1058
- MAKE_CASE (NVPTXISD::CALL)
1059
1055
MAKE_CASE (NVPTXISD::RET_GLUE)
1060
- MAKE_CASE (NVPTXISD::LOAD_PARAM)
1061
- MAKE_CASE (NVPTXISD::Wrapper)
1062
1056
MAKE_CASE (NVPTXISD::DeclareParam)
1063
1057
MAKE_CASE (NVPTXISD::DeclareScalarParam)
1064
1058
MAKE_CASE (NVPTXISD::DeclareRet)
1065
- MAKE_CASE (NVPTXISD::DeclareScalarRet)
1066
1059
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)
1071
1061
MAKE_CASE (NVPTXISD::LoadParam)
1072
1062
MAKE_CASE (NVPTXISD::LoadParamV2)
1073
1063
MAKE_CASE (NVPTXISD::LoadParamV4)
1074
1064
MAKE_CASE (NVPTXISD::StoreParam)
1075
1065
MAKE_CASE (NVPTXISD::StoreParamV2)
1076
1066
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)
1087
1067
MAKE_CASE (NVPTXISD::MoveParam)
1088
1068
MAKE_CASE (NVPTXISD::StoreRetval)
1089
1069
MAKE_CASE (NVPTXISD::StoreRetvalV2)
1090
1070
MAKE_CASE (NVPTXISD::StoreRetvalV4)
1091
- MAKE_CASE (NVPTXISD::PseudoUseParam)
1092
1071
MAKE_CASE (NVPTXISD::UNPACK_VECTOR)
1093
1072
MAKE_CASE (NVPTXISD::BUILD_VECTOR)
1094
- MAKE_CASE (NVPTXISD::RETURN)
1095
- MAKE_CASE (NVPTXISD::CallSeqBegin)
1096
- MAKE_CASE (NVPTXISD::CallSeqEnd)
1097
1073
MAKE_CASE (NVPTXISD::CallPrototype)
1098
1074
MAKE_CASE (NVPTXISD::ProxyReg)
1099
1075
MAKE_CASE (NVPTXISD::LoadV2)
@@ -1115,7 +1091,6 @@ const char *NVPTXTargetLowering::getTargetNodeName(unsigned Opcode) const {
1115
1091
MAKE_CASE (NVPTXISD::STACKSAVE)
1116
1092
MAKE_CASE (NVPTXISD::SETP_F16X2)
1117
1093
MAKE_CASE (NVPTXISD::SETP_BF16X2)
1118
- MAKE_CASE (NVPTXISD::Dummy)
1119
1094
MAKE_CASE (NVPTXISD::MUL_WIDE_SIGNED)
1120
1095
MAKE_CASE (NVPTXISD::MUL_WIDE_UNSIGNED)
1121
1096
MAKE_CASE (NVPTXISD::BrxEnd)
@@ -1189,15 +1164,6 @@ SDValue NVPTXTargetLowering::getSqrtEstimate(SDValue Operand, SelectionDAG &DAG,
1189
1164
}
1190
1165
}
1191
1166
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
-
1201
1167
std::string NVPTXTargetLowering::getPrototype (
1202
1168
const DataLayout &DL, Type *retTy, const ArgListTy &Args,
1203
1169
const SmallVectorImpl<ISD::OutputArg> &Outs, MaybeAlign RetAlign,
@@ -1601,9 +1567,9 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
1601
1567
? promoteScalarArgumentSize (TypeSize * 8 )
1602
1568
: TypeSize * 8 ;
1603
1569
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});
1607
1573
}
1608
1574
InGlue = Chain.getValue (1 );
1609
1575
@@ -1740,16 +1706,13 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
1740
1706
const unsigned ResultSize = DL.getTypeAllocSizeInBits (RetTy);
1741
1707
if (!shouldPassAsArray (RetTy)) {
1742
1708
const unsigned PromotedResultSize = promoteScalarArgumentSize (ResultSize);
1743
- SDValue DeclareRetOps[] = {Chain, GetI32 (1 ), GetI32 (PromotedResultSize),
1744
- GetI32 (0 ), InGlue};
1745
1709
Chain = DAG.getNode (NVPTXISD::DeclareRet, dl, {MVT::Other, MVT::Glue},
1746
- DeclareRetOps );
1710
+ {Chain, GetI32 (PromotedResultSize), InGlue} );
1747
1711
InGlue = Chain.getValue (1 );
1748
1712
} 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});
1753
1716
InGlue = Chain.getValue (1 );
1754
1717
}
1755
1718
}
@@ -1800,25 +1763,11 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
1800
1763
HasVAArgs ? std::optional (FirstVAArg) : std::nullopt, *CB,
1801
1764
UniqueCallSite);
1802
1765
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});
1810
1769
InGlue = Chain.getValue (1 );
1811
1770
}
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 );
1822
1771
1823
1772
if (ConvertToIndirectCall) {
1824
1773
// 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,
1832
1781
Callee = DAG.getCopyFromReg (RegCopy, dl, DestReg, DestVT);
1833
1782
}
1834
1783
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});
1845
1793
InGlue = Chain.getValue (1 );
1846
1794
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
-
1867
1795
SmallVector<SDValue, 16 > ProxyRegOps;
1868
1796
// An item of the vector is filled if the element does not need a ProxyReg
1869
1797
// operation on it and should be added to InVals as is. ProxyRegOps and
@@ -2919,8 +2847,6 @@ NVPTXTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
2919
2847
return SDValue ();
2920
2848
case ISD::ADDRSPACECAST:
2921
2849
return LowerADDRSPACECAST (Op, DAG);
2922
- case ISD::GlobalAddress:
2923
- return LowerGlobalAddress (Op, DAG);
2924
2850
case ISD::INTRINSIC_W_CHAIN:
2925
2851
return Op;
2926
2852
case ISD::INTRINSIC_WO_CHAIN:
@@ -3129,8 +3055,7 @@ SDValue NVPTXTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
3129
3055
EVT PtrVT = TLI->getPointerTy (DAG.getDataLayout ());
3130
3056
3131
3057
// 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);
3134
3059
3135
3060
const Value *SV = cast<SrcValueSDNode>(Op.getOperand (2 ))->getValue ();
3136
3061
return DAG.getStore (Op.getOperand (0 ), DL, VAReg, Op.getOperand (1 ),
@@ -3370,7 +3295,7 @@ SDValue NVPTXTargetLowering::getParamSymbol(SelectionDAG &DAG, int idx,
3370
3295
EVT v) const {
3371
3296
StringRef SavedStr = nvTM->getStrPool ().save (
3372
3297
getParamName (&DAG.getMachineFunction ().getFunction (), idx));
3373
- return DAG.getTargetExternalSymbol (SavedStr.data (), v);
3298
+ return DAG.getExternalSymbol (SavedStr.data (), v);
3374
3299
}
3375
3300
3376
3301
SDValue NVPTXTargetLowering::LowerFormalArguments (
@@ -3438,7 +3363,7 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
3438
3363
3439
3364
SDValue P;
3440
3365
if (isKernelFunction (*F)) {
3441
- P = DAG. getNode (NVPTXISD::Wrapper, dl, ByvalIn. VT , ArgSymbol) ;
3366
+ P = ArgSymbol;
3442
3367
P.getNode ()->setIROrder (Arg.getArgNo () + 1 );
3443
3368
} else {
3444
3369
P = DAG.getNode (NVPTXISD::MoveParam, dl, ByvalIn.VT , ArgSymbol);
0 commit comments