<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 7, 2008, at 1:44 PM, Dale Johannesen wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 7, 2008, at 1:34 PMPDT, Evan Cheng wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Hi Dale,<br><br>I think we ought to fix the bug in the local register allocator  <br>instead. Is it not checking for aliases or sub-registers somewhere?<br><br>Thanks,<br><br>Evan</div></blockquote><div><br></div><div>Surely not "instead", the code I changed was clearly wrong.</div><div><br></div><div>Here are before-and-after dumps.  I have not tracked it through the code, but it looks like it's assuming imp-use physregs are supposed to match in type with the definition of that reg.  That seems like a reasonable assumption to me since the code generator has complete control of those types.</div></div></div></blockquote><div><br></div>This is a local liveness bug. AX == AL + AH. The def of AX by MOV16rr should not be dead. I assume this is a bug that's exposed by fastisel? Owen, can you work with Dale on this?</div><div><br></div><div>Thanks,</div><div><br></div><div>Evan</div><div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><br></div><div>Before</div><div><br></div><div><div></div><blockquote type="cite"><div>Starting RegAlloc of: %AX<def,dead> = MOV16rr %reg1029<kill></div><div>  Regs have values: [AL,%reg1026] [CX,%reg1029] </div><div>  Last use of CX[%reg1029], removing it from live set</div><div>  Last use of CL[%reg1029], removing it from live set</div><div>  Last use of CH[%reg1029], removing it from live set</div><div>  Spilling register AL containing %reg1026 to stack slot #4</div><div>  Register AX [%reg3] is never used, removing it frame live list</div><div>  Register AL [%reg2] is never used, removing it frame live list</div><div>  Register AH [%reg1] is never used, removing it frame live list</div><div>  Register EAX [%reg17] is never used, removing it frame live list</div><div><br></div><div>Starting RegAlloc of: DIV8r %reg1026<kill>, %AX<imp-def,dead>, %EFLAGS<imp-def,dead>, %AL<imp-use>, %AH<imp-use,kill></div><div>  Regs have values: </div><div>  Reloading %reg1026 into AL  <font class="Apple-style-span" color="#FF454B"><<<<<<<<< wrong</font></div><div>  Last use of AL[%reg1026], removing it from live set</div><div>  Last use of AH[%reg1], removing it from live set</div><div>  Register AX [%reg3] is never used, removing it frame live list</div><div>  Register AL [%reg2] is never used, removing it frame live list</div><div>  Register AH [%reg1] is never used, removing it frame live list</div><div>  Register EAX [%reg17] is never used, removing it frame live list</div><div>  Register EFLAGS [%reg23] is never used, removing it frame live list</div></blockquote></div><div><br></div><div>After</div><div><br></div><div><div></div><blockquote type="cite"><div>Starting RegAlloc of: %AX<def> = MOV16rr %reg1029<kill></div><div>  Regs have values: [AL,%reg1026] [CX,%reg1029] </div><div>  Last use of CX[%reg1029], removing it from live set</div><div>  Last use of CL[%reg1029], removing it from live set</div><div>  Last use of CH[%reg1029], removing it from live set</div><div>  Spilling register AL containing %reg1026 to stack slot #4</div><div><br></div><div>Starting RegAlloc of: DIV8r %reg1026<kill>, %AL<imp-def>, %AH<imp-def,dead>, %EFLAGS<imp-def,dead>, %AX<imp-use,kill></div><div>  Regs have values: [AH,%reg0] [AL,%reg0] [AX,%reg0] </div><div>  Reloading %reg1026 into CL</div><div>  Last use of CL[%reg1026], removing it from live set</div><div>  Last use of AX[%reg3], removing it from live set</div><div>  Last use of AL[%reg3], removing it from live set</div><div>  Last use of AH[%reg3], removing it from live set</div><div>  Register AH [%reg1] is never used, removing it frame live list</div><div>  Register AX [%reg3] is never used, removing it frame live list</div><div>  Register EAX [%reg17] is never used, removing it frame live list</div><div>  Register EFLAGS [%reg23] is never used, removing it frame live list</div></blockquote><br></div></div></div>_______________________________________________<br>llvm-commits mailing list<br><a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br></blockquote></div><br></body></html>