Date: Sun, 19 Nov 2000 16:23:57 -0600 (CST)
From: Chris Lattner <sabre@nondot.org>
To: Vikram Adve <vadve@cs.uiuc.edu>
Subject: Re: a few thoughts

Okay... here are a few of my thoughts on this (it's good to know that we
think so alike!):

> 1. We need to be clear on our goals for the VM.  Do we want to emphasize
>    portability and safety like the Java VM?  Or shall we focus on the
>    architecture interface first (i.e., consider the code generation and
>    processor issues), since the architecture interface question is also
>    important for portable Java-type VMs?

I forsee the architecture looking kinda like this: (which is completely
subject to change)

1. The VM code is NOT guaranteed safe in a java sense.  Doing so makes it
   basically impossible to support C like languages.  Besides that,
   certifying a register based language as safe at run time would be a
   pretty expensive operation to have to do.  Additionally, we would like
   to be able to statically eliminate many bounds checks in Java
   programs... for example.

 2. Instead, we can do the following (eventually): 
   * Java bytecode is used as our "safe" representation (to avoid
     reinventing something that we don't add much value to).  When the
     user chooses to execute Java bytecodes directly (ie, not
     precompiled) the runtime compiler can do some very simple
     transformations (JIT style) to convert it into valid input for our
     VM.  Performance is not wonderful, but it works right.
   * The file is scheduled to be compiled (rigorously) at a later
     time.  This could be done by some background process or by a second
     processor in the system during idle time or something...
   * To keep things "safe" ie to enforce a sandbox on Java/foreign code,
     we could sign the generated VM code with a host specific private
     key.  Then before the code is executed/loaded, we can check to see if
     the trusted compiler generated the code.  This would be much quicker
     than having to validate consistency (especially if bounds checks have
     been removed, for example)

>    This is important because the audiences for these two goals are very
>    different.  Architects and many compiler people care much more about
>    the second question.  The Java compiler and OS community care much more
>    about the first one.

3. By focusing on a more low level virtual machine, we have much more room
   for value add.  The nice safe "sandbox" VM can be provided as a layer
   on top of it.  It also lets us focus on the more interesting compilers
   related projects.

> 2. Design issues to consider (an initial list that we should continue
>    to modify).  Note that I'm not trying to suggest actual solutions here,
>    but just various directions we can pursue:

Understood.  :)

>    a. A single-assignment VM, which we've both already been thinking
>       about.

Yup, I think that this makes a lot of sense.  I am still intrigued,
however, by the prospect of a minimally allocated VM representation... I
think that it could have definite advantages for certain applications
(think very small machines, like PDAs).  I don't, however, think that our
initial implementations should focus on this.  :)

Here are some other auxiliary goals that I think we should consider:

1. Primary goal: Support a high performance dynamic compilation
   system.  This means that we have an "ideal" division of labor between
   the runtime and static compilers.  Of course, the other goals of the
   system somewhat reduce the importance of this point (f.e. portability
   reduces performance, but hopefully not much)
2. Portability to different processors.  Since we are most familiar with
   x86 and solaris, I think that these two are excellent candidates when
   we get that far...
3. Support for all languages & styles of programming (general purpose
   VM).  This is the point that disallows java style bytecodes, where all
   array refs are checked for bounds, etc...
4. Support linking between different language families.  For example, call
   C functions directly from Java without using the nasty/slow/gross JNI
   layer.  This involves several subpoints:
  A. Support for languages that require garbage collectors and integration
     with languages that don't.  As a base point, we could insist on
     always using a conservative GC, but implement free as a noop, f.e.

>    b. A strongly-typed VM.  One question is do we need the types to be
>       explicitly declared or should they be inferred by the dynamic
>       compiler?

  B. This is kind of similar to another idea that I have: make OOP
     constructs (virtual function tables, class heirarchies, etc) explicit
     in the VM representation.  I believe that the number of additional
     constructs would be fairly low, but would give us lots of important
     information... something else that would/could be important is to
     have exceptions as first class types so that they would be handled in
     a uniform way for the entire VM... so that C functions can call Java
     functions for example...

>    c. How do we get more high-level information into the VM while keeping
>       to a low-level VM design?
>       o  Explicit array references as operands?  An alternative is
>          to have just an array type, and let the index computations be
>          separate 3-operand instructions.

   C. In the model I was thinking of (subject to change of course), we
      would just have an array type (distinct from the pointer
      types).  This would allow us to have arbitrarily complex index
      expressions, while still distinguishing "load" from "Array load",
      for example.  Perhaps also, switch jump tables would be first class
      types as well?  This would allow better reasoning about the program.

5. Support dynamic loading of code from various sources.  Already
   mentioned above was the example of loading java bytecodes, but we want
   to support dynamic loading of VM code as well.  This makes the job of
   the runtime compiler much more interesting:  it can do interprocedural
   optimizations that the static compiler can't do, because it doesn't
   have all of the required information (for example, inlining from
   shared libraries, etc...)

6. Define a set of generally useful annotations to add to the VM
   representation.  For example, a function can be analysed to see if it
   has any sideeffects when run... also, the MOD/REF sets could be
   calculated, etc... we would have to determine what is reasonable.  This
   would generally be used to make IP optimizations cheaper for the
   runtime compiler...

>       o  Explicit instructions to handle aliasing, e.g.s:
>            -- an instruction to say "I speculate that these two values are not
>               aliased, but check at runtime", like speculative execution in
>             EPIC?
>          -- or an instruction to check whether two values are aliased and
>             execute different code depending on the answer, somewhat like
>             predicated code in EPIC

These are also very good points... if this can be determined at compile
time.  I think that an epic style of representation (not the instruction
packing, just the information presented) could be a very interesting model
to use... more later...

>         o  (This one is a difficult but powerful idea.)
>          A "thread-id" field on every instruction that allows the static
>          compiler to generate a set of parallel threads, and then have
>          the runtime compiler and hardware do what they please with it.
>          This has very powerful uses, but thread-id on every instruction
>          is expensive in terms of instruction size and code size.
>          We would need to compactly encode it somehow.

Yes yes yes!  :)  I think it would be *VERY* useful to include this kind
of information (which EPIC architectures *implicitly* encode.  The trend
that we are seeing supports this greatly:

1. Commodity processors are getting massive SIMD support:
   * Intel/Amd MMX/MMX2
   * AMD's 3Dnow!
   * Intel's SSE/SSE2
   * Sun's VIS
2. SMP is becoming much more common, especially in the server space.
3. Multiple processors on a die are right around the corner.

If nothing else, not designing this in would severely limit our future
expansion of the project...

>          Also, this will require some reading on at least two other
>          projects:
>               -- Multiscalar architecture from Wisconsin
>               -- Simultaneous multithreading architecture from Washington
>
>       o  Or forget all this and stick to a traditional instruction set?

Heh... :)  Well, from a pure research point of view, it is almost more
attactive to go with the most extreme/different ISA possible.  On one axis
you get safety and conservatism, and on the other you get degree of
influence that the results have.  Of course the problem with pure research
is that often times there is no concrete product of the research... :)

> BTW, on an unrelated note, after the meeting yesterday, I did remember
> that you had suggested doing instruction scheduling on SSA form instead
> of a dependence DAG earlier in the semester.  When we talked about
> it yesterday, I didn't remember where the idea had come from but I
> remembered later.  Just giving credit where its due...

:) Thanks.  

> Perhaps you can save the above as a file under RCS so you and I can
> continue to expand on this.

I think it makes sense to do so when we get our ideas more formalized and
bounce it back and forth a couple of times... then I'll do a more formal
writeup of our goals and ideas.  Obviously our first implementation will
not want to do all of the stuff that I pointed out above... be we will
want to design the project so that we do not artificially limit ourselves
at sometime in the future...

Anyways, let me know what you think about these ideas... and if they sound
reasonable...

-Chris

