Basile STARYNKEVITCH
2007-May-16 13:09 UTC
[LLVMdev] generating ELF shared object, C code, from a module like Fibionnaci
Hello Apparently the file llvm/examples/Fibonacci/fibonacci.cpp generate JIT code without explicitly doing any pass (but I suppose that internally, compiler passes are running!) - is there a dissymetry between JIT machine code generation in memory, and C or ELF shared object generation in files? I thought that all these shared a lot of LLVM infrastructure and happen similarily! Also, the llvm/tools/llc/llcp.ccp file explicitly need passes and a pass manager to generate .so and .c files I would like to understand precisely how to patch the fibionnaci example to generate an ELF shared object or a C file, in addition of the JIT-ed code in memory. May it should become a FAQ. I also don't understand what is the LLVM meaning of inter-module linking... To suggest an example, one could add code to fibionacci which load a bitcode from a file, JIT it, and uses a printing routine there to print fib(10). Actually, I miss a document or wiki explaining how to use (without extending it) LLVM to generate code (in variety of ways, including C, ELF shared object, JIT-ed code in memory) from within an application. Just a simple example like fibionnaci is great! My dream would be some tutorial documentation with working actual code snippets... in the spirit of e.g. http://www.gnu.org/software/lightning/manual/html_node/Fibonacci.html which documents an example similar to llvm/examples/Fibonacci/fibonacci.cpp I would like the same for LLVM, emitting JIT code, ELF shared library, C file.... Maybe such a documentation exist (hopefully up to date for LLVM2.0!) but I did not found it yet! Perhaps just linking the example source files from the web site could be a good idea... The doxygen documentation is very good, but does not separate enough what an LLVM user (some developer using LLVM in his own program) should see and what an LLVM developer (someone enhancing LLVM) should in addition know. I find LLVM great, but quite hard to grasp. Regards. -- Basile STARYNKEVITCH http://starynkevitch.net/Basile/ email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359 8, rue de la Faïencerie, 92340 Bourg La Reine, France *** opinions {are only mines, sont seulement les miennes} ***
Reid Spencer
2007-May-16 17:19 UTC
[LLVMdev] generating ELF shared object, C code, from a module like Fibionnaci
On Wed, 2007-05-16 at 15:09 +0200, Basile STARYNKEVITCH wrote:> Hello > > Apparently the file llvm/examples/Fibonacci/fibonacci.cpp generate JIT code > without explicitly doing any pass (but I suppose that internally, compiler > passes are running!)Very few. There are passes that run in order to do the code generation. But, none of the optimization passes are run.> - is there a dissymetry between JIT machine code > generation in memory, and C or ELF shared object generation in files?Generation of native assembly, ELF and JIT are very similar except for the final emission stage where the code is actually produced. The C Backend is completely different, it shares nothing with the other code generators.> I > thought that all these shared a lot of LLVM infrastructure and happen > similarily!They do, but the optimization passes are at a level above code generation. They operate on the generic mid-level IR. Consequently code generated by any back end can have the same optimizations applied. The only thing missing is that fibonacci example just isn't doing the optimization part. It could be enhanced to do that, however.> > Also, the llvm/tools/llc/llcp.ccp file explicitly need passes and a pass > manager to generate .so and .c filesThat's right.> > I would like to understand precisely how to patch the fibionnaci example to > generate an ELF shared object or a C file, in addition of the JIT-ed code in > memory. May it should become a FAQ.I suggest you study llc and lib/CodeGen and lib/Target more carefully. AFAIK the ELF writer is not working on all platforms (I think it only works on one) and its being enhanced contemporaneously.> I also don't understand what is the LLVM meaning of inter-module linking... > To suggest an example, one could add code to fibionacci which load a bitcode > from a file, JIT it, and uses a printing routine there to print fib(10).Code in LLVM is bundled into a "Module" concept (somewhat like a translation unit). inter-module linking is simply linking together those modules (i.e. multiple bitcode files).> > Actually, I miss a document or wiki explaining how to use (without extending > it) LLVM to generate code (in variety of ways, including C, ELF shared > object, JIT-ed code in memory) from within an application. Just a simple > example like fibionnaci is great! > > My dream would be some tutorial documentation with working actual code > snippets... in the spirit of e.g. > http://www.gnu.org/software/lightning/manual/html_node/Fibonacci.html which > documents an example similar to llvm/examples/Fibonacci/fibonacci.cpp I > would like the same for LLVM, emitting JIT code, ELF shared library, C > file.... Maybe such a documentation exist (hopefully up to date for > LLVM2.0!) but I did not found it yet! Perhaps just linking the example > source files from the web site could be a good idea...I don't think such a tutorial exists.> > The doxygen documentation is very good, but does not separate enough what an > LLVM user (some developer using LLVM in his own program) should see and what > an LLVM developer (someone enhancing LLVM) should in addition know.Yup.> > I find LLVM great, but quite hard to grasp.There is extensive documentation at http://llvm.org/docs/ Reid.> > Regards.
Tanya M. Lattner
2007-May-16 18:01 UTC
[LLVMdev] generating ELF shared object, C code, from a module like Fibionnaci
> Actually, I miss a document or wiki explaining how to use (without extending > it) LLVM to generate code (in variety of ways, including C, ELF shared > object, JIT-ed code in memory) from within an application. Just a simple > example like fibionnaci is great!I believe this is the only tutorial we have on how to use llvm in a variety of ways: http://llvm.org/docs/GettingStarted.html#tutorial We welcome any changes to this document that you think would be helpful. -Tanya> > My dream would be some tutorial documentation with working actual code > snippets... in the spirit of e.g. > http://www.gnu.org/software/lightning/manual/html_node/Fibonacci.html which > documents an example similar to llvm/examples/Fibonacci/fibonacci.cpp I > would like the same for LLVM, emitting JIT code, ELF shared library, C > file.... Maybe such a documentation exist (hopefully up to date for > LLVM2.0!) but I did not found it yet! Perhaps just linking the example > source files from the web site could be a good idea... > > The doxygen documentation is very good, but does not separate enough what an > LLVM user (some developer using LLVM in his own program) should see and what > an LLVM developer (someone enhancing LLVM) should in addition know. > > I find LLVM great, but quite hard to grasp. > > Regards. >