<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>The LLVM Target-Independent Code Generator</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>

<div class="doc_title">
  The LLVM Target-Independent Code Generator
</div>

<ol>
  <li><a href="#introduction">Introduction</a>
    <ul>
      <li><a href="#required">Required components in the code generator</a></li>
      <li><a href="#high-level-design">The high-level design of the code
          generator</a></li>
      <li><a href="#tablegen">Using TableGen for target description</a></li>
    </ul>
  </li>
  <li><a href="#targetdesc">Target description classes</a>
    <ul>
      <li><a href="#targetmachine">The <tt>TargetMachine</tt> class</a></li>
      <li><a href="#targetdata">The <tt>TargetData</tt> class</a></li>
      <li><a href="#targetlowering">The <tt>TargetLowering</tt> class</a></li>
      <li><a href="#mregisterinfo">The <tt>MRegisterInfo</tt> class</a></li>
      <li><a href="#targetinstrinfo">The <tt>TargetInstrInfo</tt> class</a></li>
      <li><a href="#targetframeinfo">The <tt>TargetFrameInfo</tt> class</a></li>
      <li><a href="#targetsubtarget">The <tt>TargetSubtarget</tt> class</a></li>
      <li><a href="#targetjitinfo">The <tt>TargetJITInfo</tt> class</a></li>
    </ul>
  </li>
  <li><a href="#codegendesc">Machine code description classes</a>
    <ul>
    <li><a href="#machineinstr">The <tt>MachineInstr</tt> class</a></li>
    <li><a href="#machinebasicblock">The <tt>MachineBasicBlock</tt>
                                     class</a></li>
    <li><a href="#machinefunction">The <tt>MachineFunction</tt> class</a></li>
    </ul>
  </li>
  <li><a href="#codegenalgs">Target-independent code generation algorithms</a>
    <ul>
    <li><a href="#instselect">Instruction Selection</a>
      <ul>
      <li><a href="#selectiondag_intro">Introduction to SelectionDAGs</a></li>
      <li><a href="#selectiondag_process">SelectionDAG Code Generation
                                          Process</a></li>
      <li><a href="#selectiondag_build">Initial SelectionDAG
                                        Construction</a></li>
      <li><a href="#selectiondag_legalize">SelectionDAG Legalize Phase</a></li>
      <li><a href="#selectiondag_optimize">SelectionDAG Optimization
                                           Phase: the DAG Combiner</a></li>
      <li><a href="#selectiondag_select">SelectionDAG Select Phase</a></li>
      <li><a href="#selectiondag_sched">SelectionDAG Scheduling and Formation
                                        Phase</a></li>
      <li><a href="#selectiondag_future">Future directions for the
                                         SelectionDAG</a></li>
      </ul></li>
     <li><a href="#liveintervals">Live Intervals</a>
       <ul>
       <li><a href="#livevariable_analysis">Live Variable Analysis</a></li>
       <li><a href="#liveintervals_analysis">Live Intervals Analysis</a></li>
       </ul></li>
    <li><a href="#regalloc">Register Allocation</a>
      <ul>
      <li><a href="#regAlloc_represent">How registers are represented in
                                        LLVM</a></li>
      <li><a href="#regAlloc_howTo">Mapping virtual registers to physical
                                    registers</a></li>
      <li><a href="#regAlloc_twoAddr">Handling two address instructions</a></li>
      <li><a href="#regAlloc_ssaDecon">The SSA deconstruction phase</a></li>
      <li><a href="#regAlloc_fold">Instruction folding</a></li>
      <li><a href="#regAlloc_builtIn">Built in register allocators</a></li>
      </ul></li>
    <li><a href="#codeemit">Code Emission</a>
        <ul>
        <li><a href="#codeemit_asm">Generating Assembly Code</a></li>
        <li><a href="#codeemit_bin">Generating Binary Machine Code</a></li>
        </ul></li>
    </ul>
  </li>
  <li><a href="#targetimpls">Target-specific Implementation Notes</a>
    <ul>
    <li><a href="#x86">The X86 backend</a></li>
    <li><a href="#ppc">The PowerPC backend</a>
      <ul>
      <li><a href="#ppc_abi">LLVM PowerPC ABI</a></li>
      <li><a href="#ppc_frame">Frame Layout</a></li>
      <li><a href="#ppc_prolog">Prolog/Epilog</a></li>
      <li><a href="#ppc_dynamic">Dynamic Allocation</a></li>
      </ul></li>
    </ul></li>

</ol>

<div class="doc_author">
  <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>,
                <a href="mailto:isanbard@gmail.com">Bill Wendling</a>,
                <a href="mailto:pronesto@gmail.com">Fernando Magno Quintao
                                                    Pereira</a> and
                <a href="mailto:jlaskey@mac.com">Jim Laskey</a></p>
</div>

<div class="doc_warning">
  <p>Warning: This is a work in progress.</p>
</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="introduction">Introduction</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The LLVM target-independent code generator is a framework that provides a
suite of reusable components for translating the LLVM internal representation to
the machine code for a specified target&mdash;either in assembly form (suitable
for a static compiler) or in binary machine code format (usable for a JIT
compiler). The LLVM target-independent code generator consists of five main
components:</p>

<ol>
<li><a href="#targetdesc">Abstract target description</a> interfaces which
capture important properties about various aspects of the machine, independently
of how they will be used.  These interfaces are defined in
<tt>include/llvm/Target/</tt>.</li>

<li>Classes used to represent the <a href="#codegendesc">machine code</a> being
generated for a target.  These classes are intended to be abstract enough to
represent the machine code for <i>any</i> target machine.  These classes are
defined in <tt>include/llvm/CodeGen/</tt>.</li>

<li><a href="#codegenalgs">Target-independent algorithms</a> used to implement
various phases of native code generation (register allocation, scheduling, stack
frame representation, etc).  This code lives in <tt>lib/CodeGen/</tt>.</li>

<li><a href="#targetimpls">Implementations of the abstract target description
interfaces</a> for particular targets.  These machine descriptions make use of
the components provided by LLVM, and can optionally provide custom
target-specific passes, to build complete code generators for a specific target.
Target descriptions live in <tt>lib/Target/</tt>.</li>

<li><a href="#jit">The target-independent JIT components</a>.  The LLVM JIT is
completely target independent (it uses the <tt>TargetJITInfo</tt> structure to
interface for target-specific issues.  The code for the target-independent
JIT lives in <tt>lib/ExecutionEngine/JIT</tt>.</li>

</ol>

<p>
Depending on which part of the code generator you are interested in working on,
different pieces of this will be useful to you.  In any case, you should be
familiar with the <a href="#targetdesc">target description</a> and <a
href="#codegendesc">machine code representation</a> classes.  If you want to add
a backend for a new target, you will need to <a href="#targetimpls">implement the
target description</a> classes for your new target and understand the <a
href="LangRef.html">LLVM code representation</a>.  If you are interested in
implementing a new <a href="#codegenalgs">code generation algorithm</a>, it
should only depend on the target-description and machine code representation
classes, ensuring that it is portable.
</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
 <a name="required">Required components in the code generator</a>
</div>

<div class="doc_text">

<p>The two pieces of the LLVM code generator are the high-level interface to the
code generator and the set of reusable components that can be used to build
target-specific backends.  The two most important interfaces (<a
href="#targetmachine"><tt>TargetMachine</tt></a> and <a
href="#targetdata"><tt>TargetData</tt></a>) are the only ones that are
required to be defined for a backend to fit into the LLVM system, but the others
must be defined if the reusable code generator components are going to be
used.</p>

<p>This design has two important implications.  The first is that LLVM can
support completely non-traditional code generation targets.  For example, the C
backend does not require register allocation, instruction selection, or any of
the other standard components provided by the system.  As such, it only
implements these two interfaces, and does its own thing.  Another example of a
code generator like this is a (purely hypothetical) backend that converts LLVM
to the GCC RTL form and uses GCC to emit machine code for a target.</p>

<p>This design also implies that it is possible to design and
implement radically different code generators in the LLVM system that do not
make use of any of the built-in components.  Doing so is not recommended at all,
but could be required for radically different targets that do not fit into the
LLVM machine description model: FPGAs for example.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
 <a name="high-level-design">The high-level design of the code generator</a>
</div>

<div class="doc_text">

<p>The LLVM target-independent code generator is designed to support efficient and
quality code generation for standard register-based microprocessors.  Code
generation in this model is divided into the following stages:</p>

<ol>
<li><b><a href="#instselect">Instruction Selection</a></b> - This phase
determines an efficient way to express the input LLVM code in the target
instruction set.
This stage produces the initial code for the program in the target instruction
set, then makes use of virtual registers in SSA form and physical registers that
represent any required register assignments due to target constraints or calling
conventions.  This step turns the LLVM code into a DAG of target
instructions.</li>

<li><b><a href="#selectiondag_sched">Scheduling and Formation</a></b> - This
phase takes the DAG of target instructions produced by the instruction selection
phase, determines an ordering of the instructions, then emits the instructions
as <tt><a href="#machineinstr">MachineInstr</a></tt>s with that ordering.  Note
that we describe this in the <a href="#instselect">instruction selection
section</a> because it operates on a <a
href="#selectiondag_intro">SelectionDAG</a>.
</li>

<li><b><a href="#ssamco">SSA-based Machine Code Optimizations</a></b> - This 
optional stage consists of a series of machine-code optimizations that 
operate on the SSA-form produced by the instruction selector.  Optimizations 
like modulo-scheduling or peephole optimization work here.
</li>

<li><b><a href="#regalloc">Register Allocation</a></b> - The
target code is transformed from an infinite virtual register file in SSA form 
to the concrete register file used by the target.  This phase introduces spill 
code and eliminates all virtual register references from the program.</li>

<li><b><a href="#proepicode">Prolog/Epilog Code Insertion</a></b> - Once the 
machine code has been generated for the function and the amount of stack space 
required is known (used for LLVM alloca's and spill slots), the prolog and 
epilog code for the function can be inserted and "abstract stack location 
references" can be eliminated.  This stage is responsible for implementing 
optimizations like frame-pointer elimination and stack packing.</li>

<li><b><a href="#latemco">Late Machine Code Optimizations</a></b> - Optimizations
that operate on "final" machine code can go here, such as spill code scheduling
and peephole optimizations.</li>

<li><b><a href="#codeemit">Code Emission</a></b> - The final stage actually 
puts out the code for the current function, either in the target assembler 
format or in machine code.</li>

</ol>

<p>The code generator is based on the assumption that the instruction selector
will use an optimal pattern matching selector to create high-quality sequences of
native instructions.  Alternative code generator designs based on pattern 
expansion and aggressive iterative peephole optimization are much slower.  This
design permits efficient compilation (important for JIT environments) and
aggressive optimization (used when generating code offline) by allowing 
components of varying levels of sophistication to be used for any step of 
compilation.</p>

<p>In addition to these stages, target implementations can insert arbitrary
target-specific passes into the flow.  For example, the X86 target uses a
special pass to handle the 80x87 floating point stack architecture.  Other
targets with unusual requirements can be supported with custom passes as
needed.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
 <a name="tablegen">Using TableGen for target description</a>
</div>

<div class="doc_text">

<p>The target description classes require a detailed description of the target
architecture.  These target descriptions often have a large amount of common
information (e.g., an <tt>add</tt> instruction is almost identical to a 
<tt>sub</tt> instruction).
In order to allow the maximum amount of commonality to be factored out, the LLVM
code generator uses the <a href="TableGenFundamentals.html">TableGen</a> tool to
describe big chunks of the target machine, which allows the use of
domain-specific and target-specific abstractions to reduce the amount of 
repetition.</p>

<p>As LLVM continues to be developed and refined, we plan to move more and more
of the target description to the <tt>.td</tt> form.  Doing so gives us a
number of advantages.  The most important is that it makes it easier to port
LLVM because it reduces the amount of C++ code that has to be written, and the
surface area of the code generator that needs to be understood before someone
can get something working.  Second, it makes it easier to change things. In
particular, if tables and other things are all emitted by <tt>tblgen</tt>, we
only need a change in one place (<tt>tblgen</tt>) to update all of the targets
to a new interface.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="targetdesc">Target description classes</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>The LLVM target description classes (located in the
<tt>include/llvm/Target</tt> directory) provide an abstract description of the
target machine independent of any particular client.  These classes are
designed to capture the <i>abstract</i> properties of the target (such as the
instructions and registers it has), and do not incorporate any particular pieces
of code generation algorithms.</p>

<p>All of the target description classes (except the <tt><a
href="#targetdata">TargetData</a></tt> class) are designed to be subclassed by
the concrete target implementation, and have virtual methods implemented.  To
get to these implementations, the <tt><a
href="#targetmachine">TargetMachine</a></tt> class provides accessors that
should be implemented by the target.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="targetmachine">The <tt>TargetMachine</tt> class</a>
</div>

<div class="doc_text">

<p>The <tt>TargetMachine</tt> class provides virtual methods that are used to
access the target-specific implementations of the various target description
classes via the <tt>get*Info</tt> methods (<tt>getInstrInfo</tt>,
<tt>getRegisterInfo</tt>, <tt>getFrameInfo</tt>, etc.).  This class is 
designed to be specialized by
a concrete target implementation (e.g., <tt>X86TargetMachine</tt>) which
implements the various virtual methods.  The only required target description
class is the <a href="#targetdata"><tt>TargetData</tt></a> class, but if the
code generator components are to be used, the other interfaces should be
implemented as well.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="targetdata">The <tt>TargetData</tt> class</a>
</div>

<div class="doc_text">

<p>The <tt>TargetData</tt> class is the only required target description class,
and it is the only class that is not extensible (you cannot derived  a new 
class from it).  <tt>TargetData</tt> specifies information about how the target 
lays out memory for structures, the alignment requirements for various data 
types, the size of pointers in the target, and whether the target is 
little-endian or big-endian.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="targetlowering">The <tt>TargetLowering</tt> class</a>
</div>

<div class="doc_text">

<p>The <tt>TargetLowering</tt> class is used by SelectionDAG based instruction
selectors primarily to describe how LLVM code should be lowered to SelectionDAG
operations.  Among other things, this class indicates:</p>

<ul>
  <li>an initial register class to use for various <tt>ValueType</tt>s</li>
  <li>which operations are natively supported by the target machine</li>
  <li>the return type of <tt>setcc</tt> operations</li>
  <li>the type to use for shift amounts</li>
  <li>various high-level characteristics, like whether it is profitable to turn
      division by a constant into a multiplication sequence</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="mregisterinfo">The <tt>MRegisterInfo</tt> class</a>
</div>

<div class="doc_text">

<p>The <tt>MRegisterInfo</tt> class (which will eventually be renamed to
<tt>TargetRegisterInfo</tt>) is used to describe the register file of the
target and any interactions between the registers.</p>

<p>Registers in the code generator are represented in the code generator by
unsigned integers.  Physical registers (those that actually exist in the target
description) are unique small numbers, and virtual registers are generally
large.  Note that register #0 is reserved as a flag value.</p>

<p>Each register in the processor description has an associated
<tt>TargetRegisterDesc</tt> entry, which provides a textual name for the
register (used for assembly output and debugging dumps) and a set of aliases
(used to indicate whether one register overlaps with another).
</p>

<p>In addition to the per-register description, the <tt>MRegisterInfo</tt> class
exposes a set of processor specific register classes (instances of the
<tt>TargetRegisterClass</tt> class).  Each register class contains sets of
registers that have the same properties (for example, they are all 32-bit
integer registers).  Each SSA virtual register created by the instruction
selector has an associated register class.  When the register allocator runs, it
replaces virtual registers with a physical register in the set.</p>

<p>
The target-specific implementations of these classes is auto-generated from a <a
href="TableGenFundamentals.html">TableGen</a> description of the register file.
</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="targetinstrinfo">The <tt>TargetInstrInfo</tt> class</a>
</div>

<div class="doc_text">
  <p>The <tt>TargetInstrInfo</tt> class is used to describe the machine 
  instructions supported by the target. It is essentially an array of 
  <tt>TargetInstrDescriptor</tt> objects, each of which describes one
  instruction the target supports. Descriptors define things like the mnemonic
  for the opcode, the number of operands, the list of implicit register uses
  and defs, whether the instruction has certain target-independent properties 
  (accesses memory, is commutable, etc), and holds any target-specific
  flags.</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="targetframeinfo">The <tt>TargetFrameInfo</tt> class</a>
</div>

<div class="doc_text">
  <p>The <tt>TargetFrameInfo</tt> class is used to provide information about the
  stack frame layout of the target. It holds the direction of stack growth, 
  the known stack alignment on entry to each function, and the offset to the 
  local area.  The offset to the local area is the offset from the stack 
  pointer on function entry to the first location where function data (local 
  variables, spill locations) can be stored.</p>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="targetsubtarget">The <tt>TargetSubtarget</tt> class</a>
</div>

<div class="doc_text">
  <p>The <tt>TargetSubtarget</tt> class is used to provide information about the
  specific chip set being targeted.  A sub-target informs code generation of 
  which instructions are supported, instruction latencies and instruction 
  execution itinerary; i.e., which processing units are used, in what order, and
  for how long.</p>
</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="targetjitinfo">The <tt>TargetJITInfo</tt> class</a>
</div>

<div class="doc_text">
  <p>The <tt>TargetJITInfo</tt> class exposes an abstract interface used by the
  Just-In-Time code generator to perform target-specific activities, such as
  emitting stubs.  If a <tt>TargetMachine</tt> supports JIT code generation, it
  should provide one of these objects through the <tt>getJITInfo</tt>
  method.</p>
</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="codegendesc">Machine code description classes</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>At the high-level, LLVM code is translated to a machine specific
representation formed out of
<a href="#machinefunction"><tt>MachineFunction</tt></a>,
<a href="#machinebasicblock"><tt>MachineBasicBlock</tt></a>, and <a 
href="#machineinstr"><tt>MachineInstr</tt></a> instances
(defined in <tt>include/llvm/CodeGen</tt>).  This representation is completely
target agnostic, representing instructions in their most abstract form: an
opcode and a series of operands.  This representation is designed to support
both an SSA representation for machine code, as well as a register allocated,
non-SSA form.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="machineinstr">The <tt>MachineInstr</tt> class</a>
</div>

<div class="doc_text">

<p>Target machine instructions are represented as instances of the
<tt>MachineInstr</tt> class.  This class is an extremely abstract way of
representing machine instructions.  In particular, it only keeps track of 
an opcode number and a set of operands.</p>

<p>The opcode number is a simple unsigned integer that only has meaning to a 
specific backend.  All of the instructions for a target should be defined in 
the <tt>*InstrInfo.td</tt> file for the target. The opcode enum values
are auto-generated from this description.  The <tt>MachineInstr</tt> class does
not have any information about how to interpret the instruction (i.e., what the 
semantics of the instruction are); for that you must refer to the 
<tt><a href="#targetinstrinfo">TargetInstrInfo</a></tt> class.</p> 

<p>The operands of a machine instruction can be of several different types:
a register reference, a constant integer, a basic block reference, etc.  In
addition, a machine operand should be marked as a def or a use of the value
(though only registers are allowed to be defs).</p>

<p>By convention, the LLVM code generator orders instruction operands so that
all register definitions come before the register uses, even on architectures
that are normally printed in other orders.  For example, the SPARC add 
instruction: "<tt>add %i1, %i2, %i3</tt>" adds the "%i1", and "%i2" registers
and stores the result into the "%i3" register.  In the LLVM code generator,
the operands should be stored as "<tt>%i3, %i1, %i2</tt>": with the destination
first.</p>

<p>Keeping destination (definition) operands at the beginning of the operand 
list has several advantages.  In particular, the debugging printer will print 
the instruction like this:</p>

<div class="doc_code">
<pre>
%r3 = add %i1, %i2
</pre>
</div>

<p>Also if the first operand is a def, it is easier to <a 
href="#buildmi">create instructions</a> whose only def is the first 
operand.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="buildmi">Using the <tt>MachineInstrBuilder.h</tt> functions</a>
</div>

<div class="doc_text">

<p>Machine instructions are created by using the <tt>BuildMI</tt> functions,
located in the <tt>include/llvm/CodeGen/MachineInstrBuilder.h</tt> file.  The
<tt>BuildMI</tt> functions make it easy to build arbitrary machine 
instructions.  Usage of the <tt>BuildMI</tt> functions look like this:</p>

<div class="doc_code">
<pre>
// Create a 'DestReg = mov 42' (rendered in X86 assembly as 'mov DestReg, 42')
// instruction.  The '1' specifies how many operands will be added.
MachineInstr *MI = BuildMI(X86::MOV32ri, 1, DestReg).addImm(42);

// Create the same instr, but insert it at the end of a basic block.
MachineBasicBlock &amp;MBB = ...
BuildMI(MBB, X86::MOV32ri, 1, DestReg).addImm(42);

// Create the same instr, but insert it before a specified iterator point.
MachineBasicBlock::iterator MBBI = ...
BuildMI(MBB, MBBI, X86::MOV32ri, 1, DestReg).addImm(42);

// Create a 'cmp Reg, 0' instruction, no destination reg.
MI = BuildMI(X86::CMP32ri, 2).addReg(Reg).addImm(0);
// Create an 'sahf' instruction which takes no operands and stores nothing.
MI = BuildMI(X86::SAHF, 0);

// Create a self looping branch instruction.
BuildMI(MBB, X86::JNE, 1).addMBB(&amp;MBB);
</pre>
</div>

<p>The key thing to remember with the <tt>BuildMI</tt> functions is that you
have to specify the number of operands that the machine instruction will take.
This allows for efficient memory allocation.  You also need to specify if
operands default to be uses of values, not definitions.  If you need to add a
definition operand (other than the optional destination register), you must
explicitly mark it as such:</p>

<div class="doc_code">
<pre>
MI.addReg(Reg, MachineOperand::Def);
</pre>
</div>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="fixedregs">Fixed (preassigned) registers</a>
</div>

<div class="doc_text">

<p>One important issue that the code generator needs to be aware of is the
presence of fixed registers.  In particular, there are often places in the 
instruction stream where the register allocator <em>must</em> arrange for a
particular value to be in a particular register.  This can occur due to 
limitations of the instruction set (e.g., the X86 can only do a 32-bit divide 
with the <tt>EAX</tt>/<tt>EDX</tt> registers), or external factors like calling
conventions.  In any case, the instruction selector should emit code that 
copies a virtual register into or out of a physical register when needed.</p>

<p>For example, consider this simple LLVM example:</p>

<div class="doc_code">
<pre>
int %test(int %X, int %Y) {
  %Z = div int %X, %Y
  ret int %Z
}
</pre>
</div>

<p>The X86 instruction selector produces this machine code for the <tt>div</tt>
and <tt>ret</tt> (use 
"<tt>llc X.bc -march=x86 -print-machineinstrs</tt>" to get this):</p>

<div class="doc_code">
<pre>
;; Start of div
%EAX = mov %reg1024           ;; Copy X (in reg1024) into EAX
%reg1027 = sar %reg1024, 31
%EDX = mov %reg1027           ;; Sign extend X into EDX
idiv %reg1025                 ;; Divide by Y (in reg1025)
%reg1026 = mov %EAX           ;; Read the result (Z) out of EAX

;; Start of ret
%EAX = mov %reg1026           ;; 32-bit return value goes in EAX
ret
</pre>
</div>

<p>By the end of code generation, the register allocator has coalesced
the registers and deleted the resultant identity moves producing the
following code:</p>

<div class="doc_code">
<pre>
;; X is in EAX, Y is in ECX
mov %EAX, %EDX
sar %EDX, 31
idiv %ECX
ret 
</pre>
</div>

<p>This approach is extremely general (if it can handle the X86 architecture, 
it can handle anything!) and allows all of the target specific
knowledge about the instruction stream to be isolated in the instruction 
selector.  Note that physical registers should have a short lifetime for good 
code generation, and all physical registers are assumed dead on entry to and
exit from basic blocks (before register allocation).  Thus, if you need a value
to be live across basic block boundaries, it <em>must</em> live in a virtual 
register.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="ssa">Machine code in SSA form</a>
</div>

<div class="doc_text">

<p><tt>MachineInstr</tt>'s are initially selected in SSA-form, and
are maintained in SSA-form until register allocation happens.  For the most 
part, this is trivially simple since LLVM is already in SSA form; LLVM PHI nodes
become machine code PHI nodes, and virtual registers are only allowed to have a
single definition.</p>

<p>After register allocation, machine code is no longer in SSA-form because there 
are no virtual registers left in the code.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="machinebasicblock">The <tt>MachineBasicBlock</tt> class</a>
</div>

<div class="doc_text">

<p>The <tt>MachineBasicBlock</tt> class contains a list of machine instructions
(<tt><a href="#machineinstr">MachineInstr</a></tt> instances).  It roughly
corresponds to the LLVM code input to the instruction selector, but there can be
a one-to-many mapping (i.e. one LLVM basic block can map to multiple machine
basic blocks). The <tt>MachineBasicBlock</tt> class has a
"<tt>getBasicBlock</tt>" method, which returns the LLVM basic block that it
comes from.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="machinefunction">The <tt>MachineFunction</tt> class</a>
</div>

<div class="doc_text">

<p>The <tt>MachineFunction</tt> class contains a list of machine basic blocks
(<tt><a href="#machinebasicblock">MachineBasicBlock</a></tt> instances).  It
corresponds one-to-one with the LLVM function input to the instruction selector.
In addition to a list of basic blocks, the <tt>MachineFunction</tt> contains a
a <tt>MachineConstantPool</tt>, a <tt>MachineFrameInfo</tt>, a
<tt>MachineFunctionInfo</tt>, a <tt>SSARegMap</tt>, and a set of live in and
live out registers for the function.  See
<tt>include/llvm/CodeGen/MachineFunction.h</tt> for more information.</p>

</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="codegenalgs">Target-independent code generation algorithms</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This section documents the phases described in the <a
href="#high-level-design">high-level design of the code generator</a>.  It
explains how they work and some of the rationale behind their design.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="instselect">Instruction Selection</a>
</div>

<div class="doc_text">
<p>
Instruction Selection is the process of translating LLVM code presented to the
code generator into target-specific machine instructions.  There are several
well-known ways to do this in the literature.  In LLVM there are two main forms:
the SelectionDAG based instruction selector framework and an old-style 'simple'
instruction selector, which effectively peephole selects each LLVM instruction
into a series of machine instructions.  We recommend that all targets use the
SelectionDAG infrastructure.
</p>

<p>Portions of the DAG instruction selector are generated from the target 
description (<tt>*.td</tt>) files.  Our goal is for the entire instruction
selector to be generated from these <tt>.td</tt> files.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="selectiondag_intro">Introduction to SelectionDAGs</a>
</div>

<div class="doc_text">

<p>The SelectionDAG provides an abstraction for code representation in a way
that is amenable to instruction selection using automatic techniques
(e.g. dynamic-programming based optimal pattern matching selectors). It is also
well-suited to other phases of code generation; in particular,
instruction scheduling (SelectionDAG's are very close to scheduling DAGs
post-selection).  Additionally, the SelectionDAG provides a host representation
where a large variety of very-low-level (but target-independent) 
<a href="#selectiondag_optimize">optimizations</a> may be
performed; ones which require extensive information about the instructions
efficiently supported by the target.</p>

<p>The SelectionDAG is a Directed-Acyclic-Graph whose nodes are instances of the
<tt>SDNode</tt> class.  The primary payload of the <tt>SDNode</tt> is its 
operation code (Opcode) that indicates what operation the node performs and
the operands to the operation.
The various operation node types are described at the top of the
<tt>include/llvm/CodeGen/SelectionDAGNodes.h</tt> file.</p>

<p>Although most operations define a single value, each node in the graph may 
define multiple values.  For example, a combined div/rem operation will define
both the dividend and the remainder. Many other situations require multiple
values as well.  Each node also has some number of operands, which are edges 
to the node defining the used value.  Because nodes may define multiple values,
edges are represented by instances of the <tt>SDOperand</tt> class, which is 
a <tt>&lt;SDNode, unsigned&gt;</tt> pair, indicating the node and result
value being used, respectively.  Each value produced by an <tt>SDNode</tt> has
an associated <tt>MVT::ValueType</tt> indicating what type the value is.</p>

<p>SelectionDAGs contain two different kinds of values: those that represent
data flow and those that represent control flow dependencies.  Data values are
simple edges with an integer or floating point value type.  Control edges are
represented as "chain" edges which are of type <tt>MVT::Other</tt>.  These edges
provide an ordering between nodes that have side effects (such as
loads, stores, calls, returns, etc).  All nodes that have side effects should
take a token chain as input and produce a new one as output.  By convention,
token chain inputs are always operand #0, and chain results are always the last
value produced by an operation.</p>

<p>A SelectionDAG has designated "Entry" and "Root" nodes.  The Entry node is
always a marker node with an Opcode of <tt>ISD::EntryToken</tt>.  The Root node
is the final side-effecting node in the token chain. For example, in a single
basic block function it would be the return node.</p>

<p>One important concept for SelectionDAGs is the notion of a "legal" vs.
"illegal" DAG.  A legal DAG for a target is one that only uses supported
operations and supported types.  On a 32-bit PowerPC, for example, a DAG with
a value of type i1, i8, i16, or i64 would be illegal, as would a DAG that uses a
SREM or UREM operation.  The
<a href="#selectiondag_legalize">legalize</a> phase is responsible for turning
an illegal DAG into a legal DAG.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="selectiondag_process">SelectionDAG Instruction Selection Process</a>
</div>

<div class="doc_text">

<p>SelectionDAG-based instruction selection consists of the following steps:</p>

<ol>
<li><a href="#selectiondag_build">Build initial DAG</a> - This stage
    performs a simple translation from the input LLVM code to an illegal
    SelectionDAG.</li>
<li><a href="#selectiondag_optimize">Optimize SelectionDAG</a> - This stage
    performs simple optimizations on the SelectionDAG to simplify it, and
    recognize meta instructions (like rotates and <tt>div</tt>/<tt>rem</tt>
    pairs) for targets that support these meta operations.  This makes the
    resultant code more efficient and the <a href="#selectiondag_select">select
    instructions from DAG</a> phase (below) simpler.</li>
<li><a href="#selectiondag_legalize">Legalize SelectionDAG</a> - This stage
    converts the illegal SelectionDAG to a legal SelectionDAG by eliminating
    unsupported operations and data types.</li>
<li><a href="#selectiondag_optimize">Optimize SelectionDAG (#2)</a> - This
    second run of the SelectionDAG optimizes the newly legalized DAG to
    eliminate inefficiencies introduced by legalization.</li>
<li><a href="#selectiondag_select">Select instructions from DAG</a> - Finally,
    the target instruction selector matches the DAG operations to target
    instructions.  This process translates the target-independent input DAG into
    another DAG of target instructions.</li>
<li><a href="#selectiondag_sched">SelectionDAG Scheduling and Formation</a>
    - The last phase assigns a linear order to the instructions in the 
    target-instruction DAG and emits them into the MachineFunction being
    compiled.  This step uses traditional prepass scheduling techniques.</li>
</ol>

<p>After all of these steps are complete, the SelectionDAG is destroyed and the
rest of the code generation passes are run.</p>

<p>One great way to visualize what is going on here is to take advantage of a 
few LLC command line options.  In particular, the <tt>-view-isel-dags</tt>
option pops up a window with the SelectionDAG input to the Select phase for all
of the code compiled (if you only get errors printed to the console while using
this, you probably <a href="ProgrammersManual.html#ViewGraph">need to configure
your system</a> to add support for it).  The <tt>-view-sched-dags</tt> option
views the SelectionDAG output from the Select phase and input to the Scheduler
phase.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="selectiondag_build">Initial SelectionDAG Construction</a>
</div>

<div class="doc_text">

<p>The initial SelectionDAG is na&iuml;vely peephole expanded from the LLVM
input by the <tt>SelectionDAGLowering</tt> class in the
<tt>lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp</tt> file.  The intent of this
pass is to expose as much low-level, target-specific details to the SelectionDAG
as possible.  This pass is mostly hard-coded (e.g. an LLVM <tt>add</tt> turns
into an <tt>SDNode add</tt> while a <tt>geteelementptr</tt> is expanded into the
obvious arithmetic). This pass requires target-specific hooks to lower calls,
returns, varargs, etc.  For these features, the
<tt><a href="#targetlowering">TargetLowering</a></tt> interface is used.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="selectiondag_legalize">SelectionDAG Legalize Phase</a>
</div>

<div class="doc_text">

<p>The Legalize phase is in charge of converting a DAG to only use the types and
operations that are natively supported by the target.  This involves two major
tasks:</p>

<ol>
<li><p>Convert values of unsupported types to values of supported types.</p>
    <p>There are two main ways of doing this: converting small types to 
       larger types ("promoting"), and breaking up large integer types
       into smaller ones ("expanding").  For example, a target might require
       that all f32 values are promoted to f64 and that all i1/i8/i16 values
       are promoted to i32.  The same target might require that all i64 values
       be expanded into i32 values.  These changes can insert sign and zero
       extensions as needed to make sure that the final code has the same
       behavior as the input.</p>
    <p>A target implementation tells the legalizer which types are supported
       (and which register class to use for them) by calling the
       <tt>addRegisterClass</tt> method in its TargetLowering constructor.</p>
</li>

<li><p>Eliminate operations that are not supported by the target.</p>
    <p>Targets often have weird constraints, such as not supporting every
       operation on every supported datatype (e.g. X86 does not support byte
       conditional moves and PowerPC does not support sign-extending loads from
       a 16-bit memory location).  Legalize takes care of this by open-coding
       another sequence of operations to emulate the operation ("expansion"), by
       promoting one type to a larger type that supports the operation
       ("promotion"), or by using a target-specific hook to implement the
       legalization ("custom").</p>
    <p>A target implementation tells the legalizer which operations are not
       supported (and which of the above three actions to take) by calling the
       <tt>setOperationAction</tt> method in its <tt>TargetLowering</tt>
       constructor.</p>
</li>
</ol>

<p>Prior to the existance of the Legalize pass, we required that every target
<a href="#selectiondag_optimize">selector</a> supported and handled every
operator and type even if they are not natively supported.  The introduction of
the Legalize phase allows all of the cannonicalization patterns to be shared
across targets, and makes it very easy to optimize the cannonicalized code
because it is still in the form of a DAG.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="selectiondag_optimize">SelectionDAG Optimization Phase: the DAG
  Combiner</a>
</div>

<div class="doc_text">

<p>The SelectionDAG optimization phase is run twice for code generation: once
immediately after the DAG is built and once after legalization.  The first run
of the pass allows the initial code to be cleaned up (e.g. performing 
optimizations that depend on knowing that the operators have restricted type 
inputs).  The second run of the pass cleans up the messy code generated by the 
Legalize pass, which allows Legalize to be very simple (it can focus on making
code legal instead of focusing on generating <em>good</em> and legal code).</p>

<p>One important class of optimizations performed is optimizing inserted sign
and zero extension instructions.  We currently use ad-hoc techniques, but could
move to more rigorous techniques in the future.  Here are some good papers on
the subject:</p>

<p>
 "<a href="http://www.eecs.harvard.edu/~nr/pubs/widen-abstract.html">Widening
 integer arithmetic</a>"<br>
 Kevin Redwine and Norman Ramsey<br>
 International Conference on Compiler Construction (CC) 2004
</p>


<p>
 "<a href="http://portal.acm.org/citation.cfm?doid=512529.512552">Effective
 sign extension elimination</a>"<br>
 Motohiro Kawahito, Hideaki Komatsu, and Toshio Nakatani<br>
 Proceedings of the ACM SIGPLAN 2002 Conference on Programming Language Design
 and Implementation.
</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="selectiondag_select">SelectionDAG Select Phase</a>
</div>

<div class="doc_text">

<p>The Select phase is the bulk of the target-specific code for instruction
selection.  This phase takes a legal SelectionDAG as input, pattern matches the
instructions supported by the target to this DAG, and produces a new DAG of
target code.  For example, consider the following LLVM fragment:</p>

<div class="doc_code">
<pre>
%t1 = add float %W, %X
%t2 = mul float %t1, %Y
%t3 = add float %t2, %Z
</pre>
</div>

<p>This LLVM code corresponds to a SelectionDAG that looks basically like
this:</p>

<div class="doc_code">
<pre>
(fadd:f32 (fmul:f32 (fadd:f32 W, X), Y), Z)
</pre>
</div>

<p>If a target supports floating point multiply-and-add (FMA) operations, one
of the adds can be merged with the multiply.  On the PowerPC, for example, the
output of the instruction selector might look like this DAG:</p>

<div class="doc_code">
<pre>
(FMADDS (FADDS W, X), Y, Z)
</pre>
</div>

<p>The <tt>FMADDS</tt> instruction is a ternary instruction that multiplies its
first two operands and adds the third (as single-precision floating-point
numbers).  The <tt>FADDS</tt> instruction is a simple binary single-precision
add instruction.  To perform this pattern match, the PowerPC backend includes
the following instruction definitions:</p>

<div class="doc_code">
<pre>
def FMADDS : AForm_1&lt;59, 29,
                    (ops F4RC:$FRT, F4RC:$FRA, F4RC:$FRC, F4RC:$FRB),
                    "fmadds $FRT, $FRA, $FRC, $FRB",
                    [<b>(set F4RC:$FRT, (fadd (fmul F4RC:$FRA, F4RC:$FRC),
                                           F4RC:$FRB))</b>]&gt;;
def FADDS : AForm_2&lt;59, 21,
                    (ops F4RC:$FRT, F4RC:$FRA, F4RC:$FRB),
                    "fadds $FRT, $FRA, $FRB",
                    [<b>(set F4RC:$FRT, (fadd F4RC:$FRA, F4RC:$FRB))</b>]&gt;;
</pre>
</div>

<p>The portion of the instruction definition in bold indicates the pattern used
to match the instruction.  The DAG operators (like <tt>fmul</tt>/<tt>fadd</tt>)
are defined in the <tt>lib/Target/TargetSelectionDAG.td</tt> file.  
"<tt>F4RC</tt>" is the register class of the input and result values.<p>

<p>The TableGen DAG instruction selector generator reads the instruction 
patterns in the <tt>.td</tt> file and automatically builds parts of the pattern
matching code for your target.  It has the following strengths:</p>

<ul>
<li>At compiler-compiler time, it analyzes your instruction patterns and tells
    you if your patterns make sense or not.</li>
<li>It can handle arbitrary constraints on operands for the pattern match.  In
    particular, it is straight-forward to say things like "match any immediate
    that is a 13-bit sign-extended value".  For examples, see the 
    <tt>immSExt16</tt> and related <tt>tblgen</tt> classes in the PowerPC
    backend.</li>
<li>It knows several important identities for the patterns defined.  For
    example, it knows that addition is commutative, so it allows the 
    <tt>FMADDS</tt> pattern above to match "<tt>(fadd X, (fmul Y, Z))</tt>" as
    well as "<tt>(fadd (fmul X, Y), Z)</tt>", without the target author having
    to specially handle this case.</li>
<li>It has a full-featured type-inferencing system.  In particular, you should
    rarely have to explicitly tell the system what type parts of your patterns
    are.  In the <tt>FMADDS</tt> case above, we didn't have to tell
    <tt>tblgen</tt> that all of the nodes in the pattern are of type 'f32'.  It
    was able to infer and propagate this knowledge from the fact that
    <tt>F4RC</tt> has type 'f32'.</li>
<li>Targets can define their own (and rely on built-in) "pattern fragments".
    Pattern fragments are chunks of reusable patterns that get inlined into your
    patterns during compiler-compiler time.  For example, the integer
    "<tt>(not x)</tt>" operation is actually defined as a pattern fragment that
    expands as "<tt>(xor x, -1)</tt>", since the SelectionDAG does not have a
    native '<tt>not</tt>' operation.  Targets can define their own short-hand
    fragments as they see fit.  See the definition of '<tt>not</tt>' and
    '<tt>ineg</tt>' for examples.</li>
<li>In addition to instructions, targets can specify arbitrary patterns that
    map to one or more instructions using the 'Pat' class.  For example,
    the PowerPC has no way to load an arbitrary integer immediate into a
    register in one instruction. To tell tblgen how to do this, it defines:
    <br>
    <br>
    <div class="doc_code">
    <pre>
// Arbitrary immediate support.  Implement in terms of LIS/ORI.
def : Pat&lt;(i32 imm:$imm),
          (ORI (LIS (HI16 imm:$imm)), (LO16 imm:$imm))&gt;;
    </pre>
    </div>
    <br>    
    If none of the single-instruction patterns for loading an immediate into a
    register match, this will be used.  This rule says "match an arbitrary i32
    immediate, turning it into an <tt>ORI</tt> ('or a 16-bit immediate') and an
    <tt>LIS</tt> ('load 16-bit immediate, where the immediate is shifted to the
    left 16 bits') instruction".  To make this work, the
    <tt>LO16</tt>/<tt>HI16</tt> node transformations are used to manipulate the
    input immediate (in this case, take the high or low 16-bits of the
    immediate).</li>
<li>While the system does automate a lot, it still allows you to write custom
    C++ code to match special cases if there is something that is hard to
    express.</li>
</ul>

<p>While it has many strengths, the system currently has some limitations,
primarily because it is a work in progress and is not yet finished:</p>

<ul>
<li>Overall, there is no way to define or match SelectionDAG nodes that define
    multiple values (e.g. <tt>ADD_PARTS</tt>, <tt>LOAD</tt>, <tt>CALL</tt>,
    etc).  This is the biggest reason that you currently still <em>have to</em>
    write custom C++ code for your instruction selector.</li>
<li>There is no great way to support matching complex addressing modes yet.  In
    the future, we will extend pattern fragments to allow them to define
    multiple values (e.g. the four operands of the <a href="#x86_memory">X86
    addressing mode</a>).  In addition, we'll extend fragments so that a
    fragment can match multiple different patterns.</li>
<li>We don't automatically infer flags like isStore/isLoad yet.</li>
<li>We don't automatically generate the set of supported registers and
    operations for the <a href="#selectiondag_legalize">Legalizer</a> yet.</li>
<li>We don't have a way of tying in custom legalized nodes yet.</li>
</ul>

<p>Despite these limitations, the instruction selector generator is still quite
useful for most of the binary and logical operations in typical instruction
sets.  If you run into any problems or can't figure out how to do something, 
please let Chris know!</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="selectiondag_sched">SelectionDAG Scheduling and Formation Phase</a>
</div>

<div class="doc_text">

<p>The scheduling phase takes the DAG of target instructions from the selection
phase and assigns an order.  The scheduler can pick an order depending on
various constraints of the machines (i.e. order for minimal register pressure or
try to cover instruction latencies).  Once an order is established, the DAG is
converted to a list of <tt><a href="#machineinstr">MachineInstr</a></tt>s and
the SelectionDAG is destroyed.</p>

<p>Note that this phase is logically separate from the instruction selection
phase, but is tied to it closely in the code because it operates on
SelectionDAGs.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="selectiondag_future">Future directions for the SelectionDAG</a>
</div>

<div class="doc_text">

<ol>
<li>Optional function-at-a-time selection.</li>
<li>Auto-generate entire selector from <tt>.td</tt> file.</li>
</ol>

</div>
 
<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ssamco">SSA-based Machine Code Optimizations</a>
</div>
<div class="doc_text"><p>To Be Written</p></div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="liveintervals">Live Intervals</a>
</div>

<div class="doc_text">

<p>Live Intervals are the ranges (intervals) where a variable is <i>live</i>.
They are used by some <a href="#regalloc">register allocator</a> passes to
determine if two or more virtual registers which require the same physical
register are live at the same point in the program (i.e., they conflict).  When
this situation occurs, one virtual register must be <i>spilled</i>.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="livevariable_analysis">Live Variable Analysis</a>
</div>

<div class="doc_text">

<p>The first step in determining the live intervals of variables is to
calculate the set of registers that are immediately dead after the
instruction (i.e., the instruction calculates the value, but it is
never used) and the set of registers that are used by the instruction,
but are never used after the instruction (i.e., they are killed). Live
variable information is computed for each <i>virtual</i> register and
<i>register allocatable</i> physical register in the function.  This
is done in a very efficient manner because it uses SSA to sparsely
compute lifetime information for virtual registers (which are in SSA
form) and only has to track physical registers within a block.  Before
register allocation, LLVM can assume that physical registers are only
live within a single basic block.  This allows it to do a single,
local analysis to resolve physical register lifetimes within each
basic block. If a physical register is not register allocatable (e.g.,
a stack pointer or condition codes), it is not tracked.</p>

<p>Physical registers may be live in to or out of a function. Live in values
are typically arguments in registers. Live out values are typically return
values in registers. Live in values are marked as such, and are given a dummy
"defining" instruction during live intervals analysis. If the last basic block
of a function is a <tt>return</tt>, then it's marked as using all live out
values in the function.</p>

<p><tt>PHI</tt> nodes need to be handled specially, because the calculation
of the live variable information from a depth first traversal of the CFG of
the function won't guarantee that a virtual register used by the <tt>PHI</tt>
node is defined before it's used. When a <tt>PHI</tt> node is encounted, only
the definition is handled, because the uses will be handled in other basic
blocks.</p>

<p>For each <tt>PHI</tt> node of the current basic block, we simulate an
assignment at the end of the current basic block and traverse the successor
basic blocks. If a successor basic block has a <tt>PHI</tt> node and one of
the <tt>PHI</tt> node's operands is coming from the current basic block,
then the variable is marked as <i>alive</i> within the current basic block
and all of its predecessor basic blocks, until the basic block with the
defining instruction is encountered.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="liveintervals_analysis">Live Intervals Analysis</a>
</div>

<div class="doc_text">

<p>We now have the information available to perform the live intervals analysis
and build the live intervals themselves.  We start off by numbering the basic
blocks and machine instructions.  We then handle the "live-in" values.  These
are in physical registers, so the physical register is assumed to be killed by
the end of the basic block.  Live intervals for virtual registers are computed
for some ordering of the machine instructions <tt>[1, N]</tt>.  A live interval
is an interval <tt>[i, j)</tt>, where <tt>1 <= i <= j < N</tt>, for which a
variable is live.</p>

<p><i><b>More to come...</b></i></p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="regalloc">Register Allocation</a>
</div>

<div class="doc_text">

<p>The <i>Register Allocation problem</i> consists in mapping a program
<i>P<sub>v</sub></i>, that can use an unbounded number of virtual
registers, to a program <i>P<sub>p</sub></i> that contains a finite
(possibly small) number of physical registers. Each target architecture has
a different number of physical registers. If the number of physical
registers is not enough to accommodate all the virtual registers, some of
them will have to be mapped into memory. These virtuals are called
<i>spilled virtuals</i>.</p>

</div>

<!-- _______________________________________________________________________ -->

<div class="doc_subsubsection">
  <a name="regAlloc_represent">How registers are represented in LLVM</a>
</div>

<div class="doc_text">

<p>In LLVM, physical registers are denoted by integer numbers that
normally range from 1 to 1023. To see how this numbering is defined
for a particular architecture, you can read the
<tt>GenRegisterNames.inc</tt> file for that architecture. For
instance, by inspecting
<tt>lib/Target/X86/X86GenRegisterNames.inc</tt> we see that the 32-bit
register <tt>EAX</tt> is denoted by 15, and the MMX register
<tt>MM0</tt> is mapped to 48.</p>

<p>Some architectures contain registers that share the same physical
location. A notable example is the X86 platform. For instance, in the
X86 architecture, the registers <tt>EAX</tt>, <tt>AX</tt> and
<tt>AL</tt> share the first eight bits. These physical registers are
marked as <i>aliased</i> in LLVM. Given a particular architecture, you
can check which registers are aliased by inspecting its
<tt>RegisterInfo.td</tt> file. Moreover, the method
<tt>MRegisterInfo::getAliasSet(p_reg)</tt> returns an array containing
all the physical registers aliased to the register <tt>p_reg</tt>.</p>

<p>Physical registers, in LLVM, are grouped in <i>Register Classes</i>.
Elements in the same register class are functionally equivalent, and can
be interchangeably used. Each virtual register can only be mapped to
physical registers of a particular class. For instance, in the X86
architecture, some virtuals can only be allocated to 8 bit registers.
A register class is described by <tt>TargetRegisterClass</tt> objects.
To discover if a virtual register is compatible with a given physical,
this code can be used:
</p>

<div class="doc_code">
<pre>
bool RegMapping_Fer::compatible_class(MachineFunction &amp;mf,
                                      unsigned v_reg,
                                      unsigned p_reg) {
  assert(MRegisterInfo::isPhysicalRegister(p_reg) &amp;&amp;
         "Target register must be physical");
  const TargetRegisterClass *trc = mf.getSSARegMap()->getRegClass(v_reg);
  return trc->contains(p_reg);
}
</pre>
</div>

<p>Sometimes, mostly for debugging purposes, it is useful to change
the number of physical registers available in the target
architecture. This must be done statically, inside the
<tt>TargetRegsterInfo.td</tt> file. Just <tt>grep</tt> for
<tt>RegisterClass</tt>, the last parameter of which is a list of
registers. Just commenting some out is one simple way to avoid them
being used. A more polite way is to explicitly exclude some registers
from the <i>allocation order</i>. See the definition of the
<tt>GR</tt> register class in
<tt>lib/Target/IA64/IA64RegisterInfo.td</tt> for an example of this
(e.g., <tt>numReservedRegs</tt> registers are hidden.)</p>

<p>Virtual registers are also denoted by integer numbers. Contrary to
physical registers, different virtual registers never share the same
number. The smallest virtual register is normally assigned the number
1024. This may change, so, in order to know which is the first virtual
register, you should access
<tt>MRegisterInfo::FirstVirtualRegister</tt>. Any register whose
number is greater than or equal to
<tt>MRegisterInfo::FirstVirtualRegister</tt> is considered a virtual
register. Whereas physical registers are statically defined in a
<tt>TargetRegisterInfo.td</tt> file and cannot be created by the
application developer, that is not the case with virtual registers.
In order to create new virtual registers, use the method
<tt>SSARegMap::createVirtualRegister()</tt>. This method will return a
virtual register with the highest code.
</p>

<p>Before register allocation, the operands of an instruction are
mostly virtual registers, although physical registers may also be
used. In order to check if a given machine operand is a register, use
the boolean function <tt>MachineOperand::isRegister()</tt>. To obtain
the integer code of a register, use
<tt>MachineOperand::getReg()</tt>. An instruction may define or use a
register. For instance, <tt>ADD reg:1026 := reg:1025 reg:1024</tt>
defines the registers 1024, and uses registers 1025 and 1026. Given a
register operand, the method <tt>MachineOperand::isUse()</tt> informs
if that register is being used by the instruction. The method
<tt>MachineOperand::isDef()</tt> informs if that registers is being
defined.</p>

<p>We will call physical registers present in the LLVM bitcode before
register allocation <i>pre-colored registers</i>. Pre-colored
registers are used in many different situations, for instance, to pass
parameters of functions calls, and to store results of particular
instructions. There are two types of pre-colored registers: the ones
<i>implicitly</i> defined, and those <i>explicitly</i>
defined. Explicitly defined registers are normal operands, and can be
accessed with <tt>MachineInstr::getOperand(int)::getReg()</tt>.  In
order to check which registers are implicitly defined by an
instruction, use the
<tt>TargetInstrInfo::get(opcode)::ImplicitDefs</tt>, where
<tt>opcode</tt> is the opcode of the target instruction. One important
difference between explicit and implicit physical registers is that
the latter are defined statically for each instruction, whereas the
former may vary depending on the program being compiled. For example,
an instruction that represents a function call will always implicitly
define or use the same set of physical registers. To read the
registers implicitly used by an instruction, use
<tt>TargetInstrInfo::get(opcode)::ImplicitUses</tt>. Pre-colored
registers impose constraints on any register allocation algorithm. The
register allocator must make sure that none of them is been
overwritten by the values of virtual registers while still alive.</p>

</div>

<!-- _______________________________________________________________________ -->

<div class="doc_subsubsection">
  <a name="regAlloc_howTo">Mapping virtual registers to physical registers</a>
</div>

<div class="doc_text">

<p>There are two ways to map virtual registers to physical registers (or to
memory slots). The first way, that we will call <i>direct mapping</i>,
is based on the use of methods of the classes <tt>MRegisterInfo</tt>,
and <tt>MachineOperand</tt>. The second way, that we will call
<i>indirect mapping</i>, relies on the <tt>VirtRegMap</tt> class in
order to insert loads and stores sending and getting values to and from
memory.</p>

<p>The direct mapping provides more flexibility to the developer of
the register allocator; however, it is more error prone, and demands
more implementation work.  Basically, the programmer will have to
specify where load and store instructions should be inserted in the
target function being compiled in order to get and store values in
memory. To assign a physical register to a virtual register present in
a given operand, use <tt>MachineOperand::setReg(p_reg)</tt>. To insert
a store instruction, use
<tt>MRegisterInfo::storeRegToStackSlot(...)</tt>, and to insert a load
instruction, use <tt>MRegisterInfo::loadRegFromStackSlot</tt>.</p>

<p>The indirect mapping shields the application developer from the
complexities of inserting load and store instructions. In order to map
a virtual register to a physical one, use
<tt>VirtRegMap::assignVirt2Phys(vreg, preg)</tt>.  In order to map a
certain virtual register to memory, use
<tt>VirtRegMap::assignVirt2StackSlot(vreg)</tt>. This method will
return the stack slot where <tt>vreg</tt>'s value will be located.  If
it is necessary to map another virtual register to the same stack
slot, use <tt>VirtRegMap::assignVirt2StackSlot(vreg,
stack_location)</tt>. One important point to consider when using the
indirect mapping, is that even if a virtual register is mapped to
memory, it still needs to be mapped to a physical register. This
physical register is the location where the virtual register is
supposed to be found before being stored or after being reloaded.</p>

<p>If the indirect strategy is used, after all the virtual registers
have been mapped to physical registers or stack slots, it is necessary
to use a spiller object to place load and store instructions in the
code. Every virtual that has been mapped to a stack slot will be
stored to memory after been defined and will be loaded before being
used. The implementation of the spiller tries to recycle load/store
instructions, avoiding unnecessary instructions. For an example of how
to invoke the spiller, see
<tt>RegAllocLinearScan::runOnMachineFunction</tt> in
<tt>lib/CodeGen/RegAllocLinearScan.cpp</tt>.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="regAlloc_twoAddr">Handling two address instructions</a>
</div>

<div class="doc_text">

<p>With very rare exceptions (e.g., function calls), the LLVM machine
code instructions are three address instructions. That is, each
instruction is expected to define at most one register, and to use at
most two registers.  However, some architectures use two address
instructions. In this case, the defined register is also one of the
used register. For instance, an instruction such as <tt>ADD %EAX,
%EBX</tt>, in X86 is actually equivalent to <tt>%EAX = %EAX +
%EBX</tt>.</p>

<p>In order to produce correct code, LLVM must convert three address
instructions that represent two address instructions into true two
address instructions. LLVM provides the pass
<tt>TwoAddressInstructionPass</tt> for this specific purpose. It must
be run before register allocation takes place. After its execution,
the resulting code may no longer be in SSA form. This happens, for
instance, in situations where an instruction such as <tt>%a = ADD %b
%c</tt> is converted to two instructions such as:</p>

<div class="doc_code">
<pre>
%a = MOVE %b
%a = ADD %a %b
</pre>
</div>

<p>Notice that, internally, the second instruction is represented as
<tt>ADD %a[def/use] %b</tt>. I.e., the register operand <tt>%a</tt> is
both used and defined by the instruction.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="regAlloc_ssaDecon">The SSA deconstruction phase</a>
</div>

<div class="doc_text">

<p>An important transformation that happens during register allocation is called
the <i>SSA Deconstruction Phase</i>. The SSA form simplifies many
analyses that are performed on the control flow graph of
programs. However, traditional instruction sets do not implement
PHI instructions. Thus, in order to generate executable code, compilers
must replace PHI instructions with other instructions that preserve their
semantics.</p>

<p>There are many ways in which PHI instructions can safely be removed
from the target code. The most traditional PHI deconstruction
algorithm replaces PHI instructions with copy instructions. That is
the strategy adopted by LLVM. The SSA deconstruction algorithm is
implemented in n<tt>lib/CodeGen/>PHIElimination.cpp</tt>. In order to
invoke this pass, the identifier <tt>PHIEliminationID</tt> must be
marked as required in the code of the register allocator.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="regAlloc_fold">Instruction folding</a>
</div>

<div class="doc_text">

<p><i>Instruction folding</i> is an optimization performed during
register allocation that removes unnecessary copy instructions. For
instance, a sequence of instructions such as:</p>

<div class="doc_code">
<pre>
%EBX = LOAD %mem_address
%EAX = COPY %EBX
</pre>
</div>

<p>can be safely substituted by the single instruction:

<div class="doc_code">
<pre>
%EAX = LOAD %mem_address
</pre>
</div>

<p>Instructions can be folded with the
<tt>MRegisterInfo::foldMemoryOperand(...)</tt> method. Care must be
taken when folding instructions; a folded instruction can be quite
different from the original instruction. See
<tt>LiveIntervals::addIntervalsForSpills</tt> in
<tt>lib/CodeGen/LiveIntervalAnalysis.cpp</tt> for an example of its use.</p>

</div>

<!-- _______________________________________________________________________ -->

<div class="doc_subsubsection">
  <a name="regAlloc_builtIn">Built in register allocators</a>
</div>

<div class="doc_text">

<p>The LLVM infrastructure provides the application developer with
three different register allocators:</p>

<ul>
  <li><i>Simple</i> - This is a very simple implementation that does
      not keep values in registers across instructions. This register
      allocator immediately spills every value right after it is
      computed, and reloads all used operands from memory to temporary
      registers before each instruction.</li>
  <li><i>Local</i> - This register allocator is an improvement on the
      <i>Simple</i> implementation. It allocates registers on a basic
      block level, attempting to keep values in registers and reusing
      registers as appropriate.</li>
  <li><i>Linear Scan</i> - <i>The default allocator</i>. This is the
      well-know linear scan register allocator. Whereas the
      <i>Simple</i> and <i>Local</i> algorithms use a direct mapping
      implementation technique, the <i>Linear Scan</i> implementation
      uses a spiller in order to place load and stores.</li>
</ul>

<p>The type of register allocator used in <tt>llc</tt> can be chosen with the
command line option <tt>-regalloc=...</tt>:</p>

<div class="doc_code">
<pre>
$ llc -f -regalloc=simple file.bc -o sp.s;
$ llc -f -regalloc=local file.bc -o lc.s;
$ llc -f -regalloc=linearscan file.bc -o ln.s;
</pre>
</div>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="proepicode">Prolog/Epilog Code Insertion</a>
</div>
<div class="doc_text"><p>To Be Written</p></div>
<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="latemco">Late Machine Code Optimizations</a>
</div>
<div class="doc_text"><p>To Be Written</p></div>
<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="codeemit">Code Emission</a>
</div>
<div class="doc_text"><p>To Be Written</p></div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="codeemit_asm">Generating Assembly Code</a>
</div>
<div class="doc_text"><p>To Be Written</p></div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="codeemit_bin">Generating Binary Machine Code</a>
</div>

<div class="doc_text">
   <p>For the JIT or <tt>.o</tt> file writer</p>
</div>


<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="targetimpls">Target-specific Implementation Notes</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This section of the document explains features or design decisions that
are specific to the code generator for a particular target.</p>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="x86">The X86 backend</a>
</div>

<div class="doc_text">

<p>The X86 code generator lives in the <tt>lib/Target/X86</tt> directory.  This
code generator currently targets a generic P6-like processor.  As such, it
produces a few P6-and-above instructions (like conditional moves), but it does
not make use of newer features like MMX or SSE.  In the future, the X86 backend
will have sub-target support added for specific processor families and 
implementations.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="x86_tt">X86 Target Triples Supported</a>
</div>

<div class="doc_text">

<p>The following are the known target triples that are supported by the X86 
backend.  This is not an exhaustive list, and it would be useful to add those
that people test.</p>

<ul>
<li><b>i686-pc-linux-gnu</b> - Linux</li>
<li><b>i386-unknown-freebsd5.3</b> - FreeBSD 5.3</li>
<li><b>i686-pc-cygwin</b> - Cygwin on Win32</li>
<li><b>i686-pc-mingw32</b> - MingW on Win32</li>
<li><b>i386-pc-mingw32msvc</b> - MingW crosscompiler on Linux</li>
<li><b>i686-apple-darwin*</b> - Apple Darwin on X86</li>
</ul>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="x86_cc">X86 Calling Conventions supported</a>
</div>


<div class="doc_text">

<p>The folowing target-specific calling conventions are known to backend:</p>

<ul>
<li><b>x86_StdCall</b> - stdcall calling convention seen on Microsoft Windows
platform (CC ID = 64).</li>
<li><b>x86_FastCall</b> - fastcall calling convention seen on Microsoft Windows
platform (CC ID = 65).</li>
</ul>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="x86_memory">Representing X86 addressing modes in MachineInstrs</a>
</div>

<div class="doc_text">

<p>The x86 has a very flexible way of accessing memory.  It is capable of
forming memory addresses of the following expression directly in integer
instructions (which use ModR/M addressing):</p>

<div class="doc_code">
<pre>
Base + [1,2,4,8] * IndexReg + Disp32
</pre>
</div>

<p>In order to represent this, LLVM tracks no less than 4 operands for each
memory operand of this form.  This means that the "load" form of '<tt>mov</tt>'
has the following <tt>MachineOperand</tt>s in this order:</p>

<pre>
Index:        0     |    1        2       3           4
Meaning:   DestReg, | BaseReg,  Scale, IndexReg, Displacement
OperandTy: VirtReg, | VirtReg, UnsImm, VirtReg,   SignExtImm
</pre>

<p>Stores, and all other instructions, treat the four memory operands in the 
same way and in the same order.</p>

</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="x86_names">Instruction naming</a>
</div>

<div class="doc_text">

<p>An instruction name consists of the base name, a default operand size, and a
a character per operand with an optional special size. For example:</p>

<p>
<tt>ADD8rr</tt> -&gt; add, 8-bit register, 8-bit register<br>
<tt>IMUL16rmi</tt> -&gt; imul, 16-bit register, 16-bit memory, 16-bit immediate<br>
<tt>IMUL16rmi8</tt> -&gt; imul, 16-bit register, 16-bit memory, 8-bit immediate<br>
<tt>MOVSX32rm16</tt> -&gt; movsx, 32-bit register, 16-bit memory
</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ppc">The PowerPC backend</a>
</div>

<div class="doc_text">
<p>The PowerPC code generator lives in the lib/Target/PowerPC directory.  The
code generation is retargetable to several variations or <i>subtargets</i> of
the PowerPC ISA; including ppc32, ppc64 and altivec.
</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="ppc_abi">LLVM PowerPC ABI</a>
</div>

<div class="doc_text">
<p>LLVM follows the AIX PowerPC ABI, with two deviations. LLVM uses a PC
relative (PIC) or static addressing for accessing global values, so no TOC (r2)
is used. Second, r31 is used as a frame pointer to allow dynamic growth of a
stack frame.  LLVM takes advantage of having no TOC to provide space to save
the frame pointer in the PowerPC linkage area of the caller frame.  Other
details of PowerPC ABI can be found at <a href=
"http://developer.apple.com/documentation/DeveloperTools/Conceptual/LowLevelABI/Articles/32bitPowerPC.html"
>PowerPC ABI.</a> Note: This link describes the 32 bit ABI.  The
64 bit ABI is similar except space for GPRs are 8 bytes wide (not 4) and r13 is
reserved for system use.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="ppc_frame">Frame Layout</a>
</div>

<div class="doc_text">
<p>The size of a PowerPC frame is usually fixed for the duration of a
function&rsquo;s invocation.  Since the frame is fixed size, all references into
the frame can be accessed via fixed offsets from the stack pointer.  The
exception to this is when dynamic alloca or variable sized arrays are present,
then a base pointer (r31) is used as a proxy for the stack pointer and stack
pointer is free to grow or shrink.  A base pointer is also used if llvm-gcc is
not passed the -fomit-frame-pointer flag. The stack pointer is always aligned to
16 bytes, so that space allocated for altivec vectors will be properly
aligned.</p>
<p>An invocation frame is layed out as follows (low memory at top);</p>
</div>

<div class="doc_text">
<table class="layout">
	<tr>
		<td>Linkage<br><br></td>
	</tr>
	<tr>
		<td>Parameter area<br><br></td>
	</tr>
	<tr>
		<td>Dynamic area<br><br></td>
	</tr>
	<tr>
		<td>Locals area<br><br></td>
	</tr>
	<tr>
		<td>Saved registers area<br><br></td>
	</tr>
	<tr style="border-style: none hidden none hidden;">
		<td><br></td>
	</tr>
	<tr>
		<td>Previous Frame<br><br></td>
	</tr>
</table>
</div>

<div class="doc_text">
<p>The <i>linkage</i> area is used by a callee to save special registers prior
to allocating its own frame.  Only three entries are relevant to LLVM. The
first entry is the previous stack pointer (sp), aka link.  This allows probing
tools like gdb or exception handlers to quickly scan the frames in the stack.  A
function epilog can also use the link to pop the frame from the stack.  The
third entry in the linkage area is used to save the return address from the lr
register. Finally, as mentioned above, the last entry is used to save the
previous frame pointer (r31.)  The entries in the linkage area are the size of a
GPR, thus the linkage area is 24 bytes long in 32 bit mode and 48 bytes in 64
bit mode.</p>
</div>

<div class="doc_text">
<p>32 bit linkage area</p>
<table class="layout">
	<tr>
		<td>0</td>
		<td>Saved SP (r1)</td>
	</tr>
	<tr>
		<td>4</td>
		<td>Saved CR</td>
	</tr>
	<tr>
		<td>8</td>
		<td>Saved LR</td>
	</tr>
	<tr>
		<td>12</td>
		<td>Reserved</td>
	</tr>
	<tr>
		<td>16</td>
		<td>Reserved</td>
	</tr>
	<tr>
		<td>20</td>
		<td>Saved FP (r31)</td>
	</tr>
</table>
</div>

<div class="doc_text">
<p>64 bit linkage area</p>
<table class="layout">
	<tr>
		<td>0</td>
		<td>Saved SP (r1)</td>
	</tr>
	<tr>
		<td>8</td>
		<td>Saved CR</td>
	</tr>
	<tr>
		<td>16</td>
		<td>Saved LR</td>
	</tr>
	<tr>
		<td>24</td>
		<td>Reserved</td>
	</tr>
	<tr>
		<td>32</td>
		<td>Reserved</td>
	</tr>
	<tr>
		<td>40</td>
		<td>Saved FP (r31)</td>
	</tr>
</table>
</div>

<div class="doc_text">
<p>The <i>parameter area</i> is used to store arguments being passed to a callee
function.  Following the PowerPC ABI, the first few arguments are actually
passed in registers, with the space in the parameter area unused.  However, if
there are not enough registers or the callee is a thunk or vararg function,
these register arguments can be spilled into the parameter area.  Thus, the
parameter area must be large enough to store all the parameters for the largest
call sequence made by the caller.  The size must also be mimimally large enough
to spill registers r3-r10.  This allows callees blind to the call signature,
such as thunks and vararg functions, enough space to cache the argument
registers.  Therefore, the parameter area is minimally 32 bytes (64 bytes in 64
bit mode.)  Also note that since the parameter area is a fixed offset from the
top of the frame, that a callee can access its spilt arguments using fixed
offsets from the stack pointer (or base pointer.)</p>
</div>

<div class="doc_text">
<p>Combining the information about the linkage, parameter areas and alignment. A
stack frame is minimally 64 bytes in 32 bit mode and 128 bytes in 64 bit
mode.</p>
</div>

<div class="doc_text">
<p>The <i>dynamic area</i> starts out as size zero.  If a function uses dynamic
alloca then space is added to the stack, the linkage and parameter areas are
shifted to top of stack, and the new space is available immediately below the
linkage and parameter areas.  The cost of shifting the linkage and parameter
areas is minor since only the link value needs to be copied.  The link value can
be easily fetched by adding the original frame size to the base pointer.  Note
that allocations in the dynamic space need to observe 16 byte aligment.</p>
</div>

<div class="doc_text">
<p>The <i>locals area</i> is where the llvm compiler reserves space for local
variables.</p>
</div>

<div class="doc_text">
<p>The <i>saved registers area</i> is where the llvm compiler spills callee saved
registers on entry to the callee.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="ppc_prolog">Prolog/Epilog</a>
</div>

<div class="doc_text">
<p>The llvm prolog and epilog are the same as described in the PowerPC ABI, with
the following exceptions.  Callee saved registers are spilled after the frame is
created.  This allows the llvm epilog/prolog support to be common with other
targets.  The base pointer callee saved register r31 is saved in the TOC slot of
linkage area.  This simplifies allocation of space for the base pointer and
makes it convenient to locate programatically and during debugging.</p>
</div>

<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection">
  <a name="ppc_dynamic">Dynamic Allocation</a>
</div>

<div class="doc_text">
<p></p>
</div>

<div class="doc_text">
<p><i>TODO - More to come.</i></p>
</div>


<!-- *********************************************************************** -->
<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>

  <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>

</body>
</html>
