diff options
author | David Greene <greened@obbligato.org> | 2011-10-05 22:42:49 +0000 |
---|---|---|
committer | David Greene <greened@obbligato.org> | 2011-10-05 22:42:49 +0000 |
commit | 112d959e32dd1691182f063c989832201cafe8e9 (patch) | |
tree | 8fbd0570eeff09e1a21ebac638199cb3ace33268 /docs/TableGenFundamentals.html | |
parent | fd56d75396fd945d5cedb634d34fb3c3f739b3e8 (diff) | |
download | external_llvm-112d959e32dd1691182f063c989832201cafe8e9.zip external_llvm-112d959e32dd1691182f063c989832201cafe8e9.tar.gz external_llvm-112d959e32dd1691182f063c989832201cafe8e9.tar.bz2 |
Document Multidefs
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
Diffstat (limited to 'docs/TableGenFundamentals.html')
-rw-r--r-- | docs/TableGenFundamentals.html | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/docs/TableGenFundamentals.html b/docs/TableGenFundamentals.html index e8fca32..c5e8d9a 100644 --- a/docs/TableGenFundamentals.html +++ b/docs/TableGenFundamentals.html @@ -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<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> |