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