[llvm-dev] TableGen: spring cleaning, new features for "functional programming"
Nicolai Hähnle via llvm-dev
llvm-dev at lists.llvm.org
Mon Mar 19 07:24:40 PDT 2018
Hi Philip,
On 14.03.2018 16:56, Philip Pfaffe wrote:
> if you're open to it, I'd like suggest another smallish cleanup in
> libTablegen, namely doing something about the layering. Basicly what bit
> me a few times is that there is a `Main.cpp` file. This particular file
> adds CLI options such as -o, -d, -I. So if you build some out-of-tree
> tool and happen to link against `all` components because you're lazy,
> there is a high likelihood of an option clash, which are nasty to debug.
> Can we move these options outside of the library and put them in the
> tool instead?
No. The reason for those options being there is that any TableGen
frontend will want them. In particular, clang-tblgen uses this
functionality.
Cheers,
Nicolai
>
> Cheers,
> Philip
>
> 2018-02-19 20:26 GMT+01:00 Nicolai Hähnle via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>>:
>
> Hi all,
>
> While working on some features for the AMDGPU backend --
> specifically, explicit address components for image intrinsics,
> which involves generating both
>
> (a) a lot of intrinsics with different but somewhat regular
> parameter types, and
>
> (b) the patterns to select instructions for those intrinsics
>
> -- I got fed up with a lot of the TableGen bugs and limitations and
> set out to fix things.
>
> I now have an already rather long list of ~30 patches which do a
> bunch of things in lib/TableGen/ such as:
>
> - better and earlier error messages
> - cleanup type checking
> - cleanup variable resolving
> - cleanup record instantiation
> - late generation of anonymous records that appear in expressions
> - cleanup !foreach
> - add !foldl
> - add !isa<type>(...) and make !cast more useful
> - add !dag builtin to generate DAG nodes from lists
> - some other minor new built-ins like !size, !le, !lt, !ge, !gt
> - add a defset mechanism for collecting records which can then later
> be looped over in a foreach statement
> - make foreach statements in multiclass work
> - probably more...
>
> An earlier version of the patches is here if you already want to
> take a look: https://cgit.freedesktop.org/~nh/llvm/log/?h=mimg
> <https://cgit.freedesktop.org/~nh/llvm/log/?h=mimg>
>
> My plan is to clean those up over the next days and weeks and submit
> them to Phabricator.
>
> With the exception of !foreach, which doesn't actually seem to be
> used, all the changes should be backward compatible. In fact, most
> of the larger changes are simply refactoring TableGen in a way that
> makes things work that look like they should already work but don't.
>
> I would appreciate feedback and help in reviewing the patches when
> they arrive!
>
> Thanks,
> Nicolai
>
> P.S.: I'm going to document some of my findings and changes on my
> blog, the first entry is here:
> https://nhaehnle.blogspot.de/2018/02/tablegen-1-what-has-tablegen-ever-done.html
> <https://nhaehnle.blogspot.de/2018/02/tablegen-1-what-has-tablegen-ever-done.html>
>
> --
> Lerne, wie die Welt wirklich ist,
> Aber vergiss niemals, wie sie sein sollte.
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the llvm-dev
mailing list