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