Hello Dear GCC Developers,
I would like to ask your opinion about possibility for integration of the libJIT Just-In-Time compilation library and GCC. For example, the same way as libffi is integrated within gcc source tree. It seems to me that LLVM solves many goals that are already complete and solved in GCC. So I think libJIT potentially is more useful for GCC and software developers. What is your opinion about this idea? How this should be done and what improvements could be made to both libJIT and GCC for this kind of integration? I was also very surprised to read this interesting discussion by Rhys Weatherley (libJIT) and Chris Lattner (LLVM) (libJIT vs LLVM): http://lists.gnu.org/archive/html/dotgnu-libjit/2004-05/index.html It talks more about differences in design and goals between libJIT and LLVM. Please let me know your ideas and thoughts. No flaming please. I think everyone benefits if we can gather enough thoughts about JITing in GCC. I also would like to point to my personal project about improvement of libJIT: http://code.google.com/p/libjit-linear-scan-register-allocator/ . It studies how to make efficient code generation for Common Intermediate Language and JIT compilers, and implements a full linear scan register allocator and bin packing register allocator within libJIT. It also has support of XMM registers for floating point operations. The experimental target is the Microsoft Common Intermediate Language. There is various data-flow and control-flow analysis, including various liveness analysis(fast and full), dead-code elimination etc with various optimization level. For example, this code generator gives the following benchmark on my pc for pnetmark at the moment, with Portable.NET Just-In-Time compiler 0.8.0: LibJIT Linear Scan Register Allocator Current libJIT 0.1.2 Sieve 20439 17499 Loop 28311 24976 Logic 57311 55647 String 16586 16651 Float 2642 1940 Method 32426 30401 PnetMark(Average Score) 19005 16970 The average improvement is 12% or so in pnetmark comparing to a global register allocator in libJIT which uses number of usage of a variable as an euristic. With dead-code analysis enabled it jumps another 12% or so. For example, the logic benchmark jumps over 70%. Other optimizations enabled can give more improvement. It was remarkably easy to add dead-code elimination in libJIT for example I spent less than a week for this. But I am rather interested in the code generation and linear scan register allocation at the moment and Common Intermediate Language. I think GCC could benefit a lot if an integration of both libJIT and GCC could be considered, and there was cooperation about this. Thanks, Kirill