<div dir="ltr">Hmm, well that seems to have worked, but I'm a little suspicious. This is my instruction def:<div><br></div><div><div><font face="monospace">// Load Immediate (LI)</font></div><div><font face="monospace">def LI : IImmReg<0x010, (outs REG16:$dst), (ins i16imm:$src),</font></div><div><font face="monospace">    [(set REG16:$dst, imm:$src)], "LI\t$dst, $src">;</font></div><div><br></div><div><br></div><div>The rest of the debug output:</div><div><br></div><div><div><font face="monospace">Selecting: t3: ch,glue = CopyToReg t0, Register:i16 %R5, Constant:i16<127></font></div><div><font face="monospace">Selecting: t2: i16 = Register %R5</font></div><div><font face="monospace">Selecting: t1: i16 = Constant<127></font></div><div><font face="monospace"><br></font></div><div><font face="monospace">ISEL: Starting pattern match on root node: t1: i16 = Constant<127></font></div><div><font face="monospace">  Initial Opcode index to 16</font></div><div><span style="font-family:monospace">Creating constant: t5: i16 = TargetConstant<127></span><br></div><div><font face="monospace">  Morphed node: t1: i16 = LI TargetConstant:i16<127></font></div><div><font face="monospace">ISEL: Match complete!</font></div></div><div><font face="monospace"><br></font></div><div><font face="monospace"><div>Selected selection DAG: BB#0 'my_func:entry'</div><div>SelectionDAG has 6 nodes:</div><div>      t0: ch = EntryToken</div><div>      t1: i16 = LI TargetConstant:i16<127></div><div>    t3: ch,glue = CopyToReg t0, Register:i16 %R5, t1</div><div>  t4: ch,glue = RTWP Register:i16 %R5, t3</div><div><br></div></font></div><div>So at this point, t3 is still a CopyToReg with R5 and another node that is an LI with the constant. That doesn't make sense to me. Shouldn't the LI node end up being a parent of R5 and the constant?</div><div><br></div><div>The phases proceed, and this makes even less sense:</div><div><br></div><div><div><font face="monospace"># Machine code for function my_func: IsSSA, TracksLiveness</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">BB#0: derived from LLVM BB %entry</font></div><div><font face="monospace"><span style="white-space:pre">   </span>%vreg0<def> = LI 127; REG16:%vreg0</font></div><div><font face="monospace"><span style="white-space:pre">  </span>%R5<def> = COPY %vreg0; REG16:%vreg0</font></div><div><font face="monospace"><span style="white-space:pre">        </span>RTWP %R5</font></div><div><font face="monospace"><br></font></div><div><font face="monospace"># End machine code for function my_func.</font></div></div><div><br></div><div>I'm not complaining too hard, though, because in the end I get the assembly output I expect:</div><div><br></div><div><div><font face="monospace"># BB#0:                                 # %entry</font></div><div><font face="monospace"><span style="white-space:pre">      </span>LI<span style="white-space:pre">   </span>$r5, 127</font></div><div><font face="monospace"><span style="white-space:pre">  </span>RTWP</font></div></div><div><br></div><div>What I'm complaining about is that I still don't know how the DAG nodes work. Here's the <font face="monospace">-view-sched-dags</font> output:</div><div><br></div><div><br></div><div><img src="cid:15f8ee964f95560369c2" alt="dags.jpg" class="" style="max-width: 100%; opacity: 1;"><br></div></div><div><br></div><div>I just don't understand the LI node. From a dataflow perspective, LI does depend on the constant, and not on the register R5. Is this just how LLVM represents data stores? With a CopyToReg node?</div><div><br></div><div>There's something that I'm missing, but I don't know what it is :(</div><div><br></div><div>--Rob</div><br><div class="gmail_quote"><div dir="ltr">On Sun, Nov 5, 2017 at 1:22 AM 陳韋任 <<a href="mailto:chenwj.cs97g@g2.nctu.edu.tw">chenwj.cs97g@g2.nctu.edu.tw</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Try match your instruction with (set REG16:$dst, i16imm:$src). Just give it a shot. :)<br></div></div><div class="gmail_extra"></div><div class="gmail_extra"><br><div class="gmail_quote">2017-11-05 12:56 GMT+08:00 Robert Baruch via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Well, that's the thing: I thought that was CopyToReg. I don't know what the name of the node is to load one value into a register, so I don't know how to construct such a pattern. </div><div class="m_-5614703604511338509HOEnZb"><div class="m_-5614703604511338509h5"><br><div class="gmail_quote"><div dir="ltr">On Sat, Nov 4, 2017 at 9:23 PM Craig Topper <<a href="mailto:craig.topper@gmail.com" target="_blank">craig.topper@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Do you have a pattern for loading an i16 immediate into a 16-bit register?</div><div class="gmail_extra"></div><div class="gmail_extra"><br clear="all"><div><div class="m_-5614703604511338509m_-9140908403049611248m_448168409802762758gmail_signature" data-smartmail="gmail_signature">~Craig</div></div></div><div class="gmail_extra">
<br><div class="gmail_quote">On Sat, Nov 4, 2017 at 8:00 PM, Robert Baruch <span dir="ltr"><<a href="mailto:robert.c.baruch@gmail.com" target="_blank">robert.c.baruch@gmail.com</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">Hmm, okay. Then what's the problem being reported here? I'm not sure what I'm supposed to do with "<span style="font-family:monospace;font-size:10.5625px">LLVM ERROR: Cannot select: t1: i16 = Constant<127>".</span>BTW, the function is:<div><font face="monospace"><span style="font-size:10.5625px"><br></span></font></div><div><font face="monospace"><div>; ModuleID = 'return.c'</div><div>source_filename = "return.c"</div><div>target datalayout = "E-m:e-p:16:16:16-i1:16:16-i8:16:16-i16:16:16-i32:16:16-i64:16:16-S16-n16"</div><div>target triple = "tms9900"</div><div><br></div><div>; Function Attrs: noinline nounwind optnone</div><div>define signext i16 @my_func() #0 {</div><div>entry:</div><div>  ret i16 127</div><div>}</div><div style="font-size:10.5625px"><br></div><div style="font-size:10.5625px">------- debug output --------</div></font><div><font face="monospace"><span style="font-size:10.5625px"><br></span></font></div><div><font face="monospace"><div>Optimized legalized selection DAG: BB#0 'my_func:entry'</div><div>SelectionDAG has 5 nodes:</div><div>    t0: ch = EntryToken</div><span><div>  t3: ch,glue = CopyToReg t0, Register:i16 %R5, Constant:i16<127></div></span><div>  t4: ch = TMS9900ISD::Ret t3, Register:i16 %R5, t3:1</div></font><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">===== Instruction selection begins: BB#0 'entry'</span><div><div><font face="monospace">Selecting: t4: ch = TMS9900ISD::Ret t3, Register:i16 %R5, t3:1</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">ISEL: Starting pattern match on root node: t4: ch = TMS9900ISD::Ret t3, Register:i16 %R5, t3:1</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">  Morphed node: t4: ch,glue = Retr Register:i16 %R5, t3</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">ISEL: Match complete!</font></div><span><div><font face="monospace">Selecting: t3: ch,glue = CopyToReg t0, Register:i16 %R5, Constant:i16<127></font></div><div><font face="monospace"><br></font></div></span><div><font face="monospace">Selecting: t2: i16 = Register %R5</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">Selecting: t1: i16 = Constant<127></font></div><div><font face="monospace"><br></font></div><div><font face="monospace">ISEL: Starting pattern match on root node: t1: i16 = Constant<127></font></div><div><font face="monospace"><br></font></div><div><font face="monospace">  Initial Opcode index to 0</font></div><div><font face="monospace">  Match failed at index 0</font></div><div><font face="monospace">LLVM ERROR: Cannot select: t1: i16 = Constant<127></font></div><div><font face="monospace">In function: my_func</font></div></div><div><br></div></div></div></div></div><div class="m_-5614703604511338509m_-9140908403049611248m_448168409802762758HOEnZb"><div class="m_-5614703604511338509m_-9140908403049611248m_448168409802762758h5"><br><div class="gmail_quote"><div dir="ltr">On Sat, Nov 4, 2017 at 7:22 PM Craig Topper <<a href="mailto:craig.topper@gmail.com" target="_blank">craig.topper@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div dir="auto">CopyToReg is not handle by patterns. It should be passed through isel unchanged. It’s part of a special list of ISD opcodes that don’t change in SelectioDAGISel::SelectCodeCommon</div><div dir="auto"><br></div><div dir="auto">It will then be turned into a TargetOpcode::COPY in InstrEmitter::EmitSpecialNode when the DAG is turned into MachineInstrs.</div><div dir="auto"><br></div><div class="gmail_quote"></div></div><div><div class="gmail_quote"><div>On Sat, Nov 4, 2017 at 7:02 PM Robert Baruch via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br></div></div></div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>So there's a DAG that looks like this in the debug output:<div><br></div><div><div><font face="monospace">  Selecting: t3: ch,glue = CopyToReg t0, Register:i16 %R5, Constant:i16<127></font></div></div><div><br></div><div>In the instruction selection phase, what pattern would that match? I've constructed this so far:</div><div><br></div><div><font face="monospace">  (??? REG16:$dst, i16imm:$src)</font></div><div><br></div><div>but the problem is, I can't determine what to use as <font face="monospace">???</font>. There is an <font face="monospace">ISD::CopyToReg</font> enum value, but I don't know how that translates to the string to use in the pattern.</div><div><br></div><div>And more generally, how do I find out from a DAG diagram like the ones output by <font face="monospace">-view-isel-dags</font> which node type corresponds to which pattern string?</div><div><br></div><div>Thanks,</div><div><br></div><div>--Rob</div><div><br></div></div></blockquote></div></div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
_______________________________________________<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="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>
</blockquote></div></div><div dir="ltr">-- <br></div><div class="m_-5614703604511338509m_-9140908403049611248m_448168409802762758m_5700157314497278490m_3808137461368793721gmail_signature" data-smartmail="gmail_signature">~Craig</div>
</blockquote></div>
</div></div></blockquote></div><br></div></blockquote></div>
</div></div><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="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><br clear="all"><div><br></div>-- <br></div><div class="gmail_extra"><div class="m_-5614703604511338509gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Wei-Ren Chen (陳韋任)<br>Homepage: <a href="https://people.cs.nctu.edu.tw/~chenwj" target="_blank">https://people.cs.nctu.edu.tw/~chenwj</a></div></div></div>
</div>
</blockquote></div></div>