brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.8 KiB · ce782b0 Raw
690 lines · cpp
1//===-- AMDGPUAsmUtils.cpp - AsmParser/InstPrinter common -----------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8#include "AMDGPUAsmUtils.h"9#include "AMDGPUBaseInfo.h"10#include "SIDefines.h"11 12namespace llvm::AMDGPU {13 14//===----------------------------------------------------------------------===//15// Custom Operands.16//17// A table of custom operands must be ordered by Encoding in ascending order18// to enable binary search lookup. Within entries that share the same encoding,19// "primary" operand names should be listed first followed by aliases if any.20//21//===----------------------------------------------------------------------===//22 23/// Map from the encoding of a sendmsg/hwreg asm operand to it's name.24template <size_t N>25static StringRef getNameFromOperandTable(const CustomOperand (&Table)[N],26                                         unsigned Encoding,27                                         const MCSubtargetInfo &STI) {28  // Find the first entry with the target encoding29  auto First =30      std::lower_bound(Table, Table + N, Encoding,31                       [](const CustomOperand &Entry, unsigned TargetEncoding) {32                         return Entry.Encoding < TargetEncoding;33                       });34 35  // Search through entries with the same encoding to find the first valid one36  for (auto It = First; It != Table + N && It->Encoding == Encoding; ++It) {37    if (It->Encoding == Encoding && (!It->Cond || It->Cond(STI)))38      return It->Name;39  }40 41  return "";42}43 44/// Map from a symbolic name for a sendmsg/hwreg asm operand to it's encoding.45template <size_t N>46static int64_t getEncodingFromOperandTable(const CustomOperand (&Table)[N],47                                           StringRef Name,48                                           const MCSubtargetInfo &STI) {49  int64_t InvalidEncoding = OPR_ID_UNKNOWN;50  for (const CustomOperand &Entry : Table) {51    if (Entry.Name != Name)52      continue;53 54    if (!Entry.Cond || Entry.Cond(STI))55      return Entry.Encoding;56 57    InvalidEncoding = OPR_ID_UNSUPPORTED;58  }59 60  return InvalidEncoding;61}62 63namespace DepCtr {64 65// NOLINTBEGIN66const CustomOperandVal DepCtrInfo[] = {67  // Name               max dflt offset width  constraint68  {{"depctr_hold_cnt"},  1,   1,    7,    1,   isGFX10_BEncoding},69  {{"depctr_sa_sdst"},   1,   1,    0,    1},70  {{"depctr_va_vdst"},  15,  15,   12,    4},71  {{"depctr_va_sdst"},   7,   7,    9,    3},72  {{"depctr_va_ssrc"},   1,   1,    8,    1},73  {{"depctr_va_vcc"},    1,   1,    1,    1},74  {{"depctr_vm_vsrc"},   7,   7,    2,    3},75};76// NOLINTEND77 78const int DEP_CTR_SIZE =79    static_cast<int>(sizeof(DepCtrInfo) / sizeof(CustomOperandVal));80 81} // namespace DepCtr82 83namespace SendMsg {84 85// Disable lint checking here since it makes these tables unreadable.86// NOLINTBEGIN87// clang-format off88 89static constexpr CustomOperand MsgOperands[] = {90  {{"MSG_INTERRUPT"},           ID_INTERRUPT},91  {{"MSG_GS"},                  ID_GS_PreGFX11,             isNotGFX11Plus},92  {{"MSG_HS_TESSFACTOR"},       ID_HS_TESSFACTOR_GFX11Plus, isGFX11Plus},93  {{"MSG_GS_DONE"},             ID_GS_DONE_PreGFX11,        isNotGFX11Plus},94  {{"MSG_DEALLOC_VGPRS"},       ID_DEALLOC_VGPRS_GFX11Plus, isGFX11Plus},95  {{"MSG_SAVEWAVE"},            ID_SAVEWAVE,                isGFX8_GFX9_GFX10},96  {{"MSG_STALL_WAVE_GEN"},      ID_STALL_WAVE_GEN,          isGFX9_GFX10_GFX11},97  {{"MSG_HALT_WAVES"},          ID_HALT_WAVES,              isGFX9_GFX10_GFX11},98  {{"MSG_ORDERED_PS_DONE"},     ID_ORDERED_PS_DONE,         isGFX9_GFX10},99  {{"MSG_EARLY_PRIM_DEALLOC"},  ID_EARLY_PRIM_DEALLOC,      isGFX9_GFX10},100  {{"MSG_GS_ALLOC_REQ"},        ID_GS_ALLOC_REQ,            isGFX9Plus},101  {{"MSG_GET_DOORBELL"},        ID_GET_DOORBELL,            isGFX9_GFX10},102  {{"MSG_SAVEWAVE_HAS_TDM"},    ID_SAVEWAVE_HAS_TDM,        isGFX1250},103  {{"MSG_GET_DDID"},            ID_GET_DDID,                isGFX10},104  {{"MSG_SYSMSG"},              ID_SYSMSG},105  {{"MSG_RTN_GET_DOORBELL"},    ID_RTN_GET_DOORBELL,        isGFX11Plus},106  {{"MSG_RTN_GET_DDID"},        ID_RTN_GET_DDID,            isGFX11Plus},107  {{"MSG_RTN_GET_TMA"},         ID_RTN_GET_TMA,             isGFX11Plus},108  {{"MSG_RTN_GET_REALTIME"},    ID_RTN_GET_REALTIME,        isGFX11Plus},109  {{"MSG_RTN_SAVE_WAVE"},       ID_RTN_SAVE_WAVE,           isGFX11Plus},110  {{"MSG_RTN_GET_TBA"},         ID_RTN_GET_TBA,             isGFX11Plus},111  {{"MSG_RTN_GET_TBA_TO_PC"},   ID_RTN_GET_TBA_TO_PC,       isGFX11Plus},112  {{"MSG_RTN_GET_SE_AID_ID"},   ID_RTN_GET_SE_AID_ID,       isGFX12Plus},113  {{"MSG_RTN_GET_CLUSTER_BARRIER_STATE"}, ID_RTN_GET_CLUSTER_BARRIER_STATE,114                                                            isGFX1250},115};116 117static constexpr CustomOperand SysMsgOperands[] = {118  {{"SYSMSG_OP_ECC_ERR_INTERRUPT"},  OP_SYS_ECC_ERR_INTERRUPT},119  {{"SYSMSG_OP_REG_RD"},             OP_SYS_REG_RD},120  {{"SYSMSG_OP_HOST_TRAP_ACK"},      OP_SYS_HOST_TRAP_ACK,      isNotGFX9Plus},121  {{"SYSMSG_OP_TTRACE_PC"},          OP_SYS_TTRACE_PC},122};123 124static constexpr CustomOperand StreamMsgOperands[] = {125  {{"GS_OP_NOP"},       OP_GS_NOP},126  {{"GS_OP_CUT"},       OP_GS_CUT},127  {{"GS_OP_EMIT"},      OP_GS_EMIT},128  {{"GS_OP_EMIT_CUT"},  OP_GS_EMIT_CUT},129};130 131// clang-format on132// NOLINTEND133 134int64_t getMsgId(StringRef Name, const MCSubtargetInfo &STI) {135  return getEncodingFromOperandTable(MsgOperands, Name, STI);136}137 138StringRef getMsgName(uint64_t Encoding, const MCSubtargetInfo &STI) {139  return getNameFromOperandTable(MsgOperands, Encoding, STI);140}141 142int64_t getMsgOpId(int64_t MsgId, StringRef Name, const MCSubtargetInfo &STI) {143  if (MsgId == ID_SYSMSG)144    return getEncodingFromOperandTable(SysMsgOperands, Name, STI);145  return getEncodingFromOperandTable(StreamMsgOperands, Name, STI);146}147 148StringRef getMsgOpName(int64_t MsgId, uint64_t Encoding,149                       const MCSubtargetInfo &STI) {150  assert(msgRequiresOp(MsgId, STI) && "must have an operand");151 152  if (MsgId == ID_SYSMSG)153    return getNameFromOperandTable(SysMsgOperands, Encoding, STI);154  return getNameFromOperandTable(StreamMsgOperands, Encoding, STI);155}156 157} // namespace SendMsg158 159namespace Hwreg {160 161// Disable lint checking for this block since it makes the table unreadable.162// NOLINTBEGIN163// clang-format off164static constexpr CustomOperand Operands[] = {165  {{"HW_REG_WAVE_MODE"},              ID_MODE,                        isGFX12Plus},166  {{"HW_REG_MODE"},                   ID_MODE},167  {{"HW_REG_WAVE_STATUS"},            ID_STATUS,                      isGFX12Plus},168  {{"HW_REG_STATUS"},                 ID_STATUS},169  {{"HW_REG_TRAPSTS"},                ID_TRAPSTS,                     isNotGFX12Plus},170  {{"HW_REG_HW_ID"},                  ID_HW_ID,                       isNotGFX10Plus},171  {{"HW_REG_WAVE_STATE_PRIV"},        ID_STATE_PRIV,                  isGFX12Plus},172  {{"HW_REG_STATE_PRIV"},             ID_STATE_PRIV,                  isGFX12Plus},173  {{"HW_REG_WAVE_GPR_ALLOC"},         ID_GPR_ALLOC,                   isGFX12Plus},174  {{"HW_REG_GPR_ALLOC"},              ID_GPR_ALLOC},175  {{"HW_REG_WAVE_LDS_ALLOC"},         ID_LDS_ALLOC,                   isGFX12Plus},176  {{"HW_REG_LDS_ALLOC"},              ID_LDS_ALLOC},177  {{"HW_REG_IB_STS"},                 ID_IB_STS},178  {{"HW_REG_PERF_SNAPSHOT_DATA"},     ID_PERF_SNAPSHOT_DATA_gfx12,    isGFX12Plus},179  {{"HW_REG_PERF_SNAPSHOT_PC_LO"},    ID_PERF_SNAPSHOT_PC_LO_gfx12,   isGFX12Plus},180  {{"HW_REG_PERF_SNAPSHOT_PC_HI"},    ID_PERF_SNAPSHOT_PC_HI_gfx12,   isGFX12Plus},181  {{"HW_REG_SH_MEM_BASES"},           ID_MEM_BASES,                   isGFX9_GFX10_GFX11},182  {{"HW_REG_PERF_SNAPSHOT_DATA1"},    ID_PERF_SNAPSHOT_DATA1,         isGFX12Plus},183  {{"HW_REG_TBA_LO"},                 ID_TBA_LO,                      isGFX9_GFX10},184  {{"HW_REG_PERF_SNAPSHOT_DATA2"},    ID_PERF_SNAPSHOT_DATA2,         isGFX12Plus},185  {{"HW_REG_TBA_HI"},                 ID_TBA_HI,                      isGFX9_GFX10},186  {{"HW_REG_WAVE_EXCP_FLAG_PRIV"},    ID_EXCP_FLAG_PRIV,              isGFX12Plus},187  {{"HW_REG_EXCP_FLAG_PRIV"},         ID_EXCP_FLAG_PRIV,              isGFX12Plus},188  {{"HW_REG_TMA_LO"},                 ID_TMA_LO,                      isGFX9_GFX10},189  {{"HW_REG_PERF_SNAPSHOT_PC_LO"},    ID_PERF_SNAPSHOT_PC_LO_gfx11,   isGFX11},190  {{"HW_REG_WAVE_EXCP_FLAG_USER"},    ID_EXCP_FLAG_USER,              isGFX12Plus},191  {{"HW_REG_EXCP_FLAG_USER"},         ID_EXCP_FLAG_USER,              isGFX12Plus},192  {{"HW_REG_TMA_HI"},                 ID_TMA_HI,                      isGFX9_GFX10},193  {{"HW_REG_PERF_SNAPSHOT_PC_HI"},    ID_PERF_SNAPSHOT_PC_HI_gfx11,   isGFX11},194  {{"HW_REG_WAVE_TRAP_CTRL"},         ID_TRAP_CTRL,                   isGFX12Plus},195  {{"HW_REG_TRAP_CTRL"},              ID_TRAP_CTRL,                   isGFX12Plus},196  {{"HW_REG_FLAT_SCR_LO"},            ID_FLAT_SCR_LO,                 isGFX10_GFX11},197  {{"HW_REG_WAVE_SCRATCH_BASE_LO"},   ID_FLAT_SCR_LO,                 isGFX12Plus},198  {{"HW_REG_SCRATCH_BASE_LO"},        ID_FLAT_SCR_LO,                 isGFX12Plus},199  {{"HW_REG_XCC_ID"},                 ID_XCC_ID,                      isGFX940},200  {{"HW_REG_FLAT_SCR_HI"},            ID_FLAT_SCR_HI,                 isGFX10_GFX11},201  {{"HW_REG_WAVE_SCRATCH_BASE_HI"},   ID_FLAT_SCR_HI,                 isGFX12Plus},202  {{"HW_REG_SCRATCH_BASE_HI"},        ID_FLAT_SCR_HI,                 isGFX12Plus},203  {{"HW_REG_SQ_PERF_SNAPSHOT_DATA"},  ID_SQ_PERF_SNAPSHOT_DATA,       isGFX940},204  {{"HW_REG_XNACK_MASK"},             ID_XNACK_MASK,                  isGFX10Before1030},205  {{"HW_REG_SQ_PERF_SNAPSHOT_DATA1"}, ID_SQ_PERF_SNAPSHOT_DATA1,      isGFX940},206  {{"HW_REG_WAVE_HW_ID1"},            ID_HW_ID1,                      isGFX12Plus},207  {{"HW_REG_HW_ID1"},                 ID_HW_ID1,                      isGFX10Plus},208  {{"HW_REG_HW_ID"},                  ID_HW_ID1,                      isGFX10},209  {{"HW_REG_SQ_PERF_SNAPSHOT_PC_LO"}, ID_SQ_PERF_SNAPSHOT_PC_LO,      isGFX940},210  {{"HW_REG_WAVE_HW_ID2"},            ID_HW_ID2,                      isGFX12Plus},211  {{"HW_REG_HW_ID2"},                 ID_HW_ID2,                      isGFX10Plus},212  {{"HW_REG_SQ_PERF_SNAPSHOT_PC_HI"}, ID_SQ_PERF_SNAPSHOT_PC_HI,      isGFX940},213  {{"HW_REG_POPS_PACKER"},            ID_POPS_PACKER,                 isGFX10},214  {{"HW_REG_WAVE_SCHED_MODE"},        ID_SCHED_MODE,                  isGFX12Plus},215  {{"HW_REG_PERF_SNAPSHOT_DATA"},     ID_PERF_SNAPSHOT_DATA_gfx11,    isGFX11},216  {{"HW_REG_IB_STS2"},                ID_IB_STS2,                     isGFX1250},217  {{"HW_REG_SHADER_CYCLES"},          ID_SHADER_CYCLES,               isGFX10_3_GFX11},218  {{"HW_REG_SHADER_CYCLES_LO"},       ID_SHADER_CYCLES,               isGFX12Plus},219  {{"HW_REG_SHADER_CYCLES_HI"},       ID_SHADER_CYCLES_HI,            isGFX12Plus},220  {{"HW_REG_WAVE_DVGPR_ALLOC_LO"},    ID_DVGPR_ALLOC_LO,              isGFX12Plus},221  {{"HW_REG_DVGPR_ALLOC_LO"},         ID_DVGPR_ALLOC_LO,              isGFX12Plus},222  {{"HW_REG_WAVE_DVGPR_ALLOC_HI"},    ID_DVGPR_ALLOC_HI,              isGFX12Plus},223  {{"HW_REG_DVGPR_ALLOC_HI"},         ID_DVGPR_ALLOC_HI,              isGFX12Plus},224  {{"HW_REG_XNACK_STATE_PRIV"},       ID_XNACK_STATE_PRIV,            isGFX1250},225  {{"HW_REG_XNACK_MASK"},             ID_XNACK_MASK_gfx1250,          isGFX1250},226 227};228// clang-format on229// NOLINTEND230 231int64_t getHwregId(StringRef Name, const MCSubtargetInfo &STI) {232  return getEncodingFromOperandTable(Operands, Name, STI);233}234 235StringRef getHwreg(uint64_t Encoding, const MCSubtargetInfo &STI) {236  return getNameFromOperandTable(Operands, Encoding, STI);237}238 239} // namespace Hwreg240 241namespace MTBUFFormat {242 243StringLiteral const DfmtSymbolic[] = {244  "BUF_DATA_FORMAT_INVALID",245  "BUF_DATA_FORMAT_8",246  "BUF_DATA_FORMAT_16",247  "BUF_DATA_FORMAT_8_8",248  "BUF_DATA_FORMAT_32",249  "BUF_DATA_FORMAT_16_16",250  "BUF_DATA_FORMAT_10_11_11",251  "BUF_DATA_FORMAT_11_11_10",252  "BUF_DATA_FORMAT_10_10_10_2",253  "BUF_DATA_FORMAT_2_10_10_10",254  "BUF_DATA_FORMAT_8_8_8_8",255  "BUF_DATA_FORMAT_32_32",256  "BUF_DATA_FORMAT_16_16_16_16",257  "BUF_DATA_FORMAT_32_32_32",258  "BUF_DATA_FORMAT_32_32_32_32",259  "BUF_DATA_FORMAT_RESERVED_15"260};261 262StringLiteral const NfmtSymbolicGFX10[] = {263  "BUF_NUM_FORMAT_UNORM",264  "BUF_NUM_FORMAT_SNORM",265  "BUF_NUM_FORMAT_USCALED",266  "BUF_NUM_FORMAT_SSCALED",267  "BUF_NUM_FORMAT_UINT",268  "BUF_NUM_FORMAT_SINT",269  "",270  "BUF_NUM_FORMAT_FLOAT"271};272 273StringLiteral const NfmtSymbolicSICI[] = {274  "BUF_NUM_FORMAT_UNORM",275  "BUF_NUM_FORMAT_SNORM",276  "BUF_NUM_FORMAT_USCALED",277  "BUF_NUM_FORMAT_SSCALED",278  "BUF_NUM_FORMAT_UINT",279  "BUF_NUM_FORMAT_SINT",280  "BUF_NUM_FORMAT_SNORM_OGL",281  "BUF_NUM_FORMAT_FLOAT"282};283 284StringLiteral const NfmtSymbolicVI[] = {    // VI and GFX9285  "BUF_NUM_FORMAT_UNORM",286  "BUF_NUM_FORMAT_SNORM",287  "BUF_NUM_FORMAT_USCALED",288  "BUF_NUM_FORMAT_SSCALED",289  "BUF_NUM_FORMAT_UINT",290  "BUF_NUM_FORMAT_SINT",291  "BUF_NUM_FORMAT_RESERVED_6",292  "BUF_NUM_FORMAT_FLOAT"293};294 295StringLiteral const UfmtSymbolicGFX10[] = {296  "BUF_FMT_INVALID",297 298  "BUF_FMT_8_UNORM",299  "BUF_FMT_8_SNORM",300  "BUF_FMT_8_USCALED",301  "BUF_FMT_8_SSCALED",302  "BUF_FMT_8_UINT",303  "BUF_FMT_8_SINT",304 305  "BUF_FMT_16_UNORM",306  "BUF_FMT_16_SNORM",307  "BUF_FMT_16_USCALED",308  "BUF_FMT_16_SSCALED",309  "BUF_FMT_16_UINT",310  "BUF_FMT_16_SINT",311  "BUF_FMT_16_FLOAT",312 313  "BUF_FMT_8_8_UNORM",314  "BUF_FMT_8_8_SNORM",315  "BUF_FMT_8_8_USCALED",316  "BUF_FMT_8_8_SSCALED",317  "BUF_FMT_8_8_UINT",318  "BUF_FMT_8_8_SINT",319 320  "BUF_FMT_32_UINT",321  "BUF_FMT_32_SINT",322  "BUF_FMT_32_FLOAT",323 324  "BUF_FMT_16_16_UNORM",325  "BUF_FMT_16_16_SNORM",326  "BUF_FMT_16_16_USCALED",327  "BUF_FMT_16_16_SSCALED",328  "BUF_FMT_16_16_UINT",329  "BUF_FMT_16_16_SINT",330  "BUF_FMT_16_16_FLOAT",331 332  "BUF_FMT_10_11_11_UNORM",333  "BUF_FMT_10_11_11_SNORM",334  "BUF_FMT_10_11_11_USCALED",335  "BUF_FMT_10_11_11_SSCALED",336  "BUF_FMT_10_11_11_UINT",337  "BUF_FMT_10_11_11_SINT",338  "BUF_FMT_10_11_11_FLOAT",339 340  "BUF_FMT_11_11_10_UNORM",341  "BUF_FMT_11_11_10_SNORM",342  "BUF_FMT_11_11_10_USCALED",343  "BUF_FMT_11_11_10_SSCALED",344  "BUF_FMT_11_11_10_UINT",345  "BUF_FMT_11_11_10_SINT",346  "BUF_FMT_11_11_10_FLOAT",347 348  "BUF_FMT_10_10_10_2_UNORM",349  "BUF_FMT_10_10_10_2_SNORM",350  "BUF_FMT_10_10_10_2_USCALED",351  "BUF_FMT_10_10_10_2_SSCALED",352  "BUF_FMT_10_10_10_2_UINT",353  "BUF_FMT_10_10_10_2_SINT",354 355  "BUF_FMT_2_10_10_10_UNORM",356  "BUF_FMT_2_10_10_10_SNORM",357  "BUF_FMT_2_10_10_10_USCALED",358  "BUF_FMT_2_10_10_10_SSCALED",359  "BUF_FMT_2_10_10_10_UINT",360  "BUF_FMT_2_10_10_10_SINT",361 362  "BUF_FMT_8_8_8_8_UNORM",363  "BUF_FMT_8_8_8_8_SNORM",364  "BUF_FMT_8_8_8_8_USCALED",365  "BUF_FMT_8_8_8_8_SSCALED",366  "BUF_FMT_8_8_8_8_UINT",367  "BUF_FMT_8_8_8_8_SINT",368 369  "BUF_FMT_32_32_UINT",370  "BUF_FMT_32_32_SINT",371  "BUF_FMT_32_32_FLOAT",372 373  "BUF_FMT_16_16_16_16_UNORM",374  "BUF_FMT_16_16_16_16_SNORM",375  "BUF_FMT_16_16_16_16_USCALED",376  "BUF_FMT_16_16_16_16_SSCALED",377  "BUF_FMT_16_16_16_16_UINT",378  "BUF_FMT_16_16_16_16_SINT",379  "BUF_FMT_16_16_16_16_FLOAT",380 381  "BUF_FMT_32_32_32_UINT",382  "BUF_FMT_32_32_32_SINT",383  "BUF_FMT_32_32_32_FLOAT",384  "BUF_FMT_32_32_32_32_UINT",385  "BUF_FMT_32_32_32_32_SINT",386  "BUF_FMT_32_32_32_32_FLOAT"387};388 389unsigned const DfmtNfmt2UFmtGFX10[] = {390  DFMT_INVALID     | (NFMT_UNORM   << NFMT_SHIFT),391 392  DFMT_8           | (NFMT_UNORM   << NFMT_SHIFT),393  DFMT_8           | (NFMT_SNORM   << NFMT_SHIFT),394  DFMT_8           | (NFMT_USCALED << NFMT_SHIFT),395  DFMT_8           | (NFMT_SSCALED << NFMT_SHIFT),396  DFMT_8           | (NFMT_UINT    << NFMT_SHIFT),397  DFMT_8           | (NFMT_SINT    << NFMT_SHIFT),398 399  DFMT_16          | (NFMT_UNORM   << NFMT_SHIFT),400  DFMT_16          | (NFMT_SNORM   << NFMT_SHIFT),401  DFMT_16          | (NFMT_USCALED << NFMT_SHIFT),402  DFMT_16          | (NFMT_SSCALED << NFMT_SHIFT),403  DFMT_16          | (NFMT_UINT    << NFMT_SHIFT),404  DFMT_16          | (NFMT_SINT    << NFMT_SHIFT),405  DFMT_16          | (NFMT_FLOAT   << NFMT_SHIFT),406 407  DFMT_8_8         | (NFMT_UNORM   << NFMT_SHIFT),408  DFMT_8_8         | (NFMT_SNORM   << NFMT_SHIFT),409  DFMT_8_8         | (NFMT_USCALED << NFMT_SHIFT),410  DFMT_8_8         | (NFMT_SSCALED << NFMT_SHIFT),411  DFMT_8_8         | (NFMT_UINT    << NFMT_SHIFT),412  DFMT_8_8         | (NFMT_SINT    << NFMT_SHIFT),413 414  DFMT_32          | (NFMT_UINT    << NFMT_SHIFT),415  DFMT_32          | (NFMT_SINT    << NFMT_SHIFT),416  DFMT_32          | (NFMT_FLOAT   << NFMT_SHIFT),417 418  DFMT_16_16       | (NFMT_UNORM   << NFMT_SHIFT),419  DFMT_16_16       | (NFMT_SNORM   << NFMT_SHIFT),420  DFMT_16_16       | (NFMT_USCALED << NFMT_SHIFT),421  DFMT_16_16       | (NFMT_SSCALED << NFMT_SHIFT),422  DFMT_16_16       | (NFMT_UINT    << NFMT_SHIFT),423  DFMT_16_16       | (NFMT_SINT    << NFMT_SHIFT),424  DFMT_16_16       | (NFMT_FLOAT   << NFMT_SHIFT),425 426  DFMT_10_11_11    | (NFMT_UNORM   << NFMT_SHIFT),427  DFMT_10_11_11    | (NFMT_SNORM   << NFMT_SHIFT),428  DFMT_10_11_11    | (NFMT_USCALED << NFMT_SHIFT),429  DFMT_10_11_11    | (NFMT_SSCALED << NFMT_SHIFT),430  DFMT_10_11_11    | (NFMT_UINT    << NFMT_SHIFT),431  DFMT_10_11_11    | (NFMT_SINT    << NFMT_SHIFT),432  DFMT_10_11_11    | (NFMT_FLOAT   << NFMT_SHIFT),433 434  DFMT_11_11_10    | (NFMT_UNORM   << NFMT_SHIFT),435  DFMT_11_11_10    | (NFMT_SNORM   << NFMT_SHIFT),436  DFMT_11_11_10    | (NFMT_USCALED << NFMT_SHIFT),437  DFMT_11_11_10    | (NFMT_SSCALED << NFMT_SHIFT),438  DFMT_11_11_10    | (NFMT_UINT    << NFMT_SHIFT),439  DFMT_11_11_10    | (NFMT_SINT    << NFMT_SHIFT),440  DFMT_11_11_10    | (NFMT_FLOAT   << NFMT_SHIFT),441 442  DFMT_10_10_10_2  | (NFMT_UNORM   << NFMT_SHIFT),443  DFMT_10_10_10_2  | (NFMT_SNORM   << NFMT_SHIFT),444  DFMT_10_10_10_2  | (NFMT_USCALED << NFMT_SHIFT),445  DFMT_10_10_10_2  | (NFMT_SSCALED << NFMT_SHIFT),446  DFMT_10_10_10_2  | (NFMT_UINT    << NFMT_SHIFT),447  DFMT_10_10_10_2  | (NFMT_SINT    << NFMT_SHIFT),448 449  DFMT_2_10_10_10  | (NFMT_UNORM   << NFMT_SHIFT),450  DFMT_2_10_10_10  | (NFMT_SNORM   << NFMT_SHIFT),451  DFMT_2_10_10_10  | (NFMT_USCALED << NFMT_SHIFT),452  DFMT_2_10_10_10  | (NFMT_SSCALED << NFMT_SHIFT),453  DFMT_2_10_10_10  | (NFMT_UINT    << NFMT_SHIFT),454  DFMT_2_10_10_10  | (NFMT_SINT    << NFMT_SHIFT),455 456  DFMT_8_8_8_8     | (NFMT_UNORM   << NFMT_SHIFT),457  DFMT_8_8_8_8     | (NFMT_SNORM   << NFMT_SHIFT),458  DFMT_8_8_8_8     | (NFMT_USCALED << NFMT_SHIFT),459  DFMT_8_8_8_8     | (NFMT_SSCALED << NFMT_SHIFT),460  DFMT_8_8_8_8     | (NFMT_UINT    << NFMT_SHIFT),461  DFMT_8_8_8_8     | (NFMT_SINT    << NFMT_SHIFT),462 463  DFMT_32_32       | (NFMT_UINT    << NFMT_SHIFT),464  DFMT_32_32       | (NFMT_SINT    << NFMT_SHIFT),465  DFMT_32_32       | (NFMT_FLOAT   << NFMT_SHIFT),466 467  DFMT_16_16_16_16 | (NFMT_UNORM   << NFMT_SHIFT),468  DFMT_16_16_16_16 | (NFMT_SNORM   << NFMT_SHIFT),469  DFMT_16_16_16_16 | (NFMT_USCALED << NFMT_SHIFT),470  DFMT_16_16_16_16 | (NFMT_SSCALED << NFMT_SHIFT),471  DFMT_16_16_16_16 | (NFMT_UINT    << NFMT_SHIFT),472  DFMT_16_16_16_16 | (NFMT_SINT    << NFMT_SHIFT),473  DFMT_16_16_16_16 | (NFMT_FLOAT   << NFMT_SHIFT),474 475  DFMT_32_32_32    | (NFMT_UINT    << NFMT_SHIFT),476  DFMT_32_32_32    | (NFMT_SINT    << NFMT_SHIFT),477  DFMT_32_32_32    | (NFMT_FLOAT   << NFMT_SHIFT),478  DFMT_32_32_32_32 | (NFMT_UINT    << NFMT_SHIFT),479  DFMT_32_32_32_32 | (NFMT_SINT    << NFMT_SHIFT),480  DFMT_32_32_32_32 | (NFMT_FLOAT   << NFMT_SHIFT)481};482 483StringLiteral const UfmtSymbolicGFX11[] = {484  "BUF_FMT_INVALID",485 486  "BUF_FMT_8_UNORM",487  "BUF_FMT_8_SNORM",488  "BUF_FMT_8_USCALED",489  "BUF_FMT_8_SSCALED",490  "BUF_FMT_8_UINT",491  "BUF_FMT_8_SINT",492 493  "BUF_FMT_16_UNORM",494  "BUF_FMT_16_SNORM",495  "BUF_FMT_16_USCALED",496  "BUF_FMT_16_SSCALED",497  "BUF_FMT_16_UINT",498  "BUF_FMT_16_SINT",499  "BUF_FMT_16_FLOAT",500 501  "BUF_FMT_8_8_UNORM",502  "BUF_FMT_8_8_SNORM",503  "BUF_FMT_8_8_USCALED",504  "BUF_FMT_8_8_SSCALED",505  "BUF_FMT_8_8_UINT",506  "BUF_FMT_8_8_SINT",507 508  "BUF_FMT_32_UINT",509  "BUF_FMT_32_SINT",510  "BUF_FMT_32_FLOAT",511 512  "BUF_FMT_16_16_UNORM",513  "BUF_FMT_16_16_SNORM",514  "BUF_FMT_16_16_USCALED",515  "BUF_FMT_16_16_SSCALED",516  "BUF_FMT_16_16_UINT",517  "BUF_FMT_16_16_SINT",518  "BUF_FMT_16_16_FLOAT",519 520  "BUF_FMT_10_11_11_FLOAT",521 522  "BUF_FMT_11_11_10_FLOAT",523 524  "BUF_FMT_10_10_10_2_UNORM",525  "BUF_FMT_10_10_10_2_SNORM",526  "BUF_FMT_10_10_10_2_UINT",527  "BUF_FMT_10_10_10_2_SINT",528 529  "BUF_FMT_2_10_10_10_UNORM",530  "BUF_FMT_2_10_10_10_SNORM",531  "BUF_FMT_2_10_10_10_USCALED",532  "BUF_FMT_2_10_10_10_SSCALED",533  "BUF_FMT_2_10_10_10_UINT",534  "BUF_FMT_2_10_10_10_SINT",535 536  "BUF_FMT_8_8_8_8_UNORM",537  "BUF_FMT_8_8_8_8_SNORM",538  "BUF_FMT_8_8_8_8_USCALED",539  "BUF_FMT_8_8_8_8_SSCALED",540  "BUF_FMT_8_8_8_8_UINT",541  "BUF_FMT_8_8_8_8_SINT",542 543  "BUF_FMT_32_32_UINT",544  "BUF_FMT_32_32_SINT",545  "BUF_FMT_32_32_FLOAT",546 547  "BUF_FMT_16_16_16_16_UNORM",548  "BUF_FMT_16_16_16_16_SNORM",549  "BUF_FMT_16_16_16_16_USCALED",550  "BUF_FMT_16_16_16_16_SSCALED",551  "BUF_FMT_16_16_16_16_UINT",552  "BUF_FMT_16_16_16_16_SINT",553  "BUF_FMT_16_16_16_16_FLOAT",554 555  "BUF_FMT_32_32_32_UINT",556  "BUF_FMT_32_32_32_SINT",557  "BUF_FMT_32_32_32_FLOAT",558  "BUF_FMT_32_32_32_32_UINT",559  "BUF_FMT_32_32_32_32_SINT",560  "BUF_FMT_32_32_32_32_FLOAT"561};562 563unsigned const DfmtNfmt2UFmtGFX11[] = {564  DFMT_INVALID     | (NFMT_UNORM   << NFMT_SHIFT),565 566  DFMT_8           | (NFMT_UNORM   << NFMT_SHIFT),567  DFMT_8           | (NFMT_SNORM   << NFMT_SHIFT),568  DFMT_8           | (NFMT_USCALED << NFMT_SHIFT),569  DFMT_8           | (NFMT_SSCALED << NFMT_SHIFT),570  DFMT_8           | (NFMT_UINT    << NFMT_SHIFT),571  DFMT_8           | (NFMT_SINT    << NFMT_SHIFT),572 573  DFMT_16          | (NFMT_UNORM   << NFMT_SHIFT),574  DFMT_16          | (NFMT_SNORM   << NFMT_SHIFT),575  DFMT_16          | (NFMT_USCALED << NFMT_SHIFT),576  DFMT_16          | (NFMT_SSCALED << NFMT_SHIFT),577  DFMT_16          | (NFMT_UINT    << NFMT_SHIFT),578  DFMT_16          | (NFMT_SINT    << NFMT_SHIFT),579  DFMT_16          | (NFMT_FLOAT   << NFMT_SHIFT),580 581  DFMT_8_8         | (NFMT_UNORM   << NFMT_SHIFT),582  DFMT_8_8         | (NFMT_SNORM   << NFMT_SHIFT),583  DFMT_8_8         | (NFMT_USCALED << NFMT_SHIFT),584  DFMT_8_8         | (NFMT_SSCALED << NFMT_SHIFT),585  DFMT_8_8         | (NFMT_UINT    << NFMT_SHIFT),586  DFMT_8_8         | (NFMT_SINT    << NFMT_SHIFT),587 588  DFMT_32          | (NFMT_UINT    << NFMT_SHIFT),589  DFMT_32          | (NFMT_SINT    << NFMT_SHIFT),590  DFMT_32          | (NFMT_FLOAT   << NFMT_SHIFT),591 592  DFMT_16_16       | (NFMT_UNORM   << NFMT_SHIFT),593  DFMT_16_16       | (NFMT_SNORM   << NFMT_SHIFT),594  DFMT_16_16       | (NFMT_USCALED << NFMT_SHIFT),595  DFMT_16_16       | (NFMT_SSCALED << NFMT_SHIFT),596  DFMT_16_16       | (NFMT_UINT    << NFMT_SHIFT),597  DFMT_16_16       | (NFMT_SINT    << NFMT_SHIFT),598  DFMT_16_16       | (NFMT_FLOAT   << NFMT_SHIFT),599 600  DFMT_10_11_11    | (NFMT_FLOAT   << NFMT_SHIFT),601 602  DFMT_11_11_10    | (NFMT_FLOAT   << NFMT_SHIFT),603 604  DFMT_10_10_10_2  | (NFMT_UNORM   << NFMT_SHIFT),605  DFMT_10_10_10_2  | (NFMT_SNORM   << NFMT_SHIFT),606  DFMT_10_10_10_2  | (NFMT_UINT    << NFMT_SHIFT),607  DFMT_10_10_10_2  | (NFMT_SINT    << NFMT_SHIFT),608 609  DFMT_2_10_10_10  | (NFMT_UNORM   << NFMT_SHIFT),610  DFMT_2_10_10_10  | (NFMT_SNORM   << NFMT_SHIFT),611  DFMT_2_10_10_10  | (NFMT_USCALED << NFMT_SHIFT),612  DFMT_2_10_10_10  | (NFMT_SSCALED << NFMT_SHIFT),613  DFMT_2_10_10_10  | (NFMT_UINT    << NFMT_SHIFT),614  DFMT_2_10_10_10  | (NFMT_SINT    << NFMT_SHIFT),615 616  DFMT_8_8_8_8     | (NFMT_UNORM   << NFMT_SHIFT),617  DFMT_8_8_8_8     | (NFMT_SNORM   << NFMT_SHIFT),618  DFMT_8_8_8_8     | (NFMT_USCALED << NFMT_SHIFT),619  DFMT_8_8_8_8     | (NFMT_SSCALED << NFMT_SHIFT),620  DFMT_8_8_8_8     | (NFMT_UINT    << NFMT_SHIFT),621  DFMT_8_8_8_8     | (NFMT_SINT    << NFMT_SHIFT),622 623  DFMT_32_32       | (NFMT_UINT    << NFMT_SHIFT),624  DFMT_32_32       | (NFMT_SINT    << NFMT_SHIFT),625  DFMT_32_32       | (NFMT_FLOAT   << NFMT_SHIFT),626 627  DFMT_16_16_16_16 | (NFMT_UNORM   << NFMT_SHIFT),628  DFMT_16_16_16_16 | (NFMT_SNORM   << NFMT_SHIFT),629  DFMT_16_16_16_16 | (NFMT_USCALED << NFMT_SHIFT),630  DFMT_16_16_16_16 | (NFMT_SSCALED << NFMT_SHIFT),631  DFMT_16_16_16_16 | (NFMT_UINT    << NFMT_SHIFT),632  DFMT_16_16_16_16 | (NFMT_SINT    << NFMT_SHIFT),633  DFMT_16_16_16_16 | (NFMT_FLOAT   << NFMT_SHIFT),634 635  DFMT_32_32_32    | (NFMT_UINT    << NFMT_SHIFT),636  DFMT_32_32_32    | (NFMT_SINT    << NFMT_SHIFT),637  DFMT_32_32_32    | (NFMT_FLOAT   << NFMT_SHIFT),638  DFMT_32_32_32_32 | (NFMT_UINT    << NFMT_SHIFT),639  DFMT_32_32_32_32 | (NFMT_SINT    << NFMT_SHIFT),640  DFMT_32_32_32_32 | (NFMT_FLOAT   << NFMT_SHIFT)641};642 643} // namespace MTBUFFormat644 645namespace Swizzle {646 647// clang-format off648// This must be in sync with llvm::AMDGPU::Swizzle::Id enum members, see SIDefines.h.649const char *const IdSymbolic[] = {650  "QUAD_PERM",651  "BITMASK_PERM",652  "SWAP",653  "REVERSE",654  "BROADCAST",655  "FFT",656  "ROTATE",657};658// clang-format on659 660} // namespace Swizzle661 662namespace VGPRIndexMode {663 664// This must be in sync with llvm::AMDGPU::VGPRIndexMode::Id enum members, see SIDefines.h.665const char* const IdSymbolic[] = {666  "SRC0",667  "SRC1",668  "SRC2",669  "DST",670};671 672} // namespace VGPRIndexMode673 674namespace UCVersion {675 676ArrayRef<GFXVersion> getGFXVersions() {677  // GFX6, GFX8 and GFX9 don't support s_version and there are no678  // UC_VERSION_GFX* codes for them.679  static const GFXVersion Versions[] = {{"UC_VERSION_GFX7", 0},680                                        {"UC_VERSION_GFX10", 4},681                                        {"UC_VERSION_GFX11", 6},682                                        {"UC_VERSION_GFX12", 9}};683 684  return Versions;685}686 687} // namespace UCVersion688 689} // namespace llvm::AMDGPU690