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