[LLVMdev] Fwd: code-generating constant strings

Alex L arphaman at gmail.com
Tue Dec 3 14:06:09 PST 2013


Hi Alex, I'll try to answer your questions to the best of my knowledge:

1) You can use the IRBuilder::CreateGlobalStringPtr function, which returns
a value with the "i8*" type.

2) You can define a structure type using llvm::StructType::get or create
function. When you want to store a string in the structure, you can add a
field which has the "i8*" type, which stores a pointer to a null-terminated
i8(character) array, or you can also add a field which has a structure type
that stores both the pointer and the length of the string.

3) I'm not quite sure what exactly do you mean, but I'm guessing that you
want to add new fields to this structure based on the run-time behavior of
the program. You can do this by storing a dynamic array in your structure,
and inserting pointers into this dynamic array.

I hope that was helpful,
Alex


2013/12/3 Alexander Popolitov <popolit at gmail.com>

>
> For some reason the mail didn't got through the first time, so sending it
> again.
>
>
> -------- Original Message --------  Subject: code-generating constant
> strings  Date: Tue, 03 Dec 2013 01:56:11 +0100  From: Alexander Popolitov
> <popolit at gmail.com> <popolit at gmail.com>  To: llvmdev at cs.uiuc.edu.
>
> Hi, everyone!
>
> I have maybe very naive question, but nontheless.
> I'm experimenting with Kaleidoscope tutorial and I want to morph it into
> something similar to McCarthy's initial Lisp.
> For that, I need to implement symbols, which I thought I should
> implement as pointers to structures, and those
> structures would contain at least one field, which would be symbol's name.
> So, here's a question: how do I generate a code, that represents a
> literal string on LLVM side using LLVM's C++ API
> I'm asking, because to simply generate constant floating-point value C++
> API uses
> an incantation 'ConstantFP::get(getGlobalContext(), APFloat(Val));' so I
> guess string generation is also not obvious.
>
> In the textual LLVM, what I want to generate is something like
> '@.foo_sym = private unnamed_addr constant {[13 x i8] c"hello world\0A\00"}'
>
> I just modified the example of a constant string from LLVM reference
> manual, adding curly braces.
> So, what I really want is for any newly encountered symbol to generate
> code, that declares variable, which is structure, which contains
> that symbol name, and a way to access the address of that structure,
> substituting all occurencies of that symbol in a code I'm generating
> by the pointer to that structure.
> So, how would I (using C++ API):
>   1. generate code that defines constant string
>   2. generate code, that defines structure, that contains a string
>   3. when generating further code, be able to insert a pointer to this
> structure?
>
>
> Yours sincerely,
> Alex
>
>
>
>
> _______________________________________________
> 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/20131203/afb14b24/attachment.html>


More information about the llvm-dev mailing list