[LLVMdev] Re: LLVM and PyPy

Vikram Adve vadve at cs.uiuc.edu
Fri Oct 31 23:07:01 PST 2003


Hi,

I've been following these messages and just thought I would mention
a couple of our near-term goals which may be related to what you all are
interested in:

(1) Alkis is really working on building a "toolkit" for implementing virtual
    machines on top of LLVM.  This means that different VMs (like JVM, CLI,
    and PyPy) only need to implement their specific runtime requirements,
    and a fast, simple (online or offline) translator to LLVM.
    All the the native code generation and runtime optimization would happen
    in the LLVM framework.  Is this more or less what you have in mind
    for using LLVM as a back end in PyPy?

    Note that in this view, *all* the decisions about whether or when to
    recompile some unit (e.g., hot functions as in Self) would happen in
    the LLVM framework, independent of what language is being compiled.
    Does that make sense for Python (and for PyPy)?

    Supporting a Psyco-style basic-block-at-a-time compilation model 
    (as described by Armin below) on top of this toolkit is not
    something we had considered so far.  It would be interesting to see
    how that could be done. 

(2) One difficult part in building such a toolkit is to abstract the
    interfaces between code generation and the runtime components
    implemented in the language VM (like GC, exception handling, etc.). 
    We have been assuming that these runtime components must be controlled
    by the language VM (e.g., JVM), since their semantics and performance
    constraints are language-specific.  The toolkit would only provide
    some common primitives, to interface with the code generator and 
    to make these more efficient.

(3) Patrick Meredith is going to be working on a CAML (and perhaps later,
    OCAML) front end to LLVM.

Note that these are all at a very early stage of work.


> From: Armin Rigo <arigo at tunes.org>
> Subject: [LLVMdev] Re: LLVM and PyPy
> Sender: llvmdev-admin at cs.uiuc.edu
> Date: Fri, 31 Oct 2003 20:48:40 +0000
> 
> Hello Chris,
> 
> On Fri, Oct 31, 2003 at 10:58:45AM -0600, Chris Lattner wrote:
> > These are definitely features that we plan to add, but just haven't gotten
> > to yet.  In particular, Alkis is working on a Java front-end, which will
> > require similar features.  In the beginning, we will probably just use a
> > conservative collector, eventually adding support for precise GC.
> 
> Great!
> 
> > We already have the capability of doing function-at-a-time code
> > generation: what is basic-block at a time generation used for?  How do you
> > do global optimizations like register allocation?
> 
> It is central to Psyco, the Python just-in-time specializer
> (http://psyco.sourceforge.net) whose techniques we plan to integrate with
> PyPy.  Unlike other environments like Self, which collects execution profiles
> during interpretation and use them to recompile whole functions, Psyco has no
> interpretation stage: it directly emits a basic block and run it; the values
> found at run-time trigger the compilation of more basic blocks, which are run,
> and so on.  So each function's machine code is a dynamic network of basic
> blocks which are various specialized versions of a bit of the original
> function.  This network is not statically known, in particular because basic
> blocks often have a "switch" exit based on some value or type collected at
> run-time.  Every new value encountered at this point triggers the compilation
> of a new switch case jumping to a new basic block.
> 
> We will also certainly consider Self-style recompilations, as they allow more
> agressive optimizations.  (Register allocation in Psyco is done using a simple
> round-robin scheme; code generation is very fast.)
> 
> > That would be great!  We've tossed around the idea of creating C bindings
> > for LLVM, which would make interfacing from other languages easier than
> > going directly to the C++ API, but we just haven't had a chance to yet.
> > Maybe you guys would be interested in helping with that project?
> 
> Well, as the C++ API is nice and clean it is probably simpler to bind it
> directly to Python.  We would probably go for Boost-Python, which makes C++
> objects directly accessible to Python.  But nothing is sure about this; maybe
> driving LLVM from LLVM code is closer to our needs.  Is there a specific
> interface to do that?  Is it possible to extract from LLVM the required code
> only, and link it with the final executable?  In my experience, there are a
> few limitations of C that require explicit assembly code, like building calls
> dynamically (i.e. the caller's equivalent of varargs).
> 
> 
> A bientot,
> 
> Armin.



Regards,

--Vikram

---------------------------------------------------------------------
 VIKRAM S. ADVE
 Assistant Professor                        E-MAIL: vadve at cs.uiuc.edu
 Department of Computer Science             PHONE:  (217) 244-2016
 Univ. of Illinois at Urbana-Champaign      FAX:    (217) 244-6869
 1304 W. Springfield Ave.               http://www.cs.uiuc.edu/~vadve
 Urbana IL 61801-2987.                  http://llvm.cs.uiuc.edu/
---------------------------------------------------------------------



More information about the llvm-dev mailing list