The Java frontend translates Java bytecode (.class files) into LLVM
bytecode. This happens in two passes: a basic block building pass,
which creates and associates LLVM basic blocks to Java bytecode blocks
and a compilation pass, which builds the LLVM bytecode for the given
Java bytecode (in a sense: fill in the LLVM basic blocks with
instructions).

Creating BasicBlocks
--------------------

A pre-pass over the bytecode is performed that creates LLVM
BasicBlocks and associates them with their corresponding Java basic
block. This pass provides for a way to get the LLVM BasicBlock given a
bytecode index. It also provides a way to get the Java bytecode bounds
of the Java basic block given an LLVM BasicBlock.

Modelling the operand stack
---------------------------

When compiling java bytecode to llvm we need to model the Java operand
stack, as this is the Java computation model. Some complication arises
though because longs and doubles are considered to take two slots in
the Java operand stack.

In this frontend we don't use two slots on the operand stack for longs
or doubles. This simplyfies code generation for most instructions, but
untyped stack manipulation ones. There we need to know what is that
type of the poped items to figure out the final configuration of the
stack.

The class2llvm compiler keeps a compile time stack of alloca's, which
loosly represent the slots of the java operand stack. These alloca's
are lazily created in the basic block they are first introduced. The
state of the stack is saved at the end of each basic block for its
successors to use it. Obviously the entry blocks gets an empty stack
as input.

The type model is the obvious for the primitive types (int to int,
float to float, etc). For reference types the alloca is always of type
java.lang.Object*.

Local variables
---------------

Similarly to the operand stack, the compiler keeps track of the local
variable slots. Again we use a single slot for doubles and longs. A
vector of sized to the max number of locals in the function is
initialized when a function is compiled and the alloca's are lazily
created on first use.

Compilation
-----------

In order to compile a Java method to an LLVM function we use a work
list of BasicBlocks to work through each basic block of the
function. This is required because for each java basic block we
compile we need to know the configuration of the operand stack and the
locals. This is knows iff at least one predecessor of this block is
compiled.

So the work list is initialize with the entry basic block which has
known entry operand stack and locals. The operand stack is empty and
the locals contain the incoming arguments. When this basic block is
compiled the operand stack and locals are associated with all its
successors. For each successor this information is new (the operand
stack or locals was unknown) we add it to the work list.

The above guarantees that all reachable java basic blocks are going to
be compiled.
