mirror of
https://github.com/intel/llvm.git
synced 2026-01-14 20:10:50 +08:00
[ELF] handle new NVIDIA GPU variants. (#151604)
This commit is contained in:
@@ -973,7 +973,10 @@ enum : unsigned {
|
||||
|
||||
// SM based processor values.
|
||||
EF_CUDA_SM100 = 0x6400,
|
||||
EF_CUDA_SM101 = 0x6500,
|
||||
EF_CUDA_SM103 = 0x6700,
|
||||
EF_CUDA_SM120 = 0x7800,
|
||||
EF_CUDA_SM121 = 0x7900,
|
||||
|
||||
// Set when using an accelerator variant like sm_100a.
|
||||
EF_CUDA_ACCELERATORS = 0x8,
|
||||
|
||||
@@ -688,11 +688,20 @@ StringRef ELFObjectFileBase::getNVPTXCPUName() const {
|
||||
case ELF::EF_CUDA_SM100:
|
||||
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_100a"
|
||||
: "sm_100";
|
||||
case ELF::EF_CUDA_SM101:
|
||||
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_101a"
|
||||
: "sm_101";
|
||||
case ELF::EF_CUDA_SM103:
|
||||
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_103a"
|
||||
: "sm_103";
|
||||
|
||||
// Rubin architecture.
|
||||
case ELF::EF_CUDA_SM120:
|
||||
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_120a"
|
||||
: "sm_120";
|
||||
case ELF::EF_CUDA_SM121:
|
||||
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_121a"
|
||||
: "sm_121";
|
||||
default:
|
||||
llvm_unreachable("Unknown EF_CUDA_SM value");
|
||||
}
|
||||
|
||||
@@ -1683,7 +1683,9 @@ const EnumEntry<unsigned> ElfHeaderNVPTXFlags[] = {
|
||||
ENUM_ENT(EF_CUDA_SM75, "sm_75"), ENUM_ENT(EF_CUDA_SM80, "sm_80"),
|
||||
ENUM_ENT(EF_CUDA_SM86, "sm_86"), ENUM_ENT(EF_CUDA_SM87, "sm_87"),
|
||||
ENUM_ENT(EF_CUDA_SM89, "sm_89"), ENUM_ENT(EF_CUDA_SM90, "sm_90"),
|
||||
ENUM_ENT(EF_CUDA_SM100, "sm_100"), ENUM_ENT(EF_CUDA_SM120, "sm_120"),
|
||||
ENUM_ENT(EF_CUDA_SM100, "sm_100"), ENUM_ENT(EF_CUDA_SM101, "sm_101"),
|
||||
ENUM_ENT(EF_CUDA_SM103, "sm_103"), ENUM_ENT(EF_CUDA_SM120, "sm_120"),
|
||||
ENUM_ENT(EF_CUDA_SM121, "sm_121"),
|
||||
};
|
||||
|
||||
const EnumEntry<unsigned> ElfHeaderRISCVFlags[] = {
|
||||
@@ -3659,8 +3661,10 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
|
||||
ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderXtensaFlags),
|
||||
unsigned(ELF::EF_XTENSA_MACH));
|
||||
else if (e.e_machine == EM_CUDA) {
|
||||
ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderNVPTXFlags),
|
||||
unsigned(ELF::EF_CUDA_SM));
|
||||
unsigned Mask = e.e_ident[ELF::EI_ABIVERSION] == ELF::ELFABIVERSION_CUDA_V1
|
||||
? ELF::EF_CUDA_SM
|
||||
: ELF::EF_CUDA_SM_MASK;
|
||||
ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderNVPTXFlags), Mask);
|
||||
if (e.e_ident[ELF::EI_ABIVERSION] == ELF::ELFABIVERSION_CUDA_V1 &&
|
||||
(e.e_flags & ELF::EF_CUDA_ACCELERATORS_V1))
|
||||
ElfFlags += "a";
|
||||
|
||||
Reference in New Issue
Block a user