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 subclasses and records that inherit from the class. The assertions are
1276  then checked when the records are completely built.
1277
1278* In a multiclass definition, ... [this placement is not yet available]
1279
1280Using assertions in TableGen files can simplify record checking in TableGen
1281backends. Here is an example of an ``assert`` in two class definitions.
1282
1283.. code-block:: text
1284
1285  class PersonName<string name> {
1286    assert !le(!size(name), 32), "person name is too long: " # name;
1287    string Name = name;
1288  }
1289
1290  class Person<string name, int age> : PersonName<name> {
1291    assert !and(!ge(age, 1), !le(age, 120)), "person age is invalid: " # age;
1292    int Age = age;
1293  }
1294
1295  def Rec20 : Person<"Donald Knuth", 60> {
1296    ...
1297  }
1298
1299
1300Additional Details
1301==================
1302
1303Directed acyclic graphs (DAGs)
1304------------------------------
1305
1306A directed acyclic graph can be represented directly in TableGen using the
1307``dag`` datatype. A DAG node consists of an operator and zero or more
1308arguments (or operands). Each argument can be of any desired type. By using
1309another DAG node as an argument, an arbitrary graph of DAG nodes can be
1310built.
1311
1312The syntax of a ``dag`` instance is:
1313
1314  ``(`` *operator* *argument1*\ ``,`` *argument2*\ ``,`` ... ``)``
1315
1316The operator must be present and must be a record. There can be zero or more
1317arguments, separated by commas. The operator and arguments can have three
1318formats.
1319
1320====================== =============================================
1321Format                 Meaning
1322====================== =============================================
1323*value*                argument value
1324*value*\ ``:``\ *name* argument value and associated name
1325*name*                 argument name with unset (uninitialized) value
1326====================== =============================================
1327
1328The *value* can be any TableGen value. The *name*, if present, must be a
1329:token:`TokVarName`, which starts with a dollar sign (``$``). The purpose of
1330a name is to tag an operator or argument in a DAG with a particular meaning,
1331or to associate an argument in one DAG with a like-named argument in another
1332DAG.
1333
1334The following bang operators are useful for working with DAGs:
1335``!con``, ``!dag``, ``!empty``, ``!foreach``, ``!getdagop``, ``!setdagop``, ``!size``.
1336
1337Defvar in a record body
1338-----------------------
1339
1340In addition to defining global variables, the ``defvar`` statement can
1341be used inside the :token:`Body` of a class or record definition to define
1342local variables. The scope of the variable extends from the ``defvar``
1343statement to the end of the body. It cannot be set to a different value
1344within its scope. The ``defvar`` statement can also be used in the statement
1345list of a ``foreach``, which establishes a scope.
1346
1347A variable named ``V`` in an inner scope shadows (hides) any variables ``V``
1348in outer scopes. In particular, ``V`` in a record body shadows a global
1349``V``, and ``V`` in a ``foreach`` statement list shadows any ``V`` in
1350surrounding record or global scopes.
1351
1352Variables defined in a ``foreach`` go out of scope at the end of
1353each loop iteration, so their value in one iteration is not available in
1354the next iteration.  The following ``defvar`` will not work::
1355
1356  defvar i = !add(i, 1)
1357
1358How records are built
1359---------------------
1360
1361The following steps are taken by TableGen when a record is built. Classes are simply
1362abstract records and so go through the same steps.
1363
13641. Build the record name (:token:`NameValue`) and create an empty record.
1365
13662. Parse the superclasses in the :token:`ParentClassList` from left to
1367   right, visiting each superclass's ancestor classes from top to bottom.
1368
1369  a. Add the fields from the superclass to the record.
1370  b. Substitute the template arguments into those fields.
1371  c. Add the superclass to the record's list of inherited classes.
1372
13733. Apply any top-level ``let`` bindings to the record. Recall that top-level
1374   bindings only apply to inherited fields.
1375
13764. Parse the body of the record.
1377
1378  * Add any fields to the record.
1379  * Modify the values of fields according to local ``let`` statements.
1380  * Define any ``defvar`` variables.
1381
13825. Make a pass over all the fields to resolve any inter-field references.
1383
13846. Add the record to the master record list.
1385
1386Because references between fields are resolved (step 5) after ``let`` bindings are
1387applied (step 3), the ``let`` statement has unusual power. For example:
1388
1389.. code-block:: text
1390
1391  class C <int x> {
1392    int Y = x;
1393    int Yplus1 = !add(Y, 1);
1394    int xplus1 = !add(x, 1);
1395  }
1396
1397  let Y = 10 in {
1398    def rec1 : C<5> {
1399    }
1400  }
1401
1402  def rec2 : C<5> {
1403    let Y = 10;
1404  }
1405
1406In both cases, one where a top-level ``let`` is used to bind ``Y`` and one
1407where a local ``let`` does the same thing, the results are:
1408
1409.. code-block:: text
1410
1411  def rec1 {      // C
1412    int Y = 10;
1413    int Yplus1 = 11;
1414    int xplus1 = 6;
1415  }
1416  def rec2 {      // C
1417    int Y = 10;
1418    int Yplus1 = 11;
1419    int xplus1 = 6;
1420  }
1421
1422``Yplus1`` is 11 because the ``let Y`` is performed before the ``!add(Y,
14231)`` is resolved. Use this power wisely.
1424
1425
1426Using Classes as Subroutines
1427============================
1428
1429As described in `Simple values`_, a class can be invoked in an expression
1430and passed template arguments. This causes TableGen to create a new anonymous
1431record inheriting from that class. As usual, the record receives all the
1432fields defined in the class.
1433
1434This feature can be employed as a simple subroutine facility. The class can
1435use the template arguments to define various variables and fields, which end
1436up in the anonymous record. Those fields can then be retrieved in the
1437expression invoking the class as follows. Assume that the field ``ret``
1438contains the final value of the subroutine.
1439
1440.. code-block:: text
1441
1442  int Result = ... CalcValue<arg>.ret ...;
1443
1444The ``CalcValue`` class is invoked with the template argument ``arg``. It
1445calculates a value for the ``ret`` field, which is then retrieved at the
1446"point of call" in the initialization for the Result field. The anonymous
1447record created in this example serves no other purpose than to carry the
1448result value.
1449
1450Here is a practical example. The class ``isValidSize`` determines whether a
1451specified number of bytes represents a valid data size. The bit ``ret`` is
1452set appropriately. The field ``ValidSize`` obtains its initial value by
1453invoking ``isValidSize`` with the data size and retrieving the ``ret`` field
1454from the resulting anonymous record.
1455
1456.. code-block:: text
1457
1458  class isValidSize<int size> {
1459    bit ret = !cond(!eq(size,  1): 1,
1460                    !eq(size,  2): 1,
1461                    !eq(size,  4): 1,
1462                    !eq(size,  8): 1,
1463                    !eq(size, 16): 1,
1464                    true: 0);
1465  }
1466
1467  def Data1 {
1468    int Size = ...;
1469    bit ValidSize = isValidSize<Size>.ret;
1470  }
1471
1472Preprocessing Facilities
1473========================
1474
1475The preprocessor embedded in TableGen is intended only for simple
1476conditional compilation. It supports the following directives, which are
1477specified somewhat informally.
1478
1479.. productionlist::
1480   LineBegin: beginning of line
1481   LineEnd: newline | return | EOF
1482   WhiteSpace: space | tab
1483   CComment: "/*" ... "*/"
1484   BCPLComment: "//" ... `LineEnd`
1485   WhiteSpaceOrCComment: `WhiteSpace` | `CComment`
1486   WhiteSpaceOrAnyComment: `WhiteSpace` | `CComment` | `BCPLComment`
1487   MacroName: `ualpha` (`ualpha` | "0"..."9")*
1488   PreDefine: `LineBegin` (`WhiteSpaceOrCComment`)*
1489            : "#define" (`WhiteSpace`)+ `MacroName`
1490            : (`WhiteSpaceOrAnyComment`)* `LineEnd`
1491   PreIfdef: `LineBegin` (`WhiteSpaceOrCComment`)*
1492           : ("#ifdef" | "#ifndef") (`WhiteSpace`)+ `MacroName`
1493           : (`WhiteSpaceOrAnyComment`)* `LineEnd`
1494   PreElse: `LineBegin` (`WhiteSpaceOrCComment`)*
1495          : "#else" (`WhiteSpaceOrAnyComment`)* `LineEnd`
1496   PreEndif: `LineBegin` (`WhiteSpaceOrCComment`)*
1497           : "#endif" (`WhiteSpaceOrAnyComment`)* `LineEnd`
1498
1499..
1500   PreRegContentException: `PreIfdef` | `PreElse` | `PreEndif` | EOF
1501   PreRegion: .* - `PreRegContentException`
1502             :| `PreIfdef`
1503             :  (`PreRegion`)*
1504             :  [`PreElse`]
1505             :  (`PreRegion`)*
1506             :  `PreEndif`
1507
1508A :token:`MacroName` can be defined anywhere in a TableGen file. The name has
1509no value; it can only be tested to see whether it is defined.
1510
1511A macro test region begins with an ``#ifdef`` or ``#ifndef`` directive. If
1512the macro name is defined (``#ifdef``) or undefined (``#ifndef``), then the
1513source code between the directive and the corresponding ``#else`` or
1514``#endif`` is processed. If the test fails but there is an ``#else``
1515clause, the source code between the ``#else`` and the ``#endif`` is
1516processed. If the test fails and there is no ``#else`` clause, then no
1517source code in the test region is processed.
1518
1519Test regions may be nested, but they must be properly nested. A region
1520started in a file must end in that file; that is, must have its
1521``#endif`` in the same file.
1522
1523A :token:`MacroName` may be defined externally using the ``-D`` option on the
1524``xxx-tblgen`` command line::
1525
1526  llvm-tblgen self-reference.td -Dmacro1 -Dmacro3
1527
1528Appendix A: Bang Operators
1529==========================
1530
1531Bang operators act as functions in value expressions. A bang operator takes
1532one or more arguments, operates on them, and produces a result. If the
1533operator produces a boolean result, the result value will be 1 for true or 0
1534for false. When an operator tests a boolean argument, it interprets 0 as false
1535and non-0 as true.
1536
1537.. warning::
1538  The ``!getop`` and ``!setop`` bang operators are deprecated in favor of
1539  ``!getdagop`` and ``!setdagop``.
1540
1541``!add(``\ *a*\ ``,`` *b*\ ``, ...)``
1542    This operator adds *a*, *b*, etc., and produces the sum.
1543
1544``!and(``\ *a*\ ``,`` *b*\ ``, ...)``
1545    This operator does a bitwise AND on *a*, *b*, etc., and produces the
1546    result. A logical AND can be performed if all the arguments are either
1547    0 or 1.
1548
1549``!cast<``\ *type*\ ``>(``\ *a*\ ``)``
1550    This operator performs a cast on *a* and produces the result.
1551    If *a* is not a string, then a straightforward cast is performed, say
1552    between an ``int`` and a ``bit``, or between record types. This allows
1553    casting a record to a class. If a record is cast to ``string``, the
1554    record's name is produced.
1555
1556    If *a* is a string, then it is treated as a record name and looked up in
1557    the list of all defined records. The resulting record is expected to be of
1558    the specified *type*.
1559
1560    For example, if ``!cast<``\ *type*\ ``>(``\ *name*\ ``)``
1561    appears in a multiclass definition, or in a
1562    class instantiated inside a multiclass definition, and the *name* does not
1563    reference any template arguments of the multiclass, then a record by
1564    that name must have been instantiated earlier
1565    in the source file. If *name* does reference
1566    a template argument, then the lookup is delayed until ``defm`` statements
1567    instantiating the multiclass (or later, if the defm occurs in another
1568    multiclass and template arguments of the inner multiclass that are
1569    referenced by *name* are substituted by values that themselves contain
1570    references to template arguments of the outer multiclass).
1571
1572    If the type of *a* does not match *type*, TableGen raises an error.
1573
1574``!con(``\ *a*\ ``,`` *b*\ ``, ...)``
1575    This operator concatenates the DAG nodes *a*, *b*, etc. Their operations
1576    must equal.
1577
1578    ``!con((op a1:$name1, a2:$name2), (op b1:$name3))``
1579
1580    results in the DAG node ``(op a1:$name1, a2:$name2, b1:$name3)``.
1581
1582``!cond(``\ *cond1* ``:`` *val1*\ ``,`` *cond2* ``:`` *val2*\ ``, ...,`` *condn* ``:`` *valn*\ ``)``
1583    This operator tests *cond1* and returns *val1* if the result is true.
1584    If false, the operator tests *cond2* and returns *val2* if the result is
1585    true. And so forth. An error is reported if no conditions are true.
1586
1587    This example produces the sign word for an integer::
1588
1589    !cond(!lt(x, 0) : "negative", !eq(x, 0) : "zero", true : "positive")
1590
1591``!dag(``\ *op*\ ``,`` *arguments*\ ``,`` *names*\ ``)``
1592    This operator creates a DAG node with the given operator and
1593    arguments. The *arguments* and *names* arguments must be lists
1594    of equal length or uninitialized (``?``). The *names* argument
1595    must be of type ``list<string>``.
1596
1597    Due to limitations of the type system, *arguments* must be a list of items
1598    of a common type. In practice, this means that they should either have the
1599    same type or be records with a common superclass. Mixing ``dag`` and
1600    non-``dag`` items is not possible. However, ``?`` can be used.
1601
1602    Example: ``!dag(op, [a1, a2, ?], ["name1", "name2", "name3"])`` results in
1603    ``(op a1-value:$name1, a2-value:$name2, ?:$name3)``.
1604
1605``!empty(``\ *a*\ ``)``
1606    This operator produces 1 if the string, list, or DAG *a* is empty; 0 otherwise.
1607    A dag is empty if it has no arguments; the operator does not count.
1608
1609``!eq(`` *a*\ `,` *b*\ ``)``
1610    This operator produces 1 if *a* is equal to *b*; 0 otherwise.
1611    The arguments must be ``bit``, ``bits``, ``int``, ``string``, or
1612    record values. Use ``!cast<string>`` to compare other types of objects.
1613
1614``!filter(``\ *var*\ ``,`` *list*\ ``,`` *predicate*\ ``)``
1615
1616    This operator creates a new ``list`` by filtering the elements in
1617    *list*. To perform the filtering, TableGen binds the variable *var* to each
1618    element and then evaluates the *predicate* expression, which presumably
1619    refers to *var*. The predicate must
1620    produce a boolean value (``bit``, ``bits``, or ``int``). The value is
1621    interpreted as with ``!if``:
1622    if the value is 0, the element is not included in the new list. If the value
1623    is anything else, the element is included.
1624
1625``!foldl(``\ *init*\ ``,`` *list*\ ``,`` *acc*\ ``,`` *var*\ ``,`` *expr*\ ``)``
1626    This operator performs a left-fold over the items in *list*. The
1627    variable *acc* acts as the accumulator and is initialized to *init*.
1628    The variable *var* is bound to each element in the *list*. The
1629    expression is evaluated for each element and presumably uses *acc* and
1630    *var* to calculate the accumulated value, which ``!foldl`` stores back in
1631    *acc*. The type of *acc* is the same as *init*; the type of *var* is the
1632    same as the elements of *list*; *expr* must have the same type as *init*.
1633
1634    The following example computes the total of the ``Number`` field in the
1635    list of records in ``RecList``::
1636
1637      int x = !foldl(0, RecList, total, rec, !add(total, rec.Number));
1638
1639    If your goal is to filter the list and produce a new list that includes only
1640    some of the elements, see ``!filter``.
1641
1642``!foreach(``\ *var*\ ``,`` *sequence*\ ``,`` *expr*\ ``)``
1643    This operator creates a new ``list``/``dag`` in which each element is a
1644    function of the corresponding element in the *sequence* ``list``/``dag``.
1645    To perform the function, TableGen binds the variable *var* to an element
1646    and then evaluates the expression. The expression presumably refers
1647    to the variable *var* and calculates the result value.
1648
1649    If you simply want to create a list of a certain length containing
1650    the same value repeated multiple times, see ``!listsplat``.
1651
1652``!ge(``\ *a*\ `,` *b*\ ``)``
1653    This operator produces 1 if *a* is greater than or equal to *b*; 0 otherwise.
1654    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1655
1656``!getdagop(``\ *dag*\ ``)`` --or-- ``!getdagop<``\ *type*\ ``>(``\ *dag*\ ``)``
1657    This operator produces the operator of the given *dag* node.
1658    Example: ``!getdagop((foo 1, 2))`` results in ``foo``. Recall that
1659    DAG operators are always records.
1660
1661    The result of ``!getdagop`` can be used directly in a context where
1662    any record class at all is acceptable (typically placing it into
1663    another dag value). But in other contexts, it must be explicitly
1664    cast to a particular class. The ``<``\ *type*\ ``>`` syntax is
1665    provided to make this easy.
1666
1667    For example, to assign the result to a value of type ``BaseClass``, you
1668    could write either of these::
1669
1670      BaseClass b = !getdagop<BaseClass>(someDag);
1671      BaseClass b = !cast<BaseClass>(!getdagop(someDag));
1672
1673    But to create a new DAG node that reuses the operator from another, no
1674    cast is necessary::
1675
1676      dag d = !dag(!getdagop(someDag), args, names);
1677
1678``!gt(``\ *a*\ `,` *b*\ ``)``
1679    This operator produces 1 if *a* is greater than *b*; 0 otherwise.
1680    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1681
1682``!head(``\ *a*\ ``)``
1683    This operator produces the zeroth element of the list *a*.
1684    (See also ``!tail``.)
1685
1686``!if(``\ *test*\ ``,`` *then*\ ``,`` *else*\ ``)``
1687  This operator evaluates the *test*, which must produce a ``bit`` or
1688  ``int``. If the result is not 0, the *then* expression is produced; otherwise
1689  the *else* expression is produced.
1690
1691``!interleave(``\ *list*\ ``,`` *delim*\ ``)``
1692    This operator concatenates the items in the *list*, interleaving the
1693    *delim* string between each pair, and produces the resulting string.
1694    The list can be a list of string, int, bits, or bit. An empty list
1695    results in an empty string. The delimiter can be the empty string.
1696
1697``!isa<``\ *type*\ ``>(``\ *a*\ ``)``
1698    This operator produces 1 if the type of *a* is a subtype of the given *type*; 0
1699    otherwise.
1700
1701``!le(``\ *a*\ ``,`` *b*\ ``)``
1702    This operator produces 1 if *a* is less than or equal to *b*; 0 otherwise.
1703    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1704
1705``!listconcat(``\ *list1*\ ``,`` *list2*\ ``, ...)``
1706    This operator concatenates the list arguments *list1*, *list2*, etc., and
1707    produces the resulting list. The lists must have the same element type.
1708
1709``!listsplat(``\ *value*\ ``,`` *count*\ ``)``
1710    This operator produces a list of length *count* whose elements are all
1711    equal to the *value*. For example, ``!listsplat(42, 3)`` results in
1712    ``[42, 42, 42]``.
1713
1714``!lt(``\ *a*\ `,` *b*\ ``)``
1715    This operator produces 1 if *a* is less than *b*; 0 otherwise.
1716    The arguments must be ``bit``, ``bits``, ``int``, or ``string`` values.
1717
1718``!mul(``\ *a*\ ``,`` *b*\ ``, ...)``
1719    This operator multiplies *a*, *b*, etc., and produces the product.
1720
1721``!ne(``\ *a*\ `,` *b*\ ``)``
1722    This operator produces 1 if *a* is not equal to *b*; 0 otherwise.
1723    The arguments must be ``bit``, ``bits``, ``int``, ``string``,
1724    or record values. Use ``!cast<string>`` to compare other types of objects.
1725
1726``!not(``\ *a*\ ``)``
1727    This operator performs a logical NOT on *a*, which must be
1728    an integer. The argument 0 results in 1 (true); any other
1729    argument results in 0 (false).
1730
1731``!or(``\ *a*\ ``,`` *b*\ ``, ...)``
1732    This operator does a bitwise OR on *a*, *b*, etc., and produces the
1733    result. A logical OR can be performed if all the arguments are either
1734    0 or 1.
1735
1736``!setdagop(``\ *dag*\ ``,`` *op*\ ``)``
1737    This operator produces a DAG node with the same arguments as *dag*, but with its
1738    operator replaced with *op*.
1739
1740    Example: ``!setdagop((foo 1, 2), bar)`` results in ``(bar 1, 2)``.
1741
1742``!shl(``\ *a*\ ``,`` *count*\ ``)``
1743    This operator shifts *a* left logically by *count* bits and produces the resulting
1744    value. The operation is performed on a 64-bit integer; the result
1745    is undefined for shift counts outside 0...63.
1746
1747``!size(``\ *a*\ ``)``
1748    This operator produces the size of the string, list, or dag *a*.
1749    The size of a DAG is the number of arguments; the operator does not count.
1750
1751``!sra(``\ *a*\ ``,`` *count*\ ``)``
1752    This operator shifts *a* right arithmetically by *count* bits and produces the resulting
1753    value. The operation is performed on a 64-bit integer; the result
1754    is undefined for shift counts outside 0...63.
1755
1756``!srl(``\ *a*\ ``,`` *count*\ ``)``
1757    This operator shifts *a* right logically by *count* bits and produces the resulting
1758    value. The operation is performed on a 64-bit integer; the result
1759    is undefined for shift counts outside 0...63.
1760
1761``!strconcat(``\ *str1*\ ``,`` *str2*\ ``, ...)``
1762    This operator concatenates the string arguments *str1*, *str2*, etc., and
1763    produces the resulting string.
1764
1765``!sub(``\ *a*\ ``,`` *b*\ ``)``
1766    This operator subtracts *b* from *a* and produces the arithmetic difference.
1767
1768``!subst(``\ *target*\ ``,`` *repl*\ ``,`` *value*\ ``)``
1769    This operator replaces all occurrences of the *target* in the *value* with
1770    the *repl* and produces the resulting value. The *value* can
1771    be a string, in which case substring substitution is performed.
1772
1773    The *value* can be a record name, in which case the operator produces the *repl*
1774    record if the *target* record name equals the *value* record name; otherwise it
1775    produces the *value*.
1776
1777``!substr(``\ *string*\ ``,`` *start*\ [``,`` *length*]\ ``)``
1778    This operator extracts a substring of the given *string*. The starting
1779    position of the substring is specified by *start*, which can range
1780    between 0 and the length of the string. The length of the substring
1781    is specified by *length*; if not specified, the rest of the string is
1782    extracted. The *start* and *length* arguments must be integers.
1783
1784``!tail(``\ *a*\ ``)``
1785    This operator produces a new list with all the elements
1786    of the list *a* except for the zeroth one. (See also ``!head``.)
1787
1788``!xor(``\ *a*\ ``,`` *b*\ ``, ...)``
1789    This operator does a bitwise EXCLUSIVE OR on *a*, *b*, etc., and produces
1790    the result. A logical XOR can be performed if all the arguments are either
1791    0 or 1.
1792
1793Appendix B: Paste Operator Examples
1794===================================
1795
1796Here is an example illustrating the use of the paste operator in record names.
1797
1798.. code-block:: text
1799
1800  defvar suffix = "_suffstring";
1801  defvar some_ints = [0, 1, 2, 3];
1802
1803  def name # suffix {
1804  }
1805
1806  foreach i = [1, 2] in {
1807  def rec # i {
1808  }
1809  }
1810
1811The first ``def`` does not use the value of the ``suffix`` variable. The
1812second def does use the value of the ``i`` iterator variable, because it is not a
1813global name. The following records are produced.
1814
1815.. code-block:: text
1816
1817  def namesuffix {
1818  }
1819  def rec1 {
1820  }
1821  def rec2 {
1822  }
1823
1824Here is a second example illustrating the paste operator in field value expressions.
1825
1826.. code-block:: text
1827
1828  def test {
1829    string strings = suffix # suffix;
1830    list<int> integers = some_ints # [4, 5, 6];
1831  }
1832
1833The ``strings`` field expression uses ``suffix`` on both sides of the paste
1834operator. It is evaluated normally on the left hand side, but taken verbatim
1835on the right hand side. The ``integers`` field expression uses the value of
1836the ``some_ints`` variable and a literal list. The following record is
1837produced.
1838
1839.. code-block:: text
1840
1841  def test {
1842    string strings = "_suffstringsuffix";
1843    list<int> ints = [0, 1, 2, 3, 4, 5, 6];
1844  }
1845
1846
1847Appendix C: Sample Record
1848=========================
1849
1850One target machine supported by LLVM is the Intel x86. The following output
1851from TableGen shows the record that is created to represent the 32-bit
1852register-to-register ADD instruction.
1853
1854.. code-block:: text
1855
1856  def ADD32rr {	// InstructionEncoding Instruction X86Inst I ITy Sched BinOpRR BinOpRR_RF
1857    int Size = 0;
1858    string DecoderNamespace = "";
1859    list<Predicate> Predicates = [];
1860    string DecoderMethod = "";
1861    bit hasCompleteDecoder = 1;
1862    string Namespace = "X86";
1863    dag OutOperandList = (outs GR32:$dst);
1864    dag InOperandList = (ins GR32:$src1, GR32:$src2);
1865    string AsmString = "add{l}	{$src2, $src1|$src1, $src2}";
1866    EncodingByHwMode EncodingInfos = ?;
1867    list<dag> Pattern = [(set GR32:$dst, EFLAGS, (X86add_flag GR32:$src1, GR32:$src2))];
1868    list<Register> Uses = [];
1869    list<Register> Defs = [EFLAGS];
1870    int CodeSize = 3;
1871    int AddedComplexity = 0;
1872    bit isPreISelOpcode = 0;
1873    bit isReturn = 0;
1874    bit isBranch = 0;
1875    bit isEHScopeReturn = 0;
1876    bit isIndirectBranch = 0;
1877    bit isCompare = 0;
1878    bit isMoveImm = 0;
1879    bit isMoveReg = 0;
1880    bit isBitcast = 0;
1881    bit isSelect = 0;
1882    bit isBarrier = 0;
1883    bit isCall = 0;
1884    bit isAdd = 0;
1885    bit isTrap = 0;
1886    bit canFoldAsLoad = 0;
1887    bit mayLoad = ?;
1888    bit mayStore = ?;
1889    bit mayRaiseFPException = 0;
1890    bit isConvertibleToThreeAddress = 1;
1891    bit isCommutable = 1;
1892    bit isTerminator = 0;
1893    bit isReMaterializable = 0;
1894    bit isPredicable = 0;
1895    bit isUnpredicable = 0;
1896    bit hasDelaySlot = 0;
1897    bit usesCustomInserter = 0;
1898    bit hasPostISelHook = 0;
1899    bit hasCtrlDep = 0;
1900    bit isNotDuplicable = 0;
1901    bit isConvergent = 0;
1902    bit isAuthenticated = 0;
1903    bit isAsCheapAsAMove = 0;
1904    bit hasExtraSrcRegAllocReq = 0;
1905    bit hasExtraDefRegAllocReq = 0;
1906    bit isRegSequence = 0;
1907    bit isPseudo = 0;
1908    bit isExtractSubreg = 0;
1909    bit isInsertSubreg = 0;
1910    bit variadicOpsAreDefs = 0;
1911    bit hasSideEffects = ?;
1912    bit isCodeGenOnly = 0;
1913    bit isAsmParserOnly = 0;
1914    bit hasNoSchedulingInfo = 0;
1915    InstrItinClass Itinerary = NoItinerary;
1916    list<SchedReadWrite> SchedRW = [WriteALU];
1917    string Constraints = "$src1 = $dst";
1918    string DisableEncoding = "";
1919    string PostEncoderMethod = "";
1920    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 };
1921    string AsmMatchConverter = "";
1922    string TwoOperandAliasConstraint = "";
1923    string AsmVariantName = "";
1924    bit UseNamedOperandTable = 0;
1925    bit FastISelShouldIgnore = 0;
1926    bits<8> Opcode = { 0, 0, 0, 0, 0, 0, 0, 1 };
1927    Format Form = MRMDestReg;
1928    bits<7> FormBits = { 0, 1, 0, 1, 0, 0, 0 };
1929    ImmType ImmT = NoImm;
1930    bit ForceDisassemble = 0;
1931    OperandSize OpSize = OpSize32;
1932    bits<2> OpSizeBits = { 1, 0 };
1933    AddressSize AdSize = AdSizeX;
1934    bits<2> AdSizeBits = { 0, 0 };
1935    Prefix OpPrefix = NoPrfx;
1936    bits<3> OpPrefixBits = { 0, 0, 0 };
1937    Map OpMap = OB;
1938    bits<3> OpMapBits = { 0, 0, 0 };
1939    bit hasREX_WPrefix = 0;
1940    FPFormat FPForm = NotFP;
1941    bit hasLockPrefix = 0;
1942    Domain ExeDomain = GenericDomain;
1943    bit hasREPPrefix = 0;
1944    Encoding OpEnc = EncNormal;
1945    bits<2> OpEncBits = { 0, 0 };
1946    bit HasVEX_W = 0;
1947    bit IgnoresVEX_W = 0;
1948    bit EVEX_W1_VEX_W0 = 0;
1949    bit hasVEX_4V = 0;
1950    bit hasVEX_L = 0;
1951    bit ignoresVEX_L = 0;
1952    bit hasEVEX_K = 0;
1953    bit hasEVEX_Z = 0;
1954    bit hasEVEX_L2 = 0;
1955    bit hasEVEX_B = 0;
1956    bits<3> CD8_Form = { 0, 0, 0 };
1957    int CD8_EltSize = 0;
1958    bit hasEVEX_RC = 0;
1959    bit hasNoTrackPrefix = 0;
1960    bits<7> VectSize = { 0, 0, 1, 0, 0, 0, 0 };
1961    bits<7> CD8_Scale = { 0, 0, 0, 0, 0, 0, 0 };
1962    string FoldGenRegForm = ?;
1963    string EVEX2VEXOverride = ?;
1964    bit isMemoryFoldable = 1;
1965    bit notEVEX2VEXConvertible = 0;
1966  }
1967
1968On the first line of the record, you can see that the ``ADD32rr`` record
1969inherited from eight classes. Although the inheritance hierarchy is complex,
1970using superclasses is much simpler than specifying the 109 individual fields for each
1971instruction.
1972
1973Here is the code fragment used to define ``ADD32rr`` and multiple other
1974``ADD`` instructions:
1975
1976.. code-block:: text
1977
1978  defm ADD : ArithBinOp_RF<0x00, 0x02, 0x04, "add", MRM0r, MRM0m,
1979                           X86add_flag, add, 1, 1, 1>;
1980
1981The ``defm`` statement tells TableGen that ``ArithBinOp_RF`` is a
1982multiclass, which contains multiple concrete record definitions that inherit
1983from ``BinOpRR_RF``. That class, in turn, inherits from ``BinOpRR``, which
1984inherits from ``ITy`` and ``Sched``, and so forth. The fields are inherited
1985from all the parent classes; for example, ``IsIndirectBranch`` is inherited
1986from the ``Instruction`` class.
1987