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
