[llvm-dev] [Beginner] Understanding Tablegen language

Rotate Right via llvm-dev llvm-dev at lists.llvm.org
Wed Jul 15 10:33:13 PDT 2020


Is there a backend to Tablegen which can dump a map of pattern-to-matched
to instruction-to-be-generated?
--help doesn't seem to indicate anything like that.

On Tue, Jul 14, 2020 at 2:13 PM Rotate Right <rightrotate5 at gmail.com> wrote:

> Thanks Matt and Thomas. I will go through them.
>
> On Tue, Jul 14, 2020, 1:35 PM Matt P. Dziubinski <matdzb at gmail.com> wrote:
>
>> On 7/13/2020 21:30, Thomas Lively via llvm-dev wrote:
>> > Part of the problem is that ISel patterns are like their own DSL inside
>> > the TableGen DSL, so keywords like "ins", "outs", and "ops" aren't
>> > keywords at the TableGen level, but rather at the level of the ISel
>> > system implemented with TableGen. Copying existing patterns and reading
>> > the comments in Target.td and TargetSelectionDAG.td are the best ways I
>> > know of learning how this works. I haven't seen a separate guide,
>> > although it would be very cool if one existed.
>>
>> FWIW, there are also some third-party resources that may be of help:
>>
>> "Lessons in TableGen"
>> FOSDEM 2019; Nicolai Hähnle
>> https://fosdem.org/2019/schedule/event/llvm_tablegen/
>> Slides:
>>
>> https://archive.fosdem.org/2019/schedule/event/llvm_tablegen/attachments/slides/3304/export/events/attachments/llvm_tablegen/slides/3304/tablegen.pdf
>>
>> Series:
>> - What has TableGen ever done for us?:
>>
>> http://nhaehnle.blogspot.com/2018/02/tablegen-1-what-has-tablegen-ever-done.html
>> - Functional Programming:
>>
>> http://nhaehnle.blogspot.com/2018/02/tablegen-2-functional-programming.html
>> - Bits: http://nhaehnle.blogspot.com/2018/02/tablegen-3-bits.html
>> - Resolving variables:
>> http://nhaehnle.blogspot.com/2018/03/tablegen-4-resolving-variables.html
>> - DAGs: http://nhaehnle.blogspot.com/2018/03/tablegen-5-dags.html
>>
>> Some of the parts of TableGen used in SelectionDAG are in the backend
>> docs (e.g., the keywords OP asked about):
>> https://llvm.org/docs/WritingAnLLVMBackend.html#instruction-set
>> & https://llvm.org/docs/WritingAnLLVMBackend.html#instruction-selector
>> (has a simple example of `PatFrag` for `store`).
>>
>> There are a few examples of simple .td files an LLVM backend in the
>> following:
>>
>> LLVM backend development by example (RISC-V)
>> 2018 LLVM Developers’ Meeting; Alex Bradbury
>> https://www.youtube.com/watch?v=AFaIP-dF-RA
>>
>> 2014 - Building an LLVM Backend - LLVM Developer's Meeting
>> https://llvm.org/devmtg/2014-10/#tutorial1
>> https://llvm.org/devmtg/2014-10/Slides/Cormack-BuildingAnLLVMBackend.pdf
>>
>> https://llvm.org/devmtg/2014-04/PDFs/Talks/Building%20an%20LLVM%20backend.pdf
>>
>> http://web.archive.org/http://llvm.org/devmtg/2014-10/Videos/Building%20an%20LLVM%20backend-720.mov
>> http://llvm.org/devmtg/2014-10/#tutorial1
>>
>> http://www.inf.ed.ac.uk/teaching/courses/ct/other/LLVMBackend-2015-03-26_v2.pdf
>>
>> llvm-leg: LEG Example Backend
>> LEG Example Backend: a simple example LLVM backend for an ARM-like
>> architecture: 'LEG'.
>> https://github.com/frasercrmck/llvm-leg
>>
>> Best,
>> Matt
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200715/c2e3a805/attachment-0001.html>


More information about the llvm-dev mailing list