<div dir="ltr">Hi Jonas,<div><br></div><div>> <span style="font-family:Calibri,sans-serif;font-size:15px">These operands are not supposed to be around… they are added a bit later in the method.</span></div><div><span style="font-family:Calibri,sans-serif;font-size:15px"><br>
</span></div><div><span style="font-family:Calibri,sans-serif;font-size:15px">I'm not quite sure what you mean here?</span></div><div><span style="font-family:Calibri,sans-serif;font-size:15px"><br></span></div><div><font face="Calibri, sans-serif"><span style="font-size:15px">I think that assertion is there to catch the case where a rematerialized instruction is implicitly clobbering the flags register, which is fairly common. I don't think the coalescer knows how to deal with implicit operands in general.</span></font></div>
<div><span style="font-size:15px;font-family:Calibri,sans-serif"><br></span></div><div><span style="font-size:15px;font-family:Calibri,sans-serif">Are you able to tell us anything about the nature of the instruction (and implicit use) that you're trying to rematerialize?</span></div>
<div><font face="Calibri, sans-serif"><span style="font-size:15px"><br></span></font></div><div><font face="Calibri, sans-serif"><span style="font-size:15px">Cheers,</span></font></div><div><font face="Calibri, sans-serif"><span style="font-size:15px">Lang.</span></font></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jun 11, 2014 at 6:42 AM, Jonas Paulsson <span dir="ltr"><<a href="mailto:jonas.paulsson@ericsson.com" target="_blank">jonas.paulsson@ericsson.com</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="blue" vlink="purple">
<div>
<p class="MsoNormal">Hi,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I am a bit confused in the method RegisterCoalescer::reMaterializeTrivialDef().<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">It seems that  <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">TII->reMaterialize(*MBB, MII, DstReg, SrcIdx, DefMI, *TRI);<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">simply clones the instruction. <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">In my case, some implicit use operands exist, so they are also added to the NewMI.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">This however, triggers the assert:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  // NewMI may have dead implicit defs (E.g. EFLAGS for MOV<bits>r0 on X86).<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  // We need to remember these so we can add intervals once we insert<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  // NewMI into SlotIndexes.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  SmallVector<unsigned, 4> NewMIImplDefs;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  for (unsigned i = NewMI->getDesc().getNumOperands(),<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">         </span><span lang="SV" style="font-family:"Courier New"">e = NewMI->getNumOperands(); i != e; ++i) {<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="SV" style="font-family:"Courier New"">    </span>
<span style="font-family:"Courier New"">MachineOperand &MO = NewMI->getOperand(i);<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    if (MO.isReg()) {<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      <span style="background:yellow">
assert(MO.isDef() && MO.isImplicit() && MO.isDead() &&<u></u><u></u></span></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New";background:yellow">             TargetRegisterInfo::isPhysicalRegister(MO.getReg()));</span><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">These operands are not supposed to be around… they are added a bit later in the method.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I don’t see any other targets handling these types of operands in their rematerialize() definitions. Should I override this and make sure that these implicit use ops are omitted?<u></u><u></u></p>
<p class="MsoNormal">Or am I missing something?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thanks in advance,<span class="HOEnZb"><font color="#888888"><u></u><u></u></font></span></p><span class="HOEnZb"><font color="#888888">
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Jonas Paulsson<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</font></span></div>
</div>

</blockquote></div><br></div>