<div dir="ltr"><div dir="ltr"><div dir="ltr"><div>I may add that MLIR is doing the same thing as clang, reusing the TableGen language without the LLVM specific backends.</div>We have quite a few generator, from the mlir-tblgen --help output:</div><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr">  Generator to run</div><div dir="ltr">      --gen-attr-interface-decls         - Generate interface declarations</div><div dir="ltr">      --gen-attr-interface-defs          - Generate interface definitions</div><div dir="ltr">      --gen-attr-interface-docs          - Generate interface documentation</div><div dir="ltr">      --gen-avail-interface-decls        - Generate availability interface declarations</div><div dir="ltr">      --gen-avail-interface-defs         - Generate op interface definitions</div><div dir="ltr">      --gen-dialect-decls                - Generate dialect declarations</div><div dir="ltr">      --gen-dialect-doc                  - Generate dialect documentation</div><div dir="ltr">      --gen-enum-decls                   - Generate enum utility declarations</div><div dir="ltr">      --gen-enum-defs                    - Generate enum utility definitions</div><div dir="ltr">      --gen-enum-from-llvmir-conversions - Generate conversions of EnumAttrs from LLVM IR</div><div dir="ltr">      --gen-enum-to-llvmir-conversions   - Generate conversions of EnumAttrs to LLVM IR</div><div dir="ltr">      --gen-llvmir-conversions           - Generate LLVM IR conversions</div><div dir="ltr">      --gen-llvmir-intrinsics            - Generate LLVM IR intrinsics</div><div dir="ltr">      --gen-op-decls                     - Generate op declarations</div><div dir="ltr">      --gen-op-defs                      - Generate op definitions</div><div dir="ltr">      --gen-op-doc                       - Generate dialect documentation</div><div dir="ltr">      --gen-op-interface-decls           - Generate interface declarations</div><div dir="ltr">      --gen-op-interface-defs            - Generate interface definitions</div><div dir="ltr">      --gen-op-interface-docs            - Generate interface documentation</div><div dir="ltr">      --gen-pass-decls                   - Generate operation documentation</div><div dir="ltr">      --gen-pass-doc                     - Generate pass documentation</div><div dir="ltr">      --gen-rewriters                    - Generate pattern rewriters</div><div dir="ltr">      --gen-spirv-avail-impls            - Generate SPIR-V operation utility definitions</div><div dir="ltr">      --gen-spirv-capability-implication - Generate utility function to return implied capabilities for a given capability</div><div dir="ltr">      --gen-spirv-enum-avail-decls       - Generate SPIR-V enum availability declarations</div><div dir="ltr">      --gen-spirv-enum-avail-defs        - Generate SPIR-V enum availability definitions</div><div dir="ltr">      --gen-spirv-op-utils               - Generate SPIR-V operation utility definitions</div><div dir="ltr">      --gen-spirv-serialization          - Generate SPIR-V (de)serialization utilities and functions</div><div dir="ltr">      --gen-struct-attr-decls            - Generate struct utility declarations</div><div dir="ltr">      --gen-struct-attr-defs             - Generate struct utility definitions</div><div dir="ltr">      --gen-type-interface-decls         - Generate interface declarations</div><div dir="ltr">      --gen-type-interface-defs          - Generate interface definitions</div><div dir="ltr">      --gen-type-interface-docs          - Generate interface documentation</div><div><br></div><div>-- </div><div>Mehdi</div><div><br></div></div><div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 4, 2020 at 11:43 AM Craig Topper via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">There is also clang/utils/TableGen which contains the clang tablegen backends.The build produces an llvm-tblgen from llvm/utils/TableGen and clang-tblgen from clang/utils/TableGen<div><br></div><div><div><div dir="ltr">~Craig</div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 4, 2020 at 11:41 AM Charlotte Delenk via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>
On 8/4/20 7:31 PM, Paul C. Anagnostopoulos via llvm-dev wrote:<br>
> I was confused by the lack of TableGen backends in the llvm/lib/tablegen directory until I stumbled upon the llvm/utils/tablegen directory. Could someone explain why TableGen is divided into these two directories?<br>
> _________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
I am assuming the TableGen code is split like this so that external <br>
tools can utilize the TableGen parser without all of the specific logic <br>
in the LLVM tablegen binary. I can't find any application that uses it <br>
though aside from tablegen proper.<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div></div></div>