@@ -1306,16 +1306,61 @@ bool getHasColorExport(const Function &F);
13061306bool getHasDepthExport (const Function &F);
13071307
13081308LLVM_READNONE
1309- bool isShader (CallingConv::ID CC);
1309+ constexpr bool isShader (CallingConv::ID CC) {
1310+ switch (CC) {
1311+ case CallingConv::AMDGPU_VS:
1312+ case CallingConv::AMDGPU_LS:
1313+ case CallingConv::AMDGPU_HS:
1314+ case CallingConv::AMDGPU_ES:
1315+ case CallingConv::AMDGPU_GS:
1316+ case CallingConv::AMDGPU_PS:
1317+ case CallingConv::AMDGPU_CS_Chain:
1318+ case CallingConv::AMDGPU_CS_ChainPreserve:
1319+ case CallingConv::AMDGPU_CS:
1320+ return true ;
1321+ default :
1322+ return false ;
1323+ }
1324+ }
13101325
13111326LLVM_READNONE
1312- bool isGraphics (CallingConv::ID CC);
1327+ constexpr bool isGraphics (CallingConv::ID CC) {
1328+ return isShader (CC) || CC == CallingConv::AMDGPU_Gfx;
1329+ }
1330+
1331+ LLVM_READNONE
1332+ constexpr bool isCompute (CallingConv::ID CC) {
1333+ return !isGraphics (CC) || CC == CallingConv::AMDGPU_CS;
1334+ }
13131335
13141336LLVM_READNONE
1315- bool isCompute (CallingConv::ID CC);
1337+ constexpr bool isEntryFunctionCC (CallingConv::ID CC) {
1338+ switch (CC) {
1339+ case CallingConv::AMDGPU_KERNEL:
1340+ case CallingConv::SPIR_KERNEL:
1341+ case CallingConv::AMDGPU_VS:
1342+ case CallingConv::AMDGPU_GS:
1343+ case CallingConv::AMDGPU_PS:
1344+ case CallingConv::AMDGPU_CS:
1345+ case CallingConv::AMDGPU_ES:
1346+ case CallingConv::AMDGPU_HS:
1347+ case CallingConv::AMDGPU_LS:
1348+ return true ;
1349+ default :
1350+ return false ;
1351+ }
1352+ }
13161353
13171354LLVM_READNONE
1318- bool isEntryFunctionCC (CallingConv::ID CC);
1355+ constexpr bool isChainCC (CallingConv::ID CC) {
1356+ switch (CC) {
1357+ case CallingConv::AMDGPU_CS_Chain:
1358+ case CallingConv::AMDGPU_CS_ChainPreserve:
1359+ return true ;
1360+ default :
1361+ return false ;
1362+ }
1363+ }
13191364
13201365// These functions are considered entrypoints into the current module, i.e. they
13211366// are allowed to be called from outside the current module. This is different
@@ -1324,13 +1369,17 @@ bool isEntryFunctionCC(CallingConv::ID CC);
13241369// include functions that can be called from other functions inside or outside
13251370// the current module. Module entry functions are allowed to allocate LDS.
13261371LLVM_READNONE
1327- bool isModuleEntryFunctionCC (CallingConv::ID CC);
1328-
1329- LLVM_READNONE
1330- bool isChainCC (CallingConv::ID CC);
1372+ constexpr bool isModuleEntryFunctionCC (CallingConv::ID CC) {
1373+ switch (CC) {
1374+ case CallingConv::AMDGPU_Gfx:
1375+ return true ;
1376+ default :
1377+ return isEntryFunctionCC (CC) || isChainCC (CC);
1378+ }
1379+ }
13311380
13321381LLVM_READNONE
1333- inline bool isKernel (CallingConv::ID CC) {
1382+ constexpr inline bool isKernel (CallingConv::ID CC) {
13341383 switch (CC) {
13351384 case CallingConv::AMDGPU_KERNEL:
13361385 case CallingConv::SPIR_KERNEL:
@@ -1340,9 +1389,22 @@ inline bool isKernel(CallingConv::ID CC) {
13401389 }
13411390}
13421391
1392+ LLVM_READNONE
1393+ constexpr bool canGuaranteeTCO (CallingConv::ID CC) {
1394+ return CC == CallingConv::Fast;
1395+ }
1396+
13431397// / Return true if we might ever do TCO for calls with this calling convention.
1344- bool mayTailCallThisCC (CallingConv::ID CC);
1345- bool canGuaranteeTCO (CallingConv::ID CC);
1398+ LLVM_READNONE
1399+ constexpr bool mayTailCallThisCC (CallingConv::ID CC) {
1400+ switch (CC) {
1401+ case CallingConv::C:
1402+ case CallingConv::AMDGPU_Gfx:
1403+ return true ;
1404+ default :
1405+ return canGuaranteeTCO (CC);
1406+ }
1407+ }
13461408
13471409bool hasXNACK (const MCSubtargetInfo &STI);
13481410bool hasSRAMECC (const MCSubtargetInfo &STI);
0 commit comments