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