[PATCH] D148915: [WIP][TableGen] Introduce function and lambda

Artem Belevich via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 21 11:39:57 PDT 2023

tra added a comment.

This is really nice!

Now that we have functions, I would really love to see some sort of `dump` function which would print the value it's given when it's evaluated. This would make debugging tablegen files so much easier.

Comment at: llvm/docs/TableGen/ProgRef.rst:208-209
    in         include       int           let           list
-   multiclass string        then          true
+   multiclass string        then          true          function
+   return
The list of keywords should be sorted.

Comment at: llvm/docs/TableGen/ProgRef.rst:302
+``function<>``\ *rettype*\ ``[,`` *argtype*\ ``]*>``
+    This type represents a function who returns a value of the *rettype* and may
+    have several argument types *argtype* (can be empty). The return type and
Do we need to define some sort of `void` type? 

Comment at: llvm/test/TableGen/function.td:6
+function sub_func(int a, int b): int {
+  return !sub(a, b);
I'd also add a few more test cases:
- return an immediate value.
- return an already-defined record or its field.
- Check that a local defvar has priority over an already defined record with the same name.

Comment at: llvm/test/TableGen/function.td:31
+  int default_arg_value = default_arg(add_func(2, 3));
+  int no_arg_value = no_arg();
Can we ignore the value of a function call? E.g. one use case would be to use a function to consolidate various assertion checks without actually returning anything useful otherwise.

Comment at: llvm/test/TableGen/function.td:381
+// ---- Test recursive function ---- //
Do we limit recursion depth or prevent runaway evaluation otherwise? 

  rG LLVM Github Monorepo



More information about the llvm-commits mailing list