On 17 Mar 2016, at 23:06, Mohammad Norouzi via llvm-dev <llvm-dev at
lists.llvm.org> wrote:>
> Hi everyone,
>
> There are different address spaces in llvm. Some of them are generic,
shared, global, etc.
>
> What is the difference between each of them? And when do we need to use
them?
The first address space is the default. This is currently a bit overloaded and
assumes that functions and the stack all share the same address space (I have
some patches to fix this, but they’ve not been upstreamed because no one else
currently needs this functionality).
The next address spaces up to 255 are intended to capture some language-specific
behaviour. For example, 1 is used by some front ends to represent
garbage-collected pointers with the same representation as pointers in AS 0.
Those from 256 and up are target specific. For example, 256 and 257 on x86
represent gs- and fs-relative addresses and so are commonly used for things like
thread-local storage.
David