"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TableGen Fundamentals</title>
<link rel="stylesheet" href="llvm.css" type="text/css">
</head>
key feature of TableGen is that it allows the end-user to define the
abstractions they prefer to use when describing their information.</p>
+<p>Each def record has a special entry called "NAME." This is the
+name of the def ("ADD32rr" above). In the general case def names can
+be formed from various kinds of string processing expressions and NAME
+resolves to the final value obtained after resolving all of those
+expressions. The user may refer to NAME anywhere she desires to use
+the ultimate name of the def. NAME should not be defined anywhere
+else in user code to avoid conflict problems.</p>
+
</div>
<!-- ======================================================================= -->
<dt><tt>!strconcat(a, b)</tt></dt>
<dd>A string value that is the result of concatenating the 'a' and 'b'
strings.</dd>
+<dt><tt>str1#str2</tt></dt>
+ <dd>"#" (paste) is a shorthand for !strconcat. It may concatenate
+ things that are not quoted strings, in which case an implicit
+ !cast<string> is done on the operand of the paste.</dd>
<dt><tt>!cast<type>(a)</tt></dt>
<dd>A symbol of type <em>type</em> obtained by looking up the string 'a' in
the symbol table. If the type of 'a' does not match <em>type</em>, TableGen
</pre>
</div>
-<p>
-A special "multidef" may be used inside a multiclass to generate
-several defs given a list of values.
-</p>
-
-<div class="doc_code">
-<pre>
-<b>class</b> Base<int i> {
- int value = i;
-}
-
-<b>multiclass</b> Multi<list<int> values> {
- <b>def</b> ONE : Base<values[0]>;
- <b>def</b> TWO : Base<values[1]>;
-
- <b>multidef</b> COUNT<values, int v, 2> : Base<:v>;
-}
-
-<b>defm</b> List : Multi<[1, 2, 3, 4, 5, 6]<;
-...
-
-<i>// Results</i>
-<b>def</b> ListCOUNT {
- int v = ?;
- int value = v;
- list<int> Multi::values = [1, 2, 3, 4, 5, 6];
-}
-<b>def</b> ListONE {
- int value = 1;
-}
-<b>def</b> ListTWO {
- int value = 2;
-}
-<b>def</b> MD2.ListCOUNT {
- int value = 3;
-}
-<b>def</b> MD3.ListCOUNT {
- int value = 4;
-}
-<b>def</b> MD4.ListCOUNT {
- int value = 5;
-}
-<b>def</b> MD5.ListCOUNT {
- int value = 6;
-}
-</pre>
-</div>
-
-<p>
-A multidef takes three "arguments" in the <> notation after the multidef
-name. The first is a list of items to process. The second is a declaration.
-This declaration creates a temporary name used as an iterator. It picks up the
-value of each processed list item as TableGen generates defs from the multidef.
-This temporary may be named and passed into the multidef body as shown in the
-example above. This provides a powerful way to generate defs with various
-values from a single multidef. The final "argument" is an integer value
-indicating where in the list to begin processing. In the above example we
-chose to begin list processing with the third item (index 2).
-</p>
</div>
</div>