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 (required argument). If an
563argument is assigned a default value, then it need not be specified in the
564argument list (optional argument). In the declaration, all required template
565arguments must precede any optional arguments. The template argument default
566values are evaluated from left to right.
567
568The :token:`RecordBody` is defined below. It can include a list of
569superclasses from which the current class inherits, along with field
570definitions and other statements. When a class ``C`` inherits from another
571class ``D``, the fields of ``D`` are effectively merged into the fields of
572``C``.
573
574A given class can only be defined once. A ``class`` statement is
575considered to define the class if *any* of the following are true (the
576:token:`RecordBody` elements are described below).
577
578* The :token:`TemplateArgList` is present, or
579* The :token:`ParentClassList` in the :token:`RecordBody` is present, or
580* The :token:`Body` in the :token:`RecordBody` is present and not empty.
581
582You can declare an empty class by specifying an empty :token:`TemplateArgList`
583and an empty :token:`RecordBody`. This can serve as a restricted form of
584forward declaration. Note that records derived from a forward-declared
585class will inherit no fields from it, because those records are built when
586their declarations are parsed, and thus before the class is finally defined.
587
588.. _NAME:
589
590Every class has an implicit template argument named ``NAME`` (uppercase),
591which is bound to the name of the :token:`Def` or :token:`Defm` inheriting
592the class. The value of ``NAME`` is undefined if the class is inherited by
593an anonymous record.
594
595See `Examples: classes and records`_ for examples.
596
597Record Bodies
598`````````````
599
600Record bodies appear in both class and record definitions. A record body can
601include a parent class list, which specifies the classes from which the
602current class or record inherits fields. Such classes are called the
603superclasses or parent classes of the class or record. The record body also
604includes the main body of the definition, which contains the specification
605of the fields of the class or record.
606
607.. productionlist::
608   RecordBody: `ParentClassList` `Body`
609   ParentClassList: [":" `ParentClassListNE`]
610   ParentClassListNE: `ClassRef` ("," `ClassRef`)*
611   ClassRef: (`ClassID` | `MultiClassID`) ["<" [`ValueList`] ">"]
612
613A :token:`ParentClassList` containing a :token:`MultiClassID` is valid only
614in the class list of a ``defm`` statement. In that case, the ID must be the
615name of a multiclass.
616
617.. productionlist::
618   Body: ";" | "{" `BodyItem`* "}"
619   BodyItem: (`Type` | "code") `TokIdentifier` ["=" `Value`] ";"
620           :| "let" `TokIdentifier` ["{" `RangeList` "}"] "=" `Value` ";"
621           :| "defvar" `TokIdentifier` "=" `Value` ";"
622           :| `Assert`
623
624A field definition in the body specifies a field to be included in the class
625or record. If no initial value is specified, then the field's value is
626uninitialized. The type must be specified; TableGen will not infer it from
627the value. The keyword ``code`` may be used to emphasize that the field
628has a string value that is code.
629
630The ``let`` form is used to reset a field to a new value. This can be done
631for fields defined directly in the body or fields inherited from
632superclasses.  A :token:`RangeList` can be specified to reset certain bits
633in a ``bit<n>`` field.
634
635The ``defvar`` form defines a variable whose value can be used in other
636value expressions within the body. The variable is not a field: it does not
637become a field of the class or record being defined. Variables are provided
638to hold temporary values while processing the body. See `Defvar in a Record
639Body`_ for more details.
640
641When class ``C2`` inherits from class ``C1``, it acquires all the field
642definitions of ``C1``. As those definitions are merged into class ``C2``, any
643template arguments passed to ``C1`` by ``C2`` are substituted into the
644definitions. In other words, the abstract record fields defined by ``C1`` are
645expanded with the template arguments before being merged into ``C2``.
646
647
648.. _def:
649
650``def`` --- define a concrete record
651------------------------------------
652
653A ``def`` statement defines a new concrete record.
654
655.. productionlist::
656   Def: "def" [`NameValue`] `RecordBody`
657   NameValue: `Value` (parsed in a special manner)
658
659The name value is optional. If specified, it is parsed in a special mode
660where undefined (unrecognized) identifiers are interpreted as literal
661strings. In particular, global identifiers are considered unrecognized.
662These include global variables defined by ``defvar`` and ``defset``.
663
664If no name value is given, the record is *anonymous*. The final name of an
665anonymous record is unspecified but globally unique.
666
667Special handling occurs if a ``def`` appears inside a ``multiclass``
668statement. See the ``multiclass`` section below for details.
669
670A record can inherit from one or more classes by specifying the
671:token:`ParentClassList` clause at the beginning of its record body. All of
672the fields in the parent classes are added to the record. If two or more
673parent classes provide the same field, the record ends up with the field value
674of the last parent class.
675
676As a special case, the name of a record can be passed in a template argument
677to that record's superclasses. For example:
678
679.. code-block:: text
680
681  class A <dag d> {
682    dag the_dag = d;
683  }
684
685  def rec1 : A<(ops rec1)>
686
687The DAG ``(ops rec1)`` is passed as a template argument to class ``A``. Notice
688that the DAG includes ``rec1``, the record being defined.
689
690The steps taken to create a new record are somewhat complex. See `How
691records are built`_.
692
693See `Examples: classes and records`_ for examples.
694
695
696Examples: classes and records
697-----------------------------
698
699Here is a simple TableGen file with one class and two record definitions.
700
701.. code-block:: text
702
703  class C {
704    bit V = 1;
705  }
706
707  def X : C;
708  def Y : C {
709    let V = 0;
710    string Greeting = "Hello!";
711  }
712
713First, the abstract class ``C`` is defined. It has one field named ``V``
714that is a bit initialized to 1.
715
716Next, two records are defined, derived from class ``C``; that is, with ``C``
717as their superclass. Thus they both inherit the ``V`` field. Record ``Y``
718also defines another string field, ``Greeting``, which is initialized to
719``"Hello!"``. In addition, ``Y`` overrides the inherited ``V`` field,
720setting it to 0.
721
722A class is useful for isolating the common features of multiple records in
723one place. A class can initialize common fields to default values, but
724records inheriting from that class can override the defaults.
725
726TableGen supports the definition of parameterized classes as well as
727nonparameterized ones. Parameterized classes specify a list of variable
728declarations, which may optionally have defaults, that are bound when the
729class is specified as a superclass of another class or record.
730
731.. code-block:: text
732
733  class FPFormat <bits<3> val> {
734    bits<3> Value = val;
735  }
736
737  def NotFP      : FPFormat<0>;
738  def ZeroArgFP  : FPFormat<1>;
739  def OneArgFP   : FPFormat<2>;
740  def OneArgFPRW : FPFormat<3>;
741  def TwoArgFP   : FPFormat<4>;
742  def CompareFP  : FPFormat<5>;
743  def CondMovFP  : FPFormat<6>;
744  def SpecialFP  : FPFormat<7>;
745
746The purpose of the ``FPFormat`` class is to act as a sort of enumerated
747type. It provides a single field, ``Value``, which holds a 3-bit number. Its
748template argument, ``val``, is used to set the ``Value`` field.
749Each of the eight records is defined with ``FPFormat`` as its superclass. The
750enumeration value is passed in angle brackets as the template argument. Each
751record will inherent the ``Value`` field with the appropriate enumeration
752value.
753
754Here is a more complex example of classes with template arguments. First, we
755define a class similar to the ``FPFormat`` class above. It takes a template
756argument and uses it to initialize a field named ``Value``. Then we define
757four records that inherit the ``Value`` field with its four different
758integer values.
759
760.. code-block:: text
761
762  class ModRefVal <bits<2> val> {
763    bits<2> Value = val;
764  }
765
766  def None   : ModRefVal<0>;
767  def Mod    : ModRefVal<1>;
768  def Ref    : ModRefVal<2>;
769  def ModRef : ModRefVal<3>;
770
771This is somewhat contrived, but let's say we would like to examine the two
772bits of the ``Value`` field independently. We can define a class that
773accepts a ``ModRefVal`` record as a template argument and splits up its
774value into two fields, one bit each. Then we can define records that inherit from
775``ModRefBits`` and so acquire two fields from it, one for each bit in the
776``ModRefVal`` record passed as the template argument.
777
778.. code-block:: text
779
780  class ModRefBits <ModRefVal mrv> {
781    // Break the value up into its bits, which can provide a nice
782    // interface to the ModRefVal values.
783    bit isMod = mrv.Value{0};
784    bit isRef = mrv.Value{1};
785  }
786
787  // Example uses.
788  def foo   : ModRefBits<Mod>;
789  def bar   : ModRefBits<Ref>;
790  def snork : ModRefBits<ModRef>;
791
792This illustrates how one class can be defined to reorganize the
793fields in another class, thus hiding the internal representation of that
794other class.
795
796Running ``llvm-tblgen`` on the example prints the following definitions:
797
798.. code-block:: text
799
800  def bar {      // Value
801    bit isMod = 0;
802    bit isRef = 1;
803  }
804  def foo {      // Value
805    bit isMod = 1;
806    bit isRef = 0;
807  }
808  def snork {      // Value
809    bit isMod = 1;
810    bit isRef = 1;
811  }
812
813``let`` --- override fields in classes or records
814-------------------------------------------------
815
816A ``let`` statement collects a set of field values (sometimes called
817*bindings*) and applies them to all the classes and records defined by
818statements within the scope of the ``let``.
819
820.. productionlist::
821   Let:  "let" `LetList` "in" "{" `Statement`* "}"
822      :| "let" `LetList` "in" `Statement`
823   LetList: `LetItem` ("," `LetItem`)*
824   LetItem: `TokIdentifier` ["<" `RangeList` ">"] "=" `Value`
825
826The ``let`` statement establishes a scope, which is a sequence of statements
827in braces or a single statement with no braces. The bindings in the
828:token:`LetList` apply to the statements in that scope.
829
830The field names in the :token:`LetList` must name fields in classes inherited by
831the classes and records defined in the statements. The field values are
832applied to the classes and records *after* the records inherit all the fields from
833their superclasses. So the ``let`` acts to override inherited field
834values. A ``let`` cannot override the value of a template argument.
835
836Top-level ``let`` statements are often useful when a few fields need to be
837overriden in several records. Here are two examples. Note that ``let``
838statements can be nested.
839
840.. code-block:: text
841
842  let isTerminator = 1, isReturn = 1, isBarrier = 1, hasCtrlDep = 1 in
843    def RET : I<0xC3, RawFrm, (outs), (ins), "ret", [(X86retflag 0)]>;
844
845  let isCall = 1 in
846    // All calls clobber the non-callee saved registers...
847    let Defs = [EAX, ECX, EDX, FP0, FP1, FP2, FP3, FP4, FP5, FP6, ST0,
848                MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7, XMM0, XMM1, XMM2,
849                XMM3, XMM4, XMM5, XMM6, XMM7, EFLAGS] in {
850      def CALLpcrel32 : Ii32<0xE8, RawFrm, (outs), (ins i32imm:$dst, variable_ops),
851                             "call\t${dst:call}", []>;
852      def CALL32r     : I<0xFF, MRM2r, (outs), (ins GR32:$dst, variable_ops),
853                          "call\t{*}$dst", [(X86call GR32:$dst)]>;
854      def CALL32m     : I<0xFF, MRM2m, (outs), (ins i32mem:$dst, variable_ops),
855                          "call\t{*}$dst", []>;
856    }
857
858Note that a top-level ``let`` will not override fields defined in the classes or records
859themselves.
860
861
862``multiclass`` --- define multiple records
863------------------------------------------
864
865While classes with template arguments are a good way to factor out commonality
866between multiple records, multiclasses allow a convenient method for
867defining multiple records at once. For example, consider a 3-address
868instruction architecture whose instructions come in two formats: ``reg = reg
869op reg`` and ``reg = reg op imm`` (e.g., SPARC). We would like to specify in
870one place that these two common formats exist, then in a separate place
871specify what all the operations are. The ``multiclass`` and ``defm``
872statements accomplish this goal. You can think of a multiclass as a macro or
873template that expands into multiple records.
874
875.. productionlist::
876   MultiClass: "multiclass" `TokIdentifier` [`TemplateArgList`]
877             : [":" `ParentMultiClassList`]
878             : "{" `Statement`+ "}"
879   ParentMultiClassList: `MultiClassID` ("," `MultiClassID`)*
880   MultiClassID: `TokIdentifier`
881
882As with regular classes, the multiclass has a name and can accept template
883arguments. A multiclass can inherit from other multiclasses, which causes
884the other multiclasses to be expanded and contribute to the record
885definitions in the inheriting multiclass. The body of the multiclass
886contains a series of statements that define records, using :token:`Def` and
887:token:`Defm`. In addition, :token:`Defvar`, :token:`Foreach`, and
888:token:`Let` statements can be used to factor out even more common elements.
889The :token:`If` statement can also be used.
890
891Also as with regular classes, the multiclass has the implicit template
892argument ``NAME`` (see NAME_). When a named (non-anonymous) record is
893defined in a multiclass and the record's name does not contain a use of the
894template argument ``NAME``, such a use is automatically prepended
895to the name.  That is, the following are equivalent inside a multiclass::
896
897    def Foo ...
898    def NAME#Foo ...
899
900The records defined in a multiclass are instantiated when the multiclass is
901"invoked" by a ``defm`` statement outside the multiclass definition. Each
902``def`` statement produces a record. As with top-level ``def`` statements,
903these definitions can inherit from multiple superclasses.
904
905See `Examples: multiclasses and defms`_ for examples.
906
907
908``defm`` --- invoke multiclasses to define multiple records
909-----------------------------------------------------------
910
911Once multiclasses have been defined, you use the ``defm`` statement to
912"invoke" multiclasses and process the multiple record definitions in those
913multiclasses. Those record definitions are specified by ``def``
914statements in the multiclasses, and indirectly by ``defm`` statements.
915
916.. productionlist::
917   Defm: "defm" [`NameValue`] `ParentClassList` ";"
918
919The optional :token:`NameValue` is formed in the same way as the name of a
920``def``. The :token:`ParentClassList` is a colon followed by a list of at least one
921multiclass and any number of regular classes. The multiclasses must
922precede the regular classes. Note that the ``defm`` does not have a body.
923
924This statement instantiates all the records defined in all the specified
925multiclasses, either directly by ``def`` statements or indirectly by
926``defm`` statements. These records also receive the fields defined in any
927regular classes included in the parent class list. This is useful for adding
928a common set of fields to all the records created by the ``defm``.
929
930The name is parsed in the same special mode used by ``def``. If the name is
931not included, a globally unique name is provided. That is, the following
932examples end up with different names::
933
934    defm    : SomeMultiClass<...>;   // A globally unique name.
935    defm "" : SomeMultiClass<...>;   // An empty name.
936
937The ``defm`` statement can be used in a multiclass body. When this occurs,
938the second variant is equivalent to::
939
940  defm NAME : SomeMultiClass<...>;
941
942More generally, when ``defm`` occurs in a multiclass and its name does not
943include a use of the implicit template argument ``NAME``, then ``NAME`` will
944be prepended automatically. That is, the following are equivalent inside a
945multiclass::
946
947    defm Foo      : SomeMultiClass<...>;
948    defm NAME#Foo : SomeMultiClass<...>;
949
950See `Examples: multiclasses and defms`_ for examples.
951
952Examples: multiclasses and defms
953--------------------------------
954
955Here is a simple example using ``multiclass`` and ``defm``.  Consider a
9563-address instruction architecture whose instructions come in two formats:
957``reg = reg op reg`` and ``reg = reg op imm`` (immediate). The SPARC is an
958example of such an architecture.
959
960.. code-block:: text
961
962  def ops;
963  def GPR;
964  def Imm;
965  class inst <int opc, string asmstr, dag operandlist>;
966
967  multiclass ri_inst <int opc, string asmstr> {
968    def _rr : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
969                     (ops GPR:$dst, GPR:$src1, GPR:$src2)>;
970    def _ri : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
971                     (ops GPR:$dst, GPR:$src1, Imm:$src2)>;
972  }
973
974  // Define records for each instruction in the RR and RI formats.
975  defm ADD : ri_inst<0b111, "add">;
976  defm SUB : ri_inst<0b101, "sub">;
977  defm MUL : ri_inst<0b100, "mul">;
978
979Each use of the ``ri_inst`` multiclass defines two records, one with the
980``_rr`` suffix and one with ``_ri``. Recall that the name of the ``defm``
981that uses a multiclass is prepended to the names of the records defined in
982that multiclass. So the resulting definitions are named::
983
984  ADD_rr, ADD_ri
985  SUB_rr, SUB_ri
986  MUL_rr, MUL_ri
987
988Without the ``multiclass`` feature, the instructions would have to be
989defined as follows.
990
991.. code-block:: text
992
993  def ops;
994  def GPR;
995  def Imm;
996  class inst <int opc, string asmstr, dag operandlist>;
997
998  class rrinst <int opc, string asmstr>
999    : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
1000             (ops GPR:$dst, GPR:$src1, GPR:$src2)>;
1001
1002  class riinst <int opc, string asmstr>
1003    : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
1004             (ops GPR:$dst, GPR:$src1, Imm:$src2)>;
1005
1006  // Define records for each instruction in the RR and RI formats.
1007  def ADD_rr : rrinst<0b111, "add">;
1008  def ADD_ri : riinst<0b111, "add">;
1009  def SUB_rr : rrinst<0b101, "sub">;
1010  def SUB_ri : riinst<0b101, "sub">;
1011  def MUL_rr : rrinst<0b100, "mul">;
1012  def MUL_ri : riinst<0b100, "mul">;
1013
1014A ``defm`` can be used in a multiclass to "invoke" other multiclasses and
1015create the records defined in those multiclasses in addition to the records
1016defined in the current multiclass. In the following example, the ``basic_s``
1017and ``basic_p`` multiclasses contain ``defm`` statements that refer to the
1018``basic_r`` multiclass. The ``basic_r`` multiclass contains only ``def``
1019statements.
1020
1021.. code-block:: text
1022
1023  class Instruction <bits<4> opc, string Name> {
1024    bits<4> opcode = opc;
1025    string name = Name;
1026  }
1027
1028  multiclass basic_r <bits<4> opc> {
1029    def rr : Instruction<opc, "rr">;
1030    def rm : Instruction<opc, "rm">;
1031  }
1032
1033  multiclass basic_s <bits<4> opc> {
1034    defm SS : basic_r<opc>;
1035    defm SD : basic_r<opc>;
1036    def X : Instruction<opc, "x">;
1037  }
1038
1039  multiclass basic_p <bits<4> opc> {
1040    defm PS : basic_r<opc>;
1041    defm PD : basic_r<opc>;
1042    def Y : Instruction<opc, "y">;
1043  }
1044
1045  defm ADD : basic_s<0xf>, basic_p<0xf>;
1046
1047The final ``defm`` creates the following records, five from the ``basic_s``
1048multiclass and five from the ``basic_p`` multiclass::
1049
1050  ADDSSrr, ADDSSrm
1051  ADDSDrr, ADDSDrm
1052  ADDX
1053  ADDPSrr, ADDPSrm
1054  ADDPDrr, ADDPDrm
1055  ADDY
1056
1057A ``defm`` statement, both at top level and in a multiclass, can inherit
1058from regular classes in addition to multiclasses. The rule is that the
1059regular classes must be listed after the multiclasses, and there must be at least
1060one multiclass.
1061
1062.. code-block:: text
1063
1064  class XD {
1065    bits<4> Prefix = 11;
1066  }
1067  class XS {
1068    bits<4> Prefix = 12;
1069  }
1070  class I <bits<4> op> {
1071    bits<4> opcode = op;
1072  }
1073
1074  multiclass R {
1075    def rr : I<4>;
1076    def rm : I<2>;
1077  }
1078
1079  multiclass Y {
1080    defm SS : R, XD;    // First multiclass R, then regular class XD.
1081    defm SD : R, XS;
1082  }
1083
1084  defm Instr : Y;
1085
1086This example will create four records, shown here in alphabetical order with
1087their fields.
1088
1089.. code-block:: text
1090
1091  def InstrSDrm {
1092    bits<4> opcode = { 0, 0, 1, 0 };
1093    bits<4> Prefix = { 1, 1, 0, 0 };
1094  }
1095
1096  def InstrSDrr {
1097    bits<4> opcode = { 0, 1, 0, 0 };
1098    bits<4> Prefix = { 1, 1, 0, 0 };
1099  }
1100
1101  def InstrSSrm {
1102    bits<4> opcode = { 0, 0, 1, 0 };
1103    bits<4> Prefix = { 1, 0, 1, 1 };
1104  }
1105
1106  def InstrSSrr {
1107    bits<4> opcode = { 0, 1, 0, 0 };
1108    bits<4> Prefix = { 1, 0, 1, 1 };
1109  }
1110
1111It's also possible to use ``let`` statements inside multiclasses, providing
1112another way to factor out commonality from the records, especially when
1113using several levels of multiclass instantiations.
1114
1115.. code-block:: text
1116
1117  multiclass basic_r <bits<4> opc> {
1118    let Predicates = [HasSSE2] in {
1119      def rr : Instruction<opc, "rr">;
1120      def rm : Instruction<opc, "rm">;
1121    }
1122    let Predicates = [HasSSE3] in
1123      def rx : Instruction<opc, "rx">;
1124  }
1125
1126  multiclass basic_ss <bits<4> opc> {
1127    let IsDouble = 0 in
1128      defm SS : basic_r<opc>;
1129
1130    let IsDouble = 1 in
1131      defm SD : basic_r<opc>;
1132  }
1133
1134  defm ADD : basic_ss<0xf>;
1135
1136
1137``defset`` --- create a definition set
1138--------------------------------------
1139
1140The ``defset`` statement is used to collect a set of records into a global
1141list of records.
1142
1143.. productionlist::
1144   Defset: "defset" `Type` `TokIdentifier` "=" "{" `Statement`* "}"
1145
1146All records defined inside the braces via ``def`` and ``defm`` are defined
1147as usual, and they are also collected in a global list of the given name
1148(:token:`TokIdentifier`).
1149
1150The specified type must be ``list<``\ *class*\ ``>``, where *class* is some
1151record class.  The ``defset`` statement establishes a scope for its
1152statements. It is an error to define a record in the scope of the
1153``defset`` that is not of type *class*.
1154
1155The ``defset`` statement can be nested. The inner ``defset`` adds the
1156records to its own set, and all those records are also added to the outer
1157set.
1158
1159Anonymous records created inside initialization expressions using the
1160``ClassID<...>`` syntax are not collected in the set.
1161
1162
1163``defvar`` --- define a variable
1164--------------------------------
1165
1166A ``defvar`` statement defines a global variable. Its value can be used
1167throughout the statements that follow the definition.
1168
1169.. productionlist::
1170   Defvar: "defvar" `TokIdentifier` "=" `Value` ";"
1171
1172The identifier on the left of the ``=`` is defined to be a global variable
1173whose value is given by the value expression on the right of the ``=``. The
1174type of the variable is automatically inferred.
1175
1176Once a variable has been defined, it cannot be set to another value.
1177
1178Variables defined in a top-level ``foreach`` go out of scope at the end of
1179each loop iteration, so their value in one iteration is not available in
1180the next iteration.  The following ``defvar`` will not work::
1181
1182  defvar i = !add(i, 1)
1183
1184Variables can also be defined with ``defvar`` in a record body. See
1185`Defvar in a Record Body`_ for more details.
1186
1187``foreach`` --- iterate over a sequence of statements
1188-----------------------------------------------------
1189
1190The ``foreach`` statement iterates over a series of statements, varying a
1191variable over a sequence of values.
1192
1193.. productionlist::
1194   Foreach: "foreach" `ForeachIterator` "in" "{" `Statement`* "}"
1195          :| "foreach" `ForeachIterator` "in" `Statement`
1196   ForeachIterator: `TokIdentifier` "=" ("{" `RangeList` "}" | `RangePiece` | `Value`)
1197
1198The body of the ``foreach`` is a series of statements in braces or a
1199single statement with no braces. The statements are re-evaluated once for
1200each value in the range list, range piece, or single value. On each
1201iteration, the :token:`TokIdentifier` variable is set to the value and can
1202be used in the statements.
1203
1204The statement list establishes an inner scope. Variables local to a
1205``foreach`` go out of scope at the end of each loop iteration, so their
1206values do not carry over from one iteration to the next. Foreach loops may
1207be nested.
1208
1209The ``foreach`` statement can also be used in a record :token:`Body`.
1210
1211.. Note that the productions involving RangeList and RangePiece have precedence
1212   over the more generic value parsing based on the first token.
1213
1214.. code-block:: text
1215
1216  foreach i = [0, 1, 2, 3] in {
1217    def R#i : Register<...>;
1218    def F#i : Register<...>;
1219  }
1220
1221This loop defines records named ``R0``, ``R1``, ``R2``, and ``R3``, along
1222with ``F0``, ``F1``, ``F2``, and ``F3``.
1223
1224
1225``if`` --- select statements based on a test
1226--------------------------------------------
1227
1228The ``if`` statement allows one of two statement groups to be selected based
1229on the value of an expression.
1230
1231.. productionlist::
1232   If: "if" `Value` "then" `IfBody`
1233     :| "if" `Value` "then" `IfBody` "else" `IfBody`
1234   IfBody: "{" `Statement`* "}" | `Statement`
1235
1236The value expression is evaluated. If it evaluates to true (in the same
1237sense used by the bang operators), then the statements following the
1238``then`` reserved word are processed. Otherwise, if there is an ``else``
1239reserved word, the statements following the ``else`` are processed. If the
1240value is false and there is no ``else`` arm, no statements are processed.
1241
1242Because the braces around the ``then`` statements are optional, this grammar rule
1243has the usual ambiguity with "dangling else" clauses, and it is resolved in
1244the usual way: in a case like ``if v1 then if v2 then {...} else {...}``, the
1245``else`` associates with the inner ``if`` rather than the outer one.
1246
1247The :token:`IfBody` of the then and else arms of the ``if`` establish an
1248inner scope. Any ``defvar`` variables defined in the bodies go out of scope
1249when the bodies are finished (see `Defvar in a Record Body`_ for more details).
1250
1251The ``if`` statement can also be used in a record :token:`Body`.
1252
1253
1254``assert`` --- check that a condition is true
1255---------------------------------------------
1256
1257The ``assert`` statement checks a boolean condition to be sure that it is true
1258and prints an error message if it is not.
1259
1260.. productionlist::
1261   Assert: "assert" `condition` "," `message` ";"
1262
1263If the boolean condition is true, the statement does nothing. If the
1264condition is false, it prints a nonfatal error message. The **message**, which
1265can be an arbitrary string expression, is included in the error message as a
1266note. The exact behavior of the ``assert`` statement depends on its
1267placement.
1268
1269* At top level, the assertion is checked immediately.
1270
1271* In a record definition, the statement is saved and all assertions are
1272  checked after the record is completely built.
1273
1274* In a class definition, the assertions are saved and inherited by all
1275  the record definitions that inherit from the class. The assertions are
1276  then checked when the records are completely built. [this placement is not
1277  yet available]
1278
1279* In a multiclass definition, ... [this placement is not yet available]
1280
1281
1282Additional Details
1283==================
1284
1285Directed acyclic graphs (DAGs)
1286------------------------------
1287
1288A directed acyclic graph can be represented directly in TableGen using the
1289``dag`` datatype. A DAG node consists of an operator and zero or more
1290arguments (or operands). Each argument can be of any desired type. By using
1291another DAG node as an argument, an arbitrary graph of DAG nodes can be
1292built.
1293
1294The syntax of a ``dag`` instance is:
1295
1296  ``(`` *operator* *argument1*\ ``,`` *argument2*\ ``,`` ... ``)``
1297
1298The operator must be present and must be a record. There can be zero or more
1299arguments, separated by commas. The operator and arguments can have three
1300formats.
1301
1302====================== =============================================
1303Format                 Meaning
1304====================== =============================================
1305*value*                argument value
1306*value*\ ``:``\ *name* argument value and associated name
1307*name*                 argument name with unset (uninitialized) value
1308====================== =============================================
1309
1310The *value* can be any TableGen value. The *name*, if present, must be a
1311:token:`TokVarName`, which starts with a dollar sign (``$``). The purpose of
1312a name is to tag an operator or argument in a DAG with a particular meaning,
1313or to associate an argument in one DAG with a like-named argument in another
1314DAG.
1315
1316The following bang operators are useful for working with DAGs:
1317``!con``, ``!dag``, ``!empty``, ``!foreach``, ``!getdagop``, ``!setdagop``, ``!size``.
1318
1319Defvar in a record body
1320-----------------------
1321
1322In addition to defining global variables, the ``defvar`` statement can
1323be used inside the :token:`Body` of a class or record definition to define
1324local variables. The scope of the variable extends from the ``defvar``
1325statement to the end of the body. It cannot be set to a different value
1326within its scope. The ``defvar`` statement can also be used in the statement
1327list of a ``foreach``, which establishes a scope.
1328
1329A variable named ``V`` in an inner scope shadows (hides) any variables ``V``
1330in outer scopes. In particular, ``V`` in a record body shadows a global
1331``V``, and ``V`` in a ``foreach`` statement list shadows any ``V`` in
1332surrounding record or global scopes.
1333
1334Variables defined in a ``foreach`` go out of scope at the end of
1335each loop iteration, so their value in one iteration is not available in
1336the next iteration.  The following ``defvar`` will not work::
1337
1338  defvar i = !add(i, 1)
1339
1340How records are built
1341---------------------
1342
1343The following steps are taken by TableGen when a record is built. Classes are simply
1344abstract records and so go through the same steps.
1345
13461. Build the record name (:token:`NameValue`) and create an empty record.
1347
13482. Parse the superclasses in the :token:`ParentClassList` from left to
1349   right, visiting each superclass's ancestor classes from top to bottom.
1350
1351  a. Add the fields from the superclass to the record.
1352  b. Substitute the template arguments into those fields.
1353  c. Add the superclass to the record's list of inherited classes.
1354
13553. Apply any top-level ``let`` bindings to the record. Recall that top-level
1356   bindings only apply to inherited fields.
1357
13584. Parse the body of the record.
1359
1360  * Add any fields to the record.
1361  * Modify the values of fields according to local ``let`` statements.
1362  * Define any ``defvar`` variables.
1363
13645. Make a pass over all the fields to resolve any inter-field references.
1365
13666. Add the record to the master record list.
1367
1368Because references between fields are resolved (step 5) after ``let`` bindings are
1369applied (step 3), the ``let`` statement has unusual power. For example:
1370
1371.. code-block:: text
1372
1373  class C <int x> {
1374    int Y = x;
1375    int Yplus1 = !add(Y, 1);
1376    int xplus1 = !add(x, 1);
1377  }
1378
1379  let Y = 10 in {
1380    def rec1 : C<5> {
1381    }
1382  }
1383
1384  def rec2 : C<5> {
1385    let Y = 10;
1386  }
1387
1388In both cases, one where a top-level ``let`` is used to bind ``Y`` and one
1389where a local ``let`` does the same thing, the results are:
1390
1391.. code-block:: text
1392
1393  def rec1 {      // C
1394    int Y = 10;
1395    int Yplus1 = 11;
1396    int xplus1 = 6;
1397  }
1398  def rec2 {      // C
1399    int Y = 10;
1400    int Yplus1 = 11;
1401    int xplus1 = 6;
1402  }
1403
1404``Yplus1`` is 11 because the ``let Y`` is performed before the ``!add(Y,
14051)`` is resolved. Use this power wisely.
1406
1407
1408Using Classes as Subroutines
1409============================
1410
1411As described in `Simple values`_, a class can be invoked in an expression
1412and passed template arguments. This causes TableGen to create a new anonymous
1413record inheriting from that class. As usual, the record receives all the
1414fields defined in the class.
1415
1416This feature can be employed as a simple subroutine facility. The class can
1417use the template arguments to define various variables and fields, which end
1418up in the anonymous record. Those fields can then be retrieved in the
1419expression invoking the class as follows. Assume that the field ``ret``
1420contains the final value of the subroutine.
1421
1422.. code-block:: text
1423
1424  int Result = ... CalcValue<arg>.ret ...;
1425
1426The ``CalcValue`` class is invoked with the template argument ``arg``. It
1427calculates a value for the ``ret`` field, which is then retrieved at the
1428"point of call" in the initialization for the Result field. The anonymous
1429record created in this example serves no other purpose than to carry the
1430result value.
1431
1432Here is a practical example. The class ``isValidSize`` determines whether a
1433specified number of bytes represents a valid data size. The bit ``ret`` is
1434set appropriately. The field ``ValidSize`` obtains its initial value by
1435invoking ``isValidSize`` with the data size and retrieving the ``ret`` field
1436from the resulting anonymous record.
1437
1438.. code-block:: text
1439
1440  class isValidSize<int size> {
1441    bit ret = !cond(!eq(size,  1): 1,
1442                    !eq(size,  2): 1,
1443                    !eq(size,  4): 1,
1444                    !eq(size,  8): 1,
1445                    !eq(size, 16): 1,
1446                    true: 0);
1447  }
1448
1449  def Data1 {
1450    int Size = ...;
1451    bit ValidSize = isValidSize<Size>.ret;
1452  }
1453
1454Preprocessing Facilities
1455========================
1456
1457The preprocessor embedded in TableGen is intended only for simple
1458conditional compilation. It supports the following directives, which are
1459specified somewhat informally.
1460
1461.. productionlist::
1462   LineBegin: beginning of line
1463   LineEnd: newline | return | EOF
1464   WhiteSpace: space | tab
1465   CComment: "/*" ... "*/"
1466   BCPLComment: "//" ... `LineEnd`
1467   WhiteSpaceOrCComment: `WhiteSpace` | `CComment`
1468   WhiteSpaceOrAnyComment: `WhiteSpace` | `CComment` | `BCPLComment`
1469   MacroName: `ualpha` (`ualpha` | "0"..."9")*
1470   PreDefine: `LineBegin` (`WhiteSpaceOrCComment`)*
1471            : "#define" (`WhiteSpace`)+ `MacroName`
1472            : (`WhiteSpaceOrAnyComment`)* `LineEnd`
1473   PreIfdef: `LineBegin` (`WhiteSpaceOrCComment`)*
1474           : ("#ifdef" | "#ifndef") (`WhiteSpace`)+ `MacroName`
1475           : (`WhiteSpaceOrAnyComment`)* `LineEnd`
1476   PreElse: `LineBegin` (`WhiteSpaceOrCComment`)*
1477          : "#else" (`WhiteSpaceOrAnyComment`)* `LineEnd`
1478   PreEndif: `LineBegin` (`WhiteSpaceOrCComment`)*
1479           : "#endif" (`WhiteSpaceOrAnyComment`)* `LineEnd`
1480
1481..
1482   PreRegContentException: `PreIfdef` | `PreElse` | `PreEndif` | EOF
1483   PreRegion: .* - `PreRegContentException`
1484             :| `PreIfdef`
1485             :  (`PreRegion`)*
1486             :  [`PreElse`]
1487             :  (`PreRegion`)*
1488             :  `PreEndif`
1489
1490A :token:`MacroName` can be defined anywhere in a TableGen file. The name has
1491no value; it can only be tested to see whether it is defined.
1492
1493A macro test region begins with an ``#ifdef`` or ``#ifndef`` directive. If
1494the macro name is defined (``#ifdef``) or undefined (``#ifndef``), then the
1495source code between the directive and the corresponding ``#else`` or
1496``#endif`` is processed. If the test fails but there is an ``#else``
1497clause, the source code between the ``#else`` and the ``#endif`` is
1498processed. If the test fails and there is no ``#else`` clause, then no
1499source code in the test region is processed.
1500
1501Test regions may be nested, but they must be properly nested. A region
1502started in a file must end in that file; that is, must have its
1503``#endif`` in the same file.
1504
1505A :token:`MacroName` may be defined externally using the ``-D`` option on the
1506``xxx-tblgen`` command line::
1507
1508  llvm-tblgen self-reference.td -Dmacro1 -Dmacro3
1509
1510Appendix A: Bang Operators
1511==========================
1512
1513Bang operators act as functions in value expressions. A bang operator takes
1514one or more arguments, operates on them, and produces a result. If the
1515operator produces a boolean result, the result value will be 1 for true or 0
1516for false. When an operator tests a boolean argument, it interprets 0 as false
1517and non-0 as true.
1518
1519.. warning::
1520  The ``!getop`` and ``!setop`` bang operators are deprecated in favor of
1521  ``!getdagop`` and ``!setdagop``.
1522
1523``!add(``\ *a*\ ``,`` *b*\ ``, ...)``
1524    This operator adds *a*, *b*, etc., and produces the sum.
1525
1526``!and(``\ *a*\ ``,`` *b*\ ``, ...)``
1527    This operator does a bitwise AND on *a*, *b*, etc., and produces the
1528    result. A logical AND can be performed if all the arguments are either
1529    0 or 1.
1530
1531``!cast<``\ *type*\ ``>(``\ *a*\ ``)``
1532    This operator performs a cast on *a* and produces the result.
1533    If *a* is not a string, then a straightforward cast is performed, say
1534    between an ``int`` and a ``bit``, or between record types. This allows
1535    casting a record to a class. If a record is cast to ``string``, the
1536    record's name is produced.
1537
1538    If *a* is a string, then it is treated as a record name and looked up in
1539    the list of all defined records. The resulting record is expected to be of
1540    the specified *type*.
1541
1542    For example, if ``!cast<``\ *type*\ ``>(``\ *name*\ ``)``
1543    appears in a multiclass definition, or in a
1544    class instantiated inside a multiclass definition, and the *name* does not
1545    reference any template arguments of the multiclass, then a record by
1546    that name must have been instantiated earlier
1547    in the source file. If *name* does reference
1548    a template argument, then the lookup is delayed until ``defm`` statements
1549    instantiating the multiclass (or later, if the defm occurs in another
1550    multiclass and template arguments of the inner multiclass that are
1551    referenced by *name* are substituted by values that themselves contain
1552    references to template arguments of the outer multiclass).
1553
1554    If the type of *a* does not match *type*, TableGen raises an error.
1555
1556``!con(``\ *a*\ ``,`` *b*\ ``, ...)``
1557    This operator concatenates the DAG nodes *a*, *b*, etc. Their operations
1558    must equal.
1559
1560    ``!con((op a1:$name1, a2:$name2), (op b1:$name3))``
1561
1562    results in the DAG node ``(op a1:$name1, a2:$name2, b1:$name3)``.
1563
1564``!cond(``\ *cond1* ``:`` *val1*\ ``,`` *cond2* ``:`` *val2*\ ``, ...,`` *condn* ``:`` *valn*\ ``)``
1565    This operator tests *cond1* and returns *val1* if the result is true.
1566    If false, the operator tests *cond2* and returns *val2* if the result is
1567    true. And so forth. An error is reported if no conditions are true.
1568
1569    This example produces the sign word for an integer::
1570
1571    !cond(!lt(x, 0) : "negative", !eq(x, 0) : "zero", true : "positive")
1572
1573``!dag(``\ *op*\ ``,`` *arguments*\ ``,`` *names*\ ``)``
1574    This operator creates a DAG node with the given operator and
1575    arguments. The *arguments* and *names* arguments must be lists
1576    of equal length or uninitialized (``?``). The *names* argument
1577    must be of type ``list<string>``.
1578
1579    Due to limitations of the type system, *arguments* must be a list of items
1580    of a common type. In practice, this means that they should either have the
1581    same type or be records with a common superclass. Mixing ``dag`` and
1582    non-``dag`` items is not possible. However, ``?`` can be used.
1583
1584    Example: ``!dag(op, [a1, a2, ?], ["name1", "name2", "name3"])`` results in
1585    ``(op a1-value:$name1, a2-value:$name2, ?:$name3)``.
1586
1587``!empty(``\ *a*\ ``)``
1588    This operator produces 1 if the string, list, or DAG *a* is empty; 0 otherwise.
1589    A dag is empty if it has no arguments; the operator does not count.
1590
1591``!eq(`` *a*\ `,` *b*\ ``)``
1592    This operator produces 1 if *a* is equal to *b*; 0 otherwise.
1593    The arguments must be ``bit``, ``bits``, ``int``, ``string``, or
1594    record values. Use ``!cast<string>`` to compare other types of objects.
1595
1596``!filter(``\ *var*\ ``,`` *list*\ ``,`` *predicate*\ ``)``
1597
1598    This operator creates a new ``list`` by filtering the elements in
1599    *list*. To perform the filtering, TableGen binds the variable *var* to each
1600    element and then evaluates the *predicate* expression, which presumably
1601    refers to *var*. The predicate must
1602    produce a boolean value (``bit``, ``bits``, or ``int``). The value is
1603    interpreted as with ``!if``:
1604    if the value is 0, the element is not included in the new list. If the value
1605    is anything else, the element is included.
1606
1607``!foldl(``\ *init*\ ``,`` *list*\ ``,`` *acc*\ ``,`` *var*\ ``,`` *expr*\ ``)``
1608    This operator performs a left-fold over the items in *list*. The
1609    variable *acc* acts as the accumulator and is initialized to *init*.
1610    The variable *var* is bound to each element in the *list*. The
1611    expression is evaluated for each element and presumably uses *acc* and
1612    *var* to calculate the accumulated value, which ``!foldl`` stores back in
1613    *acc*. The type of *acc* is the same as *init*; the type of *var* is the
1614    same as the elements of *list*; *expr* must have the same type as *init*.
1615
1616    The following example computes the total of the ``Number`` field in the
1617    list of records in ``RecList``::
1618
1619      int x = !foldl(0, RecList, total, rec, !add(total, rec.Number));
1620
1621    If your goal is to filter the list and produce a new list that includes only
1622    some of the elements, see ``!filter``.
1623
1624``!foreach(``\ *var*\ ``,`` *sequence*\ ``,`` *expr*\ ``)``
1625    This operator creates a new ``list``/``dag`` in which each element is a
1626    function of the corresponding element in the *sequence* ``list``/``dag``.
1627    To perform the function, TableGen binds the variable *var* to an element
1628    and then evaluates the expression. The expression presumably refers
1629    to the variable *var* and calculates the result value.
1630
1631    If you simply want to create a list of a certain length containing
1632    the same value repeated multiple times, see ``!listsplat``.
1633
1634``!ge(``\ *a*\ `,` *b*\ ``)``
1635    This operator produces 1 if *a* is greater than or equal to *b*; 0 otherwise.
1636    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1637
1638``!getdagop(``\ *dag*\ ``)`` --or-- ``!getdagop<``\ *type*\ ``>(``\ *dag*\ ``)``
1639    This operator produces the operator of the given *dag* node.
1640    Example: ``!getdagop((foo 1, 2))`` results in ``foo``. Recall that
1641    DAG operators are always records.
1642
1643    The result of ``!getdagop`` can be used directly in a context where
1644    any record class at all is acceptable (typically placing it into
1645    another dag value). But in other contexts, it must be explicitly
1646    cast to a particular class. The ``<``\ *type*\ ``>`` syntax is
1647    provided to make this easy.
1648
1649    For example, to assign the result to a value of type ``BaseClass``, you
1650    could write either of these::
1651
1652      BaseClass b = !getdagop<BaseClass>(someDag);
1653      BaseClass b = !cast<BaseClass>(!getdagop(someDag));
1654
1655    But to create a new DAG node that reuses the operator from another, no
1656    cast is necessary::
1657
1658      dag d = !dag(!getdagop(someDag), args, names);
1659
1660``!gt(``\ *a*\ `,` *b*\ ``)``
1661    This operator produces 1 if *a* is greater than *b*; 0 otherwise.
1662    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1663
1664``!head(``\ *a*\ ``)``
1665    This operator produces the zeroth element of the list *a*.
1666    (See also ``!tail``.)
1667
1668``!if(``\ *test*\ ``,`` *then*\ ``,`` *else*\ ``)``
1669  This operator evaluates the *test*, which must produce a ``bit`` or
1670  ``int``. If the result is not 0, the *then* expression is produced; otherwise
1671  the *else* expression is produced.
1672
1673``!interleave(``\ *list*\ ``,`` *delim*\ ``)``
1674    This operator concatenates the items in the *list*, interleaving the
1675    *delim* string between each pair, and produces the resulting string.
1676    The list can be a list of string, int, bits, or bit. An empty list
1677    results in an empty string. The delimiter can be the empty string.
1678
1679``!isa<``\ *type*\ ``>(``\ *a*\ ``)``
1680    This operator produces 1 if the type of *a* is a subtype of the given *type*; 0
1681    otherwise.
1682
1683``!le(``\ *a*\ ``,`` *b*\ ``)``
1684    This operator produces 1 if *a* is less than or equal to *b*; 0 otherwise.
1685    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1686
1687``!listconcat(``\ *list1*\ ``,`` *list2*\ ``, ...)``
1688    This operator concatenates the list arguments *list1*, *list2*, etc., and
1689    produces the resulting list. The lists must have the same element type.
1690
1691``!listsplat(``\ *value*\ ``,`` *count*\ ``)``
1692    This operator produces a list of length *count* whose elements are all
1693    equal to the *value*. For example, ``!listsplat(42, 3)`` results in
1694    ``[42, 42, 42]``.
1695
1696``!lt(``\ *a*\ `,` *b*\ ``)``
1697    This operator produces 1 if *a* is less than *b*; 0 otherwise.
1698    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1699
1700``!mul(``\ *a*\ ``,`` *b*\ ``, ...)``
1701    This operator multiplies *a*, *b*, etc., and produces the product.
1702
1703``!ne(``\ *a*\ `,` *b*\ ``)``
1704    This operator produces 1 if *a* is not equal to *b*; 0 otherwise.
1705    The arguments must be ``bit``, ``bits``, ``int``, ``string``,
1706    or record values. Use ``!cast<string>`` to compare other types of objects.
1707
1708``!not(``\ *a*\ ``)``
1709    This operator performs a logical NOT on *a*, which must be
1710    an integer. The argument 0 results in 1 (true); any other
1711    argument results in 0 (false).
1712
1713``!or(``\ *a*\ ``,`` *b*\ ``, ...)``
1714    This operator does a bitwise OR on *a*, *b*, etc., and produces the
1715    result. A logical OR can be performed if all the arguments are either
1716    0 or 1.
1717
1718``!setdagop(``\ *dag*\ ``,`` *op*\ ``)``
1719    This operator produces a DAG node with the same arguments as *dag*, but with its
1720    operator replaced with *op*.
1721
1722    Example: ``!setdagop((foo 1, 2), bar)`` results in ``(bar 1, 2)``.
1723
1724``!shl(``\ *a*\ ``,`` *count*\ ``)``
1725    This operator shifts *a* left logically by *count* bits and produces the resulting
1726    value. The operation is performed on a 64-bit integer; the result
1727    is undefined for shift counts outside 0...63.
1728
1729``!size(``\ *a*\ ``)``
1730    This operator produces the size of the string, list, or dag *a*.
1731    The size of a DAG is the number of arguments; the operator does not count.
1732
1733``!sra(``\ *a*\ ``,`` *count*\ ``)``
1734    This operator shifts *a* right arithmetically by *count* bits and produces the resulting
1735    value. The operation is performed on a 64-bit integer; the result
1736    is undefined for shift counts outside 0...63.
1737
1738``!srl(``\ *a*\ ``,`` *count*\ ``)``
1739    This operator shifts *a* right logically by *count* bits and produces the resulting
1740    value. The operation is performed on a 64-bit integer; the result
1741    is undefined for shift counts outside 0...63.
1742
1743``!strconcat(``\ *str1*\ ``,`` *str2*\ ``, ...)``
1744    This operator concatenates the string arguments *str1*, *str2*, etc., and
1745    produces the resulting string.
1746
1747``!sub(``\ *a*\ ``,`` *b*\ ``)``
1748    This operator subtracts *b* from *a* and produces the arithmetic difference.
1749
1750``!subst(``\ *target*\ ``,`` *repl*\ ``,`` *value*\ ``)``
1751    This operator replaces all occurrences of the *target* in the *value* with
1752    the *repl* and produces the resulting value. The *value* can
1753    be a string, in which case substring substitution is performed.
1754
1755    The *value* can be a record name, in which case the operator produces the *repl*
1756    record if the *target* record name equals the *value* record name; otherwise it
1757    produces the *value*.
1758
1759``!substr(``\ *string*\ ``,`` *start*\ [``,`` *length*]\ ``)``
1760    This operator extracts a substring of the given *string*. The starting
1761    position of the substring is specified by *start*, which can range
1762    between 0 and the length of the string. The length of the substring
1763    is specified by *length*; if not specified, the rest of the string is
1764    extracted. The *start* and *length* arguments must be integers.
1765
1766``!tail(``\ *a*\ ``)``
1767    This operator produces a new list with all the elements
1768    of the list *a* except for the zeroth one. (See also ``!head``.)
1769
1770``!xor(``\ *a*\ ``,`` *b*\ ``, ...)``
1771    This operator does a bitwise EXCLUSIVE OR on *a*, *b*, etc., and produces
1772    the result. A logical XOR can be performed if all the arguments are either
1773    0 or 1.
1774
1775Appendix B: Paste Operator Examples
1776===================================
1777
1778Here is an example illustrating the use of the paste operator in record names.
1779
1780.. code-block:: text
1781
1782  defvar suffix = "_suffstring";
1783  defvar some_ints = [0, 1, 2, 3];
1784
1785  def name # suffix {
1786  }
1787
1788  foreach i = [1, 2] in {
1789  def rec # i {
1790  }
1791  }
1792
1793The first ``def`` does not use the value of the ``suffix`` variable. The
1794second def does use the value of the ``i`` iterator variable, because it is not a
1795global name. The following records are produced.
1796
1797.. code-block:: text
1798
1799  def namesuffix {
1800  }
1801  def rec1 {
1802  }
1803  def rec2 {
1804  }
1805
1806Here is a second example illustrating the paste operator in field value expressions.
1807
1808.. code-block:: text
1809
1810  def test {
1811    string strings = suffix # suffix;
1812    list<int> integers = some_ints # [4, 5, 6];
1813  }
1814
1815The ``strings`` field expression uses ``suffix`` on both sides of the paste
1816operator. It is evaluated normally on the left hand side, but taken verbatim
1817on the right hand side. The ``integers`` field expression uses the value of
1818the ``some_ints`` variable and a literal list. The following record is
1819produced.
1820
1821.. code-block:: text
1822
1823  def test {
1824    string strings = "_suffstringsuffix";
1825    list<int> ints = [0, 1, 2, 3, 4, 5, 6];
1826  }
1827
1828
1829Appendix C: Sample Record
1830=========================
1831
1832One target machine supported by LLVM is the Intel x86. The following output
1833from TableGen shows the record that is created to represent the 32-bit
1834register-to-register ADD instruction.
1835
1836.. code-block:: text
1837
1838  def ADD32rr {	// InstructionEncoding Instruction X86Inst I ITy Sched BinOpRR BinOpRR_RF
1839    int Size = 0;
1840    string DecoderNamespace = "";
1841    list<Predicate> Predicates = [];
1842    string DecoderMethod = "";
1843    bit hasCompleteDecoder = 1;
1844    string Namespace = "X86";
1845    dag OutOperandList = (outs GR32:$dst);
1846    dag InOperandList = (ins GR32:$src1, GR32:$src2);
1847    string AsmString = "add{l}	{$src2, $src1|$src1, $src2}";
1848    EncodingByHwMode EncodingInfos = ?;
1849    list<dag> Pattern = [(set GR32:$dst, EFLAGS, (X86add_flag GR32:$src1, GR32:$src2))];
1850    list<Register> Uses = [];
1851    list<Register> Defs = [EFLAGS];
1852    int CodeSize = 3;
1853    int AddedComplexity = 0;
1854    bit isPreISelOpcode = 0;
1855    bit isReturn = 0;
1856    bit isBranch = 0;
1857    bit isEHScopeReturn = 0;
1858    bit isIndirectBranch = 0;
1859    bit isCompare = 0;
1860    bit isMoveImm = 0;
1861    bit isMoveReg = 0;
1862    bit isBitcast = 0;
1863    bit isSelect = 0;
1864    bit isBarrier = 0;
1865    bit isCall = 0;
1866    bit isAdd = 0;
1867    bit isTrap = 0;
1868    bit canFoldAsLoad = 0;
1869    bit mayLoad = ?;
1870    bit mayStore = ?;
1871    bit mayRaiseFPException = 0;
1872    bit isConvertibleToThreeAddress = 1;
1873    bit isCommutable = 1;
1874    bit isTerminator = 0;
1875    bit isReMaterializable = 0;
1876    bit isPredicable = 0;
1877    bit isUnpredicable = 0;
1878    bit hasDelaySlot = 0;
1879    bit usesCustomInserter = 0;
1880    bit hasPostISelHook = 0;
1881    bit hasCtrlDep = 0;
1882    bit isNotDuplicable = 0;
1883    bit isConvergent = 0;
1884    bit isAuthenticated = 0;
1885    bit isAsCheapAsAMove = 0;
1886    bit hasExtraSrcRegAllocReq = 0;
1887    bit hasExtraDefRegAllocReq = 0;
1888    bit isRegSequence = 0;
1889    bit isPseudo = 0;
1890    bit isExtractSubreg = 0;
1891    bit isInsertSubreg = 0;
1892    bit variadicOpsAreDefs = 0;
1893    bit hasSideEffects = ?;
1894    bit isCodeGenOnly = 0;
1895    bit isAsmParserOnly = 0;
1896    bit hasNoSchedulingInfo = 0;
1897    InstrItinClass Itinerary = NoItinerary;
1898    list<SchedReadWrite> SchedRW = [WriteALU];
1899    string Constraints = "$src1 = $dst";
1900    string DisableEncoding = "";
1901    string PostEncoderMethod = "";
1902    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 };
1903    string AsmMatchConverter = "";
1904    string TwoOperandAliasConstraint = "";
1905    string AsmVariantName = "";
1906    bit UseNamedOperandTable = 0;
1907    bit FastISelShouldIgnore = 0;
1908    bits<8> Opcode = { 0, 0, 0, 0, 0, 0, 0, 1 };
1909    Format Form = MRMDestReg;
1910    bits<7> FormBits = { 0, 1, 0, 1, 0, 0, 0 };
1911    ImmType ImmT = NoImm;
1912    bit ForceDisassemble = 0;
1913    OperandSize OpSize = OpSize32;
1914    bits<2> OpSizeBits = { 1, 0 };
1915    AddressSize AdSize = AdSizeX;
1916    bits<2> AdSizeBits = { 0, 0 };
1917    Prefix OpPrefix = NoPrfx;
1918    bits<3> OpPrefixBits = { 0, 0, 0 };
1919    Map OpMap = OB;
1920    bits<3> OpMapBits = { 0, 0, 0 };
1921    bit hasREX_WPrefix = 0;
1922    FPFormat FPForm = NotFP;
1923    bit hasLockPrefix = 0;
1924    Domain ExeDomain = GenericDomain;
1925    bit hasREPPrefix = 0;
1926    Encoding OpEnc = EncNormal;
1927    bits<2> OpEncBits = { 0, 0 };
1928    bit HasVEX_W = 0;
1929    bit IgnoresVEX_W = 0;
1930    bit EVEX_W1_VEX_W0 = 0;
1931    bit hasVEX_4V = 0;
1932    bit hasVEX_L = 0;
1933    bit ignoresVEX_L = 0;
1934    bit hasEVEX_K = 0;
1935    bit hasEVEX_Z = 0;
1936    bit hasEVEX_L2 = 0;
1937    bit hasEVEX_B = 0;
1938    bits<3> CD8_Form = { 0, 0, 0 };
1939    int CD8_EltSize = 0;
1940    bit hasEVEX_RC = 0;
1941    bit hasNoTrackPrefix = 0;
1942    bits<7> VectSize = { 0, 0, 1, 0, 0, 0, 0 };
1943    bits<7> CD8_Scale = { 0, 0, 0, 0, 0, 0, 0 };
1944    string FoldGenRegForm = ?;
1945    string EVEX2VEXOverride = ?;
1946    bit isMemoryFoldable = 1;
1947    bit notEVEX2VEXConvertible = 0;
1948  }
1949
1950On the first line of the record, you can see that the ``ADD32rr`` record
1951inherited from eight classes. Although the inheritance hierarchy is complex,
1952using superclasses is much simpler than specifying the 109 individual fields for each
1953instruction.
1954
1955Here is the code fragment used to define ``ADD32rr`` and multiple other
1956``ADD`` instructions:
1957
1958.. code-block:: text
1959
1960  defm ADD : ArithBinOp_RF<0x00, 0x02, 0x04, "add", MRM0r, MRM0m,
1961                           X86add_flag, add, 1, 1, 1>;
1962
1963The ``defm`` statement tells TableGen that ``ArithBinOp_RF`` is a
1964multiclass, which contains multiple concrete record definitions that inherit
1965from ``BinOpRR_RF``. That class, in turn, inherits from ``BinOpRR``, which
1966inherits from ``ITy`` and ``Sched``, and so forth. The fields are inherited
1967from all the parent classes; for example, ``IsIndirectBranch`` is inherited
1968from the ``Instruction`` class.
1969