Path: blob/main/contrib/llvm-project/clang/lib/Basic/OffloadArch.cpp
213765 views
#include "clang/Basic/OffloadArch.h"12#include "llvm/ADT/STLExtras.h"3#include "llvm/ADT/StringRef.h"45namespace clang {67namespace {8struct OffloadArchToStringMap {9OffloadArch Arch;10const char *ArchName;11const char *VirtualArchName;12};13} // namespace1415#define SM(sm) {OffloadArch::SM_##sm, "sm_" #sm, "compute_" #sm}16#define GFX(gpu) {OffloadArch::GFX##gpu, "gfx" #gpu, "compute_amdgcn"}17static const OffloadArchToStringMap ArchNames[] = {18// clang-format off19{OffloadArch::UNUSED, "", ""},20SM(20), {OffloadArch::SM_21, "sm_21", "compute_20"}, // Fermi21SM(30), {OffloadArch::SM_32_, "sm_32", "compute_32"}, SM(35), SM(37), // Kepler22SM(50), SM(52), SM(53), // Maxwell23SM(60), SM(61), SM(62), // Pascal24SM(70), SM(72), // Volta25SM(75), // Turing26SM(80), SM(86), // Ampere27SM(87), // Jetson/Drive AGX Orin28SM(89), // Ada Lovelace29SM(90), // Hopper30SM(90a), // Hopper31SM(100), // Blackwell32SM(100a), // Blackwell33SM(101), // Blackwell34SM(101a), // Blackwell35SM(120), // Blackwell36SM(120a), // Blackwell37GFX(600), // gfx60038GFX(601), // gfx60139GFX(602), // gfx60240GFX(700), // gfx70041GFX(701), // gfx70142GFX(702), // gfx70243GFX(703), // gfx70344GFX(704), // gfx70445GFX(705), // gfx70546GFX(801), // gfx80147GFX(802), // gfx80248GFX(803), // gfx80349GFX(805), // gfx80550GFX(810), // gfx81051{OffloadArch::GFX9_GENERIC, "gfx9-generic", "compute_amdgcn"},52GFX(900), // gfx90053GFX(902), // gfx90254GFX(904), // gfx90355GFX(906), // gfx90656GFX(908), // gfx90857GFX(909), // gfx90958GFX(90a), // gfx90a59GFX(90c), // gfx90c60{OffloadArch::GFX9_4_GENERIC, "gfx9-4-generic", "compute_amdgcn"},61GFX(942), // gfx94262GFX(950), // gfx95063{OffloadArch::GFX10_1_GENERIC, "gfx10-1-generic", "compute_amdgcn"},64GFX(1010), // gfx101065GFX(1011), // gfx101166GFX(1012), // gfx101267GFX(1013), // gfx101368{OffloadArch::GFX10_3_GENERIC, "gfx10-3-generic", "compute_amdgcn"},69GFX(1030), // gfx103070GFX(1031), // gfx103171GFX(1032), // gfx103272GFX(1033), // gfx103373GFX(1034), // gfx103474GFX(1035), // gfx103575GFX(1036), // gfx103676{OffloadArch::GFX11_GENERIC, "gfx11-generic", "compute_amdgcn"},77GFX(1100), // gfx110078GFX(1101), // gfx110179GFX(1102), // gfx110280GFX(1103), // gfx110381GFX(1150), // gfx115082GFX(1151), // gfx115183GFX(1152), // gfx115284GFX(1153), // gfx115385{OffloadArch::GFX12_GENERIC, "gfx12-generic", "compute_amdgcn"},86GFX(1200), // gfx120087GFX(1201), // gfx120188GFX(1250), // gfx125089{OffloadArch::AMDGCNSPIRV, "amdgcnspirv", "compute_amdgcn"},90// Intel CPUs91{OffloadArch::GRANITERAPIDS, "graniterapids", ""},92// Intel GPUS93{OffloadArch::BMG_G21, "bmg_g21", ""},94{OffloadArch::Generic, "generic", ""},95// clang-format on96};97#undef SM98#undef GFX99100const char *OffloadArchToString(OffloadArch A) {101auto Result =102llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {103return A == Map.Arch;104});105if (Result == std::end(ArchNames))106return "unknown";107return Result->ArchName;108}109110const char *OffloadArchToVirtualArchString(OffloadArch A) {111auto Result =112llvm::find_if(ArchNames, [A](const OffloadArchToStringMap &Map) {113return A == Map.Arch;114});115if (Result == std::end(ArchNames))116return "unknown";117return Result->VirtualArchName;118}119120OffloadArch StringToOffloadArch(llvm::StringRef S) {121auto Result =122llvm::find_if(ArchNames, [S](const OffloadArchToStringMap &Map) {123return S == Map.ArchName;124});125if (Result == std::end(ArchNames))126return OffloadArch::UNKNOWN;127return Result->Arch;128}129130} // namespace clang131132133