[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
arsenm wrote: > LangAS::Default is not just determined by target. It also depends on > language. For OpenCL 1.2 it is private. I would have hoped this would be implemented by default assuming a hidden private addrspace qualifier https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
yxsamliu wrote: > I still think we should not need this. DefaultIsPrivate is junk that needs to > be deleted. Querying for LangAS::Default should always give the answer 0 for > AMDGPU, which is what this is working around. > > This clang notion of address space has nothing to do with your troubles with > llvm.used in the IR or SPIRV LangAS::Default is not just determined by target. It also depends on language. For OpenCL 1.2 it is private. For example, the argument of `void foo(int*)` by language spec points to private addr space, and it translates to addr space 5 instead of 0 in IR. (https://godbolt.org/z/E71E3Wb5e). Due to this, it is hard to let LangAS::Default maps to 0 for amdgpu target for all languages. https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
arsenm wrote: I still think we should not need this. DefaultIsPrivate is junk that needs to be deleted. Querying for LangAS::Default should always give the answer 0 for AMDGPU, which is what this is working around. This clang notion of address space has nothing to do with your troubles with llvm.used in the IR or SPIRV https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
efriedma-quic wrote: I mean, this is conceptually fine as far as it goes, but I'm not sure where we actually want to use it. As noted on the other PRs, llvm.used/llvm.global_ctors/llvm.global_dtors don't really want a flat address-space. The "address-space" for llvm.used, and for the "associated global" for global_ctors/global_dtors, is not a real address-space; it's just there because the IR representation forces the use of some address-space. For most places using address-space "0", there's some appropriate address-space, it's just nobody has spent any time thinking about what that address-space is, and everything defaulted to "0" when address-spaces were introduced into LLVM. https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx commented: @jrtc27 @arsenm any additional comments? Are things more palatable in this form? Should this be turned into an RFC? Thanks. https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx edited https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx updated https://github.com/llvm/llvm-project/pull/95728 >From 2b500ad9ef2baf27da29146b5a4123dcb75e Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 02:15:00 +0100 Subject: [PATCH 1/3] Add interface for exposing a target's flat address space, if it exists. --- clang/include/clang/Basic/TargetInfo.h | 7 +++ clang/lib/Basic/Targets/AMDGPU.h | 6 ++ clang/lib/Basic/Targets/SPIR.h | 4 3 files changed, 17 insertions(+) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8a6511b9ced83..8841ec5f910d9 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. + virtual unsigned getFlatPtrAddressSpace() const { +return 0; + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 94d9ba93ed226..d06c7d58fe94c 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -379,6 +379,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { return static_cast(llvm::AMDGPUAS::CONSTANT_ADDRESS); } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. + unsigned getFlatPtrAddressSpace() const override { +return static_cast(llvm::AMDGPUAS::FLAT_ADDRESS); + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 37cf9d7921bac..14d235bace960 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -182,6 +182,10 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } + unsigned getFlatPtrAddressSpace() const override { +return 4u; // 4 is generic i.e. flat for SPIR & SPIR-V. + } + std::optional getDWARFAddressSpace(unsigned AddressSpace) const override { return AddressSpace; >From 346877d118700a748bffa8b0aee8633d6991582c Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 12:58:04 +0100 Subject: [PATCH 2/3] Fix formatting. --- clang/include/clang/Basic/TargetInfo.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8841ec5f910d9..a3b60db122cae 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1767,9 +1767,7 @@ class TargetInfo : public TransferrableTargetInfo, /// \returns Target specific flat ptr address space; a flat ptr is a ptr that /// can be casted to / from all other target address spaces. If the target /// exposes no such address space / does not care, we return 0. - virtual unsigned getFlatPtrAddressSpace() const { -return 0; - } + virtual unsigned getFlatPtrAddressSpace() const { return 0; } /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the >From 8ee059a30fbad6be374a980447601339eea37645 Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Wed, 19 Jun 2024 14:44:53 +0100 Subject: [PATCH 3/3] Rework interface to return optional; flesh out comment. --- clang/include/clang/Basic/TargetInfo.h | 14 ++ clang/lib/Basic/Targets/AMDGPU.h | 2 +- clang/lib/Basic/Targets/SPIR.h | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index a3b60db122cae..eb5b29dfbb3f0 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,10 +1764,16 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } - /// \returns Target specific flat ptr address space; a flat ptr is a ptr that - /// can be casted to / from all other target address spaces. If the target - /// exposes no such address space / does not care, we return 0. - virtual unsigned getFlatPtrAddressSpace() const { return 0; } + /// \returns If a target exposes a flat ptr address space (a flat ptr is a ptr + /// that can be caste
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx updated https://github.com/llvm/llvm-project/pull/95728 >From 2b500ad9ef2baf27da29146b5a4123dcb75e Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 02:15:00 +0100 Subject: [PATCH 1/3] Add interface for exposing a target's flat address space, if it exists. --- clang/include/clang/Basic/TargetInfo.h | 7 +++ clang/lib/Basic/Targets/AMDGPU.h | 6 ++ clang/lib/Basic/Targets/SPIR.h | 4 3 files changed, 17 insertions(+) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8a6511b9ced83..8841ec5f910d9 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. + virtual unsigned getFlatPtrAddressSpace() const { +return 0; + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 94d9ba93ed226..d06c7d58fe94c 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -379,6 +379,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { return static_cast(llvm::AMDGPUAS::CONSTANT_ADDRESS); } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. + unsigned getFlatPtrAddressSpace() const override { +return static_cast(llvm::AMDGPUAS::FLAT_ADDRESS); + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 37cf9d7921bac..14d235bace960 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -182,6 +182,10 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } + unsigned getFlatPtrAddressSpace() const override { +return 4u; // 4 is generic i.e. flat for SPIR & SPIR-V. + } + std::optional getDWARFAddressSpace(unsigned AddressSpace) const override { return AddressSpace; >From 346877d118700a748bffa8b0aee8633d6991582c Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 12:58:04 +0100 Subject: [PATCH 2/3] Fix formatting. --- clang/include/clang/Basic/TargetInfo.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8841ec5f910d9..a3b60db122cae 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1767,9 +1767,7 @@ class TargetInfo : public TransferrableTargetInfo, /// \returns Target specific flat ptr address space; a flat ptr is a ptr that /// can be casted to / from all other target address spaces. If the target /// exposes no such address space / does not care, we return 0. - virtual unsigned getFlatPtrAddressSpace() const { -return 0; - } + virtual unsigned getFlatPtrAddressSpace() const { return 0; } /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the >From 8ee059a30fbad6be374a980447601339eea37645 Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Wed, 19 Jun 2024 14:44:53 +0100 Subject: [PATCH 3/3] Rework interface to return optional; flesh out comment. --- clang/include/clang/Basic/TargetInfo.h | 14 ++ clang/lib/Basic/Targets/AMDGPU.h | 2 +- clang/lib/Basic/Targets/SPIR.h | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index a3b60db122cae..eb5b29dfbb3f0 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,10 +1764,16 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } - /// \returns Target specific flat ptr address space; a flat ptr is a ptr that - /// can be casted to / from all other target address spaces. If the target - /// exposes no such address space / does not care, we return 0. - virtual unsigned getFlatPtrAddressSpace() const { return 0; } + /// \returns If a target exposes a flat ptr address space (a flat ptr is a ptr + /// that can be caste
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx updated https://github.com/llvm/llvm-project/pull/95728 >From 2b500ad9ef2baf27da29146b5a4123dcb75e Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 02:15:00 +0100 Subject: [PATCH 1/3] Add interface for exposing a target's flat address space, if it exists. --- clang/include/clang/Basic/TargetInfo.h | 7 +++ clang/lib/Basic/Targets/AMDGPU.h | 6 ++ clang/lib/Basic/Targets/SPIR.h | 4 3 files changed, 17 insertions(+) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8a6511b9ced83..8841ec5f910d9 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. + virtual unsigned getFlatPtrAddressSpace() const { +return 0; + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 94d9ba93ed226..d06c7d58fe94c 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -379,6 +379,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { return static_cast(llvm::AMDGPUAS::CONSTANT_ADDRESS); } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. + unsigned getFlatPtrAddressSpace() const override { +return static_cast(llvm::AMDGPUAS::FLAT_ADDRESS); + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 37cf9d7921bac..14d235bace960 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -182,6 +182,10 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } + unsigned getFlatPtrAddressSpace() const override { +return 4u; // 4 is generic i.e. flat for SPIR & SPIR-V. + } + std::optional getDWARFAddressSpace(unsigned AddressSpace) const override { return AddressSpace; >From 346877d118700a748bffa8b0aee8633d6991582c Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 12:58:04 +0100 Subject: [PATCH 2/3] Fix formatting. --- clang/include/clang/Basic/TargetInfo.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8841ec5f910d9..a3b60db122cae 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1767,9 +1767,7 @@ class TargetInfo : public TransferrableTargetInfo, /// \returns Target specific flat ptr address space; a flat ptr is a ptr that /// can be casted to / from all other target address spaces. If the target /// exposes no such address space / does not care, we return 0. - virtual unsigned getFlatPtrAddressSpace() const { -return 0; - } + virtual unsigned getFlatPtrAddressSpace() const { return 0; } /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the >From 8ee059a30fbad6be374a980447601339eea37645 Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Wed, 19 Jun 2024 14:44:53 +0100 Subject: [PATCH 3/3] Rework interface to return optional; flesh out comment. --- clang/include/clang/Basic/TargetInfo.h | 14 ++ clang/lib/Basic/Targets/AMDGPU.h | 2 +- clang/lib/Basic/Targets/SPIR.h | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index a3b60db122cae..eb5b29dfbb3f0 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,10 +1764,16 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } - /// \returns Target specific flat ptr address space; a flat ptr is a ptr that - /// can be casted to / from all other target address spaces. If the target - /// exposes no such address space / does not care, we return 0. - virtual unsigned getFlatPtrAddressSpace() const { return 0; } + /// \returns If a target exposes a flat ptr address space (a flat ptr is a ptr + /// that can be caste
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx updated https://github.com/llvm/llvm-project/pull/95728 >From 2b500ad9ef2baf27da29146b5a4123dcb75e Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 02:15:00 +0100 Subject: [PATCH 1/2] Add interface for exposing a target's flat address space, if it exists. --- clang/include/clang/Basic/TargetInfo.h | 7 +++ clang/lib/Basic/Targets/AMDGPU.h | 6 ++ clang/lib/Basic/Targets/SPIR.h | 4 3 files changed, 17 insertions(+) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8a6511b9ced83..8841ec5f910d9 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. + virtual unsigned getFlatPtrAddressSpace() const { +return 0; + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 94d9ba93ed226..d06c7d58fe94c 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -379,6 +379,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { return static_cast(llvm::AMDGPUAS::CONSTANT_ADDRESS); } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. + unsigned getFlatPtrAddressSpace() const override { +return static_cast(llvm::AMDGPUAS::FLAT_ADDRESS); + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 37cf9d7921bac..14d235bace960 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -182,6 +182,10 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } + unsigned getFlatPtrAddressSpace() const override { +return 4u; // 4 is generic i.e. flat for SPIR & SPIR-V. + } + std::optional getDWARFAddressSpace(unsigned AddressSpace) const override { return AddressSpace; >From 346877d118700a748bffa8b0aee8633d6991582c Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 12:58:04 +0100 Subject: [PATCH 2/2] Fix formatting. --- clang/include/clang/Basic/TargetInfo.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8841ec5f910d9..a3b60db122cae 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1767,9 +1767,7 @@ class TargetInfo : public TransferrableTargetInfo, /// \returns Target specific flat ptr address space; a flat ptr is a ptr that /// can be casted to / from all other target address spaces. If the target /// exposes no such address space / does not care, we return 0. - virtual unsigned getFlatPtrAddressSpace() const { -return 0; - } + virtual unsigned getFlatPtrAddressSpace() const { return 0; } /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
@@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. AlexVlx wrote: > > here's no such thing as LangAS::Generic, there's LangAS::Default. > > Right, so query the target address space map for that. > Ok, I queried LangAS::Default and I got [this](https://github.com/llvm/llvm-project/blob/08de0b3cf54e4998799673f835e9a7d5ead8efab/clang/lib/Basic/Targets/AMDGPU.cpp#L65) because of [this](https://github.com/llvm/llvm-project/blob/08de0b3cf54e4998799673f835e9a7d5ead8efab/clang/lib/Basic/Targets/AMDGPU.cpp#L256). What's next? > The IR does not have the concept of a generic, flat, or no address space. 0 > is the "default address space", which has its own specific properties. > What are these specific properties and where are they documented? Also, 0 doesn't quite look like the default address space, at least not de jure, see above; it's not even the default address space for all uses of AMDGPU. > > this merely maintains the status quo, wherein everybody grabs an AS 0 > > pointer and hopes for the best. > > For the most part this isn't true, at least in llvm proper. > Sure, but this is in Clang, which pretty liberally uses things like `getUnqualPtrTy` and hopes it will work. Elsewhere you are essentially arguing for exactly the same thing, namely the FE should just use 0 unconditionally. I am saying that is wrong in general, and the next best thing is to query the target if it happens to have any opinions regarding what the AS one should use everywhere is. Just like we're already asking if it has any opinions about something far more niche, namely vtable ptrs), and then revert to the status quo which is use 0. In Clang. Because, otherwise, your request for the FE to "just do the right thing" ends up unsolvable. https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
@@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. AlexVlx wrote: > Some targets won't even have a flat address space. But that's fine, because > in these specific uses the address space's underlying > range/representation/meaning/whatever is completely irrelevant, all that > matters is the GlobalObject (GlobalValue?) you get once you strip away an > addrspacecasts. So I object to this on several grounds: > > 1. A flat address space may not exist > 2. These uses don't care about the address space beyond being consistent > across files > 3. The existence of this API invites people to start using it for other > things, and relying on properties of it that you've documented as being true > which I don't think we want to be guaranteeing > > If you really object to the arbitrary address space in use, I would rather > see the special arrays be made overloaded/polymorphic instead so that the > addrspacecasts can be avoided entirely . @jrtc27 this is not purely bespoke for the special arrays (sadly). The core issue is the prevalent, unguarded/unassuming use of AS 0. Since targets are not really bound to do anything special with 0 (there are no words anywhere saying 0 has any specific properties), problematic / invalid situations arise. This leads to a perpetual game of whack-a-mole as e.g. one brings up a more general purpose language, which is not quite ideal. Strictly regarding the special purpose arrays, I object to the arbitrary address space because it actually breaks targets as things stand today, for example: SPIR-V uses 0 for private, if we just use 0 we end up trying to generate invalid SPIR-V that casts from global (CrossWorkgroup) to private (Function) when populating them. Yes we can then go and add special handling just for the special arrays etc. in the SPIR-V BE/the downstream Translator, but that seems less than ideal to me. I'd like to address (1) and (3) (I did worry about those, but we have an interface that returns a vtbl ptr address space, and it was not clear why 0, which on some targets points to a limited visibility/capacity/private/unambiguously non-global private AS, would be valid for a vtable) - instead of unconditionally returning an integer, we could return an `optional`, with the default being to return `std::nullopt`. This'd constrain to uses to folks who know what they want, and why they want it, as opposed to trivial drop-in replacement. https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
@@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. jrtc27 wrote: Some targets won't even have a flat address space. But that's fine, because in these specific uses the address space's underlying range/representation/meaning/whatever is completely irrelevant, all that matters is the GlobalObject (GlobalValue?) you get once you strip away an addrspacecasts. So I object to this on several grounds: 1. A flat address space may not exist 2. These uses don't care about the address space beyond being consistent across files 3. The existence of this API invites people to start using it for other things, and relying on properties of it that you've documented as being true which I don't think we want to be guaranteeing If you really object to the arbitrary address space in use, I would rather see the special arrays be made overloaded/polymorphic instead so that the addrspacecasts can be avoided entirely . https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
@@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. arsenm wrote: > here's no such thing as LangAS::Generic, there's LangAS::Default. Right, so query the target address space map for that. The IR does not have the concept of a generic, flat, or no address space. 0 is the "default address space", which has its own specific properties. > this merely maintains the status quo, wherein everybody grabs an AS 0 pointer > and hopes for the best. For the most part this isn't true, at least in llvm proper. >From the comment here, I'm not even sure what this is returning (either an IR >address space or a clang address space) https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx updated https://github.com/llvm/llvm-project/pull/95728 >From 2b500ad9ef2baf27da29146b5a4123dcb75e Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 02:15:00 +0100 Subject: [PATCH 1/2] Add interface for exposing a target's flat address space, if it exists. --- clang/include/clang/Basic/TargetInfo.h | 7 +++ clang/lib/Basic/Targets/AMDGPU.h | 6 ++ clang/lib/Basic/Targets/SPIR.h | 4 3 files changed, 17 insertions(+) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8a6511b9ced83..8841ec5f910d9 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. + virtual unsigned getFlatPtrAddressSpace() const { +return 0; + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 94d9ba93ed226..d06c7d58fe94c 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -379,6 +379,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { return static_cast(llvm::AMDGPUAS::CONSTANT_ADDRESS); } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. + unsigned getFlatPtrAddressSpace() const override { +return static_cast(llvm::AMDGPUAS::FLAT_ADDRESS); + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 37cf9d7921bac..14d235bace960 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -182,6 +182,10 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } + unsigned getFlatPtrAddressSpace() const override { +return 4u; // 4 is generic i.e. flat for SPIR & SPIR-V. + } + std::optional getDWARFAddressSpace(unsigned AddressSpace) const override { return AddressSpace; >From 346877d118700a748bffa8b0aee8633d6991582c Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 12:58:04 +0100 Subject: [PATCH 2/2] Fix formatting. --- clang/include/clang/Basic/TargetInfo.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8841ec5f910d9..a3b60db122cae 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1767,9 +1767,7 @@ class TargetInfo : public TransferrableTargetInfo, /// \returns Target specific flat ptr address space; a flat ptr is a ptr that /// can be casted to / from all other target address spaces. If the target /// exposes no such address space / does not care, we return 0. - virtual unsigned getFlatPtrAddressSpace() const { -return 0; - } + virtual unsigned getFlatPtrAddressSpace() const { return 0; } /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
@@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. AlexVlx wrote: There's no such thing as LangAS::Generic, there's LangAS::Default. Default doesn't have to map to something that's actually useful, and it actually does not. There's no actual mechanism to get a flat pointer. And I have no idea what notion spreading you are talking about - this merely maintains the status quo, wherein everybody grabs an AS 0 pointer and hopes for the best. So I have no idea what you are talking about, if I'm honest. https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
@@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. arsenm wrote: This further spreads the notion that 0 is a lack of address space, which it is not. You shouldn't need a new thing for this; it should be equivalent to querying the target address space map for the LangAS Generic thing https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx updated https://github.com/llvm/llvm-project/pull/95728 >From 2b500ad9ef2baf27da29146b5a4123dcb75e Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 02:15:00 +0100 Subject: [PATCH] Add interface for exposing a target's flat address space, if it exists. --- clang/include/clang/Basic/TargetInfo.h | 7 +++ clang/lib/Basic/Targets/AMDGPU.h | 6 ++ clang/lib/Basic/Targets/SPIR.h | 4 3 files changed, 17 insertions(+) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8a6511b9ced83..8841ec5f910d9 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. + virtual unsigned getFlatPtrAddressSpace() const { +return 0; + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 94d9ba93ed226..d06c7d58fe94c 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -379,6 +379,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { return static_cast(llvm::AMDGPUAS::CONSTANT_ADDRESS); } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. + unsigned getFlatPtrAddressSpace() const override { +return static_cast(llvm::AMDGPUAS::FLAT_ADDRESS); + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 37cf9d7921bac..14d235bace960 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -182,6 +182,10 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } + unsigned getFlatPtrAddressSpace() const override { +return 4u; // 4 is generic i.e. flat for SPIR & SPIR-V. + } + std::optional getDWARFAddressSpace(unsigned AddressSpace) const override { return AddressSpace; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
github-actions[bot] wrote: :warning: C/C++ code formatter, clang-format found issues in your code. :warning: You can test this locally with the following command: ``bash git-clang-format --diff 527e7328607ea0a55855e53a59c5030a7d07a554 2b500ad9ef2baf27da29146b5a4123dcb75e -- clang/include/clang/Basic/TargetInfo.h clang/lib/Basic/Targets/AMDGPU.h clang/lib/Basic/Targets/SPIR.h `` View the diff from clang-format here. ``diff diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8841ec5f91..a3b60db122 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1767,9 +1767,7 @@ public: /// \returns Target specific flat ptr address space; a flat ptr is a ptr that /// can be casted to / from all other target address spaces. If the target /// exposes no such address space / does not care, we return 0. - virtual unsigned getFlatPtrAddressSpace() const { -return 0; - } + virtual unsigned getFlatPtrAddressSpace() const { return 0; } /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the `` https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx edited https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
llvmbot wrote: @llvm/pr-subscribers-clang Author: Alex Voicu (AlexVlx) Changes Often, targets which are not address space agnostic expose a flat/generic address space, which acts as a shared, legal target for address space casts. Whilst today we accidentally (e.g. by using `PointerType::getUnqual`) treat 0 as corresponding to this flat address space, there is no binding requirement placed on targets in this regard, which leads to issues such as those reflected in #93601 and #93914. This patch adds a `getFlatPtrAddressSpace()` interface in `TargetInfo`, allowing targets to inform the front-end. A possible alternative name would be `getGenericPtrAddressSpace()`, but that was not chosen since generic has a fairly specific meaning in C++ and it seemed somewhat confusing in this context. The interface is not used anywhere at the moment, but the intention is to employ it, for example, to specify the pointer type for the `llvm.used` array's elements. --- Full diff: https://github.com/llvm/llvm-project/pull/95728.diff 3 Files Affected: - (modified) clang/include/clang/Basic/TargetInfo.h (+7) - (modified) clang/lib/Basic/Targets/AMDGPU.h (+6) - (modified) clang/lib/Basic/Targets/SPIR.h (+4) ``diff diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8a6511b9ced83..8841ec5f910d9 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. + virtual unsigned getFlatPtrAddressSpace() const { +return 0; + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 94d9ba93ed226..d06c7d58fe94c 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -379,6 +379,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { return static_cast(llvm::AMDGPUAS::CONSTANT_ADDRESS); } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. + unsigned getFlatPtrAddressSpace() const override { +return static_cast(llvm::AMDGPUAS::FLAT_ADDRESS); + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 37cf9d7921bac..14d235bace960 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -182,6 +182,10 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } + unsigned getFlatPtrAddressSpace() const override { +return 4u; // 4 is generic i.e. flat for SPIR & SPIR-V. + } + std::optional getDWARFAddressSpace(unsigned AddressSpace) const override { return AddressSpace; `` https://github.com/llvm/llvm-project/pull/95728 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][CodeGen] Add query for a target's flat address space (PR #95728)
https://github.com/AlexVlx created https://github.com/llvm/llvm-project/pull/95728 Often, targets which are not address space agnostic expose a flat/generic address space, which acts as a shared, legal target for address space casts. Whilst today we accidentally (e.g. by using `PointerType::getUnqual`) treat 0 as corresponding to this flat address space, there is no binding requirement placed on targets in this regard, which leads to issues such as those reflected in #93601 and #93914. This patch adds a `getFlatPtrAddressSpace()` interface in `TargetInfo`, allowing targets to inform the front-end. A possible alternative name would be `getGenericPtrAddressSpace()`, but that was not chosen since generic has a fairly specific meaning in C++ and it seemed somewhat confusing in this context. The interface is not used anywhere at the moment, but the intention is to employ it, for example, to specify the pointer type for the `llvm.used` array's elements. >From 2b500ad9ef2baf27da29146b5a4123dcb75e Mon Sep 17 00:00:00 2001 From: Alex Voicu Date: Mon, 17 Jun 2024 02:15:00 +0100 Subject: [PATCH] Add interface for exposing a target's flat address space, if it exists. --- clang/include/clang/Basic/TargetInfo.h | 7 +++ clang/lib/Basic/Targets/AMDGPU.h | 6 ++ clang/lib/Basic/Targets/SPIR.h | 4 3 files changed, 17 insertions(+) diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 8a6511b9ced83..8841ec5f910d9 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -1764,6 +1764,13 @@ class TargetInfo : public TransferrableTargetInfo, return 0; } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. If the target + /// exposes no such address space / does not care, we return 0. + virtual unsigned getFlatPtrAddressSpace() const { +return 0; + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 94d9ba93ed226..d06c7d58fe94c 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -379,6 +379,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { return static_cast(llvm::AMDGPUAS::CONSTANT_ADDRESS); } + /// \returns Target specific flat ptr address space; a flat ptr is a ptr that + /// can be casted to / from all other target address spaces. + unsigned getFlatPtrAddressSpace() const override { +return static_cast(llvm::AMDGPUAS::FLAT_ADDRESS); + } + /// \returns If a target requires an address within a target specific address /// space \p AddressSpace to be converted in order to be used, then return the /// corresponding target specific DWARF address space. diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index 37cf9d7921bac..14d235bace960 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -182,6 +182,10 @@ class LLVM_LIBRARY_VISIBILITY BaseSPIRTargetInfo : public TargetInfo { return TargetInfo::VoidPtrBuiltinVaList; } + unsigned getFlatPtrAddressSpace() const override { +return 4u; // 4 is generic i.e. flat for SPIR & SPIR-V. + } + std::optional getDWARFAddressSpace(unsigned AddressSpace) const override { return AddressSpace; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits