<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><div><div>On Apr 21, 2014, at 6:49 AM, Tom Stellard <<a href="mailto:tom@stellard.net">tom@stellard.net</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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;">On Fri, Apr 18, 2014 at 03:43:55PM -0700, Quentin Colombet wrote:<br><blockquote type="cite">Hi Tom,<br><br>I’ve looked at your patch and it looks like a workaround to a more general issue.<br><br>I’ve applied your second patch and looked at what happen with the rematerialization in that case.<br><br>Unless I am not looking at the right fragment, the copy you are trying to avoid to rematerialize is:<br> %vreg169<def> = COPY %vreg91:sub0_sub1; SReg_64:%vreg169 SReg_128:%vreg91<br><br>And the related rematerializable definition is:<br> %vreg91:sub0_sub1<def,read-undef> = S_MOV_B64 0; SReg_128:%vreg91<br><br>Thus, one would expect to rematerialize this into:<br> %vreg169:sub0_sub1<def,read-undef> = S_MOV_B64 0; SReg_128:%vreg169<br><br>Which the current code should correctly handle.<br><br>However, in your case, the instruction that have been picked up for rematerialization is:<br> %vreg91:sub3<def> = S_MOV_B32 61440; SReg_128:%vreg91<br><br>Which is the same vreg91, but not the right subregister. So looks like there is a liveness or liveness-update bug with the subregisters.<br><br></blockquote><br>Are you sure LLVM ToT does sub-register liveness tracking?</div></blockquote><div>No, I am not sure, but the root cause of the bug is this liveness tracking.</div><div>So I’d suggest, go for your workaround (with the fixed typo) and file a PR.</div><div><br></div><div>Thanks,</div><div>-Quentin</div><div><br></div><blockquote type="cite"><div style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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;">  I thought liveness was<br>tracked by super-register only.<br><br>-Tom<br><br><blockquote type="cite">Could you please track this down to make sure we understand the problem?<br><br>Now, in the mean time, we may want to provide a workaround (and fix a PR to remember we added a workaround).<br>Your workaround is appropriate with the following fix:<br>+  // The COPY src reg and the DefMI dst reg must have the same subreg index<br>+  if (CopyMI->getOperand(1).getSubReg() != DefMI->getOperand(0).getSubReg())<br>+    return false;<br><br>I.e., instead of checking the sub register of CopyDstOperand, you have to check the sub register of copy *src* operand (like you said in your comment), i.e., 1 instead of 0.<br><br>Thanks,<br>-Quentin<br><br>On Apr 16, 2014, at 3:13 PM, Tom Stellard <<a href="mailto:tom@stellard.net">tom@stellard.net</a>> wrote:<br><br><blockquote type="cite">Hi,<br><br>This patch fixes a bug in the register coalescer where it was incorrectly<br>rematerializing instructions that define sub-regs.<br><br>I've also attached the R600 patch which uncovers this bug.<br><br>Please Review.<br><br>-Tom<br><0001-RegisterCoalescer-Fix-bug-when-rematerializing-insts.patch><0002-R600-SI-Improve-chances-of-rematerializing-during-re.patch>_______________________________________________<br>llvm-commits mailing list<br><a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</blockquote></blockquote></div></blockquote></div><br></body></html>