[llvm] [DataLayout] Introduce DataLayout::getPointerAddressSize(AS) (PR #137412)
Alexander Richardson via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 30 11:07:07 PDT 2025
================
@@ -3147,14 +3147,20 @@ as follows:
``A<address space>``
Specifies the address space of objects created by '``alloca``'.
Defaults to the default address space of 0.
-``p[n]:<size>:<abi>[:<pref>][:<idx>]``
+``p[n]:<size>:<abi>[:<pref>[:<idx>[:<addr>]]]``
This specifies the *size* of a pointer and its ``<abi>`` and
``<pref>``\erred alignments for address space ``n``.
- The fourth parameter ``<idx>`` is the size of the
- index that used for address calculation, which must be less than or equal
- to the pointer size. If not
- specified, the default index size is equal to the pointer size. All sizes
- are in bits. The address space, ``n``, is optional, and if not specified,
+ The fourth parameter ``<idx>`` is the size of the index that used for
+ address calculations such as :ref:`getelementptr <i_getelementptr>`.
+ It must be less than or equal to the pointer size. If not specified, the
+ default index size is equal to the pointer size.
+ The fifth parameter ``<addr>`` specifies the width of addresses in this
+ address space. If not specified, the default address size is equal to the
+ index size. The address size may be wider than the index size as it could be
+ calculated relative to a base address. For example AMDGPU buffer fat
+ pointers use a 48-bit address range, but only allow for 32 bits of indexing.
----------------
arichardson wrote:
Sounds good - If we ever end up supporting a target where that does not hold we can always adjust it again. E.g. some hypothetical target where addresses are 64 bits but the pointer representation is a 32-bit offset relative to some base address.
https://github.com/llvm/llvm-project/pull/137412
More information about the llvm-commits
mailing list