[LLVMdev] Operations on constant array value?

Garrison Venn gvenn.cfe.dev at gmail.com
Mon Jan 11 12:36:04 PST 2010


I have not tried this, but a linkage type of PrivateLinkage would not add to the symbol table according
to the doc. 

LLVMSetLinkage(g, LLVMPrivateLinkage);

Garrison

On Jan 11, 2010, at 14:03, James Williams wrote:

> 2010/1/11 Eli Friedman <eli.friedman at gmail.com>
> On Mon, Jan 11, 2010 at 7:07 AM, James Williams <junk at giantblob.com> wrote:
> > Hi,
> >
> > I've read http://llvm.org/docs/LangRef.html#t_array and
> > http://llvm.org/docs/GetElementPtr.html and if I've understood right there
> > are no operations that act directly on arrays - instead I need to use
> > getelementptr on a pointer to an array to get a pointer to an array element.
> > I also understand that there is no 'address of' operation.
> >
> > As a result I can't figure out how to use constant derived types without
> > assigning them to a global. Say I want to use the C bindings function
> > LLVMValueRef LLVMConstString(char *, int, int) to get an int8* pointer to a
> > C string constant - there doesn't seem to be any way to directly use the
> > resulting [N x i8] value directly and there's no operator that gives me its
> > address.
> >
> > The only way I can see to get a pointer to the string constant array is to
> > go through a global variable, for example:
> >
> > g = LLVMAddGlobal(module, LLVMTypeOf(v), "__string_" +
> > string_literal_number);
> > string_literal_number = string_literal_number + 1;
> > v = LLVMConstString(string_literal, string_literal.Length, 0);
> > LLVMSetInitializer(g, v);
> > elements = { LLVMConstInt(LLVMInt32Type(), 0L, 0),
> > LLVMConstInt(LLVMInt32Type(), 0L, 0) };
> > return LLVMConstInBoundsGEP(g, elements, 2);
> >
> > Is it possible to get the address of an element of a constant array or
> > struct without first initializing a global variable to the constant?
> 
> No.
> 
> OK. I'd have preferred to have to avoid bloating the module symbol table with global symbols that will never be referenced but it's no big deal.
> 
> -Eli
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100111/4bfa79b7/attachment.html>


More information about the llvm-dev mailing list