<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Dec 3, 2015, at 5:11 PM, Smith, Kevin B <<a href="mailto:kevin.b.smith@intel.com" class="">kevin.b.smith@intel.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">-----Original Message-----<br class="">From: Quentin Colombet [<a href="mailto:qcolombet@apple.com" class="">mailto:qcolombet@apple.com</a>]<br class="">Sent: Thursday, December 03, 2015 4:43 PM<br class="">To: Smith, Kevin B <<a href="mailto:kevin.b.smith@intel.com" class="">kevin.b.smith@intel.com</a>><br class="">Cc: <a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class="">Subject: Re: [llvm-dev] analyzePhysReg question<br class=""><br class=""><br class=""><blockquote type="cite" class="">On Dec 3, 2015, at 4:35 PM, Smith, Kevin B via llvm-dev <llvm-<br class=""></blockquote><a href="mailto:dev@lists.llvm.org" class="">dev@lists.llvm.org</a>> wrote:<br class=""><blockquote type="cite" class=""><br class="">I am looking at results from analyzePhysReg, and am getting results a little<br class=""></blockquote>different than I expected for x86.<br class=""><blockquote type="cite" class=""><br class="">The call to this is coming from this code in<br class=""></blockquote>llvm::MachineBasicBlock::computeRegisterLiveness<br class=""><blockquote type="cite" class="">1163          MachineOperandIteratorBase::PhysRegInfo Analysis =<br class="">1164            ConstMIOperands(I).analyzePhysReg(Reg, TRI);<br class=""><br class="">The instruction I being analyzed is:<br class="">%BX<def> = MOV16rm %EDI, 2, %ECX, 0, %noreg;<br class=""></blockquote>mem:LD2[%arrayidx98](tbaa=!18)<br class=""><blockquote type="cite" class=""><br class="">and the Reg being passed in is 21, which is EBX.  The result I get back for<br class=""></blockquote>is:<br class=""><blockquote type="cite" class=""><br class="">Analysis: {Clobbers = true, Defines = true, Reads = false, ReadsOverlap =<br class=""></blockquote>false,<br class=""><blockquote type="cite" class="">DefinesDead = false, Kills = false}<br class=""><br class="">It seems based on the comment in the definition of PhysRegInfo.Defines,<br class=""></blockquote>that Defines should only be true if Reg or a super-register of Reg is<br class=""><blockquote type="cite" class="">defined.  BX is not a super-register of EBX, so it seemed like Defines<br class=""></blockquote>should be false here, while Clobbers is correct as true.<br class=""><br class="">I believe the documentation is wrong here.<br class="">EBX is partly defined, so to me Defines == true is conservatively correct<br class="">here.<br class="">My guess, but I haven’t checked the code, is that super-register should be<br class="">understood as any alias of Reg.<br class=""><br class="">Worth checking.<br class=""><br class="">Q.<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">I agree EBX is partly defined, but I think that is what Clobbers is for. </span></div></blockquote><div><br class=""></div><div>I think Clobbers is when there is a RegMask.</div><div>Basically, if that helps,</div><div>Clobber: The register cannot live through.</div><div>Define: (Part of) the register is define by this instruction.</div><br class=""><blockquote type="cite" class=""><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""> The interface for isSuperRegister</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">certainly makes a pretty clear distinction between something being a superRegister and something being an</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">overlapping register.  What do you think I should be checking to understand the assumptions/expectations better?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>The code :).</div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""><blockquote type="cite" class=""><br class="">I wanted to be sure that I wasn't missing something about the interface<br class=""></blockquote>definition/expectation.<br class=""><blockquote type="cite" class=""><br class="">Thanks,<br class="">Kevin Smith<br class="">_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a></blockquote></blockquote></div></blockquote></div><br class=""></body></html>