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