<div dir="ltr">This kind of sounds like the peephole optimization should really be resetting the kill flag if it's extending the live range of a [virtual] register (which is what the description here seems to imply).<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 5, 2017 at 9:54 AM, Jatin Bhateja 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">Hello Devs,<div><br></div><div>Machine Instruction verifier pass always validates Live variable info associated with MachineInstr along with other checks.</div><div><br></div><div>Please consider following scenario (w.r.t bugZilla <span style="font-size:12.8px;white-space:nowrap">32583)</span></div><div><span style="font-size:12.8px;white-space:nowrap"><br></span></div><div><span style="font-size:12.8px;white-space:nowrap">1/  MachineCSE pass may prohibit optimising out a common sub-expression for instruction using physical registers </span></div><div><span style="font-size:12.8px;white-space:nowrap">by looking at the LiveIn info of successor basic blocks. </span></div><div><span style="font-size:12.8px;white-space:nowrap"><br></span></div><div><span style="font-size:12.8px;white-space:nowrap">2/ Which means we need Live Variables analysis to happen prior to executing MachineCSE.</span></div><div><span style="font-size:12.8px;white-space:nowrap"><br></span></div><div><span style="font-size:12.8px;white-space:nowrap">3/ Live variable analysis associates Kill/def information with MachineOperands.</span></div><div><span style="font-size:12.8px;white-space:nowrap"><br></span></div><div><span style="font-size:12.8px;white-space:nowrap">4/ In one of the regression Peephole optimizer (which does not uses liveness information)</span><br></div><div><span style="font-size:12.8px;white-space:nowrap">performs certain transformations over MachineBasicBlock which potentially dirties the</span></div><div><span style="font-size:12.8px;white-space:nowrap">liveness information computed early. </span></div><div><span style="font-size:12.8px;white-space:nowrap"><br></span></div><div><span style="font-size:12.8px;white-space:nowrap">5/ Now, when Machine Instruction verifier kicks in after Peephole optimizer it reports use after kill violation</span></div><div><span style="font-size:12.8px;white-space:nowrap">over a particular instruction.  </span></div><div><br></div><div>Can we selectively turn of the live variable checking in Machine instruction verifier till next Live variable pass is invoked (as per the need of following pass).<br></div><div><br></div><div>This may sound like defeating the purpose of machine instruction verifier which checks instruction validity against different parameters after each transformation pass, but if a pass does not use Live ness information should not be constrained to do other transformations which may dirty the live ness information.</div><div><br></div><div>Please provide you comments.</div><div><br></div><div>Thanks,</div><div>Jatin Bhateja</div></div>
<br>______________________________<wbr>_________________<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/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>