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