[llvm] [ELF] handle new NVIDIA GPU variants. (PR #151604)
Artem Belevich via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 31 15:49:24 PDT 2025
https://github.com/Artem-B updated https://github.com/llvm/llvm-project/pull/151604
>From f396d5af7186fdde20155bedfd4fc47071ccc279 Mon Sep 17 00:00:00 2001
From: Artem Belevich <tra at google.com>
Date: Thu, 31 Jul 2025 13:50:14 -0700
Subject: [PATCH 1/3] [ELF] handle new NVIDIA GPU variants.
---
llvm/include/llvm/BinaryFormat/ELF.h | 3 +++
llvm/lib/Object/ELFObjectFile.cpp | 9 +++++++++
llvm/tools/llvm-readobj/ELFDumper.cpp | 4 +++-
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/llvm/include/llvm/BinaryFormat/ELF.h b/llvm/include/llvm/BinaryFormat/ELF.h
index ad35d7f05d5da..749971e354f66 100644
--- a/llvm/include/llvm/BinaryFormat/ELF.h
+++ b/llvm/include/llvm/BinaryFormat/ELF.h
@@ -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,
diff --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp
index 0919c6aad74f2..aff047c297cc2 100644
--- a/llvm/lib/Object/ELFObjectFile.cpp
+++ b/llvm/lib/Object/ELFObjectFile.cpp
@@ -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");
}
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 94ce38605f5c9..1321d594416c5 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -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[] = {
>From ebfa74074792689c464acc84ef06661d09aab65d Mon Sep 17 00:00:00 2001
From: Artem Belevich <tra at google.com>
Date: Thu, 31 Jul 2025 15:37:40 -0700
Subject: [PATCH 2/3] correctly handle new GPU values
---
llvm/tools/llvm-readobj/ELFDumper.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 1321d594416c5..480d144a4a444 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -3661,8 +3661,11 @@ 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) {
+ 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),
- unsigned(ELF::EF_CUDA_SM));
+ Mask);
if (e.e_ident[ELF::EI_ABIVERSION] == ELF::ELFABIVERSION_CUDA_V1 &&
(e.e_flags & ELF::EF_CUDA_ACCELERATORS_V1))
ElfFlags += "a";
>From 09812905f3f76c2b57678a6c9be1313188cfa3bd Mon Sep 17 00:00:00 2001
From: Artem Belevich <tra at google.com>
Date: Thu, 31 Jul 2025 15:39:04 -0700
Subject: [PATCH 3/3] clang-format
---
llvm/tools/llvm-readobj/ELFDumper.cpp | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 480d144a4a444..66153ad9c1336 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -3662,10 +3662,9 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
unsigned(ELF::EF_XTENSA_MACH));
else if (e.e_machine == EM_CUDA) {
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);
+ ? 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";
More information about the llvm-commits
mailing list