Fei Jia
2011-Oct-10 23:15 UTC
[LLVMdev] There are compiling errors when converting bytecode to c by LLC
I convert C to bytecode by LLVM, and then convert the bytecode back to C by LLC, but the generated C code cannot be compiled. Could anyone give me some suggestions? Thanks! The initial C file is rather simple (hello world): #include <stdio.h> int main() { printf("hello world\n"); printf("hello world1\n"); return 0; } The two commands: llvm-gcc -emit-llvm -c -o hello.bc hello.c llc -march=c hello.bc Version of LLVM: 2.9 The source of error in generated c file: /* Global Variable Declarations */ static _OC_str { unsigned char array[12]; }; static _OC_str1 { unsigned char array[13]; }; /* Global Variable Definitions and Initialization */ static _OC_str { unsigned char array[12]; } = { "hello world" }; static _OC_str1 { unsigned char array[13]; } = { "hello world1" }; It seems that _OC_str, and _OC_str1 are structure variables, but I have never seen such way of declarations, definitions, and initialization of structure in C code. I guess it may be supported in some standards of C. Could anyone please give me some information about the problem? Thanks! -- Best Regards, Fei Jia -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111010/d326447e/attachment.html>
Dmitry N. Mikushin
2011-Oct-29 23:43 UTC
[LLVMdev] There are compiling errors when converting bytecode to c by LLC
Hi Fei Jia, What revision are you using? I suggest you to try C backend with the most recent LLVM version, if possible. I recall I had some similar C backend breakages in July-August: structs definitions were lost somewhere. To my understanding, the correct result should look like this: /* Typedefs */ typedef struct l_unnamed_0 l_unnamed_0; typedef struct l_unnamed_1 l_unnamed_1; /* Structure contents */ struct l_unnamed_0 { unsigned char array[12]; }; struct l_unnamed_1 { unsigned char array[13]; }; /* Global Variable Declarations */ static l_unnamed_0 _OC_cst; static l_unnamed_1 _OC_cst1; /* Global Variable Definitions and Initialization */ extern static l_unnamed_0 _OC_cst = { "hello world" }; extern static l_unnamed_1 _OC_cst1 = { "hello world1" }; - D. 2011/10/11 Fei Jia <j.jiafei at gmail.com>:> I convert C to bytecode by LLVM, and then convert the bytecode back to C by > LLC, but the generated C code cannot be compiled. Could anyone give me some > suggestions? Thanks! > The initial C file is rather simple (hello world): > > #include <stdio.h> > > int main() { > > printf("hello world\n"); > > printf("hello world1\n"); > > return 0; > > } > > The two commands: > > llvm-gcc -emit-llvm -c -o hello.bc hello.c > > llc -march=c hello.bc > > Version of LLVM: 2.9 > > The source of error in generated c file: > > /* Global Variable Declarations */ > > static _OC_str { unsigned char array[12]; }; > > static _OC_str1 { unsigned char array[13]; }; > > > > /* Global Variable Definitions and Initialization */ > > static _OC_str { unsigned char array[12]; } = { "hello world" }; > > static _OC_str1 { unsigned char array[13]; } = { "hello world1" }; > > It seems that _OC_str, and _OC_str1 are structure variables, but I have > never seen such way of declarations, definitions, and initialization of > structure in C code. I guess it may be supported in some standards of C. > Could anyone please give me some information about the problem? Thanks! > -- > Best Regards, > Fei Jia > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >
Fei Jia
2011-Oct-31 23:55 UTC
[LLVMdev] There are compiling errors when converting bytecode to c by LLC
Dear Dmitry, Thanks for your reply. I have just updated my version from svn sever and it's perfect now. The previous version is from the svn server several days before Oct 10, and I guess the code related with gcc might not be updated at that time. Thanks a lot! -- Best Regards, Fei Jia On Sat, Oct 29, 2011 at 4:43 PM, Dmitry N. Mikushin <maemarcus at gmail.com>wrote:> Hi Fei Jia, > > What revision are you using? I suggest you to try C backend with the > most recent LLVM version, if possible. I recall I had some similar C > backend breakages in July-August: structs definitions were lost > somewhere. To my understanding, the correct result should look like > this: > > /* Typedefs */ > typedef struct l_unnamed_0 l_unnamed_0; > typedef struct l_unnamed_1 l_unnamed_1; > > /* Structure contents */ > struct l_unnamed_0 { > unsigned char array[12]; > }; > > struct l_unnamed_1 { > unsigned char array[13]; > }; > > /* Global Variable Declarations */ > static l_unnamed_0 _OC_cst; > static l_unnamed_1 _OC_cst1; > > /* Global Variable Definitions and Initialization */ > extern static l_unnamed_0 _OC_cst = { "hello world" }; > extern static l_unnamed_1 _OC_cst1 = { "hello world1" }; > > - D. > > 2011/10/11 Fei Jia <j.jiafei at gmail.com>: > > I convert C to bytecode by LLVM, and then convert the bytecode back to C > by > > LLC, but the generated C code cannot be compiled. Could anyone give me > some > > suggestions? Thanks! > > The initial C file is rather simple (hello world): > > > > #include <stdio.h> > > > > int main() { > > > > printf("hello world\n"); > > > > printf("hello world1\n"); > > > > return 0; > > > > } > > > > The two commands: > > > > llvm-gcc -emit-llvm -c -o hello.bc hello.c > > > > llc -march=c hello.bc > > > > Version of LLVM: 2.9 > > > > The source of error in generated c file: > > > > /* Global Variable Declarations */ > > > > static _OC_str { unsigned char array[12]; }; > > > > static _OC_str1 { unsigned char array[13]; }; > > > > > > > > /* Global Variable Definitions and Initialization */ > > > > static _OC_str { unsigned char array[12]; } = { "hello world" }; > > > > static _OC_str1 { unsigned char array[13]; } = { "hello world1" }; > > > > It seems that _OC_str, and _OC_str1 are structure variables, but I have > > never seen such way of declarations, definitions, and initialization of > > structure in C code. I guess it may be supported in some standards of C. > > Could anyone please give me some information about the problem? Thanks! > > -- > > Best Regards, > > Fei Jia > > > > _______________________________________________ > > 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/20111031/dbc6d962/attachment.html>
Seemingly Similar Threads
- [LLVMdev] There are compiling errors when converting bytecode to c by LLC
- [LLVMdev] question on difference of bitcode between C and C++
- [LLVMdev] question on difference of bitcode between C and C++
- [LLVMdev] question on difference of bitcode between C and C++
- [LLVMdev] question on difference of bitcode between C and C++