[llvm-dev] Specifying DAG patterns in the instruction
Rail Shafigulin via llvm-dev
llvm-dev at lists.llvm.org
Mon Feb 1 14:16:25 PST 2016
On Sat, Jan 30, 2016 at 5:32 PM, Dylan McKay <dylanmckay34 at gmail.com> wrote:
> TableGen, as a DSL language, is made up of records. Every def corresponds
> to a record. For example, TableGen has a class Register, and your backend
> will define records by def GPR8 : Register<...>. You are correct in
> saying that the record definition is one of the SDNode values. These
> correspond 1:1 to llvm::ISD::NodeType
> <http://llvm.org/docs/doxygen/html/namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110>
> .
>
> (DEF a, b) corresponds to
>
> --------- a
> /
> DEF
> \
> ----------b
>
> A more complicated example, regarding that a and b themselves can be
> nested DAGs.
>
> a
> /
> --------- add
> / \
> / b
> DEF
> \ c
> \ /
> ---------- sub
> \
> d
>
> And so on and so fourth.
>
My next question is about the nodes of the Selection DAG. Based on what I'm
seeing the nodes can either be registers or they can be instructions. If I
understand correctly llvm::ISD::NodeType
<http://llvm.org/docs/doxygen/html/namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110>
tells
me the type of the node (register, add instruction, pseudo instruction,
etc).
What does a DAG set operation do? Does it create new node?
Here is the example:
(set GPR:$rD, (add (i32 GPR:$rA), (i32 GPR:$rB)))
And here is what I assume this to look like:
--------------- GPR:$rA
/
/
GPR:$rd ----------- add
\
\
--------------- GRP:$rb
Am I correct?
Any help is appreciated.
>
--
Rail Shafigulin
Software Engineer
Esencia Technologies
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160201/37a18b76/attachment.html>
More information about the llvm-dev
mailing list