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