10b57cec5SDimitry Andric//===---- AMDCallingConv.td - Calling Conventions for Radeon GPUs ---------===// 20b57cec5SDimitry Andric// 30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric// 70b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric// 90b57cec5SDimitry Andric// This describes the calling conventions for the AMD Radeon GPUs. 100b57cec5SDimitry Andric// 110b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric// Inversion of CCIfInReg 140b57cec5SDimitry Andricclass CCIfNotInReg<CCAction A> : CCIf<"!ArgFlags.isInReg()", A> {} 150b57cec5SDimitry Andricclass CCIfExtend<CCAction A> 160b57cec5SDimitry Andric : CCIf<"ArgFlags.isSExt() || ArgFlags.isZExt()", A>; 170b57cec5SDimitry Andric 180b57cec5SDimitry Andric// Calling convention for SI 19e8d8bef9SDimitry Andricdef CC_SI_Gfx : CallingConv<[ 20e8d8bef9SDimitry Andric // 0-3 are reserved for the stack buffer descriptor 21e8d8bef9SDimitry Andric // 30-31 are reserved for the return address 22e8d8bef9SDimitry Andric // 32 is reserved for the stack pointer 23349cc55cSDimitry Andric // 33 is reserved for the frame pointer 24349cc55cSDimitry Andric // 34 is reserved for the base pointer 251db9f3b2SDimitry Andric CCIfInReg<CCIfType<[f32, i32, f16, i16, v2i16, v2f16, bf16, v2bf16] , CCAssignToReg<[ 26e8d8bef9SDimitry Andric SGPR4, SGPR5, SGPR6, SGPR7, 27e8d8bef9SDimitry Andric SGPR8, SGPR9, SGPR10, SGPR11, SGPR12, SGPR13, SGPR14, SGPR15, 28e8d8bef9SDimitry Andric SGPR16, SGPR17, SGPR18, SGPR19, SGPR20, SGPR21, SGPR22, SGPR23, 29349cc55cSDimitry Andric SGPR24, SGPR25, SGPR26, SGPR27, SGPR28, SGPR29 30e8d8bef9SDimitry Andric ]>>>, 31e8d8bef9SDimitry Andric 321db9f3b2SDimitry Andric CCIfNotInReg<CCIfType<[f32, i32, f16, i16, v2i16, v2f16, bf16, v2bf16] , CCAssignToReg<[ 33e8d8bef9SDimitry Andric VGPR0, VGPR1, VGPR2, VGPR3, VGPR4, VGPR5, VGPR6, VGPR7, 34e8d8bef9SDimitry Andric VGPR8, VGPR9, VGPR10, VGPR11, VGPR12, VGPR13, VGPR14, VGPR15, 35e8d8bef9SDimitry Andric VGPR16, VGPR17, VGPR18, VGPR19, VGPR20, VGPR21, VGPR22, VGPR23, 36e8d8bef9SDimitry Andric VGPR24, VGPR25, VGPR26, VGPR27, VGPR28, VGPR29, VGPR30, VGPR31 37e8d8bef9SDimitry Andric ]>>>, 38e8d8bef9SDimitry Andric 391db9f3b2SDimitry Andric CCIfType<[i32, f32, v2i16, v2f16, i16, f16, i1, bf16, v2bf16], CCAssignToStack<4, 4>> 40e8d8bef9SDimitry Andric]>; 41e8d8bef9SDimitry Andric 42e8d8bef9SDimitry Andricdef RetCC_SI_Gfx : CallingConv<[ 43fe6060f1SDimitry Andric CCIfType<[i1], CCPromoteToType<i32>>, 44fe6060f1SDimitry Andric CCIfType<[i1, i16], CCIfExtend<CCPromoteToType<i32>>>, 45fe6060f1SDimitry Andric 461db9f3b2SDimitry Andric CCIfNotInReg<CCIfType<[f32, i32, f16, i16, v2i16, v2f16, bf16, v2bf16] , CCAssignToReg<[ 47e8d8bef9SDimitry Andric VGPR0, VGPR1, VGPR2, VGPR3, VGPR4, VGPR5, VGPR6, VGPR7, 48e8d8bef9SDimitry Andric VGPR8, VGPR9, VGPR10, VGPR11, VGPR12, VGPR13, VGPR14, VGPR15, 49e8d8bef9SDimitry Andric VGPR16, VGPR17, VGPR18, VGPR19, VGPR20, VGPR21, VGPR22, VGPR23, 50e8d8bef9SDimitry Andric VGPR24, VGPR25, VGPR26, VGPR27, VGPR28, VGPR29, VGPR30, VGPR31, 51e8d8bef9SDimitry Andric VGPR32, VGPR33, VGPR34, VGPR35, VGPR36, VGPR37, VGPR38, VGPR39, 52e8d8bef9SDimitry Andric VGPR40, VGPR41, VGPR42, VGPR43, VGPR44, VGPR45, VGPR46, VGPR47, 53e8d8bef9SDimitry Andric VGPR48, VGPR49, VGPR50, VGPR51, VGPR52, VGPR53, VGPR54, VGPR55, 54e8d8bef9SDimitry Andric VGPR56, VGPR57, VGPR58, VGPR59, VGPR60, VGPR61, VGPR62, VGPR63, 55e8d8bef9SDimitry Andric VGPR64, VGPR65, VGPR66, VGPR67, VGPR68, VGPR69, VGPR70, VGPR71, 56e8d8bef9SDimitry Andric VGPR72, VGPR73, VGPR74, VGPR75, VGPR76, VGPR77, VGPR78, VGPR79, 57e8d8bef9SDimitry Andric VGPR80, VGPR81, VGPR82, VGPR83, VGPR84, VGPR85, VGPR86, VGPR87, 58e8d8bef9SDimitry Andric VGPR88, VGPR89, VGPR90, VGPR91, VGPR92, VGPR93, VGPR94, VGPR95, 59e8d8bef9SDimitry Andric VGPR96, VGPR97, VGPR98, VGPR99, VGPR100, VGPR101, VGPR102, VGPR103, 60e8d8bef9SDimitry Andric VGPR104, VGPR105, VGPR106, VGPR107, VGPR108, VGPR109, VGPR110, VGPR111, 61e8d8bef9SDimitry Andric VGPR112, VGPR113, VGPR114, VGPR115, VGPR116, VGPR117, VGPR118, VGPR119, 62e8d8bef9SDimitry Andric VGPR120, VGPR121, VGPR122, VGPR123, VGPR124, VGPR125, VGPR126, VGPR127, 63e8d8bef9SDimitry Andric VGPR128, VGPR129, VGPR130, VGPR131, VGPR132, VGPR133, VGPR134, VGPR135 64e8d8bef9SDimitry Andric ]>>>, 65e8d8bef9SDimitry Andric]>; 66e8d8bef9SDimitry Andric 67e8d8bef9SDimitry Andricdef CC_SI_SHADER : CallingConv<[ 680b57cec5SDimitry Andric 69*0fca6ea1SDimitry Andric CCIfType<[i1], CCPromoteToType<i32>>, 70*0fca6ea1SDimitry Andric 711db9f3b2SDimitry Andric CCIfInReg<CCIfType<[f32, i32, f16, i16, v2i16, v2f16, bf16, v2bf16] , CCAssignToReg<[ 720b57cec5SDimitry Andric SGPR0, SGPR1, SGPR2, SGPR3, SGPR4, SGPR5, SGPR6, SGPR7, 730b57cec5SDimitry Andric SGPR8, SGPR9, SGPR10, SGPR11, SGPR12, SGPR13, SGPR14, SGPR15, 740b57cec5SDimitry Andric SGPR16, SGPR17, SGPR18, SGPR19, SGPR20, SGPR21, SGPR22, SGPR23, 750b57cec5SDimitry Andric SGPR24, SGPR25, SGPR26, SGPR27, SGPR28, SGPR29, SGPR30, SGPR31, 760b57cec5SDimitry Andric SGPR32, SGPR33, SGPR34, SGPR35, SGPR36, SGPR37, SGPR38, SGPR39, 778bcb0991SDimitry Andric SGPR40, SGPR41, SGPR42, SGPR43 780b57cec5SDimitry Andric ]>>>, 790b57cec5SDimitry Andric 800b57cec5SDimitry Andric // 32*4 + 4 is the minimum for a fetch shader consumer with 32 inputs. 811db9f3b2SDimitry Andric CCIfNotInReg<CCIfType<[f32, i32, f16, i16, v2i16, v2f16, bf16, v2bf16] , CCAssignToReg<[ 820b57cec5SDimitry Andric VGPR0, VGPR1, VGPR2, VGPR3, VGPR4, VGPR5, VGPR6, VGPR7, 830b57cec5SDimitry Andric VGPR8, VGPR9, VGPR10, VGPR11, VGPR12, VGPR13, VGPR14, VGPR15, 840b57cec5SDimitry Andric VGPR16, VGPR17, VGPR18, VGPR19, VGPR20, VGPR21, VGPR22, VGPR23, 850b57cec5SDimitry Andric VGPR24, VGPR25, VGPR26, VGPR27, VGPR28, VGPR29, VGPR30, VGPR31, 860b57cec5SDimitry Andric VGPR32, VGPR33, VGPR34, VGPR35, VGPR36, VGPR37, VGPR38, VGPR39, 870b57cec5SDimitry Andric VGPR40, VGPR41, VGPR42, VGPR43, VGPR44, VGPR45, VGPR46, VGPR47, 880b57cec5SDimitry Andric VGPR48, VGPR49, VGPR50, VGPR51, VGPR52, VGPR53, VGPR54, VGPR55, 890b57cec5SDimitry Andric VGPR56, VGPR57, VGPR58, VGPR59, VGPR60, VGPR61, VGPR62, VGPR63, 900b57cec5SDimitry Andric VGPR64, VGPR65, VGPR66, VGPR67, VGPR68, VGPR69, VGPR70, VGPR71, 910b57cec5SDimitry Andric VGPR72, VGPR73, VGPR74, VGPR75, VGPR76, VGPR77, VGPR78, VGPR79, 920b57cec5SDimitry Andric VGPR80, VGPR81, VGPR82, VGPR83, VGPR84, VGPR85, VGPR86, VGPR87, 930b57cec5SDimitry Andric VGPR88, VGPR89, VGPR90, VGPR91, VGPR92, VGPR93, VGPR94, VGPR95, 940b57cec5SDimitry Andric VGPR96, VGPR97, VGPR98, VGPR99, VGPR100, VGPR101, VGPR102, VGPR103, 950b57cec5SDimitry Andric VGPR104, VGPR105, VGPR106, VGPR107, VGPR108, VGPR109, VGPR110, VGPR111, 960b57cec5SDimitry Andric VGPR112, VGPR113, VGPR114, VGPR115, VGPR116, VGPR117, VGPR118, VGPR119, 970b57cec5SDimitry Andric VGPR120, VGPR121, VGPR122, VGPR123, VGPR124, VGPR125, VGPR126, VGPR127, 980b57cec5SDimitry Andric VGPR128, VGPR129, VGPR130, VGPR131, VGPR132, VGPR133, VGPR134, VGPR135 990b57cec5SDimitry Andric ]>>> 1000b57cec5SDimitry Andric]>; 1010b57cec5SDimitry Andric 1020b57cec5SDimitry Andricdef RetCC_SI_Shader : CallingConv<[ 103fe6060f1SDimitry Andric CCIfType<[i1, i16], CCIfExtend<CCPromoteToType<i32>>>, 104bdd1243dSDimitry Andric CCIfType<[i32, i16, v2i16] , CCAssignToReg<[ 1050b57cec5SDimitry Andric SGPR0, SGPR1, SGPR2, SGPR3, SGPR4, SGPR5, SGPR6, SGPR7, 1060b57cec5SDimitry Andric SGPR8, SGPR9, SGPR10, SGPR11, SGPR12, SGPR13, SGPR14, SGPR15, 1070b57cec5SDimitry Andric SGPR16, SGPR17, SGPR18, SGPR19, SGPR20, SGPR21, SGPR22, SGPR23, 1080b57cec5SDimitry Andric SGPR24, SGPR25, SGPR26, SGPR27, SGPR28, SGPR29, SGPR30, SGPR31, 1090b57cec5SDimitry Andric SGPR32, SGPR33, SGPR34, SGPR35, SGPR36, SGPR37, SGPR38, SGPR39, 1108bcb0991SDimitry Andric SGPR40, SGPR41, SGPR42, SGPR43 1110b57cec5SDimitry Andric ]>>, 1120b57cec5SDimitry Andric 1130b57cec5SDimitry Andric // 32*4 + 4 is the minimum for a fetch shader with 32 outputs. 1141db9f3b2SDimitry Andric CCIfType<[f32, f16, v2f16, bf16, v2bf16] , CCAssignToReg<[ 1150b57cec5SDimitry Andric VGPR0, VGPR1, VGPR2, VGPR3, VGPR4, VGPR5, VGPR6, VGPR7, 1160b57cec5SDimitry Andric VGPR8, VGPR9, VGPR10, VGPR11, VGPR12, VGPR13, VGPR14, VGPR15, 1170b57cec5SDimitry Andric VGPR16, VGPR17, VGPR18, VGPR19, VGPR20, VGPR21, VGPR22, VGPR23, 1180b57cec5SDimitry Andric VGPR24, VGPR25, VGPR26, VGPR27, VGPR28, VGPR29, VGPR30, VGPR31, 1190b57cec5SDimitry Andric VGPR32, VGPR33, VGPR34, VGPR35, VGPR36, VGPR37, VGPR38, VGPR39, 1200b57cec5SDimitry Andric VGPR40, VGPR41, VGPR42, VGPR43, VGPR44, VGPR45, VGPR46, VGPR47, 1210b57cec5SDimitry Andric VGPR48, VGPR49, VGPR50, VGPR51, VGPR52, VGPR53, VGPR54, VGPR55, 1220b57cec5SDimitry Andric VGPR56, VGPR57, VGPR58, VGPR59, VGPR60, VGPR61, VGPR62, VGPR63, 1230b57cec5SDimitry Andric VGPR64, VGPR65, VGPR66, VGPR67, VGPR68, VGPR69, VGPR70, VGPR71, 1240b57cec5SDimitry Andric VGPR72, VGPR73, VGPR74, VGPR75, VGPR76, VGPR77, VGPR78, VGPR79, 1250b57cec5SDimitry Andric VGPR80, VGPR81, VGPR82, VGPR83, VGPR84, VGPR85, VGPR86, VGPR87, 1260b57cec5SDimitry Andric VGPR88, VGPR89, VGPR90, VGPR91, VGPR92, VGPR93, VGPR94, VGPR95, 1270b57cec5SDimitry Andric VGPR96, VGPR97, VGPR98, VGPR99, VGPR100, VGPR101, VGPR102, VGPR103, 1280b57cec5SDimitry Andric VGPR104, VGPR105, VGPR106, VGPR107, VGPR108, VGPR109, VGPR110, VGPR111, 1290b57cec5SDimitry Andric VGPR112, VGPR113, VGPR114, VGPR115, VGPR116, VGPR117, VGPR118, VGPR119, 1300b57cec5SDimitry Andric VGPR120, VGPR121, VGPR122, VGPR123, VGPR124, VGPR125, VGPR126, VGPR127, 1310b57cec5SDimitry Andric VGPR128, VGPR129, VGPR130, VGPR131, VGPR132, VGPR133, VGPR134, VGPR135 1320b57cec5SDimitry Andric ]>> 1330b57cec5SDimitry Andric]>; 1340b57cec5SDimitry Andric 1355ffd83dbSDimitry Andricdef CSR_AMDGPU_VGPRs : CalleeSavedRegs< 1365ffd83dbSDimitry Andric // The CSRs & scratch-registers are interleaved at a split boundary of 8. 1375ffd83dbSDimitry Andric (add (sequence "VGPR%u", 40, 47), 1385ffd83dbSDimitry Andric (sequence "VGPR%u", 56, 63), 1395ffd83dbSDimitry Andric (sequence "VGPR%u", 72, 79), 1405ffd83dbSDimitry Andric (sequence "VGPR%u", 88, 95), 1415ffd83dbSDimitry Andric (sequence "VGPR%u", 104, 111), 1425ffd83dbSDimitry Andric (sequence "VGPR%u", 120, 127), 1435ffd83dbSDimitry Andric (sequence "VGPR%u", 136, 143), 1445ffd83dbSDimitry Andric (sequence "VGPR%u", 152, 159), 1455ffd83dbSDimitry Andric (sequence "VGPR%u", 168, 175), 1465ffd83dbSDimitry Andric (sequence "VGPR%u", 184, 191), 1475ffd83dbSDimitry Andric (sequence "VGPR%u", 200, 207), 1485ffd83dbSDimitry Andric (sequence "VGPR%u", 216, 223), 1495ffd83dbSDimitry Andric (sequence "VGPR%u", 232, 239), 1505ffd83dbSDimitry Andric (sequence "VGPR%u", 248, 255)) 1515ffd83dbSDimitry Andric>; 1525ffd83dbSDimitry Andric 15381ad6265SDimitry Andricdef CSR_AMDGPU_AGPRs : CalleeSavedRegs< 154fe6060f1SDimitry Andric (sequence "AGPR%u", 32, 255) 155fe6060f1SDimitry Andric>; 156fe6060f1SDimitry Andric 15781ad6265SDimitry Andricdef CSR_AMDGPU_SGPRs : CalleeSavedRegs< 15881ad6265SDimitry Andric (sequence "SGPR%u", 30, 105) 1590b57cec5SDimitry Andric>; 1600b57cec5SDimitry Andric 16181ad6265SDimitry Andricdef CSR_AMDGPU_SI_Gfx_SGPRs : CalleeSavedRegs< 16281ad6265SDimitry Andric (add (sequence "SGPR%u", 4, 31), (sequence "SGPR%u", 64, 105)) 163349cc55cSDimitry Andric>; 164349cc55cSDimitry Andric 16581ad6265SDimitry Andricdef CSR_AMDGPU : CalleeSavedRegs< 16681ad6265SDimitry Andric (add CSR_AMDGPU_VGPRs, CSR_AMDGPU_SGPRs) 167349cc55cSDimitry Andric>; 168349cc55cSDimitry Andric 16981ad6265SDimitry Andricdef CSR_AMDGPU_GFX90AInsts : CalleeSavedRegs< 17081ad6265SDimitry Andric (add CSR_AMDGPU, CSR_AMDGPU_AGPRs) 171fe6060f1SDimitry Andric>; 172fe6060f1SDimitry Andric 173349cc55cSDimitry Andricdef CSR_AMDGPU_SI_Gfx : CalleeSavedRegs< 17481ad6265SDimitry Andric (add CSR_AMDGPU_VGPRs, CSR_AMDGPU_SI_Gfx_SGPRs) 175349cc55cSDimitry Andric>; 176349cc55cSDimitry Andric 17781ad6265SDimitry Andricdef CSR_AMDGPU_SI_Gfx_GFX90AInsts : CalleeSavedRegs< 17881ad6265SDimitry Andric (add CSR_AMDGPU_SI_Gfx, CSR_AMDGPU_AGPRs) 179349cc55cSDimitry Andric>; 180349cc55cSDimitry Andric 1815f757f3fSDimitry Andricdef CSR_AMDGPU_CS_ChainPreserve : CalleeSavedRegs< 1825f757f3fSDimitry Andric (sequence "VGPR%u", 8, 255) 1835f757f3fSDimitry Andric>; 1845f757f3fSDimitry Andric 185e8d8bef9SDimitry Andricdef CSR_AMDGPU_NoRegs : CalleeSavedRegs<(add)>; 186e8d8bef9SDimitry Andric 1870b57cec5SDimitry Andric// Calling convention for leaf functions 1880b57cec5SDimitry Andricdef CC_AMDGPU_Func : CallingConv<[ 1890b57cec5SDimitry Andric CCIfByVal<CCPassByVal<4, 4>>, 1900b57cec5SDimitry Andric CCIfType<[i1], CCPromoteToType<i32>>, 191e8d8bef9SDimitry Andric CCIfType<[i8, i16], CCIfExtend<CCPromoteToType<i32>>>, 1925f757f3fSDimitry Andric 1931db9f3b2SDimitry Andric CCIfInReg<CCIfType<[f32, i32, f16, i16, v2i16, v2f16, bf16, v2bf16] , CCAssignToReg< 1945f757f3fSDimitry Andric !foreach(i, !range(0, 30), !cast<Register>("SGPR"#i)) // SGPR0-29 1955f757f3fSDimitry Andric >>>, 1965f757f3fSDimitry Andric 1971db9f3b2SDimitry Andric CCIfType<[i32, f32, i16, f16, v2i16, v2f16, i1, bf16, v2bf16], CCAssignToReg<[ 1980b57cec5SDimitry Andric VGPR0, VGPR1, VGPR2, VGPR3, VGPR4, VGPR5, VGPR6, VGPR7, 1990b57cec5SDimitry Andric VGPR8, VGPR9, VGPR10, VGPR11, VGPR12, VGPR13, VGPR14, VGPR15, 2000b57cec5SDimitry Andric VGPR16, VGPR17, VGPR18, VGPR19, VGPR20, VGPR21, VGPR22, VGPR23, 2010b57cec5SDimitry Andric VGPR24, VGPR25, VGPR26, VGPR27, VGPR28, VGPR29, VGPR30, VGPR31]>>, 2021db9f3b2SDimitry Andric CCIfType<[i32, f32, v2i16, v2f16, i16, f16, i1, bf16, v2bf16], CCAssignToStack<4, 4>> 2030b57cec5SDimitry Andric]>; 2040b57cec5SDimitry Andric 2050b57cec5SDimitry Andric// Calling convention for leaf functions 2060b57cec5SDimitry Andricdef RetCC_AMDGPU_Func : CallingConv<[ 2070b57cec5SDimitry Andric CCIfType<[i1], CCPromoteToType<i32>>, 2080b57cec5SDimitry Andric CCIfType<[i1, i16], CCIfExtend<CCPromoteToType<i32>>>, 2091db9f3b2SDimitry Andric CCIfType<[i32, f32, i16, f16, v2i16, v2f16, bf16, v2bf16], CCAssignToReg<[ 2100b57cec5SDimitry Andric VGPR0, VGPR1, VGPR2, VGPR3, VGPR4, VGPR5, VGPR6, VGPR7, 2110b57cec5SDimitry Andric VGPR8, VGPR9, VGPR10, VGPR11, VGPR12, VGPR13, VGPR14, VGPR15, 2120b57cec5SDimitry Andric VGPR16, VGPR17, VGPR18, VGPR19, VGPR20, VGPR21, VGPR22, VGPR23, 2130b57cec5SDimitry Andric VGPR24, VGPR25, VGPR26, VGPR27, VGPR28, VGPR29, VGPR30, VGPR31]>>, 2140b57cec5SDimitry Andric]>; 2150b57cec5SDimitry Andric 2160b57cec5SDimitry Andricdef CC_AMDGPU : CallingConv<[ 2170b57cec5SDimitry Andric CCIf<"static_cast<const GCNSubtarget&>" 2180b57cec5SDimitry Andric "(State.getMachineFunction().getSubtarget()).getGeneration() >= " 2190b57cec5SDimitry Andric "AMDGPUSubtarget::SOUTHERN_ISLANDS", 220e8d8bef9SDimitry Andric CCDelegateTo<CC_SI_SHADER>>, 2210b57cec5SDimitry Andric CCIf<"static_cast<const GCNSubtarget&>" 2220b57cec5SDimitry Andric "(State.getMachineFunction().getSubtarget()).getGeneration() >= " 2230b57cec5SDimitry Andric "AMDGPUSubtarget::SOUTHERN_ISLANDS && State.getCallingConv() == CallingConv::C", 2240b57cec5SDimitry Andric CCDelegateTo<CC_AMDGPU_Func>> 2250b57cec5SDimitry Andric]>; 22681ad6265SDimitry Andric 2275f757f3fSDimitry Andricdef CC_AMDGPU_CS_CHAIN : CallingConv<[ 2281db9f3b2SDimitry Andric CCIfInReg<CCIfType<[f32, i32, f16, i16, v2i16, v2f16, bf16, v2bf16] , CCAssignToReg< 2295f757f3fSDimitry Andric !foreach(i, !range(105), !cast<Register>("SGPR"#i)) 2305f757f3fSDimitry Andric >>>, 2315f757f3fSDimitry Andric 2321db9f3b2SDimitry Andric CCIfNotInReg<CCIfType<[f32, i32, f16, i16, v2i16, v2f16, bf16, v2bf16] , CCAssignToReg< 2335f757f3fSDimitry Andric !foreach(i, !range(8, 255), !cast<Register>("VGPR"#i)) 2345f757f3fSDimitry Andric >>> 2355f757f3fSDimitry Andric]>; 2365f757f3fSDimitry Andric 23781ad6265SDimitry Andric// Trivial class to denote when a def is used only to get a RegMask, i.e. 23881ad6265SDimitry Andric// SaveList is ignored and the def is not used as part of any calling 23981ad6265SDimitry Andric// convention. 24081ad6265SDimitry Andricclass RegMask<dag mask> : CalleeSavedRegs<mask>; 24181ad6265SDimitry Andric 24281ad6265SDimitry Andricdef AMDGPU_AllVGPRs : RegMask< 24381ad6265SDimitry Andric (sequence "VGPR%u", 0, 255) 24481ad6265SDimitry Andric>; 24581ad6265SDimitry Andric 24681ad6265SDimitry Andricdef AMDGPU_AllAGPRs : RegMask< 24781ad6265SDimitry Andric (sequence "AGPR%u", 0, 255) 24881ad6265SDimitry Andric>; 24981ad6265SDimitry Andric 25081ad6265SDimitry Andricdef AMDGPU_AllVectorRegs : RegMask< 25181ad6265SDimitry Andric (add AMDGPU_AllVGPRs, AMDGPU_AllAGPRs) 25281ad6265SDimitry Andric>; 25381ad6265SDimitry Andric 25481ad6265SDimitry Andricdef AMDGPU_AllAllocatableSRegs : RegMask< 25581ad6265SDimitry Andric (add (sequence "SGPR%u", 0, 105), VCC_LO, VCC_HI) 25681ad6265SDimitry Andric>; 257