aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/lib/Object/ELFObjectFile.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2023-12-25 17:35:41 +0000
committerDimitry Andric <dim@FreeBSD.org>2024-04-06 20:13:06 +0000
commitcb14a3fe5122c879eae1fb480ed7ce82a699ddb6 (patch)
treeb983a613c35ece61d561b5a9ef9cd66419f6c7fb /contrib/llvm-project/llvm/lib/Object/ELFObjectFile.cpp
parent3d68ee6cbdb244de9fab1df8a2525d2fa592571e (diff)
parent99aabd70801bd4bc72c4942747f6d62c675112f5 (diff)
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Object/ELFObjectFile.cpp')
-rw-r--r--contrib/llvm-project/llvm/lib/Object/ELFObjectFile.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/Object/ELFObjectFile.cpp b/contrib/llvm-project/llvm/lib/Object/ELFObjectFile.cpp
index 3c86b0f25dda..95c4f9f8545d 100644
--- a/contrib/llvm-project/llvm/lib/Object/ELFObjectFile.cpp
+++ b/contrib/llvm-project/llvm/lib/Object/ELFObjectFile.cpp
@@ -358,6 +358,8 @@ std::optional<StringRef> ELFObjectFileBase::tryGetCPUName() const {
switch (getEMachine()) {
case ELF::EM_AMDGPU:
return getAMDGPUCPUName();
+ case ELF::EM_CUDA:
+ return getNVPTXCPUName();
case ELF::EM_PPC:
case ELF::EM_PPC64:
return StringRef("future");
@@ -517,6 +519,73 @@ StringRef ELFObjectFileBase::getAMDGPUCPUName() const {
}
}
+StringRef ELFObjectFileBase::getNVPTXCPUName() const {
+ assert(getEMachine() == ELF::EM_CUDA);
+ unsigned SM = getPlatformFlags() & ELF::EF_CUDA_SM;
+
+ switch (SM) {
+ // Fermi architecture.
+ case ELF::EF_CUDA_SM20:
+ return "sm_20";
+ case ELF::EF_CUDA_SM21:
+ return "sm_21";
+
+ // Kepler architecture.
+ case ELF::EF_CUDA_SM30:
+ return "sm_30";
+ case ELF::EF_CUDA_SM32:
+ return "sm_32";
+ case ELF::EF_CUDA_SM35:
+ return "sm_35";
+ case ELF::EF_CUDA_SM37:
+ return "sm_37";
+
+ // Maxwell architecture.
+ case ELF::EF_CUDA_SM50:
+ return "sm_50";
+ case ELF::EF_CUDA_SM52:
+ return "sm_52";
+ case ELF::EF_CUDA_SM53:
+ return "sm_53";
+
+ // Pascal architecture.
+ case ELF::EF_CUDA_SM60:
+ return "sm_60";
+ case ELF::EF_CUDA_SM61:
+ return "sm_61";
+ case ELF::EF_CUDA_SM62:
+ return "sm_62";
+
+ // Volta architecture.
+ case ELF::EF_CUDA_SM70:
+ return "sm_70";
+ case ELF::EF_CUDA_SM72:
+ return "sm_72";
+
+ // Turing architecture.
+ case ELF::EF_CUDA_SM75:
+ return "sm_75";
+
+ // Ampere architecture.
+ case ELF::EF_CUDA_SM80:
+ return "sm_80";
+ case ELF::EF_CUDA_SM86:
+ return "sm_86";
+ case ELF::EF_CUDA_SM87:
+ return "sm_87";
+
+ // Ada architecture.
+ case ELF::EF_CUDA_SM89:
+ return "sm_89";
+
+ // Hopper architecture.
+ case ELF::EF_CUDA_SM90:
+ return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_90a" : "sm_90";
+ default:
+ llvm_unreachable("Unknown EF_CUDA_SM value");
+ }
+}
+
// FIXME Encode from a tablegen description or target parser.
void ELFObjectFileBase::setARMSubArch(Triple &TheTriple) const {
if (TheTriple.getSubArch() != Triple::NoSubArch)