1===============================
2TableGen Programmer's Reference
3===============================
4
5.. sectnum::
6
7.. contents::
8   :local:
9
10Introduction
11============
12
13The purpose of TableGen is to generate complex output files based on
14information from source files that are significantly easier to code than the
15output files would be, and also easier to maintain and modify over time. The
16information is coded in a declarative style involving classes and records,
17which are then processed by TableGen. The internalized records are passed on
18to various backends, which extract information from a subset of the records
19and generate one or more output files. These output files are typically
20``.inc`` files for C++, but may be any type of file that the backend
21developer needs.
22
23This document describes the LLVM TableGen facility in detail. It is intended
24for the programmer who is using TableGen to produce code for a project. If
25you are looking for a simple overview, check out the :doc:`TableGen Overview
26<./index>`.  The various ``xxx-tblgen`` commands used to invoke TableGen are
27described in :doc:`xxx-tblgen: Target Description to C++ Code
28<../CommandGuide/tblgen>`.
29
30An example of a backend is ``RegisterInfo``, which generates the register
31file information for a particular target machine, for use by the LLVM
32target-independent code generator. See :doc:`TableGen Backends <./BackEnds>`
33for a description of the LLVM TableGen backends, and :doc:`TableGen
34Backend Developer's Guide <./BackGuide>` for a guide to writing a new
35backend.
36
37Here are a few of the things backends can do.
38
39* Generate the register file information for a particular target machine.
40
41* Generate the instruction definitions for a target.
42
43* Generate the patterns that the code generator uses to match instructions
44  to intermediate representation (IR) nodes.
45
46* Generate semantic attribute identifiers for Clang.
47
48* Generate abstract syntax tree (AST) declaration node definitions for Clang.
49
50* Generate AST statement node definitions for Clang.
51
52
53Concepts
54--------
55
56TableGen source files contain two primary items: *abstract records* and
57*concrete records*. In this and other TableGen documents, abstract records
58are called *classes.* (These classes are different from C++ classes and do
59not map onto them.) In addition, concrete records are usually just called
60records, although sometimes the term *record* refers to both classes and
61concrete records. The distinction should be clear in context.
62
63Classes and concrete records have a unique *name*, either chosen by
64the programmer or generated by TableGen. Associated with that name
65is a list of *fields* with values and an optional list of *superclasses*
66(sometimes called base or parent classes). The fields are the primary data that
67backends will process. Note that TableGen assigns no meanings to fields; the
68meanings are entirely up to the backends and the programs that incorporate
69the output of those backends.
70
71A backend processes some subset of the concrete records built by the
72TableGen parser and emits the output files. These files are usually C++
73``.inc`` files that are included by the programs that require the data in
74those records. However, a backend can produce any type of output files. For
75example, it could produce a data file containing messages tagged with
76identifiers and substitution parameters. In a complex use case such as the
77LLVM code generator, there can be many concrete records and some of them can
78have an unexpectedly large number of fields, resulting in large output files.
79
80In order to reduce the complexity of TableGen files, classes are used to
81abstract out groups of record fields. For example, a few classes may
82abstract the concept of a machine register file, while other classes may
83abstract the instruction formats, and still others may abstract the
84individual instructions. TableGen allows an arbitrary hierarchy of classes,
85so that the abstract classes for two concepts can share a third superclass that
86abstracts common "sub-concepts" from the two original concepts.
87
88In order to make classes more useful, a concrete record (or another class)
89can request a class as a superclass and pass *template arguments* to it.
90These template arguments can be used in the fields of the superclass to
91initialize them in a custom manner. That is, record or class ``A`` can
92request superclass ``S`` with one set of template arguments, while record or class
93``B`` can request ``S`` with a different set of arguments. Without template
94arguments, many more classes would be required, one for each combination of
95the template arguments.
96
97Both classes and concrete records can include fields that are uninitialized.
98The uninitialized "value" is represented by a question mark (``?``). Classes
99often have uninitialized fields that are expected to be filled in when those
100classes are inherited by concrete records. Even so, some fields of concrete
101records may remain uninitialized.
102
103TableGen provides *multiclasses* to collect a group of record definitions in
104one place. A multiclass is a sort of macro that can be "invoked" to define
105multiple concrete records all at once. A multiclass can inherit from other
106multiclasses, which means that the multiclass inherits all the definitions
107from its parent multiclasses.
108
109`Appendix C: Sample Record`_ illustrates a complex record in the Intel X86
110target and the simple way in which it is defined.
111
112Source Files
113============
114
115TableGen source files are plain ASCII text files. The files can contain
116statements, comments, and blank lines (see `Lexical Analysis`_). The standard file
117extension for TableGen files is ``.td``.
118
119TableGen files can grow quite large, so there is an include mechanism that
120allows one file to include the content of another file (see `Include
121Files`_). This allows large files to be broken up into smaller ones, and
122also provides a simple library mechanism where multiple source files can
123include the same library file.
124
125TableGen supports a simple preprocessor that can be used to conditionalize
126portions of ``.td`` files. See `Preprocessing Facilities`_ for more
127information.
128
129Lexical Analysis
130================
131
132The lexical and syntax notation used here is intended to imitate
133`Python's`_ notation. In particular, for lexical definitions, the productions
134operate at the character level and there is no implied whitespace between
135elements. The syntax definitions operate at the token level, so there is
136implied whitespace between tokens.
137
138.. _`Python's`: http://docs.python.org/py3k/reference/introduction.html#notation
139
140TableGen supports BCPL-style comments (``// ...``) and nestable C-style
141comments (``/* ... */``).
142TableGen also provides simple `Preprocessing Facilities`_.
143
144Formfeed characters may be used freely in files to produce page breaks when
145the file is printed for review.
146
147The following are the basic punctuation tokens::
148
149   - + [ ] { } ( ) < > : ; . ... = ? #
150
151Literals
152--------
153
154Numeric literals take one of the following forms:
155
156.. productionlist::
157   TokInteger: `DecimalInteger` | `HexInteger` | `BinInteger`
158   DecimalInteger: ["+" | "-"] ("0"..."9")+
159   HexInteger: "0x" ("0"..."9" | "a"..."f" | "A"..."F")+
160   BinInteger: "0b" ("0" | "1")+
161
162Observe that the :token:`DecimalInteger` token includes the optional ``+``
163or ``-`` sign, unlike most languages where the sign would be treated as a
164unary operator.
165
166TableGen has two kinds of string literals:
167
168.. productionlist::
169   TokString: '"' (non-'"' characters and escapes) '"'
170   TokCode: "[{" (shortest text not containing "}]") "}]"
171
172A :token:`TokCode` is nothing more than a multi-line string literal
173delimited by ``[{`` and ``}]``. It can break across lines and the
174line breaks are retained in the string.
175
176The current implementation accepts the following escape sequences::
177
178   \\ \' \" \t \n
179
180Identifiers
181-----------
182
183TableGen has name- and identifier-like tokens, which are case-sensitive.
184
185.. productionlist::
186   ualpha: "a"..."z" | "A"..."Z" | "_"
187   TokIdentifier: ("0"..."9")* `ualpha` (`ualpha` | "0"..."9")*
188   TokVarName: "$" `ualpha` (`ualpha` |  "0"..."9")*
189
190Note that, unlike most languages, TableGen allows :token:`TokIdentifier` to
191begin with an integer. In case of ambiguity, a token is interpreted as a
192numeric literal rather than an identifier.
193
194TableGen has the following reserved keywords, which cannot be used as
195identifiers::
196
197   assert     bit           bits          class         code
198   dag        def           else          false         foreach
199   defm       defset        defvar        field         if
200   in         include       int           let           list
201   multiclass string        then          true
202
203.. warning::
204  The ``field`` reserved word is deprecated.
205
206Bang operators
207--------------
208
209TableGen provides "bang operators" that have a wide variety of uses:
210
211.. productionlist::
212   BangOperator: one of
213               : !add        !and         !cast        !con         !dag
214               : !empty      !eq          !foldl       !foreach     !filter
215               : !ge         !getdagop    !gt          !head        !if
216               : !interleave !isa         !le          !listconcat  !listsplat
217               : !lt         !mul         !ne          !not         !or
218               : !setdagop   !shl         !size        !sra         !srl
219               : !strconcat  !sub         !subst       !substr      !tail
220               : !xor
221
222The ``!cond`` operator has a slightly different
223syntax compared to other bang operators, so it is defined separately:
224
225.. productionlist::
226   CondOperator: !cond
227
228See `Appendix A: Bang Operators`_ for a description of each bang operator.
229
230Include files
231-------------
232
233TableGen has an include mechanism. The content of the included file
234lexically replaces the ``include`` directive and is then parsed as if it was
235originally in the main file.
236
237.. productionlist::
238   IncludeDirective: "include" `TokString`
239
240Portions of the main file and included files can be conditionalized using
241preprocessor directives.
242
243.. productionlist::
244   PreprocessorDirective: "#define" | "#ifdef" | "#ifndef"
245
246Types
247=====
248
249The TableGen language is statically typed, using a simple but complete type
250system. Types are used to check for errors, to perform implicit conversions,
251and to help interface designers constrain the allowed input. Every value is
252required to have an associated type.
253
254TableGen supports a mixture of low-level types (e.g., ``bit``) and
255high-level types (e.g., ``dag``). This flexibility allows you to describe a
256wide range of records conveniently and compactly.
257
258.. productionlist::
259   Type: "bit" | "int" | "string" | "dag"
260       :| "bits" "<" `TokInteger` ">"
261       :| "list" "<" `Type` ">"
262       :| `ClassID`
263   ClassID: `TokIdentifier`
264
265``bit``
266    A ``bit`` is a boolean value that can be 0 or 1.
267
268``int``
269    The ``int`` type represents a simple 64-bit integer value, such as 5 or
270    -42.
271
272``string``
273    The ``string`` type represents an ordered sequence of characters of arbitrary
274    length.
275
276``bits<``\ *n*\ ``>``
277    The ``bits`` type is a fixed-sized integer of arbitrary length *n* that
278    is treated as separate bits. These bits can be accessed individually.
279    A field of this type is useful for representing an instruction operation
280    code, register number, or address mode/register/displacement.  The bits of
281    the field can be set individually or as subfields. For example, in an
282    instruction address, the addressing mode, base register number, and
283    displacement can be set separately.
284
285``list<``\ *type*\ ``>``
286    This type represents a list whose elements are of the *type* specified in
287    angle brackets. The element type is arbitrary; it can even be another
288    list type. List elements are indexed from 0.
289
290``dag``
291    This type represents a nestable directed acyclic graph (DAG) of nodes.
292    Each node has an *operator* and zero or more *arguments* (or *operands*).
293    An argument can be
294    another ``dag`` object, allowing an arbitrary tree of nodes and edges.
295    As an example, DAGs are used to represent code patterns for use by
296    the code generator instruction selection algorithms. See `Directed
297    acyclic graphs (DAGs)`_ for more details;
298
299:token:`ClassID`
300    Specifying a class name in a type context indicates
301    that the type of the defined value must
302    be a subclass of the specified class.  This is useful in conjunction with
303    the ``list`` type; for example, to constrain the elements of the list to a
304    common base class (e.g., a ``list<Register>`` can only contain definitions
305    derived from the ``Register`` class).
306    The :token:`ClassID` must name a class that has been previously
307    declared or defined.
308
309
310Values and Expressions
311======================
312
313There are many contexts in TableGen statements where a value is required. A
314common example is in the definition of a record, where each field is
315specified by a name and an optional value. TableGen allows for a reasonable
316number of different forms when building up value expressions. These forms
317allow the TableGen file to be written in a syntax that is natural for the
318application.
319
320Note that all of the values have rules for converting them from one type to
321another. For example, these rules allow you to assign a value like ``7``
322to an entity of type ``bits<4>``.
323
324.. productionlist::
325   Value: `SimpleValue` `ValueSuffix`*
326        :| `Value` "#" `Value`
327   ValueSuffix: "{" `RangeList` "}"
328              :| "[" `RangeList` "]"
329              :| "." `TokIdentifier`
330   RangeList: `RangePiece` ("," `RangePiece`)*
331   RangePiece: `TokInteger`
332             :| `TokInteger` "..." `TokInteger`
333             :| `TokInteger` "-" `TokInteger`
334             :| `TokInteger` `TokInteger`
335
336.. warning::
337  The peculiar last form of :token:`RangePiece` is due to the fact that the
338  "``-``" is included in the :token:`TokInteger`, hence ``1-5`` gets lexed as
339  two consecutive tokens, with values ``1`` and ``-5``, instead of "1", "-",
340  and "5". The use of hyphen as the range punctuation is deprecated.
341
342Simple values
343-------------
344
345The :token:`SimpleValue` has a number of forms.
346
347.. productionlist::
348   SimpleValue: `TokInteger` | `TokString`+ | `TokCode`
349
350A value can be an integer literal, a string literal, or a code literal.
351Multiple adjacent string literals are concatenated as in C/C++; the simple
352value is the concatenation of the strings. Code literals become strings and
353are then indistinguishable from them.
354
355.. productionlist::
356   SimpleValue2: "true" | "false"
357
358The ``true`` and ``false`` literals are essentially syntactic sugar for the
359integer values 1 and 0. They improve the readability of TableGen files when
360boolean values are used in field initializations, bit sequences, ``if``
361statements.  etc. When parsed, these literals are converted to integers.
362
363.. note::
364
365  Although ``true`` and ``false`` are literal names for 1 and 0, we
366  recommend as a stylistic rule that you use them for boolean
367  values only.
368
369.. productionlist::
370   SimpleValue3: "?"
371
372A question mark represents an uninitialized value.
373
374.. productionlist::
375   SimpleValue4: "{" [`ValueList`] "}"
376   ValueList: `ValueListNE`
377   ValueListNE: `Value` ("," `Value`)*
378
379This value represents a sequence of bits, which can be used to initialize a
380``bits<``\ *n*\ ``>`` field (note the braces). When doing so, the values
381must represent a total of *n* bits.
382
383.. productionlist::
384   SimpleValue5: "[" `ValueList` "]" ["<" `Type` ">"]
385
386This value is a list initializer (note the brackets). The values in brackets
387are the elements of the list. The optional :token:`Type` can be used to
388indicate a specific element type; otherwise the element type is inferred
389from the given values. TableGen can usually infer the type, although
390sometimes not when the value is the empty list (``[]``).
391
392.. productionlist::
393   SimpleValue6: "(" `DagArg` [`DagArgList`] ")"
394   DagArgList: `DagArg` ("," `DagArg`)*
395   DagArg: `Value` [":" `TokVarName`] | `TokVarName`
396
397This represents a DAG initializer (note the parentheses).  The first
398:token:`DagArg` is called the "operator" of the DAG and must be a record.
399See `Directed acyclic graphs (DAGs)`_ for more details.
400
401.. productionlist::
402   SimpleValue7: `TokIdentifier`
403
404The resulting value is the value of the entity named by the identifier. The
405possible identifiers are described here, but the descriptions will make more
406sense after reading the remainder of this guide.
407
408.. The code for this is exceptionally abstruse. These examples are a
409   best-effort attempt.
410
411* A template argument of a ``class``, such as the use of ``Bar`` in::
412
413     class Foo <int Bar> {
414       int Baz = Bar;
415     }
416
417* The implicit template argument ``NAME`` in a ``class`` or ``multiclass``
418  definition (see `NAME`_).
419
420* A field local to a ``class``, such as the use of ``Bar`` in::
421
422     class Foo {
423       int Bar = 5;
424       int Baz = Bar;
425     }
426
427* The name of a record definition, such as the use of ``Bar`` in the
428  definition of ``Foo``::
429
430     def Bar : SomeClass {
431       int X = 5;
432     }
433
434     def Foo {
435       SomeClass Baz = Bar;
436     }
437
438* A field local to a record definition, such as the use of ``Bar`` in::
439
440     def Foo {
441       int Bar = 5;
442       int Baz = Bar;
443     }
444
445  Fields inherited from the record's parent classes can be accessed the same way.
446
447* A template argument of a ``multiclass``, such as the use of ``Bar`` in::
448
449     multiclass Foo <int Bar> {
450       def : SomeClass<Bar>;
451     }
452
453* A variable defined with the ``defvar`` or ``defset`` statements.
454
455* The iteration variable of a ``foreach``, such as the use of ``i`` in::
456
457     foreach i = 0...5 in
458       def Foo#i;
459
460.. productionlist::
461   SimpleValue8: `ClassID` "<" `ValueListNE` ">"
462
463This form creates a new anonymous record definition (as would be created by an
464unnamed ``def`` inheriting from the given class with the given template
465arguments; see `def`_) and the value is that record. A field of the record can be
466obtained using a suffix; see `Suffixed Values`_.
467
468Invoking a class in this manner can provide a simple subroutine facility.
469See `Using Classes as Subroutines`_ for more information.
470
471.. productionlist::
472   SimpleValue9: `BangOperator` ["<" `Type` ">"] "(" `ValueListNE` ")"
473              :| `CondOperator` "(" `CondClause` ("," `CondClause`)* ")"
474   CondClause: `Value` ":" `Value`
475
476The bang operators provide functions that are not available with the other
477simple values. Except in the case of ``!cond``, a bang
478operator takes a list of arguments enclosed in parentheses and performs some
479function on those arguments, producing a value for that
480bang operator. The ``!cond`` operator takes a list of pairs of arguments
481separated by colons. See `Appendix A: Bang Operators`_ for a description of
482each bang operator.
483
484
485Suffixed values
486---------------
487
488The :token:`SimpleValue` values described above can be specified with
489certain suffixes. The purpose of a suffix is to obtain a subvalue of the
490primary value. Here are the possible suffixes for some primary *value*.
491
492*value*\ ``{17}``
493    The final value is bit 17 of the integer *value* (note the braces).
494
495*value*\ ``{8...15}``
496    The final value is bits 8--15 of the integer *value*. The order of the
497    bits can be reversed by specifying ``{15...8}``.
498
499*value*\ ``[4...7,17,2...3,4]``
500    The final value is a new list that is a slice of the list *value* (note
501    the brackets). The
502    new list contains elements 4, 5, 6, 7, 17, 2, 3, and 4. Elements may be
503    included multiple times and in any order.
504
505*value*\ ``.`` *field*
506    The final value is the value of the specified *field* in the specified
507    record *value*.
508
509The paste operator
510------------------
511
512The paste operator (``#``) is the only infix operator available in TableGen
513expressions. It allows you to concatenate strings or lists, but has a few
514unusual features.
515
516The paste operator can be used when specifying the record name in a
517:token:`Def` or :token:`Defm` statement, in which case it must construct a
518string. If an operand is an undefined name (:token:`TokIdentifier`) or the
519name of a global :token:`Defvar` or :token:`Defset`, it is treated as a
520verbatim string of characters. The value of a global name is not used.
521
522The paste operator can be used in all other value expressions, in which case
523it can construct a string or a list. Rather oddly, but consistent with the
524previous case, if the *right-hand-side* operand is an undefined name or a
525global name, it is treated as a verbatim string of characters. The
526left-hand-side operand is treated normally.
527
528`Appendix B: Paste Operator Examples`_ presents examples of the behavior of
529the paste operator.
530
531Statements
532==========
533
534The following statements may appear at the top level of TableGen source
535files.
536
537.. productionlist::
538   TableGenFile: `Statement`*
539   Statement: `Assert` | `Class` | `Def` | `Defm` | `Defset` | `Defvar`
540            :| `Foreach` | `If` | `Let` | `MultiClass`
541
542The following sections describe each of these top-level statements.
543
544
545``class`` --- define an abstract record class
546---------------------------------------------
547
548A ``class`` statement defines an abstract record class from which other
549classes and records can inherit.
550
551.. productionlist::
552   Class: "class" `ClassID` [`TemplateArgList`] `RecordBody`
553   TemplateArgList: "<" `TemplateArgDecl` ("," `TemplateArgDecl`)* ">"
554   TemplateArgDecl: `Type` `TokIdentifier` ["=" `Value`]
555
556A class can be parameterized by a list of "template arguments," whose values
557can be used in the class's record body.  These template arguments are
558specified each time the class is inherited by another class or record.
559
560If a template argument is not assigned a default value with ``=``, it is
561uninitialized (has the "value" ``?``) and must be specified in the template
562argument list when the class is inherited. If an argument is assigned a
563default value, then it need not be specified in the argument list. The
564template argument default values are evaluated from left to right.
565
566The :token:`RecordBody` is defined below. It can include a list of
567superclasses from which the current class inherits, along with field definitions
568and other statements. When a class ``C`` inherits from another class ``D``,
569the fields of ``D`` are effectively merged into the fields of ``C``.
570
571A given class can only be defined once. A ``class`` statement is
572considered to define the class if *any* of the following are true (the
573:token:`RecordBody` elements are described below).
574
575* The :token:`TemplateArgList` is present, or
576* The :token:`ParentClassList` in the :token:`RecordBody` is present, or
577* The :token:`Body` in the :token:`RecordBody` is present and not empty.
578
579You can declare an empty class by specifying an empty :token:`TemplateArgList`
580and an empty :token:`RecordBody`. This can serve as a restricted form of
581forward declaration. Note that records derived from a forward-declared
582class will inherit no fields from it, because those records are built when
583their declarations are parsed, and thus before the class is finally defined.
584
585.. _NAME:
586
587Every class has an implicit template argument named ``NAME`` (uppercase),
588which is bound to the name of the :token:`Def` or :token:`Defm` inheriting
589the class. The value of ``NAME`` is undefined if the class is inherited by
590an anonymous record.
591
592See `Examples: classes and records`_ for examples.
593
594Record Bodies
595`````````````
596
597Record bodies appear in both class and record definitions. A record body can
598include a parent class list, which specifies the classes from which the
599current class or record inherits fields. Such classes are called the
600superclasses or parent classes of the class or record. The record body also
601includes the main body of the definition, which contains the specification
602of the fields of the class or record.
603
604.. productionlist::
605   RecordBody: `ParentClassList` `Body`
606   ParentClassList: [":" `ParentClassListNE`]
607   ParentClassListNE: `ClassRef` ("," `ClassRef`)*
608   ClassRef: (`ClassID` | `MultiClassID`) ["<" `ValueList` ">"]
609
610A :token:`ParentClassList` containing a :token:`MultiClassID` is valid only
611in the class list of a ``defm`` statement. In that case, the ID must be the
612name of a multiclass.
613
614.. productionlist::
615   Body: ";" | "{" `BodyItem`* "}"
616   BodyItem: (`Type` | "code") `TokIdentifier` ["=" `Value`] ";"
617           :| "let" `TokIdentifier` ["{" `RangeList` "}"] "=" `Value` ";"
618           :| "defvar" `TokIdentifier` "=" `Value` ";"
619           :| `Assert`
620
621A field definition in the body specifies a field to be included in the class
622or record. If no initial value is specified, then the field's value is
623uninitialized. The type must be specified; TableGen will not infer it from
624the value. The keyword ``code`` may be used to emphasize that the field
625has a string value that is code.
626
627The ``let`` form is used to reset a field to a new value. This can be done
628for fields defined directly in the body or fields inherited from
629superclasses.  A :token:`RangeList` can be specified to reset certain bits
630in a ``bit<n>`` field.
631
632The ``defvar`` form defines a variable whose value can be used in other
633value expressions within the body. The variable is not a field: it does not
634become a field of the class or record being defined. Variables are provided
635to hold temporary values while processing the body. See `Defvar in a Record
636Body`_ for more details.
637
638When class ``C2`` inherits from class ``C1``, it acquires all the field
639definitions of ``C1``. As those definitions are merged into class ``C2``, any
640template arguments passed to ``C1`` by ``C2`` are substituted into the
641definitions. In other words, the abstract record fields defined by ``C1`` are
642expanded with the template arguments before being merged into ``C2``.
643
644
645.. _def:
646
647``def`` --- define a concrete record
648------------------------------------
649
650A ``def`` statement defines a new concrete record.
651
652.. productionlist::
653   Def: "def" [`NameValue`] `RecordBody`
654   NameValue: `Value` (parsed in a special manner)
655
656The name value is optional. If specified, it is parsed in a special mode
657where undefined (unrecognized) identifiers are interpreted as literal
658strings. In particular, global identifiers are considered unrecognized.
659These include global variables defined by ``defvar`` and ``defset``.
660
661If no name value is given, the record is *anonymous*. The final name of an
662anonymous record is unspecified but globally unique.
663
664Special handling occurs if a ``def`` appears inside a ``multiclass``
665statement. See the ``multiclass`` section below for details.
666
667A record can inherit from one or more classes by specifying the
668:token:`ParentClassList` clause at the beginning of its record body. All of
669the fields in the parent classes are added to the record. If two or more
670parent classes provide the same field, the record ends up with the field value
671of the last parent class.
672
673As a special case, the name of a record can be passed in a template argument
674to that record's superclasses. For example:
675
676.. code-block:: text
677
678  class A <dag d> {
679    dag the_dag = d;
680  }
681
682  def rec1 : A<(ops rec1)>
683
684The DAG ``(ops rec1)`` is passed as a template argument to class ``A``. Notice
685that the DAG includes ``rec1``, the record being defined.
686
687The steps taken to create a new record are somewhat complex. See `How
688records are built`_.
689
690See `Examples: classes and records`_ for examples.
691
692
693Examples: classes and records
694-----------------------------
695
696Here is a simple TableGen file with one class and two record definitions.
697
698.. code-block:: text
699
700  class C {
701    bit V = 1;
702  }
703
704  def X : C;
705  def Y : C {
706    let V = 0;
707    string Greeting = "Hello!";
708  }
709
710First, the abstract class ``C`` is defined. It has one field named ``V``
711that is a bit initialized to 1.
712
713Next, two records are defined, derived from class ``C``; that is, with ``C``
714as their superclass. Thus they both inherit the ``V`` field. Record ``Y``
715also defines another string field, ``Greeting``, which is initialized to
716``"Hello!"``. In addition, ``Y`` overrides the inherited ``V`` field,
717setting it to 0.
718
719A class is useful for isolating the common features of multiple records in
720one place. A class can initialize common fields to default values, but
721records inheriting from that class can override the defaults.
722
723TableGen supports the definition of parameterized classes as well as
724nonparameterized ones. Parameterized classes specify a list of variable
725declarations, which may optionally have defaults, that are bound when the
726class is specified as a superclass of another class or record.
727
728.. code-block:: text
729
730  class FPFormat <bits<3> val> {
731    bits<3> Value = val;
732  }
733
734  def NotFP      : FPFormat<0>;
735  def ZeroArgFP  : FPFormat<1>;
736  def OneArgFP   : FPFormat<2>;
737  def OneArgFPRW : FPFormat<3>;
738  def TwoArgFP   : FPFormat<4>;
739  def CompareFP  : FPFormat<5>;
740  def CondMovFP  : FPFormat<6>;
741  def SpecialFP  : FPFormat<7>;
742
743The purpose of the ``FPFormat`` class is to act as a sort of enumerated
744type. It provides a single field, ``Value``, which holds a 3-bit number. Its
745template argument, ``val``, is used to set the ``Value`` field.
746Each of the eight records is defined with ``FPFormat`` as its superclass. The
747enumeration value is passed in angle brackets as the template argument. Each
748record will inherent the ``Value`` field with the appropriate enumeration
749value.
750
751Here is a more complex example of classes with template arguments. First, we
752define a class similar to the ``FPFormat`` class above. It takes a template
753argument and uses it to initialize a field named ``Value``. Then we define
754four records that inherit the ``Value`` field with its four different
755integer values.
756
757.. code-block:: text
758
759  class ModRefVal <bits<2> val> {
760    bits<2> Value = val;
761  }
762
763  def None   : ModRefVal<0>;
764  def Mod    : ModRefVal<1>;
765  def Ref    : ModRefVal<2>;
766  def ModRef : ModRefVal<3>;
767
768This is somewhat contrived, but let's say we would like to examine the two
769bits of the ``Value`` field independently. We can define a class that
770accepts a ``ModRefVal`` record as a template argument and splits up its
771value into two fields, one bit each. Then we can define records that inherit from
772``ModRefBits`` and so acquire two fields from it, one for each bit in the
773``ModRefVal`` record passed as the template argument.
774
775.. code-block:: text
776
777  class ModRefBits <ModRefVal mrv> {
778    // Break the value up into its bits, which can provide a nice
779    // interface to the ModRefVal values.
780    bit isMod = mrv.Value{0};
781    bit isRef = mrv.Value{1};
782  }
783
784  // Example uses.
785  def foo   : ModRefBits<Mod>;
786  def bar   : ModRefBits<Ref>;
787  def snork : ModRefBits<ModRef>;
788
789This illustrates how one class can be defined to reorganize the
790fields in another class, thus hiding the internal representation of that
791other class.
792
793Running ``llvm-tblgen`` on the example prints the following definitions:
794
795.. code-block:: text
796
797  def bar {      // Value
798    bit isMod = 0;
799    bit isRef = 1;
800  }
801  def foo {      // Value
802    bit isMod = 1;
803    bit isRef = 0;
804  }
805  def snork {      // Value
806    bit isMod = 1;
807    bit isRef = 1;
808  }
809
810``let`` --- override fields in classes or records
811-------------------------------------------------
812
813A ``let`` statement collects a set of field values (sometimes called
814*bindings*) and applies them to all the classes and records defined by
815statements within the scope of the ``let``.
816
817.. productionlist::
818   Let:  "let" `LetList` "in" "{" `Statement`* "}"
819      :| "let" `LetList` "in" `Statement`
820   LetList: `LetItem` ("," `LetItem`)*
821   LetItem: `TokIdentifier` ["<" `RangeList` ">"] "=" `Value`
822
823The ``let`` statement establishes a scope, which is a sequence of statements
824in braces or a single statement with no braces. The bindings in the
825:token:`LetList` apply to the statements in that scope.
826
827The field names in the :token:`LetList` must name fields in classes inherited by
828the classes and records defined in the statements. The field values are
829applied to the classes and records *after* the records inherit all the fields from
830their superclasses. So the ``let`` acts to override inherited field
831values. A ``let`` cannot override the value of a template argument.
832
833Top-level ``let`` statements are often useful when a few fields need to be
834overriden in several records. Here are two examples. Note that ``let``
835statements can be nested.
836
837.. code-block:: text
838
839  let isTerminator = 1, isReturn = 1, isBarrier = 1, hasCtrlDep = 1 in
840    def RET : I<0xC3, RawFrm, (outs), (ins), "ret", [(X86retflag 0)]>;
841
842  let isCall = 1 in
843    // All calls clobber the non-callee saved registers...
844    let Defs = [EAX, ECX, EDX, FP0, FP1, FP2, FP3, FP4, FP5, FP6, ST0,
845                MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7, XMM0, XMM1, XMM2,
846                XMM3, XMM4, XMM5, XMM6, XMM7, EFLAGS] in {
847      def CALLpcrel32 : Ii32<0xE8, RawFrm, (outs), (ins i32imm:$dst, variable_ops),
848                             "call\t${dst:call}", []>;
849      def CALL32r     : I<0xFF, MRM2r, (outs), (ins GR32:$dst, variable_ops),
850                          "call\t{*}$dst", [(X86call GR32:$dst)]>;
851      def CALL32m     : I<0xFF, MRM2m, (outs), (ins i32mem:$dst, variable_ops),
852                          "call\t{*}$dst", []>;
853    }
854
855Note that a top-level ``let`` will not override fields defined in the classes or records
856themselves.
857
858
859``multiclass`` --- define multiple records
860------------------------------------------
861
862While classes with template arguments are a good way to factor out commonality
863between multiple records, multiclasses allow a convenient method for
864defining multiple records at once. For example, consider a 3-address
865instruction architecture whose instructions come in two formats: ``reg = reg
866op reg`` and ``reg = reg op imm`` (e.g., SPARC). We would like to specify in
867one place that these two common formats exist, then in a separate place
868specify what all the operations are. The ``multiclass`` and ``defm``
869statements accomplish this goal. You can think of a multiclass as a macro or
870template that expands into multiple records.
871
872.. productionlist::
873   MultiClass: "multiclass" `TokIdentifier` [`TemplateArgList`]
874             : [":" `ParentMultiClassList`]
875             : "{" `Statement`+ "}"
876   ParentMultiClassList: `MultiClassID` ("," `MultiClassID`)*
877   MultiClassID: `TokIdentifier`
878
879As with regular classes, the multiclass has a name and can accept template
880arguments. A multiclass can inherit from other multiclasses, which causes
881the other multiclasses to be expanded and contribute to the record
882definitions in the inheriting multiclass. The body of the multiclass
883contains a series of statements that define records, using :token:`Def` and
884:token:`Defm`. In addition, :token:`Defvar`, :token:`Foreach`, and
885:token:`Let` statements can be used to factor out even more common elements.
886The :token:`If` statement can also be used.
887
888Also as with regular classes, the multiclass has the implicit template
889argument ``NAME`` (see NAME_). When a named (non-anonymous) record is
890defined in a multiclass and the record's name does not contain a use of the
891template argument ``NAME``, such a use is automatically prepended
892to the name.  That is, the following are equivalent inside a multiclass::
893
894    def Foo ...
895    def NAME#Foo ...
896
897The records defined in a multiclass are instantiated when the multiclass is
898"invoked" by a ``defm`` statement outside the multiclass definition. Each
899``def`` statement produces a record. As with top-level ``def`` statements,
900these definitions can inherit from multiple superclasses.
901
902See `Examples: multiclasses and defms`_ for examples.
903
904
905``defm`` --- invoke multiclasses to define multiple records
906-----------------------------------------------------------
907
908Once multiclasses have been defined, you use the ``defm`` statement to
909"invoke" multiclasses and process the multiple record definitions in those
910multiclasses. Those record definitions are specified by ``def``
911statements in the multiclasses, and indirectly by ``defm`` statements.
912
913.. productionlist::
914   Defm: "defm" [`NameValue`] `ParentClassList` ";"
915
916The optional :token:`NameValue` is formed in the same way as the name of a
917``def``. The :token:`ParentClassList` is a colon followed by a list of at least one
918multiclass and any number of regular classes. The multiclasses must
919precede the regular classes. Note that the ``defm`` does not have a body.
920
921This statement instantiates all the records defined in all the specified
922multiclasses, either directly by ``def`` statements or indirectly by
923``defm`` statements. These records also receive the fields defined in any
924regular classes included in the parent class list. This is useful for adding
925a common set of fields to all the records created by the ``defm``.
926
927The name is parsed in the same special mode used by ``def``. If the name is
928not included, a globally unique name is provided. That is, the following
929examples end up with different names::
930
931    defm    : SomeMultiClass<...>;   // A globally unique name.
932    defm "" : SomeMultiClass<...>;   // An empty name.
933
934The ``defm`` statement can be used in a multiclass body. When this occurs,
935the second variant is equivalent to::
936
937  defm NAME : SomeMultiClass<...>;
938
939More generally, when ``defm`` occurs in a multiclass and its name does not
940include a use of the implicit template argument ``NAME``, then ``NAME`` will
941be prepended automatically. That is, the following are equivalent inside a
942multiclass::
943
944    defm Foo      : SomeMultiClass<...>;
945    defm NAME#Foo : SomeMultiClass<...>;
946
947See `Examples: multiclasses and defms`_ for examples.
948
949Examples: multiclasses and defms
950--------------------------------
951
952Here is a simple example using ``multiclass`` and ``defm``.  Consider a
9533-address instruction architecture whose instructions come in two formats:
954``reg = reg op reg`` and ``reg = reg op imm`` (immediate). The SPARC is an
955example of such an architecture.
956
957.. code-block:: text
958
959  def ops;
960  def GPR;
961  def Imm;
962  class inst <int opc, string asmstr, dag operandlist>;
963
964  multiclass ri_inst <int opc, string asmstr> {
965    def _rr : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
966                     (ops GPR:$dst, GPR:$src1, GPR:$src2)>;
967    def _ri : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
968                     (ops GPR:$dst, GPR:$src1, Imm:$src2)>;
969  }
970
971  // Define records for each instruction in the RR and RI formats.
972  defm ADD : ri_inst<0b111, "add">;
973  defm SUB : ri_inst<0b101, "sub">;
974  defm MUL : ri_inst<0b100, "mul">;
975
976Each use of the ``ri_inst`` multiclass defines two records, one with the
977``_rr`` suffix and one with ``_ri``. Recall that the name of the ``defm``
978that uses a multiclass is prepended to the names of the records defined in
979that multiclass. So the resulting definitions are named::
980
981  ADD_rr, ADD_ri
982  SUB_rr, SUB_ri
983  MUL_rr, MUL_ri
984
985Without the ``multiclass`` feature, the instructions would have to be
986defined as follows.
987
988.. code-block:: text
989
990  def ops;
991  def GPR;
992  def Imm;
993  class inst <int opc, string asmstr, dag operandlist>;
994
995  class rrinst <int opc, string asmstr>
996    : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
997             (ops GPR:$dst, GPR:$src1, GPR:$src2)>;
998
999  class riinst <int opc, string asmstr>
1000    : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
1001             (ops GPR:$dst, GPR:$src1, Imm:$src2)>;
1002
1003  // Define records for each instruction in the RR and RI formats.
1004  def ADD_rr : rrinst<0b111, "add">;
1005  def ADD_ri : riinst<0b111, "add">;
1006  def SUB_rr : rrinst<0b101, "sub">;
1007  def SUB_ri : riinst<0b101, "sub">;
1008  def MUL_rr : rrinst<0b100, "mul">;
1009  def MUL_ri : riinst<0b100, "mul">;
1010
1011A ``defm`` can be used in a multiclass to "invoke" other multiclasses and
1012create the records defined in those multiclasses in addition to the records
1013defined in the current multiclass. In the following example, the ``basic_s``
1014and ``basic_p`` multiclasses contain ``defm`` statements that refer to the
1015``basic_r`` multiclass. The ``basic_r`` multiclass contains only ``def``
1016statements.
1017
1018.. code-block:: text
1019
1020  class Instruction <bits<4> opc, string Name> {
1021    bits<4> opcode = opc;
1022    string name = Name;
1023  }
1024
1025  multiclass basic_r <bits<4> opc> {
1026    def rr : Instruction<opc, "rr">;
1027    def rm : Instruction<opc, "rm">;
1028  }
1029
1030  multiclass basic_s <bits<4> opc> {
1031    defm SS : basic_r<opc>;
1032    defm SD : basic_r<opc>;
1033    def X : Instruction<opc, "x">;
1034  }
1035
1036  multiclass basic_p <bits<4> opc> {
1037    defm PS : basic_r<opc>;
1038    defm PD : basic_r<opc>;
1039    def Y : Instruction<opc, "y">;
1040  }
1041
1042  defm ADD : basic_s<0xf>, basic_p<0xf>;
1043
1044The final ``defm`` creates the following records, five from the ``basic_s``
1045multiclass and five from the ``basic_p`` multiclass::
1046
1047  ADDSSrr, ADDSSrm
1048  ADDSDrr, ADDSDrm
1049  ADDX
1050  ADDPSrr, ADDPSrm
1051  ADDPDrr, ADDPDrm
1052  ADDY
1053
1054A ``defm`` statement, both at top level and in a multiclass, can inherit
1055from regular classes in addition to multiclasses. The rule is that the
1056regular classes must be listed after the multiclasses, and there must be at least
1057one multiclass.
1058
1059.. code-block:: text
1060
1061  class XD {
1062    bits<4> Prefix = 11;
1063  }
1064  class XS {
1065    bits<4> Prefix = 12;
1066  }
1067  class I <bits<4> op> {
1068    bits<4> opcode = op;
1069  }
1070
1071  multiclass R {
1072    def rr : I<4>;
1073    def rm : I<2>;
1074  }
1075
1076  multiclass Y {
1077    defm SS : R, XD;    // First multiclass R, then regular class XD.
1078    defm SD : R, XS;
1079  }
1080
1081  defm Instr : Y;
1082
1083This example will create four records, shown here in alphabetical order with
1084their fields.
1085
1086.. code-block:: text
1087
1088  def InstrSDrm {
1089    bits<4> opcode = { 0, 0, 1, 0 };
1090    bits<4> Prefix = { 1, 1, 0, 0 };
1091  }
1092
1093  def InstrSDrr {
1094    bits<4> opcode = { 0, 1, 0, 0 };
1095    bits<4> Prefix = { 1, 1, 0, 0 };
1096  }
1097
1098  def InstrSSrm {
1099    bits<4> opcode = { 0, 0, 1, 0 };
1100    bits<4> Prefix = { 1, 0, 1, 1 };
1101  }
1102
1103  def InstrSSrr {
1104    bits<4> opcode = { 0, 1, 0, 0 };
1105    bits<4> Prefix = { 1, 0, 1, 1 };
1106  }
1107
1108It's also possible to use ``let`` statements inside multiclasses, providing
1109another way to factor out commonality from the records, especially when
1110using several levels of multiclass instantiations.
1111
1112.. code-block:: text
1113
1114  multiclass basic_r <bits<4> opc> {
1115    let Predicates = [HasSSE2] in {
1116      def rr : Instruction<opc, "rr">;
1117      def rm : Instruction<opc, "rm">;
1118    }
1119    let Predicates = [HasSSE3] in
1120      def rx : Instruction<opc, "rx">;
1121  }
1122
1123  multiclass basic_ss <bits<4> opc> {
1124    let IsDouble = 0 in
1125      defm SS : basic_r<opc>;
1126
1127    let IsDouble = 1 in
1128      defm SD : basic_r<opc>;
1129  }
1130
1131  defm ADD : basic_ss<0xf>;
1132
1133
1134``defset`` --- create a definition set
1135--------------------------------------
1136
1137The ``defset`` statement is used to collect a set of records into a global
1138list of records.
1139
1140.. productionlist::
1141   Defset: "defset" `Type` `TokIdentifier` "=" "{" `Statement`* "}"
1142
1143All records defined inside the braces via ``def`` and ``defm`` are defined
1144as usual, and they are also collected in a global list of the given name
1145(:token:`TokIdentifier`).
1146
1147The specified type must be ``list<``\ *class*\ ``>``, where *class* is some
1148record class.  The ``defset`` statement establishes a scope for its
1149statements. It is an error to define a record in the scope of the
1150``defset`` that is not of type *class*.
1151
1152The ``defset`` statement can be nested. The inner ``defset`` adds the
1153records to its own set, and all those records are also added to the outer
1154set.
1155
1156Anonymous records created inside initialization expressions using the
1157``ClassID<...>`` syntax are not collected in the set.
1158
1159
1160``defvar`` --- define a variable
1161--------------------------------
1162
1163A ``defvar`` statement defines a global variable. Its value can be used
1164throughout the statements that follow the definition.
1165
1166.. productionlist::
1167   Defvar: "defvar" `TokIdentifier` "=" `Value` ";"
1168
1169The identifier on the left of the ``=`` is defined to be a global variable
1170whose value is given by the value expression on the right of the ``=``. The
1171type of the variable is automatically inferred.
1172
1173Once a variable has been defined, it cannot be set to another value.
1174
1175Variables defined in a top-level ``foreach`` go out of scope at the end of
1176each loop iteration, so their value in one iteration is not available in
1177the next iteration.  The following ``defvar`` will not work::
1178
1179  defvar i = !add(i, 1)
1180
1181Variables can also be defined with ``defvar`` in a record body. See
1182`Defvar in a Record Body`_ for more details.
1183
1184``foreach`` --- iterate over a sequence of statements
1185-----------------------------------------------------
1186
1187The ``foreach`` statement iterates over a series of statements, varying a
1188variable over a sequence of values.
1189
1190.. productionlist::
1191   Foreach: "foreach" `ForeachIterator` "in" "{" `Statement`* "}"
1192          :| "foreach" `ForeachIterator` "in" `Statement`
1193   ForeachIterator: `TokIdentifier` "=" ("{" `RangeList` "}" | `RangePiece` | `Value`)
1194
1195The body of the ``foreach`` is a series of statements in braces or a
1196single statement with no braces. The statements are re-evaluated once for
1197each value in the range list, range piece, or single value. On each
1198iteration, the :token:`TokIdentifier` variable is set to the value and can
1199be used in the statements.
1200
1201The statement list establishes an inner scope. Variables local to a
1202``foreach`` go out of scope at the end of each loop iteration, so their
1203values do not carry over from one iteration to the next. Foreach loops may
1204be nested.
1205
1206The ``foreach`` statement can also be used in a record :token:`Body`.
1207
1208.. Note that the productions involving RangeList and RangePiece have precedence
1209   over the more generic value parsing based on the first token.
1210
1211.. code-block:: text
1212
1213  foreach i = [0, 1, 2, 3] in {
1214    def R#i : Register<...>;
1215    def F#i : Register<...>;
1216  }
1217
1218This loop defines records named ``R0``, ``R1``, ``R2``, and ``R3``, along
1219with ``F0``, ``F1``, ``F2``, and ``F3``.
1220
1221
1222``if`` --- select statements based on a test
1223--------------------------------------------
1224
1225The ``if`` statement allows one of two statement groups to be selected based
1226on the value of an expression.
1227
1228.. productionlist::
1229   If: "if" `Value` "then" `IfBody`
1230     :| "if" `Value` "then" `IfBody` "else" `IfBody`
1231   IfBody: "{" `Statement`* "}" | `Statement`
1232
1233The value expression is evaluated. If it evaluates to true (in the same
1234sense used by the bang operators), then the statements following the
1235``then`` reserved word are processed. Otherwise, if there is an ``else``
1236reserved word, the statements following the ``else`` are processed. If the
1237value is false and there is no ``else`` arm, no statements are processed.
1238
1239Because the braces around the ``then`` statements are optional, this grammar rule
1240has the usual ambiguity with "dangling else" clauses, and it is resolved in
1241the usual way: in a case like ``if v1 then if v2 then {...} else {...}``, the
1242``else`` associates with the inner ``if`` rather than the outer one.
1243
1244The :token:`IfBody` of the then and else arms of the ``if`` establish an
1245inner scope. Any ``defvar`` variables defined in the bodies go out of scope
1246when the bodies are finished (see `Defvar in a Record Body`_ for more details).
1247
1248The ``if`` statement can also be used in a record :token:`Body`.
1249
1250
1251``assert`` --- check that a condition is true
1252---------------------------------------------
1253
1254The ``assert`` statement checks a boolean condition to be sure that it is true
1255and prints an error message if it is not.
1256
1257.. productionlist::
1258   Assert: "assert" `condition` "," `message` ";"
1259
1260If the boolean condition is true, the statement does nothing. If the
1261condition is false, it prints a nonfatal error message. The **message**, which
1262can be an arbitrary string expression, is included in the error message as a
1263note. The exact behavior of the ``assert`` statement depends on its
1264placement.
1265
1266* At top level, the assertion is checked immediately.
1267
1268* In a record definition, the statement is saved and all assertions are
1269  checked after the record is completely built.
1270
1271* In a class definition, the assertions are saved and inherited by all
1272  the record definitions that inherit from the class. The assertions are
1273  then checked when the records are completely built. [this placement is not
1274  yet available]
1275
1276* In a multiclass definition, ... [this placement is not yet available]
1277
1278
1279Additional Details
1280==================
1281
1282Directed acyclic graphs (DAGs)
1283------------------------------
1284
1285A directed acyclic graph can be represented directly in TableGen using the
1286``dag`` datatype. A DAG node consists of an operator and zero or more
1287arguments (or operands). Each argument can be of any desired type. By using
1288another DAG node as an argument, an arbitrary graph of DAG nodes can be
1289built.
1290
1291The syntax of a ``dag`` instance is:
1292
1293  ``(`` *operator* *argument1*\ ``,`` *argument2*\ ``,`` ... ``)``
1294
1295The operator must be present and must be a record. There can be zero or more
1296arguments, separated by commas. The operator and arguments can have three
1297formats.
1298
1299====================== =============================================
1300Format                 Meaning
1301====================== =============================================
1302*value*                argument value
1303*value*\ ``:``\ *name* argument value and associated name
1304*name*                 argument name with unset (uninitialized) value
1305====================== =============================================
1306
1307The *value* can be any TableGen value. The *name*, if present, must be a
1308:token:`TokVarName`, which starts with a dollar sign (``$``). The purpose of
1309a name is to tag an operator or argument in a DAG with a particular meaning,
1310or to associate an argument in one DAG with a like-named argument in another
1311DAG.
1312
1313The following bang operators are useful for working with DAGs:
1314``!con``, ``!dag``, ``!empty``, ``!foreach``, ``!getdagop``, ``!setdagop``, ``!size``.
1315
1316Defvar in a record body
1317-----------------------
1318
1319In addition to defining global variables, the ``defvar`` statement can
1320be used inside the :token:`Body` of a class or record definition to define
1321local variables. The scope of the variable extends from the ``defvar``
1322statement to the end of the body. It cannot be set to a different value
1323within its scope. The ``defvar`` statement can also be used in the statement
1324list of a ``foreach``, which establishes a scope.
1325
1326A variable named ``V`` in an inner scope shadows (hides) any variables ``V``
1327in outer scopes. In particular, ``V`` in a record body shadows a global
1328``V``, and ``V`` in a ``foreach`` statement list shadows any ``V`` in
1329surrounding record or global scopes.
1330
1331Variables defined in a ``foreach`` go out of scope at the end of
1332each loop iteration, so their value in one iteration is not available in
1333the next iteration.  The following ``defvar`` will not work::
1334
1335  defvar i = !add(i, 1)
1336
1337How records are built
1338---------------------
1339
1340The following steps are taken by TableGen when a record is built. Classes are simply
1341abstract records and so go through the same steps.
1342
13431. Build the record name (:token:`NameValue`) and create an empty record.
1344
13452. Parse the superclasses in the :token:`ParentClassList` from left to
1346   right, visiting each superclass's ancestor classes from top to bottom.
1347
1348  a. Add the fields from the superclass to the record.
1349  b. Substitute the template arguments into those fields.
1350  c. Add the superclass to the record's list of inherited classes.
1351
13523. Apply any top-level ``let`` bindings to the record. Recall that top-level
1353   bindings only apply to inherited fields.
1354
13554. Parse the body of the record.
1356
1357  * Add any fields to the record.
1358  * Modify the values of fields according to local ``let`` statements.
1359  * Define any ``defvar`` variables.
1360
13615. Make a pass over all the fields to resolve any inter-field references.
1362
13636. Add the record to the master record list.
1364
1365Because references between fields are resolved (step 5) after ``let`` bindings are
1366applied (step 3), the ``let`` statement has unusual power. For example:
1367
1368.. code-block:: text
1369
1370  class C <int x> {
1371    int Y = x;
1372    int Yplus1 = !add(Y, 1);
1373    int xplus1 = !add(x, 1);
1374  }
1375
1376  let Y = 10 in {
1377    def rec1 : C<5> {
1378    }
1379  }
1380
1381  def rec2 : C<5> {
1382    let Y = 10;
1383  }
1384
1385In both cases, one where a top-level ``let`` is used to bind ``Y`` and one
1386where a local ``let`` does the same thing, the results are:
1387
1388.. code-block:: text
1389
1390  def rec1 {      // C
1391    int Y = 10;
1392    int Yplus1 = 11;
1393    int xplus1 = 6;
1394  }
1395  def rec2 {      // C
1396    int Y = 10;
1397    int Yplus1 = 11;
1398    int xplus1 = 6;
1399  }
1400
1401``Yplus1`` is 11 because the ``let Y`` is performed before the ``!add(Y,
14021)`` is resolved. Use this power wisely.
1403
1404
1405Using Classes as Subroutines
1406============================
1407
1408As described in `Simple values`_, a class can be invoked in an expression
1409and passed template arguments. This causes TableGen to create a new anonymous
1410record inheriting from that class. As usual, the record receives all the
1411fields defined in the class.
1412
1413This feature can be employed as a simple subroutine facility. The class can
1414use the template arguments to define various variables and fields, which end
1415up in the anonymous record. Those fields can then be retrieved in the
1416expression invoking the class as follows. Assume that the field ``ret``
1417contains the final value of the subroutine.
1418
1419.. code-block:: text
1420
1421  int Result = ... CalcValue<arg>.ret ...;
1422
1423The ``CalcValue`` class is invoked with the template argument ``arg``. It
1424calculates a value for the ``ret`` field, which is then retrieved at the
1425"point of call" in the initialization for the Result field. The anonymous
1426record created in this example serves no other purpose than to carry the
1427result value.
1428
1429Here is a practical example. The class ``isValidSize`` determines whether a
1430specified number of bytes represents a valid data size. The bit ``ret`` is
1431set appropriately. The field ``ValidSize`` obtains its initial value by
1432invoking ``isValidSize`` with the data size and retrieving the ``ret`` field
1433from the resulting anonymous record.
1434
1435.. code-block:: text
1436
1437  class isValidSize<int size> {
1438    bit ret = !cond(!eq(size,  1): 1,
1439                    !eq(size,  2): 1,
1440                    !eq(size,  4): 1,
1441                    !eq(size,  8): 1,
1442                    !eq(size, 16): 1,
1443                    true: 0);
1444  }
1445
1446  def Data1 {
1447    int Size = ...;
1448    bit ValidSize = isValidSize<Size>.ret;
1449  }
1450
1451Preprocessing Facilities
1452========================
1453
1454The preprocessor embedded in TableGen is intended only for simple
1455conditional compilation. It supports the following directives, which are
1456specified somewhat informally.
1457
1458.. productionlist::
1459   LineBegin: beginning of line
1460   LineEnd: newline | return | EOF
1461   WhiteSpace: space | tab
1462   CComment: "/*" ... "*/"
1463   BCPLComment: "//" ... `LineEnd`
1464   WhiteSpaceOrCComment: `WhiteSpace` | `CComment`
1465   WhiteSpaceOrAnyComment: `WhiteSpace` | `CComment` | `BCPLComment`
1466   MacroName: `ualpha` (`ualpha` | "0"..."9")*
1467   PreDefine: `LineBegin` (`WhiteSpaceOrCComment`)*
1468            : "#define" (`WhiteSpace`)+ `MacroName`
1469            : (`WhiteSpaceOrAnyComment`)* `LineEnd`
1470   PreIfdef: `LineBegin` (`WhiteSpaceOrCComment`)*
1471           : ("#ifdef" | "#ifndef") (`WhiteSpace`)+ `MacroName`
1472           : (`WhiteSpaceOrAnyComment`)* `LineEnd`
1473   PreElse: `LineBegin` (`WhiteSpaceOrCComment`)*
1474          : "#else" (`WhiteSpaceOrAnyComment`)* `LineEnd`
1475   PreEndif: `LineBegin` (`WhiteSpaceOrCComment`)*
1476           : "#endif" (`WhiteSpaceOrAnyComment`)* `LineEnd`
1477
1478..
1479   PreRegContentException: `PreIfdef` | `PreElse` | `PreEndif` | EOF
1480   PreRegion: .* - `PreRegContentException`
1481             :| `PreIfdef`
1482             :  (`PreRegion`)*
1483             :  [`PreElse`]
1484             :  (`PreRegion`)*
1485             :  `PreEndif`
1486
1487A :token:`MacroName` can be defined anywhere in a TableGen file. The name has
1488no value; it can only be tested to see whether it is defined.
1489
1490A macro test region begins with an ``#ifdef`` or ``#ifndef`` directive. If
1491the macro name is defined (``#ifdef``) or undefined (``#ifndef``), then the
1492source code between the directive and the corresponding ``#else`` or
1493``#endif`` is processed. If the test fails but there is an ``#else``
1494clause, the source code between the ``#else`` and the ``#endif`` is
1495processed. If the test fails and there is no ``#else`` clause, then no
1496source code in the test region is processed.
1497
1498Test regions may be nested, but they must be properly nested. A region
1499started in a file must end in that file; that is, must have its
1500``#endif`` in the same file.
1501
1502A :token:`MacroName` may be defined externally using the ``-D`` option on the
1503``xxx-tblgen`` command line::
1504
1505  llvm-tblgen self-reference.td -Dmacro1 -Dmacro3
1506
1507Appendix A: Bang Operators
1508==========================
1509
1510Bang operators act as functions in value expressions. A bang operator takes
1511one or more arguments, operates on them, and produces a result. If the
1512operator produces a boolean result, the result value will be 1 for true or 0
1513for false. When an operator tests a boolean argument, it interprets 0 as false
1514and non-0 as true.
1515
1516.. warning::
1517  The ``!getop`` and ``!setop`` bang operators are deprecated in favor of
1518  ``!getdagop`` and ``!setdagop``.
1519
1520``!add(``\ *a*\ ``,`` *b*\ ``, ...)``
1521    This operator adds *a*, *b*, etc., and produces the sum.
1522
1523``!and(``\ *a*\ ``,`` *b*\ ``, ...)``
1524    This operator does a bitwise AND on *a*, *b*, etc., and produces the
1525    result. A logical AND can be performed if all the arguments are either
1526    0 or 1.
1527
1528``!cast<``\ *type*\ ``>(``\ *a*\ ``)``
1529    This operator performs a cast on *a* and produces the result.
1530    If *a* is not a string, then a straightforward cast is performed, say
1531    between an ``int`` and a ``bit``, or between record types. This allows
1532    casting a record to a class. If a record is cast to ``string``, the
1533    record's name is produced.
1534
1535    If *a* is a string, then it is treated as a record name and looked up in
1536    the list of all defined records. The resulting record is expected to be of
1537    the specified *type*.
1538
1539    For example, if ``!cast<``\ *type*\ ``>(``\ *name*\ ``)``
1540    appears in a multiclass definition, or in a
1541    class instantiated inside a multiclass definition, and the *name* does not
1542    reference any template arguments of the multiclass, then a record by
1543    that name must have been instantiated earlier
1544    in the source file. If *name* does reference
1545    a template argument, then the lookup is delayed until ``defm`` statements
1546    instantiating the multiclass (or later, if the defm occurs in another
1547    multiclass and template arguments of the inner multiclass that are
1548    referenced by *name* are substituted by values that themselves contain
1549    references to template arguments of the outer multiclass).
1550
1551    If the type of *a* does not match *type*, TableGen raises an error.
1552
1553``!con(``\ *a*\ ``,`` *b*\ ``, ...)``
1554    This operator concatenates the DAG nodes *a*, *b*, etc. Their operations
1555    must equal.
1556
1557    ``!con((op a1:$name1, a2:$name2), (op b1:$name3))``
1558
1559    results in the DAG node ``(op a1:$name1, a2:$name2, b1:$name3)``.
1560
1561``!cond(``\ *cond1* ``:`` *val1*\ ``,`` *cond2* ``:`` *val2*\ ``, ...,`` *condn* ``:`` *valn*\ ``)``
1562    This operator tests *cond1* and returns *val1* if the result is true.
1563    If false, the operator tests *cond2* and returns *val2* if the result is
1564    true. And so forth. An error is reported if no conditions are true.
1565
1566    This example produces the sign word for an integer::
1567
1568    !cond(!lt(x, 0) : "negative", !eq(x, 0) : "zero", true : "positive")
1569
1570``!dag(``\ *op*\ ``,`` *arguments*\ ``,`` *names*\ ``)``
1571    This operator creates a DAG node with the given operator and
1572    arguments. The *arguments* and *names* arguments must be lists
1573    of equal length or uninitialized (``?``). The *names* argument
1574    must be of type ``list<string>``.
1575
1576    Due to limitations of the type system, *arguments* must be a list of items
1577    of a common type. In practice, this means that they should either have the
1578    same type or be records with a common superclass. Mixing ``dag`` and
1579    non-``dag`` items is not possible. However, ``?`` can be used.
1580
1581    Example: ``!dag(op, [a1, a2, ?], ["name1", "name2", "name3"])`` results in
1582    ``(op a1-value:$name1, a2-value:$name2, ?:$name3)``.
1583
1584``!empty(``\ *a*\ ``)``
1585    This operator produces 1 if the string, list, or DAG *a* is empty; 0 otherwise.
1586    A dag is empty if it has no arguments; the operator does not count.
1587
1588``!eq(`` *a*\ `,` *b*\ ``)``
1589    This operator produces 1 if *a* is equal to *b*; 0 otherwise.
1590    The arguments must be ``bit``, ``bits``, ``int``, ``string``, or
1591    record values. Use ``!cast<string>`` to compare other types of objects.
1592
1593``!filter(``\ *var*\ ``,`` *list*\ ``,`` *predicate*\ ``)``
1594
1595    This operator creates a new ``list`` by filtering the elements in
1596    *list*. To perform the filtering, TableGen binds the variable *var* to each
1597    element and then evaluates the *predicate* expression, which presumably
1598    refers to *var*. The predicate must
1599    produce a boolean value (``bit``, ``bits``, or ``int``). The value is
1600    interpreted as with ``!if``:
1601    if the value is 0, the element is not included in the new list. If the value
1602    is anything else, the element is included.
1603
1604``!foldl(``\ *init*\ ``,`` *list*\ ``,`` *acc*\ ``,`` *var*\ ``,`` *expr*\ ``)``
1605    This operator performs a left-fold over the items in *list*. The
1606    variable *acc* acts as the accumulator and is initialized to *init*.
1607    The variable *var* is bound to each element in the *list*. The
1608    expression is evaluated for each element and presumably uses *acc* and
1609    *var* to calculate the accumulated value, which ``!foldl`` stores back in
1610    *acc*. The type of *acc* is the same as *init*; the type of *var* is the
1611    same as the elements of *list*; *expr* must have the same type as *init*.
1612
1613    The following example computes the total of the ``Number`` field in the
1614    list of records in ``RecList``::
1615
1616      int x = !foldl(0, RecList, total, rec, !add(total, rec.Number));
1617
1618    If your goal is to filter the list and produce a new list that includes only
1619    some of the elements, see ``!filter``.
1620
1621``!foreach(``\ *var*\ ``,`` *sequence*\ ``,`` *expr*\ ``)``
1622    This operator creates a new ``list``/``dag`` in which each element is a
1623    function of the corresponding element in the *sequence* ``list``/``dag``.
1624    To perform the function, TableGen binds the variable *var* to an element
1625    and then evaluates the expression. The expression presumably refers
1626    to the variable *var* and calculates the result value.
1627
1628    If you simply want to create a list of a certain length containing
1629    the same value repeated multiple times, see ``!listsplat``.
1630
1631``!ge(``\ *a*\ `,` *b*\ ``)``
1632    This operator produces 1 if *a* is greater than or equal to *b*; 0 otherwise.
1633    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1634
1635``!getdagop(``\ *dag*\ ``)`` --or-- ``!getdagop<``\ *type*\ ``>(``\ *dag*\ ``)``
1636    This operator produces the operator of the given *dag* node.
1637    Example: ``!getdagop((foo 1, 2))`` results in ``foo``. Recall that
1638    DAG operators are always records.
1639
1640    The result of ``!getdagop`` can be used directly in a context where
1641    any record class at all is acceptable (typically placing it into
1642    another dag value). But in other contexts, it must be explicitly
1643    cast to a particular class. The ``<``\ *type*\ ``>`` syntax is
1644    provided to make this easy.
1645
1646    For example, to assign the result to a value of type ``BaseClass``, you
1647    could write either of these::
1648
1649      BaseClass b = !getdagop<BaseClass>(someDag);
1650      BaseClass b = !cast<BaseClass>(!getdagop(someDag));
1651
1652    But to create a new DAG node that reuses the operator from another, no
1653    cast is necessary::
1654
1655      dag d = !dag(!getdagop(someDag), args, names);
1656
1657``!gt(``\ *a*\ `,` *b*\ ``)``
1658    This operator produces 1 if *a* is greater than *b*; 0 otherwise.
1659    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1660
1661``!head(``\ *a*\ ``)``
1662    This operator produces the zeroth element of the list *a*.
1663    (See also ``!tail``.)
1664
1665``!if(``\ *test*\ ``,`` *then*\ ``,`` *else*\ ``)``
1666  This operator evaluates the *test*, which must produce a ``bit`` or
1667  ``int``. If the result is not 0, the *then* expression is produced; otherwise
1668  the *else* expression is produced.
1669
1670``!interleave(``\ *list*\ ``,`` *delim*\ ``)``
1671    This operator concatenates the items in the *list*, interleaving the
1672    *delim* string between each pair, and produces the resulting string.
1673    The list can be a list of string, int, bits, or bit. An empty list
1674    results in an empty string. The delimiter can be the empty string.
1675
1676``!isa<``\ *type*\ ``>(``\ *a*\ ``)``
1677    This operator produces 1 if the type of *a* is a subtype of the given *type*; 0
1678    otherwise.
1679
1680``!le(``\ *a*\ ``,`` *b*\ ``)``
1681    This operator produces 1 if *a* is less than or equal to *b*; 0 otherwise.
1682    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1683
1684``!listconcat(``\ *list1*\ ``,`` *list2*\ ``, ...)``
1685    This operator concatenates the list arguments *list1*, *list2*, etc., and
1686    produces the resulting list. The lists must have the same element type.
1687
1688``!listsplat(``\ *value*\ ``,`` *count*\ ``)``
1689    This operator produces a list of length *count* whose elements are all
1690    equal to the *value*. For example, ``!listsplat(42, 3)`` results in
1691    ``[42, 42, 42]``.
1692
1693``!lt(``\ *a*\ `,` *b*\ ``)``
1694    This operator produces 1 if *a* is less than *b*; 0 otherwise.
1695    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1696
1697``!mul(``\ *a*\ ``,`` *b*\ ``, ...)``
1698    This operator multiplies *a*, *b*, etc., and produces the product.
1699
1700``!ne(``\ *a*\ `,` *b*\ ``)``
1701    This operator produces 1 if *a* is not equal to *b*; 0 otherwise.
1702    The arguments must be ``bit``, ``bits``, ``int``, ``string``,
1703    or record values. Use ``!cast<string>`` to compare other types of objects.
1704
1705``!not(``\ *a*\ ``)``
1706    This operator performs a logical NOT on *a*, which must be
1707    an integer. The argument 0 results in 1 (true); any other
1708    argument results in 0 (false).
1709
1710``!or(``\ *a*\ ``,`` *b*\ ``, ...)``
1711    This operator does a bitwise OR on *a*, *b*, etc., and produces the
1712    result. A logical OR can be performed if all the arguments are either
1713    0 or 1.
1714
1715``!setdagop(``\ *dag*\ ``,`` *op*\ ``)``
1716    This operator produces a DAG node with the same arguments as *dag*, but with its
1717    operator replaced with *op*.
1718
1719    Example: ``!setdagop((foo 1, 2), bar)`` results in ``(bar 1, 2)``.
1720
1721``!shl(``\ *a*\ ``,`` *count*\ ``)``
1722    This operator shifts *a* left logically by *count* bits and produces the resulting
1723    value. The operation is performed on a 64-bit integer; the result
1724    is undefined for shift counts outside 0...63.
1725
1726``!size(``\ *a*\ ``)``
1727    This operator produces the size of the string, list, or dag *a*.
1728    The size of a DAG is the number of arguments; the operator does not count.
1729
1730``!sra(``\ *a*\ ``,`` *count*\ ``)``
1731    This operator shifts *a* right arithmetically by *count* bits and produces the resulting
1732    value. The operation is performed on a 64-bit integer; the result
1733    is undefined for shift counts outside 0...63.
1734
1735``!srl(``\ *a*\ ``,`` *count*\ ``)``
1736    This operator shifts *a* right logically by *count* bits and produces the resulting
1737    value. The operation is performed on a 64-bit integer; the result
1738    is undefined for shift counts outside 0...63.
1739
1740``!strconcat(``\ *str1*\ ``,`` *str2*\ ``, ...)``
1741    This operator concatenates the string arguments *str1*, *str2*, etc., and
1742    produces the resulting string.
1743
1744``!sub(``\ *a*\ ``,`` *b*\ ``)``
1745    This operator subtracts *b* from *a* and produces the arithmetic difference.
1746
1747``!subst(``\ *target*\ ``,`` *repl*\ ``,`` *value*\ ``)``
1748    This operator replaces all occurrences of the *target* in the *value* with
1749    the *repl* and produces the resulting value. The *value* can
1750    be a string, in which case substring substitution is performed.
1751
1752    The *value* can be a record name, in which case the operator produces the *repl*
1753    record if the *target* record name equals the *value* record name; otherwise it
1754    produces the *value*.
1755
1756``!substr(``\ *string*\ ``,`` *start*\ [``,`` *length*]\ ``)``
1757    This operator extracts a substring of the given *string*. The starting
1758    position of the substring is specified by *start*, which can range
1759    between 0 and the length of the string. The length of the substring
1760    is specified by *length*; if not specified, the rest of the string is
1761    extracted. The *start* and *length* arguments must be integers.
1762
1763``!tail(``\ *a*\ ``)``
1764    This operator produces a new list with all the elements
1765    of the list *a* except for the zeroth one. (See also ``!head``.)
1766
1767``!xor(``\ *a*\ ``,`` *b*\ ``, ...)``
1768    This operator does a bitwise EXCLUSIVE OR on *a*, *b*, etc., and produces
1769    the result. A logical XOR can be performed if all the arguments are either
1770    0 or 1.
1771
1772Appendix B: Paste Operator Examples
1773===================================
1774
1775Here is an example illustrating the use of the paste operator in record names.
1776
1777.. code-block:: text
1778
1779  defvar suffix = "_suffstring";
1780  defvar some_ints = [0, 1, 2, 3];
1781
1782  def name # suffix {
1783  }
1784
1785  foreach i = [1, 2] in {
1786  def rec # i {
1787  }
1788  }
1789
1790The first ``def`` does not use the value of the ``suffix`` variable. The
1791second def does use the value of the ``i`` iterator variable, because it is not a
1792global name. The following records are produced.
1793
1794.. code-block:: text
1795
1796  def namesuffix {
1797  }
1798  def rec1 {
1799  }
1800  def rec2 {
1801  }
1802
1803Here is a second example illustrating the paste operator in field value expressions.
1804
1805.. code-block:: text
1806
1807  def test {
1808    string strings = suffix # suffix;
1809    list<int> integers = some_ints # [4, 5, 6];
1810  }
1811
1812The ``strings`` field expression uses ``suffix`` on both sides of the paste
1813operator. It is evaluated normally on the left hand side, but taken verbatim
1814on the right hand side. The ``integers`` field expression uses the value of
1815the ``some_ints`` variable and a literal list. The following record is
1816produced.
1817
1818.. code-block:: text
1819
1820  def test {
1821    string strings = "_suffstringsuffix";
1822    list<int> ints = [0, 1, 2, 3, 4, 5, 6];
1823  }
1824
1825
1826Appendix C: Sample Record
1827=========================
1828
1829One target machine supported by LLVM is the Intel x86. The following output
1830from TableGen shows the record that is created to represent the 32-bit
1831register-to-register ADD instruction.
1832
1833.. code-block:: text
1834
1835  def ADD32rr {	// InstructionEncoding Instruction X86Inst I ITy Sched BinOpRR BinOpRR_RF
1836    int Size = 0;
1837    string DecoderNamespace = "";
1838    list<Predicate> Predicates = [];
1839    string DecoderMethod = "";
1840    bit hasCompleteDecoder = 1;
1841    string Namespace = "X86";
1842    dag OutOperandList = (outs GR32:$dst);
1843    dag InOperandList = (ins GR32:$src1, GR32:$src2);
1844    string AsmString = "add{l}	{$src2, $src1|$src1, $src2}";
1845    EncodingByHwMode EncodingInfos = ?;
1846    list<dag> Pattern = [(set GR32:$dst, EFLAGS, (X86add_flag GR32:$src1, GR32:$src2))];
1847    list<Register> Uses = [];
1848    list<Register> Defs = [EFLAGS];
1849    int CodeSize = 3;
1850    int AddedComplexity = 0;
1851    bit isPreISelOpcode = 0;
1852    bit isReturn = 0;
1853    bit isBranch = 0;
1854    bit isEHScopeReturn = 0;
1855    bit isIndirectBranch = 0;
1856    bit isCompare = 0;
1857    bit isMoveImm = 0;
1858    bit isMoveReg = 0;
1859    bit isBitcast = 0;
1860    bit isSelect = 0;
1861    bit isBarrier = 0;
1862    bit isCall = 0;
1863    bit isAdd = 0;
1864    bit isTrap = 0;
1865    bit canFoldAsLoad = 0;
1866    bit mayLoad = ?;
1867    bit mayStore = ?;
1868    bit mayRaiseFPException = 0;
1869    bit isConvertibleToThreeAddress = 1;
1870    bit isCommutable = 1;
1871    bit isTerminator = 0;
1872    bit isReMaterializable = 0;
1873    bit isPredicable = 0;
1874    bit isUnpredicable = 0;
1875    bit hasDelaySlot = 0;
1876    bit usesCustomInserter = 0;
1877    bit hasPostISelHook = 0;
1878    bit hasCtrlDep = 0;
1879    bit isNotDuplicable = 0;
1880    bit isConvergent = 0;
1881    bit isAuthenticated = 0;
1882    bit isAsCheapAsAMove = 0;
1883    bit hasExtraSrcRegAllocReq = 0;
1884    bit hasExtraDefRegAllocReq = 0;
1885    bit isRegSequence = 0;
1886    bit isPseudo = 0;
1887    bit isExtractSubreg = 0;
1888    bit isInsertSubreg = 0;
1889    bit variadicOpsAreDefs = 0;
1890    bit hasSideEffects = ?;
1891    bit isCodeGenOnly = 0;
1892    bit isAsmParserOnly = 0;
1893    bit hasNoSchedulingInfo = 0;
1894    InstrItinClass Itinerary = NoItinerary;
1895    list<SchedReadWrite> SchedRW = [WriteALU];
1896    string Constraints = "$src1 = $dst";
1897    string DisableEncoding = "";
1898    string PostEncoderMethod = "";
1899    bits<64> TSFlags = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0 };
1900    string AsmMatchConverter = "";
1901    string TwoOperandAliasConstraint = "";
1902    string AsmVariantName = "";
1903    bit UseNamedOperandTable = 0;
1904    bit FastISelShouldIgnore = 0;
1905    bits<8> Opcode = { 0, 0, 0, 0, 0, 0, 0, 1 };
1906    Format Form = MRMDestReg;
1907    bits<7> FormBits = { 0, 1, 0, 1, 0, 0, 0 };
1908    ImmType ImmT = NoImm;
1909    bit ForceDisassemble = 0;
1910    OperandSize OpSize = OpSize32;
1911    bits<2> OpSizeBits = { 1, 0 };
1912    AddressSize AdSize = AdSizeX;
1913    bits<2> AdSizeBits = { 0, 0 };
1914    Prefix OpPrefix = NoPrfx;
1915    bits<3> OpPrefixBits = { 0, 0, 0 };
1916    Map OpMap = OB;
1917    bits<3> OpMapBits = { 0, 0, 0 };
1918    bit hasREX_WPrefix = 0;
1919    FPFormat FPForm = NotFP;
1920    bit hasLockPrefix = 0;
1921    Domain ExeDomain = GenericDomain;
1922    bit hasREPPrefix = 0;
1923    Encoding OpEnc = EncNormal;
1924    bits<2> OpEncBits = { 0, 0 };
1925    bit HasVEX_W = 0;
1926    bit IgnoresVEX_W = 0;
1927    bit EVEX_W1_VEX_W0 = 0;
1928    bit hasVEX_4V = 0;
1929    bit hasVEX_L = 0;
1930    bit ignoresVEX_L = 0;
1931    bit hasEVEX_K = 0;
1932    bit hasEVEX_Z = 0;
1933    bit hasEVEX_L2 = 0;
1934    bit hasEVEX_B = 0;
1935    bits<3> CD8_Form = { 0, 0, 0 };
1936    int CD8_EltSize = 0;
1937    bit hasEVEX_RC = 0;
1938    bit hasNoTrackPrefix = 0;
1939    bits<7> VectSize = { 0, 0, 1, 0, 0, 0, 0 };
1940    bits<7> CD8_Scale = { 0, 0, 0, 0, 0, 0, 0 };
1941    string FoldGenRegForm = ?;
1942    string EVEX2VEXOverride = ?;
1943    bit isMemoryFoldable = 1;
1944    bit notEVEX2VEXConvertible = 0;
1945  }
1946
1947On the first line of the record, you can see that the ``ADD32rr`` record
1948inherited from eight classes. Although the inheritance hierarchy is complex,
1949using superclasses is much simpler than specifying the 109 individual fields for each
1950instruction.
1951
1952Here is the code fragment used to define ``ADD32rr`` and multiple other
1953``ADD`` instructions:
1954
1955.. code-block:: text
1956
1957  defm ADD : ArithBinOp_RF<0x00, 0x02, 0x04, "add", MRM0r, MRM0m,
1958                           X86add_flag, add, 1, 1, 1>;
1959
1960The ``defm`` statement tells TableGen that ``ArithBinOp_RF`` is a
1961multiclass, which contains multiple concrete record definitions that inherit
1962from ``BinOpRR_RF``. That class, in turn, inherits from ``BinOpRR``, which
1963inherits from ``ITy`` and ``Sched``, and so forth. The fields are inherited
1964from all the parent classes; for example, ``IsIndirectBranch`` is inherited
1965from the ``Instruction`` class.
1966