This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
GCC + libJIT instead of LLVM
- From: Kirill Kononenko <kirill dot kononenko at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Wed, 1 Apr 2009 13:33:48 +0400
- Subject: GCC + libJIT instead of LLVM
- References: <b21f6d8e0904010225s47aff98cr31a2e1f47c35addc@mail.gmail.com>
- Reply-to: Kirill dot Kononenko at gmail dot com
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