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

Reply via email to