<div dir="ltr">Thanks Mehdi. Below is an example of "dead def", it looks like unused definition as you mentioned, could you confirm? I also saw dead defs in some generated code before register allocation, like "%reg1030<def> = ADD8rr %reg1028<kill>, %reg1029<kill>, %EFLAGS<<b>imp-def,dead</b>>", does it mean similar for EFLAGS here?<div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>// AggressiveAntiDepBreaker.cpp</div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><div>void AggressiveAntiDepBreaker::PrescanInstruction(MachineInstr *MI,</div></div></div><div><div>                                                  unsigned Count,</div></div><div><div>                                             std::set<unsigned>& PassthruRegs) {</div></div><div><div>  std::vector<unsigned> &DefIndices = State->GetDefIndices();</div></div><div><div>  std::multimap<unsigned, AggressiveAntiDepState::RegisterReference>&</div></div><div><div>    RegRefs = State->GetRegRefs();</div></div><div><div><br></div></div><div><div>  // Handle <b>dead defs</b> by simulating a last-use of the register just</div></div><div><div>  // after the def. A dead def can occur because the def is truly</div></div><div><div>  // dead, or because only a subregister is live at the def. If we</div></div><div><div>  // don't do this the dead def will be incorrectly merged into the</div></div><div><div>  // previous def.</div></div><div><div>  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {</div></div><div><div>    MachineOperand &MO = MI->getOperand(i);</div></div><div><div>    if (!MO.isReg() || !MO.isDef()) continue;</div></div><div><div>    unsigned Reg = MO.getReg();</div></div><div><div>    if (Reg == 0) continue;</div></div><div><div><br></div></div><div><div>    HandleLastUse(Reg, Count + 1, "", "\t<b>Dead Def</b>: ", "\n");</div></div><div><div>  }</div></div></blockquote></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 2, 2015 at 4:38 AM, Mehdi Amini <span dir="ltr"><<a href="mailto:mehdi.amini@apple.com" target="_blank">mehdi.amini@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> On Jan 1, 2015, at 7:24 AM, Thomson <<a href="mailto:lilotom@gmail.com">lilotom@gmail.com</a>> wrote:<br>
><br>
> I saw there is reference to dead def on registers in LLVM source code. I am not aware of this concept from the traditional course material. What are the properties of dead def?<br>
<br>
</span>Could it be a def that is never used (hence dead)?<br>
If you mention where you saw it, it may be easier to help :)<br>
<br>
Best,<br>
<br>
Mehdi<br>
<br>
<br>
><br>
> Cheers<br>
> Thomson<br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br>
</blockquote></div><br></div>