[PATCH] D44110: TableGen: Add !dag function for construction

Artem Belevich via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 7 10:57:58 PST 2018


tra added inline comments.


================
Comment at: docs/TableGen/LangIntro.rst:178
+
+    Example: !dag(op, [a1, a2], ["name1", "name2"]) results in
+    (op a1:$name1, a2:$name2).
----------------
nhaehnle wrote:
> tra wrote:
> > Is it possible to construct a dag that has mix of dags and records as children? E.g `(op1 (op11 a111, a112:$n112),  a12)` ?  That is sometimes needsd to construct patterns where one of the arguments should be a dag (e.g. NVPTX uses a wrapper node for global symbols).
> Unfortunately, no. This is the weakness in the type system I think I've already mentioned elsewhere: since we don't have an `any` type, a list that mixes records and dags won't type-check. It would have to be a `list<any>`.
> 
> I think it makes sense to address that (although I haven't done so), but as a separate change.
OK.  We should probably then mention in the description that all children must be of the same type. 
Speaking of which, would records of different types, but with shared ancestry be allowed? I assume they would.



================
Comment at: test/TableGen/dag-functional.td:48
+
+class C<list<int> nodes, list<string> names> {
+  dag ret1 = !dag(ops, ?, names);
----------------
Would there be a benefit of testing !dag with nodes being list<dag> or list<SomeClass> (and, possibly using records of different type, but inherited from SomeClass)?


Repository:
  rL LLVM

https://reviews.llvm.org/D44110





More information about the llvm-commits mailing list