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