[llvm-dev] Specifying DAG patterns in the instruction
Rail Shafigulin via llvm-dev
llvm-dev at lists.llvm.org
Fri Jan 29 11:54:47 PST 2016
On Fri, Jan 29, 2016 at 11:39 AM, Rail Shafigulin <rail at esenciatech.com>
wrote:
>
>
> On Thu, Jan 28, 2016 at 8:34 PM, Dylan McKay <dylanmckay34 at gmail.com>
> wrote:
>
>> Try visualising the DAG like this.
>>
>> ```
>> ---- GPR:$rA
>> /
>> set GPR:$rd ---- add
>> \
>> ---- GPR:$rB
>> ```
>>
>> Each instruction forms a DAG with its operands being subnodes.
>>
>> The core instruction selection logic just looks for the pattern `(set
>> GPR:$rd, (add GPR:$rA, GPR:$rB))`. It then becomes a simple substitution.
>> This is a DAG because there all nodes are directed and acyclic.
>>
>
>
> Am I correct in my understanding that each node can either be a register
> or of type SDNode defined in TargetSelectionDAG.td?
>
I should clarify. What I'm confused about is how exactly the DAG is
defined. Here is what is says on llvm.org/docs/TableGen/LangIntro.html
(DEF a, b)a dag value. The first element is required to be a record
definition, the remaining elements in the list may be arbitrary other
values, including nested `dag‘ values.What is meant by a record definition?
Is it a definition of type SDNode which are defined in
TargetSelectionDAG.td?
What exactly does (DEF, a, b) represent in the graph?
Is it
--------- a
/
DEF
\
----------b
or
--------a
/
-------- DEF
\
-------b
>
>
>> On Thu, Jan 28, 2016 at 7:33 PM, Rail Shafigulin via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> I'm confused about how to specify DAG patterns for a given instruction
>>>
>>> Here is an example for my target
>>>
>>> class ALU1_RR<bits<4> subOp, string asmstr, SDNode OpNode>
>>> : ALU_RR<subOp, asmstr,
>>> [(set GPR:$rD, (OpNode (i32 GPR:$rA), (i32 GPR:$rB)))]>;
>>>
>>> def ADD : ALU1_RR<0x0, "l.add", add>;
>>>
>>> The set operation simply creates a list. The add operation creates a
>>> union. So at the end [(set GPR:$rD, (OpNode (i32 GPR:$rA), (i32
>>> GPR:$rB)))] becomes a just a regular set. How come this is a DAG? I feel
>>> like I'm missing something. Would anyone be able to help with the
>>> explanation?
>>>
>>> --
>>> Rail Shafigulin
>>> Software Engineer
>>> Esencia Technologies
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>>
>>
>
>
> --
> Rail Shafigulin
> Software Engineer
> Esencia Technologies
>
--
Rail Shafigulin
Software Engineer
Esencia Technologies
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160129/9e0ef20d/attachment.html>
More information about the llvm-dev
mailing list