[LLVMdev] Stack in a non-zero address space?

Matt Arsenault Matthew.Arsenault at amd.com
Wed Jan 22 11:10:00 PST 2014

On 01/22/2014 10:26 AM, David Chisnall wrote:
> Hi,
> We're currently looking at moving our stack out of the address space that contains the heap and globals (and, actually moving those into separate address spaces, but that seems easier).  Currently, however, there seems to be an assumption that alloca instructions always return a pointer into address space 0, and the verifier enforces this.
Yes, alloca returning 0 address space that is specified in the LangRef. 
I initially expected OpenCL local variables work by alloca'ing a 
nondefault address space, but instead it creates globals; e.g. kernel 
void foo() { local int bar[256];} declares @foo.bar. Would that work for 
you? If you only care about the stack being in a separate address space, 
would it be easier to move your heap and globals into a different 
address space and leave alloca as 0?

> Is anyone else encountering this problem?  Are there any assumption in optimisers that rely on it?
There are a lot of places left that aren't specifically getting the 
address space of the relevant pointer (though most of the cases I care 
about are fixed), and many of those are specifically for the case of 
alloca. AFAIK none of them really care that the address space is 0, it 
just isn't checked and the default is used. I have some patches that fix 
many of them in an effort to get rid of the default address space arguments.


More information about the llvm-dev mailing list