[clang] [clang] Use key-value initialization for LangASMap (NFCI) (PR #210259)
Ken Matsui via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 17 00:08:11 PDT 2026
https://github.com/ken-matsui created https://github.com/llvm/llvm-project/pull/210259
The original implementation requires each target to list a value for every LangAS in exact enum order.
This patch addresses this by introducing a class that supports order-independent key-value initialization and defaults unspecified entries to 0.
---
Depends on https://github.com/llvm/llvm-project/pull/210244 and https://github.com/llvm/llvm-project/pull/210253.
>From d96f7358204e88b0a89bb6f3a7cef80c8109e656 Mon Sep 17 00:00:00 2001
From: Ken Matsui <github at kmts.me>
Date: Thu, 16 Jul 2026 22:44:38 -0400
Subject: [PATCH 1/6] [clang] Use 0 for wasm_funcref in non-Wasm address space
maps (NFCI)
---
clang/lib/Basic/Targets/AArch64.h | 4 +---
clang/lib/Basic/Targets/DirectX.h | 4 +---
clang/lib/Basic/Targets/NVPTX.h | 4 +---
clang/lib/Basic/Targets/SPIR.h | 8 ++------
clang/lib/Basic/Targets/TCE.h | 4 +---
clang/lib/Basic/Targets/X86.h | 4 +---
6 files changed, 7 insertions(+), 21 deletions(-)
diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h
index b6e707d8b4245..becab6d59ad8a 100644
--- a/clang/lib/Basic/Targets/AArch64.h
+++ b/clang/lib/Basic/Targets/AArch64.h
@@ -51,9 +51,7 @@ static const unsigned ARM64AddrSpaceMap[] = {
0, // hlsl_input
0, // hlsl_output
0, // hlsl_push_constant
- // Wasm address space values for this target are dummy values,
- // as it is only enabled for Wasm targets.
- 20, // wasm_funcref
+ 0, // wasm_funcref
};
using AArch64FeatureSet = llvm::SmallDenseSet<StringRef, 32>;
diff --git a/clang/lib/Basic/Targets/DirectX.h b/clang/lib/Basic/Targets/DirectX.h
index 64e5533bbffeb..ee7b217aad9fe 100644
--- a/clang/lib/Basic/Targets/DirectX.h
+++ b/clang/lib/Basic/Targets/DirectX.h
@@ -48,9 +48,7 @@ static const unsigned DirectXAddrSpaceMap[] = {
0, // hlsl_input
0, // hlsl_output
0, // hlsl_push_constant
- // Wasm address space values for this target are dummy values,
- // as it is only enabled for Wasm targets.
- 20, // wasm_funcref
+ 0, // wasm_funcref
};
class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h
index 00be0fe54c1bd..2e50c81084095 100644
--- a/clang/lib/Basic/Targets/NVPTX.h
+++ b/clang/lib/Basic/Targets/NVPTX.h
@@ -52,9 +52,7 @@ static const unsigned NVPTXAddrSpaceMap[] = {
0, // hlsl_input
0, // hlsl_output
0, // hlsl_push_constant
- // Wasm address space values for this target are dummy values,
- // as it is only enabled for Wasm targets.
- 20, // wasm_funcref
+ 0, // wasm_funcref
};
/// The DWARF address class. Taken from
diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h
index 42256920f353e..0547c9702ffd4 100644
--- a/clang/lib/Basic/Targets/SPIR.h
+++ b/clang/lib/Basic/Targets/SPIR.h
@@ -56,9 +56,7 @@ static const unsigned SPIRDefIsPrivMap[] = {
7, // hlsl_input
8, // hlsl_output
13, // hlsl_push_constant
- // Wasm address space values for this target are dummy values,
- // as it is only enabled for Wasm targets.
- 20, // wasm_funcref
+ 0, // wasm_funcref
};
// Used by both the SPIR and SPIR-V targets.
@@ -94,9 +92,7 @@ static const unsigned SPIRDefIsGenMap[] = {
7, // hlsl_input
8, // hlsl_output
13, // hlsl_push_constant
- // Wasm address space values for this target are dummy values,
- // as it is only enabled for Wasm targets.
- 20, // wasm_funcref
+ 0, // wasm_funcref
};
// Base class for SPIR and SPIR-V target info.
diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h
index 1360298de9794..e3874759cb35b 100644
--- a/clang/lib/Basic/Targets/TCE.h
+++ b/clang/lib/Basic/Targets/TCE.h
@@ -57,9 +57,7 @@ static const unsigned TCEOpenCLAddrSpaceMap[] = {
0, // hlsl_input
0, // hlsl_output
0, // hlsl_push_constant
- // Wasm address space values for this target are dummy values,
- // as it is only enabled for Wasm targets.
- 20, // wasm_funcref
+ 0, // wasm_funcref
};
class LLVM_LIBRARY_VISIBILITY TCETargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h
index e305d9017d897..c34aeff183f14 100644
--- a/clang/lib/Basic/Targets/X86.h
+++ b/clang/lib/Basic/Targets/X86.h
@@ -52,9 +52,7 @@ static const unsigned X86AddrSpaceMap[] = {
0, // hlsl_input
0, // hlsl_output
0, // hlsl_push_constant
- // Wasm address space values for this target are dummy values,
- // as it is only enabled for Wasm targets.
- 20, // wasm_funcref
+ 0, // wasm_funcref
};
// X86 target abstract base class; x86-32 and x86-64 are very close, so
>From 52d9cf2ee426917518c23c00a2921b9ae63fc628 Mon Sep 17 00:00:00 2001
From: Ken Matsui <github at kmts.me>
Date: Fri, 17 Jul 2026 01:26:49 -0400
Subject: [PATCH 2/6] [clang][TCE] Fix ordering of OpenCL address space
mappings
The opencl_global_device and opencl_global_host entries in the LangAS
enum appear after opencl_generic; however, they were inserted before it
in 8d27be8dbaffce0519ac41173d51923fc2524b1b for TCE.
Correct the order so that opencl_generic maps to 0.
---
clang/lib/Basic/Targets/TCE.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h
index e3874759cb35b..32758cca4a5a0 100644
--- a/clang/lib/Basic/Targets/TCE.h
+++ b/clang/lib/Basic/Targets/TCE.h
@@ -35,10 +35,10 @@ static const unsigned TCEOpenCLAddrSpaceMap[] = {
3, // opencl_local
2, // opencl_constant
0, // opencl_private
- 1, // opencl_global_device
- 1, // opencl_global_host
// FIXME: generic has to be added to the target
0, // opencl_generic
+ 1, // opencl_global_device
+ 1, // opencl_global_host
0, // cuda_device
0, // cuda_constant
0, // cuda_shared
>From b862f81ab815c34c6c52a7611d6fb142ca7ecf54 Mon Sep 17 00:00:00 2001
From: Ken Matsui <github at kmts.me>
Date: Fri, 17 Jul 2026 00:44:06 -0400
Subject: [PATCH 3/6] [clang] Use key-value initialization for LangASMap (NFCI)
The original implementation requires each target to list a value for
every LangAS in exact enum order.
This patch addresses this by introducing a class that supports
order-independent key-value initialization and defaults unspecified
entries to 0.
---
clang/include/clang/Basic/AddressSpaces.h | 18 +++-
clang/include/clang/Basic/TargetInfo.h | 2 +-
clang/lib/Basic/TargetInfo.cpp | 56 +++++------
clang/lib/Basic/Targets/AArch64.h | 56 +++++------
clang/lib/Basic/Targets/AMDGPU.cpp | 52 +++++-----
clang/lib/Basic/Targets/DirectX.h | 56 +++++------
clang/lib/Basic/Targets/NVPTX.h | 56 +++++------
clang/lib/Basic/Targets/SPIR.h | 112 +++++++++++-----------
clang/lib/Basic/Targets/SystemZ.h | 56 +++++------
clang/lib/Basic/Targets/TCE.h | 56 +++++------
clang/lib/Basic/Targets/WebAssembly.h | 56 +++++------
clang/lib/Basic/Targets/X86.h | 56 +++++------
12 files changed, 324 insertions(+), 308 deletions(-)
diff --git a/clang/include/clang/Basic/AddressSpaces.h b/clang/include/clang/Basic/AddressSpaces.h
index a941805423bca..2dfaa1c45ac55 100644
--- a/clang/include/clang/Basic/AddressSpaces.h
+++ b/clang/include/clang/Basic/AddressSpaces.h
@@ -15,7 +15,10 @@
#ifndef LLVM_CLANG_BASIC_ADDRESSSPACES_H
#define LLVM_CLANG_BASIC_ADDRESSSPACES_H
+#include <array>
#include <cassert>
+#include <initializer_list>
+#include <utility>
namespace clang {
@@ -76,7 +79,20 @@ enum class LangAS : unsigned {
/// The type of a lookup table which maps from language-specific address spaces
/// to target-specific ones.
-using LangASMap = unsigned[(unsigned)LangAS::FirstTargetAddressSpace];
+class LangASMap {
+ std::array<unsigned, (unsigned)LangAS::FirstTargetAddressSpace> Map{};
+
+public:
+ constexpr LangASMap() = default;
+
+ constexpr LangASMap(
+ std::initializer_list<std::pair<LangAS, unsigned>> Mappings) {
+ for (auto [LanguageAS, TargetAS] : Mappings)
+ Map[(unsigned)LanguageAS] = TargetAS;
+ }
+
+ constexpr unsigned operator[](LangAS AS) const { return Map[(unsigned)AS]; }
+};
/// \return whether \p AS is a target-specific address space rather than a
/// clang AST address space
diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h
index 3aba4d261a651..968a0c1b129ef 100644
--- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -1701,7 +1701,7 @@ class TargetInfo : public TransferrableTargetInfo,
unsigned getTargetAddressSpace(LangAS AS) const {
if (isTargetAddressSpace(AS))
return toTargetAddressSpace(AS);
- return getAddressSpaceMap()[(unsigned)AS];
+ return getAddressSpaceMap()[AS];
}
/// Determine whether the given pointer-authentication key is valid.
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp
index 46b5bdecb9c40..29d67431a7081 100644
--- a/clang/lib/Basic/TargetInfo.cpp
+++ b/clang/lib/Basic/TargetInfo.cpp
@@ -24,37 +24,37 @@
#include <cstdlib>
using namespace clang;
-static const LangASMap DefaultAddrSpaceMap = {0};
+static const LangASMap DefaultAddrSpaceMap;
// The fake address space map must have a distinct entry for each
// language-specific address space.
static const LangASMap FakeAddrSpaceMap = {
- 0, // Default
- 1, // opencl_global
- 3, // opencl_local
- 2, // opencl_constant
- 0, // opencl_private
- 4, // opencl_generic
- 5, // opencl_global_device
- 6, // opencl_global_host
- 7, // cuda_device
- 8, // cuda_constant
- 9, // cuda_shared
- 1, // sycl_global
- 5, // sycl_global_device
- 6, // sycl_global_host
- 3, // sycl_local
- 0, // sycl_private
- 10, // ptr32_sptr
- 11, // ptr32_uptr
- 12, // ptr64
- 13, // hlsl_groupshared
- 14, // hlsl_constant
- 15, // hlsl_private
- 16, // hlsl_device
- 17, // hlsl_input
- 18, // hlsl_output
- 19, // hlsl_push_constant
- 20, // wasm_funcref
+ {LangAS::Default, 0},
+ {LangAS::opencl_global, 1},
+ {LangAS::opencl_local, 3},
+ {LangAS::opencl_constant, 2},
+ {LangAS::opencl_private, 0},
+ {LangAS::opencl_generic, 4},
+ {LangAS::opencl_global_device, 5},
+ {LangAS::opencl_global_host, 6},
+ {LangAS::cuda_device, 7},
+ {LangAS::cuda_constant, 8},
+ {LangAS::cuda_shared, 9},
+ {LangAS::sycl_global, 1},
+ {LangAS::sycl_global_device, 5},
+ {LangAS::sycl_global_host, 6},
+ {LangAS::sycl_local, 3},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, 10},
+ {LangAS::ptr32_uptr, 11},
+ {LangAS::ptr64, 12},
+ {LangAS::hlsl_groupshared, 13},
+ {LangAS::hlsl_constant, 14},
+ {LangAS::hlsl_private, 15},
+ {LangAS::hlsl_device, 16},
+ {LangAS::hlsl_input, 17},
+ {LangAS::hlsl_output, 18},
+ {LangAS::hlsl_push_constant, 19},
+ {LangAS::wasm_funcref, 20},
};
// TargetInfo Constructor.
diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h
index becab6d59ad8a..3abb1682ee897 100644
--- a/clang/lib/Basic/Targets/AArch64.h
+++ b/clang/lib/Basic/Targets/AArch64.h
@@ -24,34 +24,34 @@ namespace targets {
enum AArch64AddrSpace { ptr32_sptr = 270, ptr32_uptr = 271, ptr64 = 272 };
-static const unsigned ARM64AddrSpaceMap[] = {
- 0, // Default
- 0, // opencl_global
- 0, // opencl_local
- 0, // opencl_constant
- 0, // opencl_private
- 0, // opencl_generic
- 0, // opencl_global_device
- 0, // opencl_global_host
- 0, // cuda_device
- 0, // cuda_constant
- 0, // cuda_shared
- 0, // sycl_global
- 0, // sycl_global_device
- 0, // sycl_global_host
- 0, // sycl_local
- 0, // sycl_private
- static_cast<unsigned>(AArch64AddrSpace::ptr32_sptr),
- static_cast<unsigned>(AArch64AddrSpace::ptr32_uptr),
- static_cast<unsigned>(AArch64AddrSpace::ptr64),
- 0, // hlsl_groupshared
- 0, // hlsl_constant
- 0, // hlsl_private
- 0, // hlsl_device
- 0, // hlsl_input
- 0, // hlsl_output
- 0, // hlsl_push_constant
- 0, // wasm_funcref
+static const LangASMap ARM64AddrSpaceMap = {
+ {LangAS::Default, 0},
+ {LangAS::opencl_global, 0},
+ {LangAS::opencl_local, 0},
+ {LangAS::opencl_constant, 0},
+ {LangAS::opencl_private, 0},
+ {LangAS::opencl_generic, 0},
+ {LangAS::opencl_global_device, 0},
+ {LangAS::opencl_global_host, 0},
+ {LangAS::cuda_device, 0},
+ {LangAS::cuda_constant, 0},
+ {LangAS::cuda_shared, 0},
+ {LangAS::sycl_global, 0},
+ {LangAS::sycl_global_device, 0},
+ {LangAS::sycl_global_host, 0},
+ {LangAS::sycl_local, 0},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, static_cast<unsigned>(AArch64AddrSpace::ptr32_sptr)},
+ {LangAS::ptr32_uptr, static_cast<unsigned>(AArch64AddrSpace::ptr32_uptr)},
+ {LangAS::ptr64, static_cast<unsigned>(AArch64AddrSpace::ptr64)},
+ {LangAS::hlsl_groupshared, 0},
+ {LangAS::hlsl_constant, 0},
+ {LangAS::hlsl_private, 0},
+ {LangAS::hlsl_device, 0},
+ {LangAS::hlsl_input, 0},
+ {LangAS::hlsl_output, 0},
+ {LangAS::hlsl_push_constant, 0},
+ {LangAS::wasm_funcref, 0},
};
using AArch64FeatureSet = llvm::SmallDenseSet<StringRef, 32>;
diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp
index 3fd9643373383..f32560c5b152b 100644
--- a/clang/lib/Basic/Targets/AMDGPU.cpp
+++ b/clang/lib/Basic/Targets/AMDGPU.cpp
@@ -28,34 +28,34 @@ namespace targets {
// getPointerWidthV().
const LangASMap AMDGPUTargetInfo::AMDGPUAddrSpaceMap = {
- llvm::AMDGPUAS::FLAT_ADDRESS, // Default
- llvm::AMDGPUAS::GLOBAL_ADDRESS, // opencl_global
- llvm::AMDGPUAS::LOCAL_ADDRESS, // opencl_local
- llvm::AMDGPUAS::CONSTANT_ADDRESS, // opencl_constant
- llvm::AMDGPUAS::PRIVATE_ADDRESS, // opencl_private
- llvm::AMDGPUAS::FLAT_ADDRESS, // opencl_generic
- llvm::AMDGPUAS::GLOBAL_ADDRESS, // opencl_global_device
- llvm::AMDGPUAS::GLOBAL_ADDRESS, // opencl_global_host
- llvm::AMDGPUAS::GLOBAL_ADDRESS, // cuda_device
- llvm::AMDGPUAS::CONSTANT_ADDRESS, // cuda_constant
- llvm::AMDGPUAS::LOCAL_ADDRESS, // cuda_shared
- llvm::AMDGPUAS::GLOBAL_ADDRESS, // sycl_global
- llvm::AMDGPUAS::GLOBAL_ADDRESS, // sycl_global_device
- llvm::AMDGPUAS::GLOBAL_ADDRESS, // sycl_global_host
- llvm::AMDGPUAS::LOCAL_ADDRESS, // sycl_local
- llvm::AMDGPUAS::PRIVATE_ADDRESS, // sycl_private
- llvm::AMDGPUAS::FLAT_ADDRESS, // ptr32_sptr
- llvm::AMDGPUAS::FLAT_ADDRESS, // ptr32_uptr
- llvm::AMDGPUAS::FLAT_ADDRESS, // ptr64
- llvm::AMDGPUAS::FLAT_ADDRESS, // hlsl_groupshared
- llvm::AMDGPUAS::CONSTANT_ADDRESS, // hlsl_constant
+ {LangAS::Default, llvm::AMDGPUAS::FLAT_ADDRESS},
+ {LangAS::opencl_global, llvm::AMDGPUAS::GLOBAL_ADDRESS},
+ {LangAS::opencl_local, llvm::AMDGPUAS::LOCAL_ADDRESS},
+ {LangAS::opencl_constant, llvm::AMDGPUAS::CONSTANT_ADDRESS},
+ {LangAS::opencl_private, llvm::AMDGPUAS::PRIVATE_ADDRESS},
+ {LangAS::opencl_generic, llvm::AMDGPUAS::FLAT_ADDRESS},
+ {LangAS::opencl_global_device, llvm::AMDGPUAS::GLOBAL_ADDRESS},
+ {LangAS::opencl_global_host, llvm::AMDGPUAS::GLOBAL_ADDRESS},
+ {LangAS::cuda_device, llvm::AMDGPUAS::GLOBAL_ADDRESS},
+ {LangAS::cuda_constant, llvm::AMDGPUAS::CONSTANT_ADDRESS},
+ {LangAS::cuda_shared, llvm::AMDGPUAS::LOCAL_ADDRESS},
+ {LangAS::sycl_global, llvm::AMDGPUAS::GLOBAL_ADDRESS},
+ {LangAS::sycl_global_device, llvm::AMDGPUAS::GLOBAL_ADDRESS},
+ {LangAS::sycl_global_host, llvm::AMDGPUAS::GLOBAL_ADDRESS},
+ {LangAS::sycl_local, llvm::AMDGPUAS::LOCAL_ADDRESS},
+ {LangAS::sycl_private, llvm::AMDGPUAS::PRIVATE_ADDRESS},
+ {LangAS::ptr32_sptr, llvm::AMDGPUAS::FLAT_ADDRESS},
+ {LangAS::ptr32_uptr, llvm::AMDGPUAS::FLAT_ADDRESS},
+ {LangAS::ptr64, llvm::AMDGPUAS::FLAT_ADDRESS},
+ {LangAS::hlsl_groupshared, llvm::AMDGPUAS::FLAT_ADDRESS},
+ {LangAS::hlsl_constant, llvm::AMDGPUAS::CONSTANT_ADDRESS},
// FIXME(pr/122103): hlsl_private -> PRIVATE is wrong, but at least this
// will break loudly.
- llvm::AMDGPUAS::PRIVATE_ADDRESS, // hlsl_private
- llvm::AMDGPUAS::GLOBAL_ADDRESS, // hlsl_device
- llvm::AMDGPUAS::PRIVATE_ADDRESS, // hlsl_input
- llvm::AMDGPUAS::PRIVATE_ADDRESS, // hlsl_output
- llvm::AMDGPUAS::GLOBAL_ADDRESS, // hlsl_push_constant
+ {LangAS::hlsl_private, llvm::AMDGPUAS::PRIVATE_ADDRESS},
+ {LangAS::hlsl_device, llvm::AMDGPUAS::GLOBAL_ADDRESS},
+ {LangAS::hlsl_input, llvm::AMDGPUAS::PRIVATE_ADDRESS},
+ {LangAS::hlsl_output, llvm::AMDGPUAS::PRIVATE_ADDRESS},
+ {LangAS::hlsl_push_constant, llvm::AMDGPUAS::GLOBAL_ADDRESS},
};
} // namespace targets
diff --git a/clang/lib/Basic/Targets/DirectX.h b/clang/lib/Basic/Targets/DirectX.h
index ee7b217aad9fe..20b7fd7e6aa4f 100644
--- a/clang/lib/Basic/Targets/DirectX.h
+++ b/clang/lib/Basic/Targets/DirectX.h
@@ -20,35 +20,35 @@
namespace clang {
namespace targets {
-static const unsigned DirectXAddrSpaceMap[] = {
- 0, // Default
- 1, // opencl_global
- 3, // opencl_local
- 2, // opencl_constant
- 0, // opencl_private
- 4, // opencl_generic
- 5, // opencl_global_device
- 6, // opencl_global_host
- 0, // cuda_device
- 0, // cuda_constant
- 0, // cuda_shared
+static const LangASMap DirectXAddrSpaceMap = {
+ {LangAS::Default, 0},
+ {LangAS::opencl_global, 1},
+ {LangAS::opencl_local, 3},
+ {LangAS::opencl_constant, 2},
+ {LangAS::opencl_private, 0},
+ {LangAS::opencl_generic, 4},
+ {LangAS::opencl_global_device, 5},
+ {LangAS::opencl_global_host, 6},
+ {LangAS::cuda_device, 0},
+ {LangAS::cuda_constant, 0},
+ {LangAS::cuda_shared, 0},
// SYCL address space values for this map are dummy
- 0, // sycl_global
- 0, // sycl_global_device
- 0, // sycl_global_host
- 0, // sycl_local
- 0, // sycl_private
- 0, // ptr32_sptr
- 0, // ptr32_uptr
- 0, // ptr64
- 3, // hlsl_groupshared
- 2, // hlsl_constant
- 0, // hlsl_private
- 0, // hlsl_device
- 0, // hlsl_input
- 0, // hlsl_output
- 0, // hlsl_push_constant
- 0, // wasm_funcref
+ {LangAS::sycl_global, 0},
+ {LangAS::sycl_global_device, 0},
+ {LangAS::sycl_global_host, 0},
+ {LangAS::sycl_local, 0},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, 0},
+ {LangAS::ptr32_uptr, 0},
+ {LangAS::ptr64, 0},
+ {LangAS::hlsl_groupshared, 3},
+ {LangAS::hlsl_constant, 2},
+ {LangAS::hlsl_private, 0},
+ {LangAS::hlsl_device, 0},
+ {LangAS::hlsl_input, 0},
+ {LangAS::hlsl_output, 0},
+ {LangAS::hlsl_push_constant, 0},
+ {LangAS::wasm_funcref, 0},
};
class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h
index 2e50c81084095..6299a4685fa5e 100644
--- a/clang/lib/Basic/Targets/NVPTX.h
+++ b/clang/lib/Basic/Targets/NVPTX.h
@@ -24,35 +24,35 @@
namespace clang {
namespace targets {
-static const unsigned NVPTXAddrSpaceMap[] = {
- 0, // Default
- 1, // opencl_global
- 3, // opencl_local
- 4, // opencl_constant
- 0, // opencl_private
+static const LangASMap NVPTXAddrSpaceMap = {
+ {LangAS::Default, 0},
+ {LangAS::opencl_global, 1},
+ {LangAS::opencl_local, 3},
+ {LangAS::opencl_constant, 4},
+ {LangAS::opencl_private, 0},
// FIXME: generic has to be added to the target
- 0, // opencl_generic
- 1, // opencl_global_device
- 1, // opencl_global_host
- 1, // cuda_device
- 4, // cuda_constant
- 3, // cuda_shared
- 1, // sycl_global
- 1, // sycl_global_device
- 1, // sycl_global_host
- 3, // sycl_local
- 0, // sycl_private
- 0, // ptr32_sptr
- 0, // ptr32_uptr
- 0, // ptr64
- 0, // hlsl_groupshared
- 0, // hlsl_constant
- 0, // hlsl_private
- 0, // hlsl_device
- 0, // hlsl_input
- 0, // hlsl_output
- 0, // hlsl_push_constant
- 0, // wasm_funcref
+ {LangAS::opencl_generic, 0},
+ {LangAS::opencl_global_device, 1},
+ {LangAS::opencl_global_host, 1},
+ {LangAS::cuda_device, 1},
+ {LangAS::cuda_constant, 4},
+ {LangAS::cuda_shared, 3},
+ {LangAS::sycl_global, 1},
+ {LangAS::sycl_global_device, 1},
+ {LangAS::sycl_global_host, 1},
+ {LangAS::sycl_local, 3},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, 0},
+ {LangAS::ptr32_uptr, 0},
+ {LangAS::ptr64, 0},
+ {LangAS::hlsl_groupshared, 0},
+ {LangAS::hlsl_constant, 0},
+ {LangAS::hlsl_private, 0},
+ {LangAS::hlsl_device, 0},
+ {LangAS::hlsl_input, 0},
+ {LangAS::hlsl_output, 0},
+ {LangAS::hlsl_push_constant, 0},
+ {LangAS::wasm_funcref, 0},
};
/// The DWARF address class. Taken from
diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h
index 0547c9702ffd4..acc87121b1ae5 100644
--- a/clang/lib/Basic/Targets/SPIR.h
+++ b/clang/lib/Basic/Targets/SPIR.h
@@ -28,71 +28,71 @@ namespace clang {
namespace targets {
// Used by both the SPIR and SPIR-V targets.
-static const unsigned SPIRDefIsPrivMap[] = {
- 0, // Default
- 1, // opencl_global
- 3, // opencl_local
- 2, // opencl_constant
- 0, // opencl_private
- 4, // opencl_generic
- 5, // opencl_global_device
- 6, // opencl_global_host
- 0, // cuda_device
- 0, // cuda_constant
- 0, // cuda_shared
+static const LangASMap SPIRDefIsPrivMap = {
+ {LangAS::Default, 0},
+ {LangAS::opencl_global, 1},
+ {LangAS::opencl_local, 3},
+ {LangAS::opencl_constant, 2},
+ {LangAS::opencl_private, 0},
+ {LangAS::opencl_generic, 4},
+ {LangAS::opencl_global_device, 5},
+ {LangAS::opencl_global_host, 6},
+ {LangAS::cuda_device, 0},
+ {LangAS::cuda_constant, 0},
+ {LangAS::cuda_shared, 0},
// SYCL address space values for this map are dummy
- 0, // sycl_global
- 0, // sycl_global_device
- 0, // sycl_global_host
- 0, // sycl_local
- 0, // sycl_private
- 0, // ptr32_sptr
- 0, // ptr32_uptr
- 0, // ptr64
- 3, // hlsl_groupshared
- 12, // hlsl_constant
- 10, // hlsl_private
- 11, // hlsl_device
- 7, // hlsl_input
- 8, // hlsl_output
- 13, // hlsl_push_constant
- 0, // wasm_funcref
+ {LangAS::sycl_global, 0},
+ {LangAS::sycl_global_device, 0},
+ {LangAS::sycl_global_host, 0},
+ {LangAS::sycl_local, 0},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, 0},
+ {LangAS::ptr32_uptr, 0},
+ {LangAS::ptr64, 0},
+ {LangAS::hlsl_groupshared, 3},
+ {LangAS::hlsl_constant, 12},
+ {LangAS::hlsl_private, 10},
+ {LangAS::hlsl_device, 11},
+ {LangAS::hlsl_input, 7},
+ {LangAS::hlsl_output, 8},
+ {LangAS::hlsl_push_constant, 13},
+ {LangAS::wasm_funcref, 0},
};
// Used by both the SPIR and SPIR-V targets.
-static const unsigned SPIRDefIsGenMap[] = {
- 4, // Default
- 1, // opencl_global
- 3, // opencl_local
- 2, // opencl_constant
- 0, // opencl_private
- 4, // opencl_generic
- 5, // opencl_global_device
- 6, // opencl_global_host
+static const LangASMap SPIRDefIsGenMap = {
+ {LangAS::Default, 4},
+ {LangAS::opencl_global, 1},
+ {LangAS::opencl_local, 3},
+ {LangAS::opencl_constant, 2},
+ {LangAS::opencl_private, 0},
+ {LangAS::opencl_generic, 4},
+ {LangAS::opencl_global_device, 5},
+ {LangAS::opencl_global_host, 6},
// cuda_* address space mapping is intended for HIPSPV (HIP to SPIR-V
// translation). This mapping is enabled when the language mode is HIP.
- 1, // cuda_device
+ {LangAS::cuda_device, 1},
// cuda_constant pointer can be casted to default/"flat" pointer, but in
// SPIR-V casts between constant and generic pointers are not allowed. For
// this reason cuda_constant is mapped to SPIR-V CrossWorkgroup.
- 1, // cuda_constant
- 3, // cuda_shared
- 1, // sycl_global
- 5, // sycl_global_device
- 6, // sycl_global_host
- 3, // sycl_local
- 0, // sycl_private
- 0, // ptr32_sptr
- 0, // ptr32_uptr
- 0, // ptr64
- 3, // hlsl_groupshared
- 0, // hlsl_constant
- 10, // hlsl_private
- 11, // hlsl_device
- 7, // hlsl_input
- 8, // hlsl_output
- 13, // hlsl_push_constant
- 0, // wasm_funcref
+ {LangAS::cuda_constant, 1},
+ {LangAS::cuda_shared, 3},
+ {LangAS::sycl_global, 1},
+ {LangAS::sycl_global_device, 5},
+ {LangAS::sycl_global_host, 6},
+ {LangAS::sycl_local, 3},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, 0},
+ {LangAS::ptr32_uptr, 0},
+ {LangAS::ptr64, 0},
+ {LangAS::hlsl_groupshared, 3},
+ {LangAS::hlsl_constant, 0},
+ {LangAS::hlsl_private, 10},
+ {LangAS::hlsl_device, 11},
+ {LangAS::hlsl_input, 7},
+ {LangAS::hlsl_output, 8},
+ {LangAS::hlsl_push_constant, 13},
+ {LangAS::wasm_funcref, 0},
};
// Base class for SPIR and SPIR-V target info.
diff --git a/clang/lib/Basic/Targets/SystemZ.h b/clang/lib/Basic/Targets/SystemZ.h
index c06b142200d75..c8fe49c9d4a1c 100644
--- a/clang/lib/Basic/Targets/SystemZ.h
+++ b/clang/lib/Basic/Targets/SystemZ.h
@@ -21,34 +21,34 @@
namespace clang {
namespace targets {
-static const unsigned ZOSAddressMap[] = {
- 0, // Default
- 0, // opencl_global
- 0, // opencl_local
- 0, // opencl_constant
- 0, // opencl_private
- 0, // opencl_generic
- 0, // opencl_global_device
- 0, // opencl_global_host
- 0, // cuda_device
- 0, // cuda_constant
- 0, // cuda_shared
- 0, // sycl_global
- 0, // sycl_global_device
- 0, // sycl_global_host
- 0, // sycl_local
- 0, // sycl_private
- 0, // ptr32_sptr
- 1, // ptr32_uptr
- 0, // ptr64
- 0, // hlsl_groupshared
- 0, // hlsl_constant
- 0, // hlsl_private
- 0, // hlsl_device
- 0, // hlsl_input
- 0, // hlsl_output
- 0, // hlsl_push_constant
- 0 // wasm_funcref
+static const LangASMap ZOSAddressMap = {
+ {LangAS::Default, 0},
+ {LangAS::opencl_global, 0},
+ {LangAS::opencl_local, 0},
+ {LangAS::opencl_constant, 0},
+ {LangAS::opencl_private, 0},
+ {LangAS::opencl_generic, 0},
+ {LangAS::opencl_global_device, 0},
+ {LangAS::opencl_global_host, 0},
+ {LangAS::cuda_device, 0},
+ {LangAS::cuda_constant, 0},
+ {LangAS::cuda_shared, 0},
+ {LangAS::sycl_global, 0},
+ {LangAS::sycl_global_device, 0},
+ {LangAS::sycl_global_host, 0},
+ {LangAS::sycl_local, 0},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, 0},
+ {LangAS::ptr32_uptr, 1},
+ {LangAS::ptr64, 0},
+ {LangAS::hlsl_groupshared, 0},
+ {LangAS::hlsl_constant, 0},
+ {LangAS::hlsl_private, 0},
+ {LangAS::hlsl_device, 0},
+ {LangAS::hlsl_input, 0},
+ {LangAS::hlsl_output, 0},
+ {LangAS::hlsl_push_constant, 0},
+ {LangAS::wasm_funcref, 0},
};
class LLVM_LIBRARY_VISIBILITY SystemZTargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h
index 32758cca4a5a0..c6466ae75a848 100644
--- a/clang/lib/Basic/Targets/TCE.h
+++ b/clang/lib/Basic/Targets/TCE.h
@@ -29,35 +29,35 @@ namespace targets {
// target processor and program binary. TCE co-design environment is
// publicly available in http://tce.cs.tut.fi
-static const unsigned TCEOpenCLAddrSpaceMap[] = {
- 0, // Default
- 1, // opencl_global
- 3, // opencl_local
- 2, // opencl_constant
- 0, // opencl_private
+static const LangASMap TCEOpenCLAddrSpaceMap = {
+ {LangAS::Default, 0},
+ {LangAS::opencl_global, 1},
+ {LangAS::opencl_local, 3},
+ {LangAS::opencl_constant, 2},
+ {LangAS::opencl_private, 0},
// FIXME: generic has to be added to the target
- 0, // opencl_generic
- 1, // opencl_global_device
- 1, // opencl_global_host
- 0, // cuda_device
- 0, // cuda_constant
- 0, // cuda_shared
- 0, // sycl_global
- 0, // sycl_global_device
- 0, // sycl_global_host
- 0, // sycl_local
- 0, // sycl_private
- 0, // ptr32_sptr
- 0, // ptr32_uptr
- 0, // ptr64
- 0, // hlsl_groupshared
- 0, // hlsl_constant
- 0, // hlsl_private
- 0, // hlsl_device
- 0, // hlsl_input
- 0, // hlsl_output
- 0, // hlsl_push_constant
- 0, // wasm_funcref
+ {LangAS::opencl_generic, 0},
+ {LangAS::opencl_global_device, 1},
+ {LangAS::opencl_global_host, 1},
+ {LangAS::cuda_device, 0},
+ {LangAS::cuda_constant, 0},
+ {LangAS::cuda_shared, 0},
+ {LangAS::sycl_global, 0},
+ {LangAS::sycl_global_device, 0},
+ {LangAS::sycl_global_host, 0},
+ {LangAS::sycl_local, 0},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, 0},
+ {LangAS::ptr32_uptr, 0},
+ {LangAS::ptr64, 0},
+ {LangAS::hlsl_groupshared, 0},
+ {LangAS::hlsl_constant, 0},
+ {LangAS::hlsl_private, 0},
+ {LangAS::hlsl_device, 0},
+ {LangAS::hlsl_input, 0},
+ {LangAS::hlsl_output, 0},
+ {LangAS::hlsl_push_constant, 0},
+ {LangAS::wasm_funcref, 0},
};
class LLVM_LIBRARY_VISIBILITY TCETargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/WebAssembly.h b/clang/lib/Basic/Targets/WebAssembly.h
index 0b0266a48469a..5973dd88222f1 100644
--- a/clang/lib/Basic/Targets/WebAssembly.h
+++ b/clang/lib/Basic/Targets/WebAssembly.h
@@ -21,34 +21,34 @@
namespace clang {
namespace targets {
-static const unsigned WebAssemblyAddrSpaceMap[] = {
- 0, // Default
- 0, // opencl_global
- 0, // opencl_local
- 0, // opencl_constant
- 0, // opencl_private
- 0, // opencl_generic
- 0, // opencl_global_device
- 0, // opencl_global_host
- 0, // cuda_device
- 0, // cuda_constant
- 0, // cuda_shared
- 0, // sycl_global
- 0, // sycl_global_device
- 0, // sycl_global_host
- 0, // sycl_local
- 0, // sycl_private
- 0, // ptr32_sptr
- 0, // ptr32_uptr
- 0, // ptr64
- 0, // hlsl_groupshared
- 0, // hlsl_constant
- 0, // hlsl_private
- 0, // hlsl_device
- 0, // hlsl_input
- 0, // hlsl_output
- 0, // hlsl_push_constant
- 20, // wasm_funcref
+static const LangASMap WebAssemblyAddrSpaceMap = {
+ {LangAS::Default, 0},
+ {LangAS::opencl_global, 0},
+ {LangAS::opencl_local, 0},
+ {LangAS::opencl_constant, 0},
+ {LangAS::opencl_private, 0},
+ {LangAS::opencl_generic, 0},
+ {LangAS::opencl_global_device, 0},
+ {LangAS::opencl_global_host, 0},
+ {LangAS::cuda_device, 0},
+ {LangAS::cuda_constant, 0},
+ {LangAS::cuda_shared, 0},
+ {LangAS::sycl_global, 0},
+ {LangAS::sycl_global_device, 0},
+ {LangAS::sycl_global_host, 0},
+ {LangAS::sycl_local, 0},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, 0},
+ {LangAS::ptr32_uptr, 0},
+ {LangAS::ptr64, 0},
+ {LangAS::hlsl_groupshared, 0},
+ {LangAS::hlsl_constant, 0},
+ {LangAS::hlsl_private, 0},
+ {LangAS::hlsl_device, 0},
+ {LangAS::hlsl_input, 0},
+ {LangAS::hlsl_output, 0},
+ {LangAS::hlsl_push_constant, 0},
+ {LangAS::wasm_funcref, 20},
};
class LLVM_LIBRARY_VISIBILITY WebAssemblyTargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h
index c34aeff183f14..9f6324bd8c613 100644
--- a/clang/lib/Basic/Targets/X86.h
+++ b/clang/lib/Basic/Targets/X86.h
@@ -25,34 +25,34 @@
namespace clang {
namespace targets {
-static const unsigned X86AddrSpaceMap[] = {
- 0, // Default
- 0, // opencl_global
- 0, // opencl_local
- 0, // opencl_constant
- 0, // opencl_private
- 0, // opencl_generic
- 0, // opencl_global_device
- 0, // opencl_global_host
- 0, // cuda_device
- 0, // cuda_constant
- 0, // cuda_shared
- 0, // sycl_global
- 0, // sycl_global_device
- 0, // sycl_global_host
- 0, // sycl_local
- 0, // sycl_private
- 270, // ptr32_sptr
- 271, // ptr32_uptr
- 272, // ptr64
- 0, // hlsl_groupshared
- 0, // hlsl_constant
- 0, // hlsl_private
- 0, // hlsl_device
- 0, // hlsl_input
- 0, // hlsl_output
- 0, // hlsl_push_constant
- 0, // wasm_funcref
+static const LangASMap X86AddrSpaceMap = {
+ {LangAS::Default, 0},
+ {LangAS::opencl_global, 0},
+ {LangAS::opencl_local, 0},
+ {LangAS::opencl_constant, 0},
+ {LangAS::opencl_private, 0},
+ {LangAS::opencl_generic, 0},
+ {LangAS::opencl_global_device, 0},
+ {LangAS::opencl_global_host, 0},
+ {LangAS::cuda_device, 0},
+ {LangAS::cuda_constant, 0},
+ {LangAS::cuda_shared, 0},
+ {LangAS::sycl_global, 0},
+ {LangAS::sycl_global_device, 0},
+ {LangAS::sycl_global_host, 0},
+ {LangAS::sycl_local, 0},
+ {LangAS::sycl_private, 0},
+ {LangAS::ptr32_sptr, 270},
+ {LangAS::ptr32_uptr, 271},
+ {LangAS::ptr64, 272},
+ {LangAS::hlsl_groupshared, 0},
+ {LangAS::hlsl_constant, 0},
+ {LangAS::hlsl_private, 0},
+ {LangAS::hlsl_device, 0},
+ {LangAS::hlsl_input, 0},
+ {LangAS::hlsl_output, 0},
+ {LangAS::hlsl_push_constant, 0},
+ {LangAS::wasm_funcref, 0},
};
// X86 target abstract base class; x86-32 and x86-64 are very close, so
>From 21b4fb4beb75583db1671e6f6983c597e89ec9a6 Mon Sep 17 00:00:00 2001
From: Ken Matsui <github at kmts.me>
Date: Fri, 17 Jul 2026 02:37:19 -0400
Subject: [PATCH 4/6] [clang] Omit redundant zero-valued LangASMap entries
(NFC)
---
clang/lib/Basic/Targets/AArch64.h | 24 ------------------------
clang/lib/Basic/Targets/DirectX.h | 20 --------------------
clang/lib/Basic/Targets/NVPTX.h | 14 --------------
clang/lib/Basic/Targets/SPIR.h | 22 ----------------------
clang/lib/Basic/Targets/SystemZ.h | 26 --------------------------
clang/lib/Basic/Targets/TCE.h | 21 ---------------------
clang/lib/Basic/Targets/WebAssembly.h | 26 --------------------------
clang/lib/Basic/Targets/X86.h | 24 ------------------------
8 files changed, 177 deletions(-)
diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h
index 3abb1682ee897..5655807aa9528 100644
--- a/clang/lib/Basic/Targets/AArch64.h
+++ b/clang/lib/Basic/Targets/AArch64.h
@@ -25,33 +25,9 @@ namespace targets {
enum AArch64AddrSpace { ptr32_sptr = 270, ptr32_uptr = 271, ptr64 = 272 };
static const LangASMap ARM64AddrSpaceMap = {
- {LangAS::Default, 0},
- {LangAS::opencl_global, 0},
- {LangAS::opencl_local, 0},
- {LangAS::opencl_constant, 0},
- {LangAS::opencl_private, 0},
- {LangAS::opencl_generic, 0},
- {LangAS::opencl_global_device, 0},
- {LangAS::opencl_global_host, 0},
- {LangAS::cuda_device, 0},
- {LangAS::cuda_constant, 0},
- {LangAS::cuda_shared, 0},
- {LangAS::sycl_global, 0},
- {LangAS::sycl_global_device, 0},
- {LangAS::sycl_global_host, 0},
- {LangAS::sycl_local, 0},
- {LangAS::sycl_private, 0},
{LangAS::ptr32_sptr, static_cast<unsigned>(AArch64AddrSpace::ptr32_sptr)},
{LangAS::ptr32_uptr, static_cast<unsigned>(AArch64AddrSpace::ptr32_uptr)},
{LangAS::ptr64, static_cast<unsigned>(AArch64AddrSpace::ptr64)},
- {LangAS::hlsl_groupshared, 0},
- {LangAS::hlsl_constant, 0},
- {LangAS::hlsl_private, 0},
- {LangAS::hlsl_device, 0},
- {LangAS::hlsl_input, 0},
- {LangAS::hlsl_output, 0},
- {LangAS::hlsl_push_constant, 0},
- {LangAS::wasm_funcref, 0},
};
using AArch64FeatureSet = llvm::SmallDenseSet<StringRef, 32>;
diff --git a/clang/lib/Basic/Targets/DirectX.h b/clang/lib/Basic/Targets/DirectX.h
index 20b7fd7e6aa4f..3c043ec7c3563 100644
--- a/clang/lib/Basic/Targets/DirectX.h
+++ b/clang/lib/Basic/Targets/DirectX.h
@@ -21,34 +21,14 @@ namespace clang {
namespace targets {
static const LangASMap DirectXAddrSpaceMap = {
- {LangAS::Default, 0},
{LangAS::opencl_global, 1},
{LangAS::opencl_local, 3},
{LangAS::opencl_constant, 2},
- {LangAS::opencl_private, 0},
{LangAS::opencl_generic, 4},
{LangAS::opencl_global_device, 5},
{LangAS::opencl_global_host, 6},
- {LangAS::cuda_device, 0},
- {LangAS::cuda_constant, 0},
- {LangAS::cuda_shared, 0},
- // SYCL address space values for this map are dummy
- {LangAS::sycl_global, 0},
- {LangAS::sycl_global_device, 0},
- {LangAS::sycl_global_host, 0},
- {LangAS::sycl_local, 0},
- {LangAS::sycl_private, 0},
- {LangAS::ptr32_sptr, 0},
- {LangAS::ptr32_uptr, 0},
- {LangAS::ptr64, 0},
{LangAS::hlsl_groupshared, 3},
{LangAS::hlsl_constant, 2},
- {LangAS::hlsl_private, 0},
- {LangAS::hlsl_device, 0},
- {LangAS::hlsl_input, 0},
- {LangAS::hlsl_output, 0},
- {LangAS::hlsl_push_constant, 0},
- {LangAS::wasm_funcref, 0},
};
class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h
index 6299a4685fa5e..0dc8cbe27fc57 100644
--- a/clang/lib/Basic/Targets/NVPTX.h
+++ b/clang/lib/Basic/Targets/NVPTX.h
@@ -25,11 +25,9 @@ namespace clang {
namespace targets {
static const LangASMap NVPTXAddrSpaceMap = {
- {LangAS::Default, 0},
{LangAS::opencl_global, 1},
{LangAS::opencl_local, 3},
{LangAS::opencl_constant, 4},
- {LangAS::opencl_private, 0},
// FIXME: generic has to be added to the target
{LangAS::opencl_generic, 0},
{LangAS::opencl_global_device, 1},
@@ -41,18 +39,6 @@ static const LangASMap NVPTXAddrSpaceMap = {
{LangAS::sycl_global_device, 1},
{LangAS::sycl_global_host, 1},
{LangAS::sycl_local, 3},
- {LangAS::sycl_private, 0},
- {LangAS::ptr32_sptr, 0},
- {LangAS::ptr32_uptr, 0},
- {LangAS::ptr64, 0},
- {LangAS::hlsl_groupshared, 0},
- {LangAS::hlsl_constant, 0},
- {LangAS::hlsl_private, 0},
- {LangAS::hlsl_device, 0},
- {LangAS::hlsl_input, 0},
- {LangAS::hlsl_output, 0},
- {LangAS::hlsl_push_constant, 0},
- {LangAS::wasm_funcref, 0},
};
/// The DWARF address class. Taken from
diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h
index acc87121b1ae5..a0aef2fbc560f 100644
--- a/clang/lib/Basic/Targets/SPIR.h
+++ b/clang/lib/Basic/Targets/SPIR.h
@@ -29,26 +29,12 @@ namespace targets {
// Used by both the SPIR and SPIR-V targets.
static const LangASMap SPIRDefIsPrivMap = {
- {LangAS::Default, 0},
{LangAS::opencl_global, 1},
{LangAS::opencl_local, 3},
{LangAS::opencl_constant, 2},
- {LangAS::opencl_private, 0},
{LangAS::opencl_generic, 4},
{LangAS::opencl_global_device, 5},
{LangAS::opencl_global_host, 6},
- {LangAS::cuda_device, 0},
- {LangAS::cuda_constant, 0},
- {LangAS::cuda_shared, 0},
- // SYCL address space values for this map are dummy
- {LangAS::sycl_global, 0},
- {LangAS::sycl_global_device, 0},
- {LangAS::sycl_global_host, 0},
- {LangAS::sycl_local, 0},
- {LangAS::sycl_private, 0},
- {LangAS::ptr32_sptr, 0},
- {LangAS::ptr32_uptr, 0},
- {LangAS::ptr64, 0},
{LangAS::hlsl_groupshared, 3},
{LangAS::hlsl_constant, 12},
{LangAS::hlsl_private, 10},
@@ -56,7 +42,6 @@ static const LangASMap SPIRDefIsPrivMap = {
{LangAS::hlsl_input, 7},
{LangAS::hlsl_output, 8},
{LangAS::hlsl_push_constant, 13},
- {LangAS::wasm_funcref, 0},
};
// Used by both the SPIR and SPIR-V targets.
@@ -65,7 +50,6 @@ static const LangASMap SPIRDefIsGenMap = {
{LangAS::opencl_global, 1},
{LangAS::opencl_local, 3},
{LangAS::opencl_constant, 2},
- {LangAS::opencl_private, 0},
{LangAS::opencl_generic, 4},
{LangAS::opencl_global_device, 5},
{LangAS::opencl_global_host, 6},
@@ -81,18 +65,12 @@ static const LangASMap SPIRDefIsGenMap = {
{LangAS::sycl_global_device, 5},
{LangAS::sycl_global_host, 6},
{LangAS::sycl_local, 3},
- {LangAS::sycl_private, 0},
- {LangAS::ptr32_sptr, 0},
- {LangAS::ptr32_uptr, 0},
- {LangAS::ptr64, 0},
{LangAS::hlsl_groupshared, 3},
- {LangAS::hlsl_constant, 0},
{LangAS::hlsl_private, 10},
{LangAS::hlsl_device, 11},
{LangAS::hlsl_input, 7},
{LangAS::hlsl_output, 8},
{LangAS::hlsl_push_constant, 13},
- {LangAS::wasm_funcref, 0},
};
// Base class for SPIR and SPIR-V target info.
diff --git a/clang/lib/Basic/Targets/SystemZ.h b/clang/lib/Basic/Targets/SystemZ.h
index c8fe49c9d4a1c..98f5bec544a13 100644
--- a/clang/lib/Basic/Targets/SystemZ.h
+++ b/clang/lib/Basic/Targets/SystemZ.h
@@ -22,33 +22,7 @@ namespace clang {
namespace targets {
static const LangASMap ZOSAddressMap = {
- {LangAS::Default, 0},
- {LangAS::opencl_global, 0},
- {LangAS::opencl_local, 0},
- {LangAS::opencl_constant, 0},
- {LangAS::opencl_private, 0},
- {LangAS::opencl_generic, 0},
- {LangAS::opencl_global_device, 0},
- {LangAS::opencl_global_host, 0},
- {LangAS::cuda_device, 0},
- {LangAS::cuda_constant, 0},
- {LangAS::cuda_shared, 0},
- {LangAS::sycl_global, 0},
- {LangAS::sycl_global_device, 0},
- {LangAS::sycl_global_host, 0},
- {LangAS::sycl_local, 0},
- {LangAS::sycl_private, 0},
- {LangAS::ptr32_sptr, 0},
{LangAS::ptr32_uptr, 1},
- {LangAS::ptr64, 0},
- {LangAS::hlsl_groupshared, 0},
- {LangAS::hlsl_constant, 0},
- {LangAS::hlsl_private, 0},
- {LangAS::hlsl_device, 0},
- {LangAS::hlsl_input, 0},
- {LangAS::hlsl_output, 0},
- {LangAS::hlsl_push_constant, 0},
- {LangAS::wasm_funcref, 0},
};
class LLVM_LIBRARY_VISIBILITY SystemZTargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h
index c6466ae75a848..acd00af05896c 100644
--- a/clang/lib/Basic/Targets/TCE.h
+++ b/clang/lib/Basic/Targets/TCE.h
@@ -30,34 +30,13 @@ namespace targets {
// publicly available in http://tce.cs.tut.fi
static const LangASMap TCEOpenCLAddrSpaceMap = {
- {LangAS::Default, 0},
{LangAS::opencl_global, 1},
{LangAS::opencl_local, 3},
{LangAS::opencl_constant, 2},
- {LangAS::opencl_private, 0},
// FIXME: generic has to be added to the target
{LangAS::opencl_generic, 0},
{LangAS::opencl_global_device, 1},
{LangAS::opencl_global_host, 1},
- {LangAS::cuda_device, 0},
- {LangAS::cuda_constant, 0},
- {LangAS::cuda_shared, 0},
- {LangAS::sycl_global, 0},
- {LangAS::sycl_global_device, 0},
- {LangAS::sycl_global_host, 0},
- {LangAS::sycl_local, 0},
- {LangAS::sycl_private, 0},
- {LangAS::ptr32_sptr, 0},
- {LangAS::ptr32_uptr, 0},
- {LangAS::ptr64, 0},
- {LangAS::hlsl_groupshared, 0},
- {LangAS::hlsl_constant, 0},
- {LangAS::hlsl_private, 0},
- {LangAS::hlsl_device, 0},
- {LangAS::hlsl_input, 0},
- {LangAS::hlsl_output, 0},
- {LangAS::hlsl_push_constant, 0},
- {LangAS::wasm_funcref, 0},
};
class LLVM_LIBRARY_VISIBILITY TCETargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/WebAssembly.h b/clang/lib/Basic/Targets/WebAssembly.h
index 5973dd88222f1..a97c54f17b099 100644
--- a/clang/lib/Basic/Targets/WebAssembly.h
+++ b/clang/lib/Basic/Targets/WebAssembly.h
@@ -22,32 +22,6 @@ namespace clang {
namespace targets {
static const LangASMap WebAssemblyAddrSpaceMap = {
- {LangAS::Default, 0},
- {LangAS::opencl_global, 0},
- {LangAS::opencl_local, 0},
- {LangAS::opencl_constant, 0},
- {LangAS::opencl_private, 0},
- {LangAS::opencl_generic, 0},
- {LangAS::opencl_global_device, 0},
- {LangAS::opencl_global_host, 0},
- {LangAS::cuda_device, 0},
- {LangAS::cuda_constant, 0},
- {LangAS::cuda_shared, 0},
- {LangAS::sycl_global, 0},
- {LangAS::sycl_global_device, 0},
- {LangAS::sycl_global_host, 0},
- {LangAS::sycl_local, 0},
- {LangAS::sycl_private, 0},
- {LangAS::ptr32_sptr, 0},
- {LangAS::ptr32_uptr, 0},
- {LangAS::ptr64, 0},
- {LangAS::hlsl_groupshared, 0},
- {LangAS::hlsl_constant, 0},
- {LangAS::hlsl_private, 0},
- {LangAS::hlsl_device, 0},
- {LangAS::hlsl_input, 0},
- {LangAS::hlsl_output, 0},
- {LangAS::hlsl_push_constant, 0},
{LangAS::wasm_funcref, 20},
};
diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h
index 9f6324bd8c613..6fd975c7d2cb2 100644
--- a/clang/lib/Basic/Targets/X86.h
+++ b/clang/lib/Basic/Targets/X86.h
@@ -26,33 +26,9 @@ namespace clang {
namespace targets {
static const LangASMap X86AddrSpaceMap = {
- {LangAS::Default, 0},
- {LangAS::opencl_global, 0},
- {LangAS::opencl_local, 0},
- {LangAS::opencl_constant, 0},
- {LangAS::opencl_private, 0},
- {LangAS::opencl_generic, 0},
- {LangAS::opencl_global_device, 0},
- {LangAS::opencl_global_host, 0},
- {LangAS::cuda_device, 0},
- {LangAS::cuda_constant, 0},
- {LangAS::cuda_shared, 0},
- {LangAS::sycl_global, 0},
- {LangAS::sycl_global_device, 0},
- {LangAS::sycl_global_host, 0},
- {LangAS::sycl_local, 0},
- {LangAS::sycl_private, 0},
{LangAS::ptr32_sptr, 270},
{LangAS::ptr32_uptr, 271},
{LangAS::ptr64, 272},
- {LangAS::hlsl_groupshared, 0},
- {LangAS::hlsl_constant, 0},
- {LangAS::hlsl_private, 0},
- {LangAS::hlsl_device, 0},
- {LangAS::hlsl_input, 0},
- {LangAS::hlsl_output, 0},
- {LangAS::hlsl_push_constant, 0},
- {LangAS::wasm_funcref, 0},
};
// X86 target abstract base class; x86-32 and x86-64 are very close, so
>From 3c892620437a494ff11f7fbbad706eb51768d390 Mon Sep 17 00:00:00 2001
From: Ken Matsui <github at kmts.me>
Date: Fri, 17 Jul 2026 02:54:33 -0400
Subject: [PATCH 5/6] [clang] Run clang-format (NFC)
---
clang/lib/Basic/Targets/DirectX.h | 12 ++++--------
clang/lib/Basic/Targets/SPIR.h | 18 ++++++------------
2 files changed, 10 insertions(+), 20 deletions(-)
diff --git a/clang/lib/Basic/Targets/DirectX.h b/clang/lib/Basic/Targets/DirectX.h
index 3c043ec7c3563..7a8c43f5ccf98 100644
--- a/clang/lib/Basic/Targets/DirectX.h
+++ b/clang/lib/Basic/Targets/DirectX.h
@@ -21,14 +21,10 @@ namespace clang {
namespace targets {
static const LangASMap DirectXAddrSpaceMap = {
- {LangAS::opencl_global, 1},
- {LangAS::opencl_local, 3},
- {LangAS::opencl_constant, 2},
- {LangAS::opencl_generic, 4},
- {LangAS::opencl_global_device, 5},
- {LangAS::opencl_global_host, 6},
- {LangAS::hlsl_groupshared, 3},
- {LangAS::hlsl_constant, 2},
+ {LangAS::opencl_global, 1}, {LangAS::opencl_local, 3},
+ {LangAS::opencl_constant, 2}, {LangAS::opencl_generic, 4},
+ {LangAS::opencl_global_device, 5}, {LangAS::opencl_global_host, 6},
+ {LangAS::hlsl_groupshared, 3}, {LangAS::hlsl_constant, 2},
};
class LLVM_LIBRARY_VISIBILITY DirectXTargetInfo : public TargetInfo {
diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h
index a0aef2fbc560f..996cdb407c7cd 100644
--- a/clang/lib/Basic/Targets/SPIR.h
+++ b/clang/lib/Basic/Targets/SPIR.h
@@ -29,18 +29,12 @@ namespace targets {
// Used by both the SPIR and SPIR-V targets.
static const LangASMap SPIRDefIsPrivMap = {
- {LangAS::opencl_global, 1},
- {LangAS::opencl_local, 3},
- {LangAS::opencl_constant, 2},
- {LangAS::opencl_generic, 4},
- {LangAS::opencl_global_device, 5},
- {LangAS::opencl_global_host, 6},
- {LangAS::hlsl_groupshared, 3},
- {LangAS::hlsl_constant, 12},
- {LangAS::hlsl_private, 10},
- {LangAS::hlsl_device, 11},
- {LangAS::hlsl_input, 7},
- {LangAS::hlsl_output, 8},
+ {LangAS::opencl_global, 1}, {LangAS::opencl_local, 3},
+ {LangAS::opencl_constant, 2}, {LangAS::opencl_generic, 4},
+ {LangAS::opencl_global_device, 5}, {LangAS::opencl_global_host, 6},
+ {LangAS::hlsl_groupshared, 3}, {LangAS::hlsl_constant, 12},
+ {LangAS::hlsl_private, 10}, {LangAS::hlsl_device, 11},
+ {LangAS::hlsl_input, 7}, {LangAS::hlsl_output, 8},
{LangAS::hlsl_push_constant, 13},
};
>From 03954bf774e9442348701f1777b95ecaa93fd55e Mon Sep 17 00:00:00 2001
From: Ken Matsui <github at kmts.me>
Date: Fri, 17 Jul 2026 02:41:49 -0400
Subject: [PATCH 6/6] [clang] Declare address space maps constexpr (NFC)
---
clang/lib/Basic/TargetInfo.cpp | 4 ++--
clang/lib/Basic/Targets/AArch64.h | 2 +-
clang/lib/Basic/Targets/DirectX.h | 2 +-
clang/lib/Basic/Targets/NVPTX.h | 2 +-
clang/lib/Basic/Targets/SPIR.h | 4 ++--
clang/lib/Basic/Targets/SystemZ.h | 2 +-
clang/lib/Basic/Targets/TCE.h | 2 +-
clang/lib/Basic/Targets/WebAssembly.h | 2 +-
clang/lib/Basic/Targets/X86.h | 2 +-
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp
index 29d67431a7081..103104ce4874b 100644
--- a/clang/lib/Basic/TargetInfo.cpp
+++ b/clang/lib/Basic/TargetInfo.cpp
@@ -24,10 +24,10 @@
#include <cstdlib>
using namespace clang;
-static const LangASMap DefaultAddrSpaceMap;
+static constexpr LangASMap DefaultAddrSpaceMap;
// The fake address space map must have a distinct entry for each
// language-specific address space.
-static const LangASMap FakeAddrSpaceMap = {
+static constexpr LangASMap FakeAddrSpaceMap = {
{LangAS::Default, 0},
{LangAS::opencl_global, 1},
{LangAS::opencl_local, 3},
diff --git a/clang/lib/Basic/Targets/AArch64.h b/clang/lib/Basic/Targets/AArch64.h
index 5655807aa9528..3ccfa265399be 100644
--- a/clang/lib/Basic/Targets/AArch64.h
+++ b/clang/lib/Basic/Targets/AArch64.h
@@ -24,7 +24,7 @@ namespace targets {
enum AArch64AddrSpace { ptr32_sptr = 270, ptr32_uptr = 271, ptr64 = 272 };
-static const LangASMap ARM64AddrSpaceMap = {
+static constexpr LangASMap ARM64AddrSpaceMap = {
{LangAS::ptr32_sptr, static_cast<unsigned>(AArch64AddrSpace::ptr32_sptr)},
{LangAS::ptr32_uptr, static_cast<unsigned>(AArch64AddrSpace::ptr32_uptr)},
{LangAS::ptr64, static_cast<unsigned>(AArch64AddrSpace::ptr64)},
diff --git a/clang/lib/Basic/Targets/DirectX.h b/clang/lib/Basic/Targets/DirectX.h
index 7a8c43f5ccf98..ffc9c5bfa2cb9 100644
--- a/clang/lib/Basic/Targets/DirectX.h
+++ b/clang/lib/Basic/Targets/DirectX.h
@@ -20,7 +20,7 @@
namespace clang {
namespace targets {
-static const LangASMap DirectXAddrSpaceMap = {
+static constexpr LangASMap DirectXAddrSpaceMap = {
{LangAS::opencl_global, 1}, {LangAS::opencl_local, 3},
{LangAS::opencl_constant, 2}, {LangAS::opencl_generic, 4},
{LangAS::opencl_global_device, 5}, {LangAS::opencl_global_host, 6},
diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h
index 0dc8cbe27fc57..72941fd65fda8 100644
--- a/clang/lib/Basic/Targets/NVPTX.h
+++ b/clang/lib/Basic/Targets/NVPTX.h
@@ -24,7 +24,7 @@
namespace clang {
namespace targets {
-static const LangASMap NVPTXAddrSpaceMap = {
+static constexpr LangASMap NVPTXAddrSpaceMap = {
{LangAS::opencl_global, 1},
{LangAS::opencl_local, 3},
{LangAS::opencl_constant, 4},
diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h
index 996cdb407c7cd..a16c8ec79d2f2 100644
--- a/clang/lib/Basic/Targets/SPIR.h
+++ b/clang/lib/Basic/Targets/SPIR.h
@@ -28,7 +28,7 @@ namespace clang {
namespace targets {
// Used by both the SPIR and SPIR-V targets.
-static const LangASMap SPIRDefIsPrivMap = {
+static constexpr LangASMap SPIRDefIsPrivMap = {
{LangAS::opencl_global, 1}, {LangAS::opencl_local, 3},
{LangAS::opencl_constant, 2}, {LangAS::opencl_generic, 4},
{LangAS::opencl_global_device, 5}, {LangAS::opencl_global_host, 6},
@@ -39,7 +39,7 @@ static const LangASMap SPIRDefIsPrivMap = {
};
// Used by both the SPIR and SPIR-V targets.
-static const LangASMap SPIRDefIsGenMap = {
+static constexpr LangASMap SPIRDefIsGenMap = {
{LangAS::Default, 4},
{LangAS::opencl_global, 1},
{LangAS::opencl_local, 3},
diff --git a/clang/lib/Basic/Targets/SystemZ.h b/clang/lib/Basic/Targets/SystemZ.h
index 98f5bec544a13..cf7d940c1b2e5 100644
--- a/clang/lib/Basic/Targets/SystemZ.h
+++ b/clang/lib/Basic/Targets/SystemZ.h
@@ -21,7 +21,7 @@
namespace clang {
namespace targets {
-static const LangASMap ZOSAddressMap = {
+static constexpr LangASMap ZOSAddressMap = {
{LangAS::ptr32_uptr, 1},
};
diff --git a/clang/lib/Basic/Targets/TCE.h b/clang/lib/Basic/Targets/TCE.h
index acd00af05896c..f33b88b9a04b1 100644
--- a/clang/lib/Basic/Targets/TCE.h
+++ b/clang/lib/Basic/Targets/TCE.h
@@ -29,7 +29,7 @@ namespace targets {
// target processor and program binary. TCE co-design environment is
// publicly available in http://tce.cs.tut.fi
-static const LangASMap TCEOpenCLAddrSpaceMap = {
+static constexpr LangASMap TCEOpenCLAddrSpaceMap = {
{LangAS::opencl_global, 1},
{LangAS::opencl_local, 3},
{LangAS::opencl_constant, 2},
diff --git a/clang/lib/Basic/Targets/WebAssembly.h b/clang/lib/Basic/Targets/WebAssembly.h
index a97c54f17b099..630b1a7cd2b36 100644
--- a/clang/lib/Basic/Targets/WebAssembly.h
+++ b/clang/lib/Basic/Targets/WebAssembly.h
@@ -21,7 +21,7 @@
namespace clang {
namespace targets {
-static const LangASMap WebAssemblyAddrSpaceMap = {
+static constexpr LangASMap WebAssemblyAddrSpaceMap = {
{LangAS::wasm_funcref, 20},
};
diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h
index 6fd975c7d2cb2..f276f00df942d 100644
--- a/clang/lib/Basic/Targets/X86.h
+++ b/clang/lib/Basic/Targets/X86.h
@@ -25,7 +25,7 @@
namespace clang {
namespace targets {
-static const LangASMap X86AddrSpaceMap = {
+static constexpr LangASMap X86AddrSpaceMap = {
{LangAS::ptr32_sptr, 270},
{LangAS::ptr32_uptr, 271},
{LangAS::ptr64, 272},
More information about the cfe-commits
mailing list