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