blob: 69e5c1426e4d92b9dfff7a328e9fa1447e29c6e6 [file] [log] [blame]
Renato Golin33f973a2014-04-01 09:51:49 +00001==============================
2TableGen Language Introduction
3==============================
4
5.. contents::
6 :local:
7
8.. warning::
9 This document is extremely rough. If you find something lacking, please
Tanya Lattner0d28f802015-08-05 03:51:17 +000010 fix it, file a documentation bug, or ask about it on llvm-dev.
Renato Golin33f973a2014-04-01 09:51:49 +000011
12Introduction
13============
14
15This document is not meant to be a normative spec about the TableGen language
16in and of itself (i.e. how to understand a given construct in terms of how
17it affects the final set of records represented by the TableGen file). For
18the formal language specification, see :doc:`LangRef`.
19
20TableGen syntax
21===============
22
23TableGen doesn't care about the meaning of data (that is up to the backend to
24define), but it does care about syntax, and it enforces a simple type system.
25This section describes the syntax and the constructs allowed in a TableGen file.
26
27TableGen primitives
28-------------------
29
30TableGen comments
31^^^^^^^^^^^^^^^^^
32
33TableGen supports C++ style "``//``" comments, which run to the end of the
34line, and it also supports **nestable** "``/* */``" comments.
35
36.. _TableGen type:
37
38The TableGen type system
39^^^^^^^^^^^^^^^^^^^^^^^^
40
41TableGen files are strongly typed, in a simple (but complete) type-system.
42These types are used to perform automatic conversions, check for errors, and to
43help interface designers constrain the input that they allow. Every `value
44definition`_ is required to have an associated type.
45
46TableGen supports a mixture of very low-level types (such as ``bit``) and very
47high-level types (such as ``dag``). This flexibility is what allows it to
48describe a wide range of information conveniently and compactly. The TableGen
49types are:
50
51``bit``
52 A 'bit' is a boolean value that can hold either 0 or 1.
53
54``int``
55 The 'int' type represents a simple 32-bit integer value, such as 5.
56
57``string``
58 The 'string' type represents an ordered sequence of characters of arbitrary
59 length.
60
Alex Bradbury5b359bd2017-05-02 13:47:10 +000061``code``
62 The `code` type represents a code fragment, which can be single/multi-line
63 string literal.
64
Renato Golin33f973a2014-04-01 09:51:49 +000065``bits<n>``
66 A 'bits' type is an arbitrary, but fixed, size integer that is broken up
67 into individual bits. This type is useful because it can handle some bits
68 being defined while others are undefined.
69
70``list<ty>``
71 This type represents a list whose elements are some other type. The
72 contained type is arbitrary: it can even be another list type.
73
74Class type
75 Specifying a class name in a type context means that the defined value must
76 be a subclass of the specified class. This is useful in conjunction with
77 the ``list`` type, for example, to constrain the elements of the list to a
78 common base class (e.g., a ``list<Register>`` can only contain definitions
79 derived from the "``Register``" class).
80
81``dag``
82 This type represents a nestable directed graph of elements.
83
84To date, these types have been sufficient for describing things that TableGen
85has been used for, but it is straight-forward to extend this list if needed.
86
87.. _TableGen expressions:
88
89TableGen values and expressions
90^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
91
92TableGen allows for a pretty reasonable number of different expression forms
93when building up values. These forms allow the TableGen file to be written in a
94natural syntax and flavor for the application. The current expression forms
95supported include:
96
97``?``
98 uninitialized field
99
100``0b1001011``
Pete Cooper9b90dc72014-08-07 05:47:13 +0000101 binary integer value.
102 Note that this is sized by the number of bits given and will not be
103 silently extended/truncated.
Renato Golin33f973a2014-04-01 09:51:49 +0000104
Renato Golin33f973a2014-04-01 09:51:49 +0000105``7``
106 decimal integer value
107
108``0x7F``
109 hexadecimal integer value
110
111``"foo"``
Alex Bradbury5b359bd2017-05-02 13:47:10 +0000112 a single-line string value, can be assigned to ``string`` or ``code`` variable.
Renato Golin33f973a2014-04-01 09:51:49 +0000113
114``[{ ... }]``
115 usually called a "code fragment", but is just a multiline string literal
116
117``[ X, Y, Z ]<type>``
118 list value. <type> is the type of the list element and is usually optional.
119 In rare cases, TableGen is unable to deduce the element type in which case
120 the user must specify it explicitly.
121
Pete Cooper9b90dc72014-08-07 05:47:13 +0000122``{ a, b, 0b10 }``
123 initializer for a "bits<4>" value.
124 1-bit from "a", 1-bit from "b", 2-bits from 0b10.
Renato Golin33f973a2014-04-01 09:51:49 +0000125
126``value``
127 value reference
128
129``value{17}``
130 access to one bit of a value
131
132``value{15-17}``
Alex Bradbury5b359bd2017-05-02 13:47:10 +0000133 access to an ordered sequence of bits of a value, in particular ``value{15-17}``
134 produces an order that is the reverse of ``value{17-15}``.
Renato Golin33f973a2014-04-01 09:51:49 +0000135
136``DEF``
137 reference to a record definition
138
139``CLASS<val list>``
140 reference to a new anonymous definition of CLASS with the specified template
141 arguments.
142
143``X.Y``
144 reference to the subfield of a value
145
146``list[4-7,17,2-3]``
147 A slice of the 'list' list, including elements 4,5,6,7,17,2, and 3 from it.
148 Elements may be included multiple times.
149
150``foreach <var> = [ <list> ] in { <body> }``
151
152``foreach <var> = [ <list> ] in <def>``
153 Replicate <body> or <def>, replacing instances of <var> with each value
154 in <list>. <var> is scoped at the level of the ``foreach`` loop and must
155 not conflict with any other object introduced in <body> or <def>. Currently
156 only ``def``\s are expanded within <body>.
157
158``foreach <var> = 0-15 in ...``
159
160``foreach <var> = {0-15,32-47} in ...``
161 Loop over ranges of integers. The braces are required for multiple ranges.
162
163``(DEF a, b)``
164 a dag value. The first element is required to be a record definition, the
165 remaining elements in the list may be arbitrary other values, including
166 nested ```dag``' values.
167
Daniel Sanders314e80e2014-05-07 10:13:19 +0000168``!listconcat(a, b, ...)``
169 A list value that is the result of concatenating the 'a' and 'b' lists.
170 The lists must have the same element type.
171 More than two arguments are accepted with the result being the concatenation
172 of all the lists given.
173
Daniel Sanders6ef0a2f2014-05-02 19:25:52 +0000174``!strconcat(a, b, ...)``
Renato Golin33f973a2014-04-01 09:51:49 +0000175 A string value that is the result of concatenating the 'a' and 'b' strings.
Daniel Sanders6ef0a2f2014-05-02 19:25:52 +0000176 More than two arguments are accepted with the result being the concatenation
177 of all the strings given.
Renato Golin33f973a2014-04-01 09:51:49 +0000178
179``str1#str2``
180 "#" (paste) is a shorthand for !strconcat. It may concatenate things that
181 are not quoted strings, in which case an implicit !cast<string> is done on
182 the operand of the paste.
183
184``!cast<type>(a)``
185 A symbol of type *type* obtained by looking up the string 'a' in the symbol
186 table. If the type of 'a' does not match *type*, TableGen aborts with an
187 error. !cast<string> is a special case in that the argument must be an
188 object defined by a 'def' construct.
189
190``!subst(a, b, c)``
191 If 'a' and 'b' are of string type or are symbol references, substitute 'b'
192 for 'a' in 'c.' This operation is analogous to $(subst) in GNU make.
193
194``!foreach(a, b, c)``
Nicolai Haehnle8ebf7e42018-03-05 15:21:04 +0000195 For each member of dag or list 'b' apply operator 'c'. 'a' is the name
196 of a variable that will be substituted by members of 'b' in 'c'.
197 This operation is analogous to $(foreach) in GNU make.
Renato Golin33f973a2014-04-01 09:51:49 +0000198
199``!head(a)``
200 The first element of list 'a.'
201
202``!tail(a)``
203 The 2nd-N elements of list 'a.'
204
205``!empty(a)``
206 An integer {0,1} indicating whether list 'a' is empty.
207
Nicolai Haehnle0243aaf2018-02-23 10:46:07 +0000208``!size(a)``
209 An integer indicating the number of elements in list 'a'.
210
Renato Golin33f973a2014-04-01 09:51:49 +0000211``!if(a,b,c)``
212 'b' if the result of 'int' or 'bit' operator 'a' is nonzero, 'c' otherwise.
213
214``!eq(a,b)``
215 'bit 1' if string a is equal to string b, 0 otherwise. This only operates
216 on string, int and bit objects. Use !cast<string> to compare other types of
217 objects.
218
Joerg Sonnenberger0a537272014-09-03 13:17:03 +0000219``!shl(a,b)`` ``!srl(a,b)`` ``!sra(a,b)`` ``!add(a,b)`` ``!and(a,b)``
220 The usual binary and arithmetic operators.
Adam Nemet017fca02014-07-17 17:04:27 +0000221
Renato Golin33f973a2014-04-01 09:51:49 +0000222Note that all of the values have rules specifying how they convert to values
223for different types. These rules allow you to assign a value like "``7``"
224to a "``bits<4>``" value, for example.
225
226Classes and definitions
227-----------------------
228
229As mentioned in the :doc:`introduction <index>`, classes and definitions (collectively known as
230'records') in TableGen are the main high-level unit of information that TableGen
231collects. Records are defined with a ``def`` or ``class`` keyword, the record
232name, and an optional list of "`template arguments`_". If the record has
233superclasses, they are specified as a comma separated list that starts with a
234colon character ("``:``"). If `value definitions`_ or `let expressions`_ are
235needed for the class, they are enclosed in curly braces ("``{}``"); otherwise,
236the record ends with a semicolon.
237
238Here is a simple TableGen file:
239
Renato Golin124f2592016-07-20 12:16:38 +0000240.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000241
242 class C { bit V = 1; }
243 def X : C;
244 def Y : C {
245 string Greeting = "hello";
246 }
247
248This example defines two definitions, ``X`` and ``Y``, both of which derive from
249the ``C`` class. Because of this, they both get the ``V`` bit value. The ``Y``
250definition also gets the Greeting member as well.
251
252In general, classes are useful for collecting together the commonality between a
253group of records and isolating it in a single place. Also, classes permit the
254specification of default values for their subclasses, allowing the subclasses to
255override them as they wish.
256
257.. _value definition:
258.. _value definitions:
259
260Value definitions
261^^^^^^^^^^^^^^^^^
262
263Value definitions define named entries in records. A value must be defined
264before it can be referred to as the operand for another value definition or
265before the value is reset with a `let expression`_. A value is defined by
266specifying a `TableGen type`_ and a name. If an initial value is available, it
267may be specified after the type with an equal sign. Value definitions require
268terminating semicolons.
269
270.. _let expression:
271.. _let expressions:
272.. _"let" expressions within a record:
273
274'let' expressions
275^^^^^^^^^^^^^^^^^
276
277A record-level let expression is used to change the value of a value definition
278in a record. This is primarily useful when a superclass defines a value that a
279derived class or definition wants to override. Let expressions consist of the
280'``let``' keyword followed by a value name, an equal sign ("``=``"), and a new
281value. For example, a new class could be added to the example above, redefining
282the ``V`` field for all of its subclasses:
283
Renato Golin124f2592016-07-20 12:16:38 +0000284.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000285
286 class D : C { let V = 0; }
287 def Z : D;
288
289In this case, the ``Z`` definition will have a zero value for its ``V`` value,
290despite the fact that it derives (indirectly) from the ``C`` class, because the
291``D`` class overrode its value.
292
293.. _template arguments:
294
295Class template arguments
296^^^^^^^^^^^^^^^^^^^^^^^^
297
298TableGen permits the definition of parameterized classes as well as normal
299concrete classes. Parameterized TableGen classes specify a list of variable
300bindings (which may optionally have defaults) that are bound when used. Here is
301a simple example:
302
Renato Golin124f2592016-07-20 12:16:38 +0000303.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000304
305 class FPFormat<bits<3> val> {
306 bits<3> Value = val;
307 }
308 def NotFP : FPFormat<0>;
309 def ZeroArgFP : FPFormat<1>;
310 def OneArgFP : FPFormat<2>;
311 def OneArgFPRW : FPFormat<3>;
312 def TwoArgFP : FPFormat<4>;
313 def CompareFP : FPFormat<5>;
314 def CondMovFP : FPFormat<6>;
315 def SpecialFP : FPFormat<7>;
316
317In this case, template arguments are used as a space efficient way to specify a
318list of "enumeration values", each with a "``Value``" field set to the specified
319integer.
320
321The more esoteric forms of `TableGen expressions`_ are useful in conjunction
322with template arguments. As an example:
323
Renato Golin124f2592016-07-20 12:16:38 +0000324.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000325
326 class ModRefVal<bits<2> val> {
327 bits<2> Value = val;
328 }
329
330 def None : ModRefVal<0>;
331 def Mod : ModRefVal<1>;
332 def Ref : ModRefVal<2>;
333 def ModRef : ModRefVal<3>;
334
335 class Value<ModRefVal MR> {
336 // Decode some information into a more convenient format, while providing
337 // a nice interface to the user of the "Value" class.
338 bit isMod = MR.Value{0};
339 bit isRef = MR.Value{1};
340
341 // other stuff...
342 }
343
344 // Example uses
345 def bork : Value<Mod>;
346 def zork : Value<Ref>;
347 def hork : Value<ModRef>;
348
349This is obviously a contrived example, but it shows how template arguments can
350be used to decouple the interface provided to the user of the class from the
351actual internal data representation expected by the class. In this case,
352running ``llvm-tblgen`` on the example prints the following definitions:
353
Renato Golin124f2592016-07-20 12:16:38 +0000354.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000355
356 def bork { // Value
357 bit isMod = 1;
358 bit isRef = 0;
359 }
360 def hork { // Value
361 bit isMod = 1;
362 bit isRef = 1;
363 }
364 def zork { // Value
365 bit isMod = 0;
366 bit isRef = 1;
367 }
368
369This shows that TableGen was able to dig into the argument and extract a piece
370of information that was requested by the designer of the "Value" class. For
371more realistic examples, please see existing users of TableGen, such as the X86
372backend.
373
374Multiclass definitions and instances
375^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
376
377While classes with template arguments are a good way to factor commonality
378between two instances of a definition, multiclasses allow a convenient notation
379for defining multiple definitions at once (instances of implicitly constructed
380classes). For example, consider an 3-address instruction set whose instructions
381come in two forms: "``reg = reg op reg``" and "``reg = reg op imm``"
382(e.g. SPARC). In this case, you'd like to specify in one place that this
383commonality exists, then in a separate place indicate what all the ops are.
384
385Here is an example TableGen fragment that shows this idea:
386
Renato Golin124f2592016-07-20 12:16:38 +0000387.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000388
389 def ops;
390 def GPR;
391 def Imm;
392 class inst<int opc, string asmstr, dag operandlist>;
393
394 multiclass ri_inst<int opc, string asmstr> {
395 def _rr : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
396 (ops GPR:$dst, GPR:$src1, GPR:$src2)>;
397 def _ri : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
398 (ops GPR:$dst, GPR:$src1, Imm:$src2)>;
399 }
400
401 // Instantiations of the ri_inst multiclass.
402 defm ADD : ri_inst<0b111, "add">;
403 defm SUB : ri_inst<0b101, "sub">;
404 defm MUL : ri_inst<0b100, "mul">;
405 ...
406
407The name of the resultant definitions has the multidef fragment names appended
408to them, so this defines ``ADD_rr``, ``ADD_ri``, ``SUB_rr``, etc. A defm may
409inherit from multiple multiclasses, instantiating definitions from each
410multiclass. Using a multiclass this way is exactly equivalent to instantiating
411the classes multiple times yourself, e.g. by writing:
412
Renato Golin124f2592016-07-20 12:16:38 +0000413.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000414
415 def ops;
416 def GPR;
417 def Imm;
418 class inst<int opc, string asmstr, dag operandlist>;
419
420 class rrinst<int opc, string asmstr>
421 : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
422 (ops GPR:$dst, GPR:$src1, GPR:$src2)>;
423
424 class riinst<int opc, string asmstr>
425 : inst<opc, !strconcat(asmstr, " $dst, $src1, $src2"),
426 (ops GPR:$dst, GPR:$src1, Imm:$src2)>;
427
428 // Instantiations of the ri_inst multiclass.
429 def ADD_rr : rrinst<0b111, "add">;
430 def ADD_ri : riinst<0b111, "add">;
431 def SUB_rr : rrinst<0b101, "sub">;
432 def SUB_ri : riinst<0b101, "sub">;
433 def MUL_rr : rrinst<0b100, "mul">;
434 def MUL_ri : riinst<0b100, "mul">;
435 ...
436
437A ``defm`` can also be used inside a multiclass providing several levels of
438multiclass instantiations.
439
Renato Golin124f2592016-07-20 12:16:38 +0000440.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000441
442 class Instruction<bits<4> opc, string Name> {
443 bits<4> opcode = opc;
444 string name = Name;
445 }
446
447 multiclass basic_r<bits<4> opc> {
448 def rr : Instruction<opc, "rr">;
449 def rm : Instruction<opc, "rm">;
450 }
451
452 multiclass basic_s<bits<4> opc> {
453 defm SS : basic_r<opc>;
454 defm SD : basic_r<opc>;
455 def X : Instruction<opc, "x">;
456 }
457
458 multiclass basic_p<bits<4> opc> {
459 defm PS : basic_r<opc>;
460 defm PD : basic_r<opc>;
461 def Y : Instruction<opc, "y">;
462 }
463
464 defm ADD : basic_s<0xf>, basic_p<0xf>;
465 ...
466
467 // Results
468 def ADDPDrm { ...
469 def ADDPDrr { ...
470 def ADDPSrm { ...
471 def ADDPSrr { ...
472 def ADDSDrm { ...
473 def ADDSDrr { ...
474 def ADDY { ...
475 def ADDX { ...
476
477``defm`` declarations can inherit from classes too, the rule to follow is that
478the class list must start after the last multiclass, and there must be at least
479one multiclass before them.
480
Renato Golin124f2592016-07-20 12:16:38 +0000481.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000482
483 class XD { bits<4> Prefix = 11; }
484 class XS { bits<4> Prefix = 12; }
485
486 class I<bits<4> op> {
487 bits<4> opcode = op;
488 }
489
490 multiclass R {
491 def rr : I<4>;
492 def rm : I<2>;
493 }
494
495 multiclass Y {
496 defm SS : R, XD;
497 defm SD : R, XS;
498 }
499
500 defm Instr : Y;
501
502 // Results
503 def InstrSDrm {
504 bits<4> opcode = { 0, 0, 1, 0 };
505 bits<4> Prefix = { 1, 1, 0, 0 };
506 }
507 ...
508 def InstrSSrr {
509 bits<4> opcode = { 0, 1, 0, 0 };
510 bits<4> Prefix = { 1, 0, 1, 1 };
511 }
512
513File scope entities
514-------------------
515
516File inclusion
517^^^^^^^^^^^^^^
518
519TableGen supports the '``include``' token, which textually substitutes the
520specified file in place of the include directive. The filename should be
521specified as a double quoted string immediately after the '``include``' keyword.
522Example:
523
Renato Golin124f2592016-07-20 12:16:38 +0000524.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000525
526 include "foo.td"
527
528'let' expressions
529^^^^^^^^^^^^^^^^^
530
531"Let" expressions at file scope are similar to `"let" expressions within a
532record`_, except they can specify a value binding for multiple records at a
533time, and may be useful in certain other cases. File-scope let expressions are
534really just another way that TableGen allows the end-user to factor out
535commonality from the records.
536
537File-scope "let" expressions take a comma-separated list of bindings to apply,
538and one or more records to bind the values in. Here are some examples:
539
Renato Golin124f2592016-07-20 12:16:38 +0000540.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000541
542 let isTerminator = 1, isReturn = 1, isBarrier = 1, hasCtrlDep = 1 in
543 def RET : I<0xC3, RawFrm, (outs), (ins), "ret", [(X86retflag 0)]>;
544
545 let isCall = 1 in
546 // All calls clobber the non-callee saved registers...
547 let Defs = [EAX, ECX, EDX, FP0, FP1, FP2, FP3, FP4, FP5, FP6, ST0,
548 MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7,
549 XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, EFLAGS] in {
550 def CALLpcrel32 : Ii32<0xE8, RawFrm, (outs), (ins i32imm:$dst,variable_ops),
551 "call\t${dst:call}", []>;
552 def CALL32r : I<0xFF, MRM2r, (outs), (ins GR32:$dst, variable_ops),
553 "call\t{*}$dst", [(X86call GR32:$dst)]>;
554 def CALL32m : I<0xFF, MRM2m, (outs), (ins i32mem:$dst, variable_ops),
555 "call\t{*}$dst", []>;
556 }
557
558File-scope "let" expressions are often useful when a couple of definitions need
559to be added to several records, and the records do not otherwise need to be
560opened, as in the case with the ``CALL*`` instructions above.
561
562It's also possible to use "let" expressions inside multiclasses, providing more
563ways to factor out commonality from the records, specially if using several
564levels of multiclass instantiations. This also avoids the need of using "let"
565expressions within subsequent records inside a multiclass.
566
Renato Golin124f2592016-07-20 12:16:38 +0000567.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000568
569 multiclass basic_r<bits<4> opc> {
570 let Predicates = [HasSSE2] in {
571 def rr : Instruction<opc, "rr">;
572 def rm : Instruction<opc, "rm">;
573 }
574 let Predicates = [HasSSE3] in
575 def rx : Instruction<opc, "rx">;
576 }
577
578 multiclass basic_ss<bits<4> opc> {
579 let IsDouble = 0 in
580 defm SS : basic_r<opc>;
581
582 let IsDouble = 1 in
583 defm SD : basic_r<opc>;
584 }
585
586 defm ADD : basic_ss<0xf>;
587
588Looping
589^^^^^^^
590
591TableGen supports the '``foreach``' block, which textually replicates the loop
592body, substituting iterator values for iterator references in the body.
593Example:
594
Renato Golin124f2592016-07-20 12:16:38 +0000595.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000596
597 foreach i = [0, 1, 2, 3] in {
598 def R#i : Register<...>;
599 def F#i : Register<...>;
600 }
601
602This will create objects ``R0``, ``R1``, ``R2`` and ``R3``. ``foreach`` blocks
603may be nested. If there is only one item in the body the braces may be
604elided:
605
Renato Golin124f2592016-07-20 12:16:38 +0000606.. code-block:: text
Renato Golin33f973a2014-04-01 09:51:49 +0000607
608 foreach i = [0, 1, 2, 3] in
609 def R#i : Register<...>;
610
611Code Generator backend info
612===========================
613
614Expressions used by code generator to describe instructions and isel patterns:
615
616``(implicit a)``
617 an implicitly defined physical register. This tells the dag instruction
618 selection emitter the input pattern's extra definitions matches implicit
619 physical register definitions.
620