summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolai Haehnle <nhaehnle@gmail.com>2018-06-04 14:26:12 +0000
committerNicolai Haehnle <nhaehnle@gmail.com>2018-06-04 14:26:12 +0000
commit6b71fcbf269dbb5d192b7a69f5cd706aeb8c8448 (patch)
tree671df399f0e0a2ac67033912f1cde052fa421472
parent26db53e38e1a8942f615fb661f283f489ca0c490 (diff)
TableGen: some LangRef doc fixes
Summary: Change-Id: I1442e2daa09cab727a01d8c31893b50e644a5cd3 Reviewers: tra, simon_tatham, craig.topper Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D47530 Change-Id: I397655dd18b7ff978c1affa3174740d9c1a82594 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@333901 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--docs/TableGen/LangIntro.rst21
-rw-r--r--docs/TableGen/LangRef.rst15
2 files changed, 31 insertions, 5 deletions
diff --git a/docs/TableGen/LangIntro.rst b/docs/TableGen/LangIntro.rst
index b77dad07bf0..ea46550ffc0 100644
--- a/docs/TableGen/LangIntro.rst
+++ b/docs/TableGen/LangIntro.rst
@@ -152,8 +152,8 @@ supported include:
``foreach <var> = [ <list> ] in <def>``
Replicate <body> or <def>, replacing instances of <var> with each value
in <list>. <var> is scoped at the level of the ``foreach`` loop and must
- not conflict with any other object introduced in <body> or <def>. Currently
- only ``def``\s are expanded within <body>.
+ not conflict with any other object introduced in <body> or <def>. Only
+ ``def``\s and ``defm``\s are expanded within <body>.
``foreach <var> = 0-15 in ...``
@@ -348,6 +348,23 @@ In this case, the ``Z`` definition will have a zero value for its ``V`` value,
despite the fact that it derives (indirectly) from the ``C`` class, because the
``D`` class overrode its value.
+References between variables in a record are substituted late, which gives
+``let`` expressions unusual power. Consider this admittedly silly example:
+
+.. code-block:: text
+
+ class A<int x> {
+ int Y = x;
+ int Yplus1 = !add(Y, 1);
+ int xplus1 = !add(x, 1);
+ }
+ def Z : A<5> {
+ let Y = 10;
+ }
+
+The value of ``Z.xplus1`` will be 6, but the value of ``Z.Yplus1`` is 11. Use
+this power wisely.
+
.. _template arguments:
Class template arguments
diff --git a/docs/TableGen/LangRef.rst b/docs/TableGen/LangRef.rst
index d31f7f36c80..439d646034a 100644
--- a/docs/TableGen/LangRef.rst
+++ b/docs/TableGen/LangRef.rst
@@ -229,15 +229,17 @@ of:
int Baz = Bar;
}
+ Values defined in superclasses can be accessed the same way.
+
* a template arg of a ``class``, such as the use of ``Bar`` in::
class Foo<int Bar> {
int Baz = Bar;
}
-* value local to a ``multiclass``, such as the use of ``Bar`` in::
+* value local to a ``class``, such as the use of ``Bar`` in::
- multiclass Foo {
+ class Foo {
int Bar = 5;
int Baz = Bar;
}
@@ -245,9 +247,16 @@ of:
* a template arg to a ``multiclass``, such as the use of ``Bar`` in::
multiclass Foo<int Bar> {
- int Baz = Bar;
+ def : SomeClass<Bar>;
}
+* the iteration variable of a ``foreach``, such as the use of ``i`` in::
+
+ foreach i = 0-5 in
+ def Foo#i;
+
+* a variable defined by ``defset``
+
* the implicit template argument ``NAME`` in a ``class`` or ``multiclass``
.. productionlist::