Skip to content

Commit 475cd8d

Browse files
authored
[NVPTX] Further cleanup call isel (#146411)
This change continues rewriting and cleanup around DAG ISel for formal-arguments, return values, and function calls. This causes some incidental changes, mostly to instruction ordering and register naming but also a couple improvements caused by using scalar types earlier in the lowering.
1 parent 5ed852f commit 475cd8d

16 files changed

+2087
-2090
lines changed

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

Lines changed: 150 additions & 153 deletions
Large diffs are not rendered by default.

llvm/lib/Target/NVPTX/NVPTXISelLowering.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,15 @@ enum NodeType : unsigned {
2525
// Start the numbering from where ISD NodeType finishes.
2626
FIRST_NUMBER = ISD::BUILTIN_OP_END,
2727
RET_GLUE,
28-
DeclareParam,
28+
29+
/// These nodes represent a parameter declaration. In PTX this will look like:
30+
/// .param .align 16 .b8 param0[1024];
31+
/// .param .b32 retval0;
32+
///
33+
/// DeclareArrayParam(Chain, Externalsym, Align, Size, Glue)
34+
/// DeclareScalarParam(Chain, Externalsym, Size, Glue)
2935
DeclareScalarParam,
30-
DeclareRetParam,
31-
DeclareRet,
36+
DeclareArrayParam,
3237

3338
/// This node represents a PTX call instruction. It's operands are as follows:
3439
///
@@ -174,7 +179,6 @@ class NVPTXTargetLowering : public TargetLowering {
174179

175180
std::string getPrototype(const DataLayout &DL, Type *, const ArgListTy &,
176181
const SmallVectorImpl<ISD::OutputArg> &,
177-
MaybeAlign RetAlign,
178182
std::optional<unsigned> FirstVAArg,
179183
const CallBase &CB, unsigned UniqueCallSite) const;
180184

@@ -272,8 +276,8 @@ class NVPTXTargetLowering : public TargetLowering {
272276
const NVPTXSubtarget &STI; // cache the subtarget here
273277
mutable unsigned GlobalUniqueCallSite;
274278

275-
SDValue getParamSymbol(SelectionDAG &DAG, int idx, EVT) const;
276-
279+
SDValue getParamSymbol(SelectionDAG &DAG, int I, EVT T) const;
280+
SDValue getCallParamSymbol(SelectionDAG &DAG, int I, EVT T) const;
277281
SDValue LowerADDRSPACECAST(SDValue Op, SelectionDAG &DAG) const;
278282
SDValue LowerBITCAST(SDValue Op, SelectionDAG &DAG) const;
279283

llvm/lib/Target/NVPTX/NVPTXInstrInfo.td

Lines changed: 23 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1990,9 +1990,9 @@ defm FSetNE : FSET_FORMAT<setne, CmpNE, CmpNE_FTZ>;
19901990
defm FSetNUM : FSET_FORMAT<seto, CmpNUM, CmpNUM_FTZ>;
19911991
defm FSetNAN : FSET_FORMAT<setuo, CmpNAN, CmpNAN_FTZ>;
19921992

1993-
def SDTDeclareParamProfile :
1993+
def SDTDeclareArrayParam :
19941994
SDTypeProfile<0, 3, [SDTCisVT<0, i32>, SDTCisVT<1, i32>, SDTCisVT<2, i32>]>;
1995-
def SDTDeclareScalarParamProfile :
1995+
def SDTDeclareScalarParam :
19961996
SDTypeProfile<0, 2, [SDTCisVT<0, i32>, SDTCisVT<1, i32>]>;
19971997
def SDTLoadParamProfile : SDTypeProfile<1, 2, [SDTCisInt<1>, SDTCisInt<2>]>;
19981998
def SDTLoadParamV2Profile : SDTypeProfile<2, 2, [SDTCisSameAs<0, 1>, SDTCisInt<2>, SDTCisInt<3>]>;
@@ -2001,22 +2001,17 @@ def SDTStoreParamProfile : SDTypeProfile<0, 3, [SDTCisInt<0>, SDTCisInt<1>]>;
20012001
def SDTStoreParamV2Profile : SDTypeProfile<0, 4, [SDTCisInt<0>, SDTCisInt<1>]>;
20022002
def SDTStoreParamV4Profile : SDTypeProfile<0, 6, [SDTCisInt<0>, SDTCisInt<1>]>;
20032003
def SDTMoveParamProfile : SDTypeProfile<1, 1, [SDTCisInt<0>, SDTCisSameAs<0, 1>]>;
2004-
def SDTProxyRegProfile : SDTypeProfile<1, 1, []>;
20052004

2006-
def DeclareParam :
2007-
SDNode<"NVPTXISD::DeclareParam", SDTDeclareParamProfile,
2008-
[SDNPHasChain, SDNPOutGlue, SDNPInGlue, SDNPSideEffect]>;
2009-
def DeclareScalarParam :
2010-
SDNode<"NVPTXISD::DeclareScalarParam", SDTDeclareScalarParamProfile,
2011-
[SDNPHasChain, SDNPOutGlue, SDNPInGlue, SDNPSideEffect]>;
2012-
def DeclareRetParam :
2013-
SDNode<"NVPTXISD::DeclareRetParam",
2014-
SDTypeProfile<0, 2, [SDTCisVT<0, i32>, SDTCisVT<1, i32>]>,
2005+
def SDTProxyReg : SDTypeProfile<1, 1, [SDTCisSameAs<0, 1>]>;
2006+
2007+
2008+
def declare_array_param :
2009+
SDNode<"NVPTXISD::DeclareArrayParam", SDTDeclareArrayParam,
20152010
[SDNPHasChain, SDNPOutGlue, SDNPInGlue, SDNPSideEffect]>;
2016-
def DeclareRet :
2017-
SDNode<"NVPTXISD::DeclareRet",
2018-
SDTypeProfile<0, 1, [SDTCisVT<0, i32>]>,
2011+
def declare_scalar_param :
2012+
SDNode<"NVPTXISD::DeclareScalarParam", SDTDeclareScalarParam,
20192013
[SDNPHasChain, SDNPOutGlue, SDNPInGlue, SDNPSideEffect]>;
2014+
20202015
def LoadParam :
20212016
SDNode<"NVPTXISD::LoadParam", SDTLoadParamProfile,
20222017
[SDNPHasChain, SDNPMayLoad, SDNPOutGlue, SDNPInGlue]>;
@@ -2037,9 +2032,8 @@ def StoreParamV4 :
20372032
[SDNPHasChain, SDNPOutGlue, SDNPInGlue, SDNPSideEffect]>;
20382033
def MoveParam :
20392034
SDNode<"NVPTXISD::MoveParam", SDTMoveParamProfile, []>;
2040-
def ProxyReg :
2041-
SDNode<"NVPTXISD::ProxyReg", SDTProxyRegProfile,
2042-
[SDNPHasChain, SDNPOutGlue, SDNPInGlue, SDNPSideEffect]>;
2035+
def proxy_reg :
2036+
SDNode<"NVPTXISD::ProxyReg", SDTProxyReg, [SDNPHasChain]>;
20432037

20442038
/// CALL(Chain, IsConvergent, IsIndirectCall/IsUniform, NumReturns,
20452039
/// NumParams, Callee, Proto, InGlue)
@@ -2188,23 +2182,17 @@ defm StoreParamV2F64 : StoreParamV2Inst<B64, f64imm, ".b64">;
21882182

21892183
defm StoreParamV4F32 : StoreParamV4Inst<B32, f32imm, ".b32">;
21902184

2191-
def DeclareRetMemInst :
2192-
NVPTXInst<(outs), (ins i32imm:$align, i32imm:$size),
2193-
".param .align $align .b8 retval0[$size];",
2194-
[(DeclareRetParam imm:$align, imm:$size)]>;
2195-
def DeclareRetScalarInst :
2196-
NVPTXInst<(outs), (ins i32imm:$size),
2197-
".param .b$size retval0;",
2198-
[(DeclareRet imm:$size)]>;
2199-
2200-
def DeclareParamInst :
2201-
NVPTXInst<(outs), (ins i32imm:$align, i32imm:$a, i32imm:$size),
2202-
".param .align $align .b8 param$a[$size];",
2203-
[(DeclareParam imm:$align, imm:$a, imm:$size)]>;
2204-
def DeclareScalarParamInst :
2185+
def DECLARE_PARAM_array :
2186+
NVPTXInst<(outs), (ins i32imm:$a, i32imm:$align, i32imm:$size),
2187+
".param .align $align .b8 \t$a[$size];", []>;
2188+
def DECLARE_PARAM_scalar :
22052189
NVPTXInst<(outs), (ins i32imm:$a, i32imm:$size),
2206-
".param .b$size param$a;",
2207-
[(DeclareScalarParam imm:$a, imm:$size)]>;
2190+
".param .b$size \t$a;", []>;
2191+
2192+
def : Pat<(declare_array_param externalsym:$a, imm:$align, imm:$size),
2193+
(DECLARE_PARAM_array (to_texternsym $a), imm:$align, imm:$size)>;
2194+
def : Pat<(declare_scalar_param externalsym:$a, imm:$size),
2195+
(DECLARE_PARAM_scalar (to_texternsym $a), imm:$size)>;
22082196

22092197
foreach t = [I32RT, I64RT] in {
22102198
defvar inst_name = "MOV" # t.Size # "_PARAM";
@@ -2217,7 +2205,7 @@ multiclass ProxyRegInst<string SzStr, NVPTXRegClass rc> {
22172205
def NAME : BasicNVPTXInst<(outs rc:$dst), (ins rc:$src),
22182206
"mov." # SzStr>;
22192207
foreach vt = rc.RegTypes in
2220-
def : Pat<(vt (ProxyReg vt:$src)), (!cast<NVPTXInst>(NAME) $src)>;
2208+
def : Pat<(vt (proxy_reg vt:$src)), (!cast<NVPTXInst>(NAME) $src)>;
22212209
}
22222210

22232211
defm ProxyRegB1 : ProxyRegInst<"pred", B1>;

0 commit comments

Comments
 (0)