[LLVMdev] Operations on constant array value?

Garrison Venn gvenn.cfe.dev at gmail.com
Mon Jan 11 07:49:52 PST 2010


Does the C API have an equivalent of stack storage? Via the C++ APIs one can shove the string constant on the stack via
a store instruction operation on an alloca instruction--the address needed is the alloca. For example:

llvm::Value* stringVar = builder.CreateAlloca(stringConstant->getType());
builder.CreateStore(stringConstant, stringVar);

The stringVar is your address.

Garrison

On Jan 11, 2010, at 10:07, James Williams 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?
> 
> Thanks in advance,
> -- James Williams
> _______________________________________________
> 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/096ca6cd/attachment.html>


More information about the llvm-dev mailing list