brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · af08872 Raw
137 lines · cpp
1#include "clang/Basic/OffloadArch.h"2 3#include "llvm/ADT/STLExtras.h"4#include "llvm/ADT/StringRef.h"5 6namespace clang {7 8namespace {9struct OffloadArchToStringMap {10  OffloadArch Arch;11  const char *ArchName;12  const char *VirtualArchName;13};14} // namespace15 16#define SM(sm) {OffloadArch::SM_##sm, "sm_" #sm, "compute_" #sm}17#define GFX(gpu) {OffloadArch::GFX##gpu, "gfx" #gpu, "compute_amdgcn"}18static const OffloadArchToStringMap ArchNames[] = {19    // clang-format off20    {OffloadArch::UNUSED, "", ""},21    SM(20), {OffloadArch::SM_21, "sm_21", "compute_20"}, // Fermi22    SM(30), {OffloadArch::SM_32_, "sm_32", "compute_32"}, SM(35), SM(37),  // Kepler23    SM(50), SM(52), SM(53),          // Maxwell24    SM(60), SM(61), SM(62),          // Pascal25    SM(70), SM(72),                  // Volta26    SM(75),                          // Turing27    SM(80), SM(86),                  // Ampere28    SM(87),                          // Jetson/Drive AGX Orin29    SM(89),                          // Ada Lovelace30    SM(90),                          // Hopper31    SM(90a),                         // Hopper32    SM(100),                         // Blackwell33    SM(100a),                        // Blackwell34    SM(101),                         // Blackwell35    SM(101a),                        // Blackwell36    SM(103),                         // Blackwell37    SM(103a),                        // Blackwell38    SM(120),                         // Blackwell39    SM(120a),                        // Blackwell40    SM(121),                         // Blackwell41    SM(121a),                        // Blackwell42    GFX(600),  // gfx60043    GFX(601),  // gfx60144    GFX(602),  // gfx60245    GFX(700),  // gfx70046    GFX(701),  // gfx70147    GFX(702),  // gfx70248    GFX(703),  // gfx70349    GFX(704),  // gfx70450    GFX(705),  // gfx70551    GFX(801),  // gfx80152    GFX(802),  // gfx80253    GFX(803),  // gfx80354    GFX(805),  // gfx80555    GFX(810),  // gfx81056    {OffloadArch::GFX9_GENERIC, "gfx9-generic", "compute_amdgcn"},57    GFX(900),  // gfx90058    GFX(902),  // gfx90259    GFX(904),  // gfx90360    GFX(906),  // gfx90661    GFX(908),  // gfx90862    GFX(909),  // gfx90963    GFX(90a),  // gfx90a64    GFX(90c),  // gfx90c65    {OffloadArch::GFX9_4_GENERIC, "gfx9-4-generic", "compute_amdgcn"},66    GFX(942),  // gfx94267    GFX(950),  // gfx95068    {OffloadArch::GFX10_1_GENERIC, "gfx10-1-generic", "compute_amdgcn"},69    GFX(1010), // gfx101070    GFX(1011), // gfx101171    GFX(1012), // gfx101272    GFX(1013), // gfx101373    {OffloadArch::GFX10_3_GENERIC, "gfx10-3-generic", "compute_amdgcn"},74    GFX(1030), // gfx103075    GFX(1031), // gfx103176    GFX(1032), // gfx103277    GFX(1033), // gfx103378    GFX(1034), // gfx103479    GFX(1035), // gfx103580    GFX(1036), // gfx103681    {OffloadArch::GFX11_GENERIC, "gfx11-generic", "compute_amdgcn"},82    GFX(1100), // gfx110083    GFX(1101), // gfx110184    GFX(1102), // gfx110285    GFX(1103), // gfx110386    GFX(1150), // gfx115087    GFX(1151), // gfx115188    GFX(1152), // gfx115289    GFX(1153), // gfx115390    {OffloadArch::GFX12_GENERIC, "gfx12-generic", "compute_amdgcn"},91    GFX(1200), // gfx120092    GFX(1201), // gfx120193    GFX(1250), // gfx125094    GFX(1251), // gfx125195    {OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},96    // Intel CPUs97    {OffloadArch::GRANITERAPIDS, "graniterapids", ""},98    // Intel GPUS99    {OffloadArch::BMG_G21, "bmg_g21", ""},100    {OffloadArch::Generic, "generic", ""},101    // clang-format on102};103#undef SM104#undef GFX105 106const char *OffloadArchToString(OffloadArch A) {107  auto Result =108      llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {109        return A == Map.Arch;110      });111  if (Result == std::end(ArchNames))112    return "unknown";113  return Result->ArchName;114}115 116const char *OffloadArchToVirtualArchString(OffloadArch A) {117  auto Result =118      llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {119        return A == Map.Arch;120      });121  if (Result == std::end(ArchNames))122    return "unknown";123  return Result->VirtualArchName;124}125 126OffloadArch StringToOffloadArch(llvm::StringRef S) {127  auto Result =128      llvm::find_if(ArchNames, [S](const OffloadArchToStringMap &Map) {129        return S == Map.ArchName;130      });131  if (Result == std::end(ArchNames))132    return OffloadArch::UNKNOWN;133  return Result->Arch;134}135 136} // namespace clang137