<div dir="ltr"><div><div>It sounds like you want to specify a target-specific DAG combine. I'm sure most targets have many examples of this, but I'm familiar with PPC, so you can have a look at the node ISD::SIGN_EXTEND in lib/Target/PowerPC/PPCISelLowering.cpp. We specify in the target constructor that there's a DAG combine for the node (<span style="font-family:monospace,monospace">setTargetDAGCombine(ISD::SIGN_EXTEND);</span>). Then we specify what to do with it in <span style="font-family:monospace,monospace">PPCTargetLowering::PerformDAGCombine</span>. Of course, the semantics are very different from what you're trying to do, but I think the general approach is what you're looking for (i.e. note that there's a target-specific DAG combine, then specify the details of the combine).<br><br></div>I hope this helps and that I haven't misunderstood your question.<br></div>Nemanja<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 13, 2016 at 1:05 AM, Rail Shafigulin via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'd like to apologize in advance if the question seems dumb, but I've never specified a DAG pattern for an instruction a don't know how it looks in LLVM.<div><br></div><div>My target has an instruction which is similar to X86 horizontal add. The instruction, let's call is sumreduce, sums up all the elements in a vector and stores a result in GPR. What I'm trying to do is to replace a specific DAG pattern (it is given below) with this instruction (DAG node).</div><div><br></div><div>Here is the pattern I need to replace:</div><div><br></div><div><div style="font-size:12.8px">           r0 r1 </div><div style="font-size:12.8px">             \ /</div><div style="font-size:12.8px">            add  r2</div><div style="font-size:12.8px">               \    /</div><div style="font-size:12.8px">               add  r3</div><div style="font-size:12.8px">                  \    /</div><div style="font-size:12.8px">                  add</div><div style="font-size:12.8px">                    |</div></div><div style="font-size:12.8px">                   r4</div><div><div><br></div><div>with</div><div>            r4 = sumreduce r0 r1 r2 r3</div><div><br></div><div>For now assume that the vector has 4 elements in it and all of them are i32.</div><div><br></div><div>I would appreciate any pointers on how to do it. If someone could point me to an example code that converts a DAG pattern to a DAG node I would greatly appreciate it.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div><br></div>-- <br><div><div dir="ltr"><div><div dir="ltr"><div>Rail Shafigulin<br></div>Software Engineer <br>Esencia Technologies<br></div></div></div></div>
</font></span></div></div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>