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
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> 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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131203/8e79a314/attachment.html>
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>