OSDN Git Service

Document Multidefs
authorDavid Greene <greened@obbligato.org>
Wed, 5 Oct 2011 22:42:49 +0000 (22:42 +0000)
committerDavid Greene <greened@obbligato.org>
Wed, 5 Oct 2011 22:42:49 +0000 (22:42 +0000)
Provide documentation for multidefs, explaining in detail how they
work.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141236 91177308-0d34-0410-b5e6-96231b3b80d8

docs/TableGenFundamentals.html

index e8fca32..c5e8d9a 100644 (file)
@@ -769,6 +769,65 @@ before them.
 </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&lt;int i&gt; {
+  int value = i;
+}
+
+<b>multiclass</b> Multi&lt;list&lt;int&gt; values&gt; {
+  <b>def</b> ONE : Base&lt;values[0]&gt;;
+  <b>def</b> TWO : Base&lt;values[1]&gt;;
+
+  <b>multidef</b> COUNT&lt;values, int v, 2&gt; : Base&lt:v&gt;;
+}
+
+<b>defm</b> List : Multi&lt;[1, 2, 3, 4, 5, 6]&lt;;
+...
+
+<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 &lt;&gt; 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>