<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>TableGen Fundamentals</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>

<h1>TableGen Fundamentals</h1>

<div>
<ul>
  <li><a href="#introduction">Introduction</a>
  <ol>
    <li><a href="#concepts">Basic concepts</a></li>
    <li><a href="#example">An example record</a></li>
    <li><a href="#running">Running TableGen</a></li>
  </ol></li>
  <li><a href="#syntax">TableGen syntax</a>
  <ol>
    <li><a href="#primitives">TableGen primitives</a>
    <ol>
      <li><a href="#comments">TableGen comments</a></li>
      <li><a href="#types">The TableGen type system</a></li>
      <li><a href="#values">TableGen values and expressions</a></li>
    </ol></li>
    <li><a href="#classesdefs">Classes and definitions</a>
    <ol>
      <li><a href="#valuedef">Value definitions</a></li>
      <li><a href="#recordlet">'let' expressions</a></li>
      <li><a href="#templateargs">Class template arguments</a></li>
      <li><a href="#multiclass">Multiclass definitions and instances</a></li>
    </ol></li>
    <li><a href="#filescope">File scope entities</a>
    <ol>
      <li><a href="#include">File inclusion</a></li>
      <li><a href="#globallet">'let' expressions</a></li>
    </ol></li>
  </ol></li>
  <li><a href="#backends">TableGen backends</a>
  <ol>
    <li><a href="#">todo</a></li>
  </ol></li>
</ul>
</div>

<div class="doc_author">
  <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a></p>
</div>

<!-- *********************************************************************** -->
<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->

<div>

<p>TableGen's purpose is to help a human develop and maintain records of
domain-specific information.  Because there may be a large number of these
records, it is specifically designed to allow writing flexible descriptions and
for common features of these records to be factored out.  This reduces the
amount of duplication in the description, reduces the chance of error, and
makes it easier to structure domain specific information.</p>

<p>The core part of TableGen <a href="#syntax">parses a file</a>, instantiates
the declarations, and hands the result off to a domain-specific "<a
href="#backends">TableGen backend</a>" for processing.  The current major user
of TableGen is the <a href="CodeGenerator.html">LLVM code generator</a>.</p>

<p>Note that if you work on TableGen much, and use emacs or vim, that you can
find an emacs "TableGen mode" and a vim language file in the
<tt>llvm/utils/emacs</tt> and <tt>llvm/utils/vim</tt> directories of your LLVM
distribution, respectively.</p>

<!-- ======================================================================= -->
<h3><a name="concepts">Basic concepts</a></h3>

<div>

<p>TableGen files consist of two key parts: 'classes' and 'definitions', both
of which are considered 'records'.</p>

<p><b>TableGen records</b> have a unique name, a list of values, and a list of
superclasses.  The list of values is the main data that TableGen builds for each
record; it is this that holds the domain specific information for the
application.  The interpretation of this data is left to a specific <a
href="#backends">TableGen backend</a>, but the structure and format rules are
taken care of and are fixed by TableGen.</p>

<p><b>TableGen definitions</b> are the concrete form of 'records'.  These
generally do not have any undefined values, and are marked with the
'<tt>def</tt>' keyword.</p>

<p><b>TableGen classes</b> are abstract records that are used to build and
describe other records.  These 'classes' allow the end-user to build
abstractions for either the domain they are targeting (such as "Register",
"RegisterClass", and "Instruction" in the LLVM code generator) or for the
implementor to help factor out common properties of records (such as "FPInst",
which is used to represent floating point instructions in the X86 backend).
TableGen keeps track of all of the classes that are used to build up a
definition, so the backend can find all definitions of a particular class, such
as "Instruction".</p>

<p><b>TableGen multiclasses</b> are groups of abstract records that are
instantiated all at once.  Each instantiation can result in multiple
TableGen definitions.  If a multiclass inherits from another multiclass,
the definitions in the sub-multiclass become part of the current
multiclass, as if they were declared in the current multiclass.</p>

</div>

<!-- ======================================================================= -->
<h3><a name="example">An example record</a></h3>

<div>

<p>With no other arguments, TableGen parses the specified file and prints out
all of the classes, then all of the definitions.  This is a good way to see what
the various definitions expand to fully.  Running this on the <tt>X86.td</tt>
file prints this (at the time of this writing):</p>

<div class="doc_code">
<pre>
...
<b>def</b> ADD32rr {   <i>// Instruction X86Inst I</i>
  <b>string</b> Namespace = "X86";
  <b>dag</b> OutOperandList = (outs GR32:$dst);
  <b>dag</b> InOperandList = (ins GR32:$src1, GR32:$src2);
  <b>string</b> AsmString = "add{l}\t{$src2, $dst|$dst, $src2}";
  <b>list</b>&lt;dag&gt; Pattern = [(set GR32:$dst, (add GR32:$src1, GR32:$src2))];
  <b>list</b>&lt;Register&gt; Uses = [];
  <b>list</b>&lt;Register&gt; Defs = [EFLAGS];
  <b>list</b>&lt;Predicate&gt; Predicates = [];
  <b>int</b> CodeSize = 3;
  <b>int</b> AddedComplexity = 0;
  <b>bit</b> isReturn = 0;
  <b>bit</b> isBranch = 0;
  <b>bit</b> isIndirectBranch = 0;
  <b>bit</b> isBarrier = 0;
  <b>bit</b> isCall = 0;
  <b>bit</b> canFoldAsLoad = 0;
  <b>bit</b> mayLoad = 0;
  <b>bit</b> mayStore = 0;
  <b>bit</b> isImplicitDef = 0;
  <b>bit</b> isConvertibleToThreeAddress = 1;
  <b>bit</b> isCommutable = 1;
  <b>bit</b> isTerminator = 0;
  <b>bit</b> isReMaterializable = 0;
  <b>bit</b> isPredicable = 0;
  <b>bit</b> hasDelaySlot = 0;
  <b>bit</b> usesCustomInserter = 0;
  <b>bit</b> hasCtrlDep = 0;
  <b>bit</b> isNotDuplicable = 0;
  <b>bit</b> hasSideEffects = 0;
  <b>bit</b> neverHasSideEffects = 0;
  InstrItinClass Itinerary = NoItinerary;
  <b>string</b> Constraints = "";
  <b>string</b> DisableEncoding = "";
  <b>bits</b>&lt;8&gt; Opcode = { 0, 0, 0, 0, 0, 0, 0, 1 };
  Format Form = MRMDestReg;
  <b>bits</b>&lt;6&gt; FormBits = { 0, 0, 0, 0, 1, 1 };
  ImmType ImmT = NoImm;
  <b>bits</b>&lt;3&gt; ImmTypeBits = { 0, 0, 0 };
  <b>bit</b> hasOpSizePrefix = 0;
  <b>bit</b> hasAdSizePrefix = 0;
  <b>bits</b>&lt;4&gt; Prefix = { 0, 0, 0, 0 };
  <b>bit</b> hasREX_WPrefix = 0;
  FPFormat FPForm = ?;
  <b>bits</b>&lt;3&gt; FPFormBits = { 0, 0, 0 };
}
...
</pre>
</div>

<p>This definition corresponds to a 32-bit register-register add instruction in
the X86.  The string after the '<tt>def</tt>' string indicates the name of the
record&mdash;"<tt>ADD32rr</tt>" in this case&mdash;and the comment at the end of
the line indicates the superclasses of the definition.  The body of the record
contains all of the data that TableGen assembled for the record, indicating that
the instruction is part of the "X86" namespace, the pattern indicating how the
the instruction should be emitted into the assembly file, that it is a
two-address instruction, has a particular encoding, etc.  The contents and
semantics of the information in the record is specific to the needs of the X86
backend, and is only shown as an example.</p>

<p>As you can see, a lot of information is needed for every instruction
supported by the code generator, and specifying it all manually would be
unmaintainable, prone to bugs, and tiring to do in the first place.  Because we
are using TableGen, all of the information was derived from the following
definition:</p>

<div class="doc_code">
<pre>
let Defs = [EFLAGS],
    isCommutable = 1,                  <i>// X = ADD Y,Z --&gt; X = ADD Z,Y</i>
    isConvertibleToThreeAddress = 1 <b>in</b> <i>// Can transform into LEA.</i>
def ADD32rr  : I&lt;0x01, MRMDestReg, (outs GR32:$dst),
                                   (ins GR32:$src1, GR32:$src2),
                 "add{l}\t{$src2, $dst|$dst, $src2}",
                 [(set GR32:$dst, (add GR32:$src1, GR32:$src2))]&gt;;
</pre>
</div>

<p>This definition makes use of the custom class <tt>I</tt> (extended from the
custom class <tt>X86Inst</tt>), which is defined in the X86-specific TableGen
file, to factor out the common features that instructions of its class share.  A
key feature of TableGen is that it allows the end-user to define the
abstractions they prefer to use when describing their information.</p>

</div>

<!-- ======================================================================= -->
<h3><a name="running">Running TableGen</a></h3>

<div>

<p>TableGen runs just like any other LLVM tool.  The first (optional) argument
specifies the file to read.  If a filename is not specified, <tt>tblgen</tt>
reads from standard input.</p>

<p>To be useful, one of the <a href="#backends">TableGen backends</a> must be
used.  These backends are selectable on the command line (type '<tt>tblgen
-help</tt>' for a list).  For example, to get a list of all of the definitions
that subclass a particular type (which can be useful for building up an enum
list of these records), use the <tt>-print-enums</tt> option:</p>

<div class="doc_code">
<pre>
$ tblgen X86.td -print-enums -class=Register
AH, AL, AX, BH, BL, BP, BPL, BX, CH, CL, CX, DH, DI, DIL, DL, DX, EAX, EBP, EBX,
ECX, EDI, EDX, EFLAGS, EIP, ESI, ESP, FP0, FP1, FP2, FP3, FP4, FP5, FP6, IP,
MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7, R10, R10B, R10D, R10W, R11, R11B, R11D,
R11W, R12, R12B, R12D, R12W, R13, R13B, R13D, R13W, R14, R14B, R14D, R14W, R15,
R15B, R15D, R15W, R8, R8B, R8D, R8W, R9, R9B, R9D, R9W, RAX, RBP, RBX, RCX, RDI,
RDX, RIP, RSI, RSP, SI, SIL, SP, SPL, ST0, ST1, ST2, ST3, ST4, ST5, ST6, ST7,
XMM0, XMM1, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, XMM2, XMM3, XMM4, XMM5,
XMM6, XMM7, XMM8, XMM9,

$ tblgen X86.td -print-enums -class=Instruction 
ABS_F, ABS_Fp32, ABS_Fp64, ABS_Fp80, ADC32mi, ADC32mi8, ADC32mr, ADC32ri,
ADC32ri8, ADC32rm, ADC32rr, ADC64mi32, ADC64mi8, ADC64mr, ADC64ri32, ADC64ri8,
ADC64rm, ADC64rr, ADD16mi, ADD16mi8, ADD16mr, ADD16ri, ADD16ri8, ADD16rm,
ADD16rr, ADD32mi, ADD32mi8, ADD32mr, ADD32ri, ADD32ri8, ADD32rm, ADD32rr,
ADD64mi32, ADD64mi8, ADD64mr, ADD64ri32, ...
</pre>
</div>

<p>The default backend prints out all of the records, as described <a
href="#example">above</a>.</p>

<p>If you plan to use TableGen, you will most likely have to <a
href="#backends">write a backend</a> that extracts the information specific to
what you need and formats it in the appropriate way.</p>

</div>

</div>

<!-- *********************************************************************** -->
<h2><a name="syntax">TableGen syntax</a></h2>
<!-- *********************************************************************** -->

<div>

<p>TableGen doesn't care about the meaning of data (that is up to the backend to
define), but it does care about syntax, and it enforces a simple type system.
This section describes the syntax and the constructs allowed in a TableGen file.
</p>

<!-- ======================================================================= -->
<h3><a name="primitives">TableGen primitives</a></h3>

<div>

<!-- -------------------------------------------------------------------------->
<h4><a name="comments">TableGen comments</a></h4>

<div>

<p>TableGen supports BCPL style "<tt>//</tt>" comments, which run to the end of
the line, and it also supports <b>nestable</b> "<tt>/* */</tt>" comments.</p>

</div>

<!-- -------------------------------------------------------------------------->
<h4>
  <a name="types">The TableGen type system</a>
</h4>

<div>

<p>TableGen files are strongly typed, in a simple (but complete) type-system.
These types are used to perform automatic conversions, check for errors, and to
help interface designers constrain the input that they allow.  Every <a
href="#valuedef">value definition</a> is required to have an associated type.
</p>

<p>TableGen supports a mixture of very low-level types (such as <tt>bit</tt>)
and very high-level types (such as <tt>dag</tt>).  This flexibility is what
allows it to describe a wide range of information conveniently and compactly.
The TableGen types are:</p>

<dl>
<dt><tt><b>bit</b></tt></dt>
  <dd>A 'bit' is a boolean value that can hold either 0 or 1.</dd>

<dt><tt><b>int</b></tt></dt>
  <dd>The 'int' type represents a simple 32-bit integer value, such as 5.</dd>

<dt><tt><b>string</b></tt></dt>
  <dd>The 'string' type represents an ordered sequence of characters of
  arbitrary length.</dd>

<dt><tt><b>bits</b>&lt;n&gt;</tt></dt>
  <dd>A 'bits' type is an arbitrary, but fixed, size integer that is broken up
  into individual bits.  This type is useful because it can handle some bits
  being defined while others are undefined.</dd>

<dt><tt><b>list</b>&lt;ty&gt;</tt></dt>
  <dd>This type represents a list whose elements are some other type.  The
  contained type is arbitrary: it can even be another list type.</dd>

<dt>Class type</dt>
  <dd>Specifying a class name in a type context means that the defined value
  must be a subclass of the specified class.  This is useful in conjunction with
  the <b><tt>list</tt></b> type, for example, to constrain the elements of the
  list to a common base class (e.g., a <tt><b>list</b>&lt;Register&gt;</tt> can
  only contain definitions derived from the "<tt>Register</tt>" class).</dd>

<dt><tt><b>dag</b></tt></dt>
  <dd>This type represents a nestable directed graph of elements.</dd>

<dt><tt><b>code</b></tt></dt>
  <dd>This represents a big hunk of text.  This is lexically distinct from 
  string values because it doesn't require escapeing double quotes and other
  common characters that occur in code.</dd>
</dl>

<p>To date, these types have been sufficient for describing things that
TableGen has been used for, but it is straight-forward to extend this list if
needed.</p>

</div>

<!-- -------------------------------------------------------------------------->
<h4>
  <a name="values">TableGen values and expressions</a>
</h4>

<div>

<p>TableGen allows for a pretty reasonable number of different expression forms
when building up values.  These forms allow the TableGen file to be written in a
natural syntax and flavor for the application.  The current expression forms
supported include:</p>

<dl>
<dt><tt>?</tt></dt>
  <dd>uninitialized field</dd>
<dt><tt>0b1001011</tt></dt>
  <dd>binary integer value</dd>
<dt><tt>07654321</tt></dt>
  <dd>octal integer value (indicated by a leading 0)</dd>
<dt><tt>7</tt></dt>
  <dd>decimal integer value</dd>
<dt><tt>0x7F</tt></dt>
  <dd>hexadecimal integer value</dd>
<dt><tt>"foo"</tt></dt>
  <dd>string value</dd>
<dt><tt>[{ ... }]</tt></dt>
  <dd>code fragment</dd>
<dt><tt>[ X, Y, Z ]&lt;type&gt;</tt></dt>
  <dd>list value.  &lt;type&gt; is the type of the list 
element and is usually optional.  In rare cases,
TableGen is unable to deduce the element type in
which case the user must specify it explicitly.</dd>
<dt><tt>{ a, b, c }</tt></dt>
  <dd>initializer for a "bits&lt;3&gt;" value</dd>
<dt><tt>value</tt></dt>
  <dd>value reference</dd>
<dt><tt>value{17}</tt></dt>
  <dd>access to one bit of a value</dd>
<dt><tt>value{15-17}</tt></dt>
  <dd>access to multiple bits of a value</dd>
<dt><tt>DEF</tt></dt>
  <dd>reference to a record definition</dd>
<dt><tt>CLASS&lt;val list&gt;</tt></dt>
  <dd>reference to a new anonymous definition of CLASS with the specified
      template arguments.</dd>
<dt><tt>X.Y</tt></dt>
  <dd>reference to the subfield of a value</dd>
<dt><tt>list[4-7,17,2-3]</tt></dt>
  <dd>A slice of the 'list' list, including elements 4,5,6,7,17,2, and 3 from
  it.  Elements may be included multiple times.</dd>
<dt><tt>(DEF a, b)</tt></dt>
  <dd>a dag value.  The first element is required to be a record definition, the
  remaining elements in the list may be arbitrary other values, including nested
  `<tt>dag</tt>' values.</dd>
<dt><tt>!strconcat(a, b)</tt></dt>
  <dd>A string value that is the result of concatenating the 'a' and 'b'
  strings.</dd>
<dt><tt>!cast&lt;type&gt;(a)</tt></dt>
  <dd>A symbol of type <em>type</em> obtained by looking up the string 'a' in
the symbol table.  If the type of 'a' does not match <em>type</em>, TableGen
aborts with an error. !cast&lt;string&gt; is a special case in that the argument must
be an object defined by a 'def' construct.</dd>
<dt><tt>!subst(a, b, c)</tt></dt>
  <dd>If 'a' and 'b' are of string type or are symbol references, substitute 
'b' for 'a' in 'c.'  This operation is analogous to $(subst) in GNU make.</dd>
<dt><tt>!foreach(a, b, c)</tt></dt>
  <dd>For each member 'b' of dag or list 'a' apply operator 'c.'  'b' is a 
dummy variable that should be declared as a member variable of an instantiated 
class.  This operation is analogous to $(foreach) in GNU make.</dd>
<dt><tt>!head(a)</tt></dt>
  <dd>The first element of list 'a.'</dd>
<dt><tt>!tail(a)</tt></dt>
  <dd>The 2nd-N elements of list 'a.'</dd>
<dt><tt>!empty(a)</tt></dt>
  <dd>An integer {0,1} indicating whether list 'a' is empty.</dd>
<dt><tt>!if(a,b,c)</tt></dt>
  <dd>'b' if the result of 'int' or 'bit' operator 'a' is nonzero,
      'c' otherwise.</dd>
<dt><tt>!eq(a,b)</tt></dt>
  <dd>'bit 1' if string a is equal to string b, 0 otherwise.  This
      only operates on string, int and bit objects.  Use !cast&lt;string&gt; to
      compare other types of objects.</dd>
</dl>

<p>Note that all of the values have rules specifying how they convert to values
for different types.  These rules allow you to assign a value like "<tt>7</tt>"
to a "<tt>bits&lt;4&gt;</tt>" value, for example.</p>

</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="classesdefs">Classes and definitions</a>
</h3>

<div>

<p>As mentioned in the <a href="#concepts">intro</a>, classes and definitions
(collectively known as 'records') in TableGen are the main high-level unit of
information that TableGen collects.  Records are defined with a <tt>def</tt> or
<tt>class</tt> keyword, the record name, and an optional list of "<a
href="#templateargs">template arguments</a>".  If the record has superclasses,
they are specified as a comma separated list that starts with a colon character
("<tt>:</tt>").  If <a href="#valuedef">value definitions</a> or <a
href="#recordlet">let expressions</a> are needed for the class, they are
enclosed in curly braces ("<tt>{}</tt>"); otherwise, the record ends with a
semicolon.</p>

<p>Here is a simple TableGen file:</p>

<div class="doc_code">
<pre>
<b>class</b> C { <b>bit</b> V = 1; }
<b>def</b> X : C;
<b>def</b> Y : C {
  <b>string</b> Greeting = "hello";
}
</pre>
</div>

<p>This example defines two definitions, <tt>X</tt> and <tt>Y</tt>, both of
which derive from the <tt>C</tt> class.  Because of this, they both get the
<tt>V</tt> bit value.  The <tt>Y</tt> definition also gets the Greeting member
as well.</p>

<p>In general, classes are useful for collecting together the commonality
between a group of records and isolating it in a single place.  Also, classes
permit the specification of default values for their subclasses, allowing the
subclasses to override them as they wish.</p>

<!---------------------------------------------------------------------------->
<h4>
  <a name="valuedef">Value definitions</a>
</h4>

<div>

<p>Value definitions define named entries in records.  A value must be defined
before it can be referred to as the operand for another value definition or
before the value is reset with a <a href="#recordlet">let expression</a>.  A
value is defined by specifying a <a href="#types">TableGen type</a> and a name.
If an initial value is available, it may be specified after the type with an
equal sign.  Value definitions require terminating semicolons.</p>

</div>

<!-- -------------------------------------------------------------------------->
<h4>
  <a name="recordlet">'let' expressions</a>
</h4>

<div>

<p>A record-level let expression is used to change the value of a value
definition in a record.  This is primarily useful when a superclass defines a
value that a derived class or definition wants to override.  Let expressions
consist of the '<tt>let</tt>' keyword followed by a value name, an equal sign
("<tt>=</tt>"), and a new value.  For example, a new class could be added to the
example above, redefining the <tt>V</tt> field for all of its subclasses:</p>

<div class="doc_code">
<pre>
<b>class</b> D : C { let V = 0; }
<b>def</b> Z : D;
</pre>
</div>

<p>In this case, the <tt>Z</tt> definition will have a zero value for its "V"
value, despite the fact that it derives (indirectly) from the <tt>C</tt> class,
because the <tt>D</tt> class overrode its value.</p>

</div>

<!-- -------------------------------------------------------------------------->
<h4>
  <a name="templateargs">Class template arguments</a>
</h4>

<div>

<p>TableGen permits the definition of parameterized classes as well as normal
concrete classes.  Parameterized TableGen classes specify a list of variable
bindings (which may optionally have defaults) that are bound when used.  Here is
a simple example:</p>

<div class="doc_code">
<pre>
<b>class</b> FPFormat&lt;<b>bits</b>&lt;3&gt; val&gt; {
  <b>bits</b>&lt;3&gt; Value = val;
}
<b>def</b> NotFP      : FPFormat&lt;0&gt;;
<b>def</b> ZeroArgFP  : FPFormat&lt;1&gt;;
<b>def</b> OneArgFP   : FPFormat&lt;2&gt;;
<b>def</b> OneArgFPRW : FPFormat&lt;3&gt;;
<b>def</b> TwoArgFP   : FPFormat&lt;4&gt;;
<b>def</b> CompareFP  : FPFormat&lt;5&gt;;
<b>def</b> CondMovFP  : FPFormat&lt;6&gt;;
<b>def</b> SpecialFP  : FPFormat&lt;7&gt;;
</pre>
</div>

<p>In this case, template arguments are used as a space efficient way to specify
a list of "enumeration values", each with a "<tt>Value</tt>" field set to the
specified integer.</p>

<p>The more esoteric forms of <a href="#values">TableGen expressions</a> are
useful in conjunction with template arguments.  As an example:</p>

<div class="doc_code">
<pre>
<b>class</b> ModRefVal&lt;<b>bits</b>&lt;2&gt; val&gt; {
  <b>bits</b>&lt;2&gt; Value = val;
}

<b>def</b> None   : ModRefVal&lt;0&gt;;
<b>def</b> Mod    : ModRefVal&lt;1&gt;;
<b>def</b> Ref    : ModRefVal&lt;2&gt;;
<b>def</b> ModRef : ModRefVal&lt;3&gt;;

<b>class</b> Value&lt;ModRefVal MR&gt; {
  <i>// Decode some information into a more convenient format, while providing
  // a nice interface to the user of the "Value" class.</i>
  <b>bit</b> isMod = MR.Value{0};
  <b>bit</b> isRef = MR.Value{1};

  <i>// other stuff...</i>
}

<i>// Example uses</i>
<b>def</b> bork : Value&lt;Mod&gt;;
<b>def</b> zork : Value&lt;Ref&gt;;
<b>def</b> hork : Value&lt;ModRef&gt;;
</pre>
</div>

<p>This is obviously a contrived example, but it shows how template arguments
can be used to decouple the interface provided to the user of the class from the
actual internal data representation expected by the class.  In this case,
running <tt>tblgen</tt> on the example prints the following definitions:</p>

<div class="doc_code">
<pre>
<b>def</b> bork {      <i>// Value</i>
  <b>bit</b> isMod = 1;
  <b>bit</b> isRef = 0;
}
<b>def</b> hork {      <i>// Value</i>
  <b>bit</b> isMod = 1;
  <b>bit</b> isRef = 1;
}
<b>def</b> zork {      <i>// Value</i>
  <b>bit</b> isMod = 0;
  <b>bit</b> isRef = 1;
}
</pre>
</div>

<p> This shows that TableGen was able to dig into the argument and extract a
piece of information that was requested by the designer of the "Value" class.
For more realistic examples, please see existing users of TableGen, such as the
X86 backend.</p>

</div>

<!-- -------------------------------------------------------------------------->
<h4>
  <a name="multiclass">Multiclass definitions and instances</a>
</h4>

<div>

<p>
While classes with template arguments are a good way to factor commonality
between two instances of a definition, multiclasses allow a convenient notation
for defining multiple definitions at once (instances of implicitly constructed
classes).  For example, consider an 3-address instruction set whose instructions
come in two forms: "<tt>reg = reg op reg</tt>" and "<tt>reg = reg op imm</tt>"
(e.g. SPARC). In this case, you'd like to specify in one place that this
commonality exists, then in a separate place indicate what all the ops are.
</p>

<p>
Here is an example TableGen fragment that shows this idea:
</p>

<div class="doc_code">
<pre>
<b>def</b> ops;
<b>def</b> GPR;
<b>def</b> Imm;
<b>class</b> inst&lt;<b>int</b> opc, <b>string</b> asmstr, <b>dag</b> operandlist&gt;;

<b>multiclass</b> ri_inst&lt;<b>int</b> opc, <b>string</b> asmstr&gt; {
  def _rr : inst&lt;opc, !strconcat(asmstr, " $dst, $src1, $src2"),
                 (ops GPR:$dst, GPR:$src1, GPR:$src2)&gt;;
  def _ri : inst&lt;opc, !strconcat(asmstr, " $dst, $src1, $src2"),
                 (ops GPR:$dst, GPR:$src1, Imm:$src2)&gt;;
}

<i>// Instantiations of the ri_inst multiclass.</i>
<b>defm</b> ADD : ri_inst&lt;0b111, "add"&gt;;
<b>defm</b> SUB : ri_inst&lt;0b101, "sub"&gt;;
<b>defm</b> MUL : ri_inst&lt;0b100, "mul"&gt;;
...
</pre>
</div>

<p>The name of the resultant definitions has the multidef fragment names
   appended to them, so this defines <tt>ADD_rr</tt>, <tt>ADD_ri</tt>,
   <tt>SUB_rr</tt>, etc.  A defm may inherit from multiple multiclasses,
   instantiating definitions from each multiclass.  Using a multiclass
   this way is exactly equivalent to instantiating the classes multiple
   times yourself, e.g. by writing:</p>

<div class="doc_code">
<pre>
<b>def</b> ops;
<b>def</b> GPR;
<b>def</b> Imm;
<b>class</b> inst&lt;<b>int</b> opc, <b>string</b> asmstr, <b>dag</b> operandlist&gt;;

<b>class</b> rrinst&lt;<b>int</b> opc, <b>string</b> asmstr&gt;
  : inst&lt;opc, !strconcat(asmstr, " $dst, $src1, $src2"),
         (ops GPR:$dst, GPR:$src1, GPR:$src2)&gt;;

<b>class</b> riinst&lt;<b>int</b> opc, <b>string</b> asmstr&gt;
  : inst&lt;opc, !strconcat(asmstr, " $dst, $src1, $src2"),
         (ops GPR:$dst, GPR:$src1, Imm:$src2)&gt;;

<i>// Instantiations of the ri_inst multiclass.</i>
<b>def</b> ADD_rr : rrinst&lt;0b111, "add"&gt;;
<b>def</b> ADD_ri : riinst&lt;0b111, "add"&gt;;
<b>def</b> SUB_rr : rrinst&lt;0b101, "sub"&gt;;
<b>def</b> SUB_ri : riinst&lt;0b101, "sub"&gt;;
<b>def</b> MUL_rr : rrinst&lt;0b100, "mul"&gt;;
<b>def</b> MUL_ri : riinst&lt;0b100, "mul"&gt;;
...
</pre>
</div>

<p>
A defm can also be used inside a multiclass providing several levels of
multiclass instanciations.
</p>

<div class="doc_code">
<pre>
<b>class</b> Instruction&lt;bits&lt;4&gt; opc, string Name&gt; {
  bits&lt;4&gt; opcode = opc;
  string name = Name;
}

<b>multiclass</b> basic_r&lt;bits&lt;4&gt; opc&gt; {
  <b>def</b> rr : Instruction&lt;opc, "rr"&gt;;
  <b>def</b> rm : Instruction&lt;opc, "rm"&gt;;
}

<b>multiclass</b> basic_s&lt;bits&lt;4&gt; opc&gt; {
  <b>defm</b> SS : basic_r&lt;opc&gt;;
  <b>defm</b> SD : basic_r&lt;opc&gt;;
  <b>def</b> X : Instruction&lt;opc, "x"&gt;;
}

<b>multiclass</b> basic_p&lt;bits&lt;4&gt; opc&gt; {
  <b>defm</b> PS : basic_r&lt;opc&gt;;
  <b>defm</b> PD : basic_r&lt;opc&gt;;
  <b>def</b> Y : Instruction&lt;opc, "y"&gt;;
}

<b>defm</b> ADD : basic_s&lt;0xf&gt;, basic_p&lt;0xf&gt;;
...

<i>// Results</i>
<b>def</b> ADDPDrm { ...
<b>def</b> ADDPDrr { ...
<b>def</b> ADDPSrm { ...
<b>def</b> ADDPSrr { ...
<b>def</b> ADDSDrm { ...
<b>def</b> ADDSDrr { ...
<b>def</b> ADDY { ...
<b>def</b> ADDX { ...
</pre>
</div>

<p>
defm declarations can inherit from classes too, the
rule to follow is that the class list must start after the
last multiclass, and there must be at least one multiclass
before them.
</p>

<div class="doc_code">
<pre>
<b>class</b> XD { bits&lt;4&gt; Prefix = 11; }
<b>class</b> XS { bits&lt;4&gt; Prefix = 12; }

<b>class</b> I&lt;bits<4&gt; op> {
  bits&lt;4&gt; opcode = op;
}

<b>multiclass</b> R {
  <b>def</b> rr : I&lt;4&gt;;
  <b>def</b> rm : I&lt;2&gt;;
}

<b>multiclass</b> Y {
  <b>defm</b> SS : R, XD;
  <b>defm</b> SD : R, XS;
}

<b>defm</b> Instr : Y;

<i>// Results</i>
<b>def</b> InstrSDrm {
  bits&lt;4&gt; opcode = { 0, 0, 1, 0 };
  bits&lt;4&gt; Prefix = { 1, 1, 0, 0 };
}
...
<b>def</b> InstrSSrr {
  bits&lt;4&gt; opcode = { 0, 1, 0, 0 };
  bits&lt;4&gt; Prefix = { 1, 0, 1, 1 };
}
</pre>
</div>

</div>

</div>

<!-- ======================================================================= -->
<h3>
  <a name="filescope">File scope entities</a>
</h3>

<div>

<!-- -------------------------------------------------------------------------->
<h4>
  <a name="include">File inclusion</a>
</h4>

<div>
<p>TableGen supports the '<tt>include</tt>' token, which textually substitutes
the specified file in place of the include directive.  The filename should be
specified as a double quoted string immediately after the '<tt>include</tt>'
keyword.  Example:</p>

<div class="doc_code">
<pre>
<b>include</b> "foo.td"
</pre>
</div>

</div>

<!-- -------------------------------------------------------------------------->
<h4>
  <a name="globallet">'let' expressions</a>
</h4>

<div>

<p>"Let" expressions at file scope are similar to <a href="#recordlet">"let"
expressions within a record</a>, except they can specify a value binding for
multiple records at a time, and may be useful in certain other cases.
File-scope let expressions are really just another way that TableGen allows the
end-user to factor out commonality from the records.</p>

<p>File-scope "let" expressions take a comma-separated list of bindings to
apply, and one or more records to bind the values in.  Here are some
examples:</p>

<div class="doc_code">
<pre>
<b>let</b> isTerminator = 1, isReturn = 1, isBarrier = 1, hasCtrlDep = 1 <b>in</b>
  <b>def</b> RET : I&lt;0xC3, RawFrm, (outs), (ins), "ret", [(X86retflag 0)]&gt;;

<b>let</b> isCall = 1 <b>in</b>
  <i>// All calls clobber the non-callee saved registers...</i>
  <b>let</b> Defs = [EAX, ECX, EDX, FP0, FP1, FP2, FP3, FP4, FP5, FP6, ST0,
              MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7,
              XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, EFLAGS] <b>in</b> {
    <b>def</b> CALLpcrel32 : Ii32&lt;0xE8, RawFrm, (outs), (ins i32imm:$dst,variable_ops),
                           "call\t${dst:call}", []&gt;;
    <b>def</b> CALL32r     : I&lt;0xFF, MRM2r, (outs), (ins GR32:$dst, variable_ops),
                        "call\t{*}$dst", [(X86call GR32:$dst)]&gt;;
    <b>def</b> CALL32m     : I&lt;0xFF, MRM2m, (outs), (ins i32mem:$dst, variable_ops),
                        "call\t{*}$dst", []&gt;;
  }
</pre>
</div>

<p>File-scope "let" expressions are often useful when a couple of definitions
need to be added to several records, and the records do not otherwise need to be
opened, as in the case with the <tt>CALL*</tt> instructions above.</p>

<p>It's also possible to use "let" expressions inside multiclasses, providing
more ways to factor out commonality from the records, specially if using
several levels of multiclass instanciations. This also avoids the need of using
"let" expressions within subsequent records inside a multiclass.</p> 

<pre class="doc_code">
<b>multiclass </b>basic_r&lt;bits&lt;4&gt; opc&gt; {
  <b>let </b>Predicates = [HasSSE2] in {
    <b>def </b>rr : Instruction&lt;opc, "rr"&gt;;
    <b>def </b>rm : Instruction&lt;opc, "rm"&gt;;
  }
  <b>let </b>Predicates = [HasSSE3] in
    <b>def </b>rx : Instruction&lt;opc, "rx"&gt;;
}

<b>multiclass </b>basic_ss&lt;bits&lt;4&gt; opc&gt; {
  <b>let </b>IsDouble = 0 in
    <b>defm </b>SS : basic_r&lt;opc&gt;;

  <b>let </b>IsDouble = 1 in
    <b>defm </b>SD : basic_r&lt;opc&gt;;
}

<b>defm </b>ADD : basic_ss&lt;0xf&gt;;
</pre>
</div>

</div>

</div>

<!-- *********************************************************************** -->
<h2><a name="codegen">Code Generator backend info</a></h2>
<!-- *********************************************************************** -->

<div>

<p>Expressions used by code generator to describe instructions and isel
patterns:</p>

<dl>
<dt><tt>(implicit a)</tt></dt>
  <dd>an implicitly defined physical register.  This tells the dag instruction
  selection emitter the input pattern's extra definitions matches implicit
  physical register definitions.</dd>
</dl>
</div>

<!-- *********************************************************************** -->
<h2><a name="backends">TableGen backends</a></h2>
<!-- *********************************************************************** -->

<div>

<p>TODO: How they work, how to write one.  This section should not contain
details about any particular backend, except maybe -print-enums as an example.
This should highlight the APIs in <tt>TableGen/Record.h</tt>.</p>

</div>

<!-- *********************************************************************** -->

<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>

  <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
  <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
  Last modified: $Date: 2011-10-07 14:25:05 -0400 (Fri, 07 Oct 2011) $
</address>

</body>
</html>
