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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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},

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to