<div dir="ltr">Move instructions in general should only be selected by your target's implementation of TargetInstrInfo::copyPhysReg. This should get called when the register allocation logic determines it needs to change register classes or when it needs to move to another register in the same class.<div><br></div><div>For more complicated cases you can add an explicit pattern to emit a COPY_TO_REGCLASS pseudo instruction. You may need that since it looks like you've created a separate p32 type.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 21, 2016 at 7:09 PM, Lawrence, Peter 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 lang="EN-US" link="#0563C1" vlink="#954F72">
<div>
<p class="MsoNormal"><span style="font-family:"Courier New"">When I have a MOV instruction in my dot-td-file with an explicit pattern<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     Def MOV   Format_RR < ,,,,,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">           [(set i32:$dst, i32:$src)]>;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">then Instruction Selection goes haywire, why is that ?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">(I have noticed that other targets get around this by defining their MOV<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Instrs with an empty pattern, but that seems weird to me (and it’s<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">undocumented which also seems weird to me))<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Unfortunately this is not an idle question, because my target has<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">separate Address and Data registers I need to add these NOP-ish defs:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     Def MOVDA  Format_RR < ,,,,,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">           [(set i32:$dst,  (bitconvert p32:$src))]>;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     Def MOVAD  Format_RR < ,,,,,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">           [(set p32:$dst,  (bitconvert i32:$src))]>;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">which actually work just fine, but when I also add these<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">even more NOP-ish defs:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     Def MOVDD  Format_RR < ,,,,,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">           [(set i32:$dst,  (bitconvert i32:$src))]>;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     Def MOVAA  Format_RR < ,,,,,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">           [(set p32:$dst,  (bitconvert p32:$src))]>;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">then I start seeing I-Select going haywire again, why is that ?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">By “haywire” I mean –debug-only=isel shows really long lists<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">of “Match failed at index ###” ending in compilation failure,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">which are otherwise really short and don’t fail.<span class="HOEnZb"><font color="#888888"><u></u><u></u></font></span></span></p><span class="HOEnZb"><font color="#888888">
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">--Peter Lawrence. <u></u>
<u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><u></u> <u></u></span></p>
</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><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">~Craig</div>
</div>