[llvm-commits] [llvm] r57257 - /llvm/trunk/lib/Target/X86/X86InstrInfo.td
Dale Johannesen
dalej at apple.com
Tue Oct 7 13:44:10 PDT 2008
On Oct 7, 2008, at 1:34 PMPDT, Evan Cheng wrote:
> Hi Dale,
>
> I think we ought to fix the bug in the local register allocator
> instead. Is it not checking for aliases or sub-registers somewhere?
>
> Thanks,
>
> Evan
Surely not "instead", the code I changed was clearly wrong.
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.
Before
> Starting RegAlloc of: %AX<def,dead> = MOV16rr %reg1029<kill>
> Regs have values: [AL,%reg1026] [CX,%reg1029]
> Last use of CX[%reg1029], removing it from live set
> Last use of CL[%reg1029], removing it from live set
> Last use of CH[%reg1029], removing it from live set
> Spilling register AL containing %reg1026 to stack slot #4
> Register AX [%reg3] is never used, removing it frame live list
> Register AL [%reg2] is never used, removing it frame live list
> Register AH [%reg1] is never used, removing it frame live list
> Register EAX [%reg17] is never used, removing it frame live list
>
> Starting RegAlloc of: DIV8r %reg1026<kill>, %AX<imp-def,dead>,
> %EFLAGS<imp-def,dead>, %AL<imp-use>, %AH<imp-use,kill>
> Regs have values:
> Reloading %reg1026 into AL <<<<<<<<< wrong
> Last use of AL[%reg1026], removing it from live set
> Last use of AH[%reg1], removing it from live set
> Register AX [%reg3] is never used, removing it frame live list
> Register AL [%reg2] is never used, removing it frame live list
> Register AH [%reg1] is never used, removing it frame live list
> Register EAX [%reg17] is never used, removing it frame live list
> Register EFLAGS [%reg23] is never used, removing it frame live list
After
> Starting RegAlloc of: %AX<def> = MOV16rr %reg1029<kill>
> Regs have values: [AL,%reg1026] [CX,%reg1029]
> Last use of CX[%reg1029], removing it from live set
> Last use of CL[%reg1029], removing it from live set
> Last use of CH[%reg1029], removing it from live set
> Spilling register AL containing %reg1026 to stack slot #4
>
> Starting RegAlloc of: DIV8r %reg1026<kill>, %AL<imp-def>, %AH<imp-
> def,dead>, %EFLAGS<imp-def,dead>, %AX<imp-use,kill>
> Regs have values: [AH,%reg0] [AL,%reg0] [AX,%reg0]
> Reloading %reg1026 into CL
> Last use of CL[%reg1026], removing it from live set
> Last use of AX[%reg3], removing it from live set
> Last use of AL[%reg3], removing it from live set
> Last use of AH[%reg3], removing it from live set
> Register AH [%reg1] is never used, removing it frame live list
> Register AX [%reg3] is never used, removing it frame live list
> Register EAX [%reg17] is never used, removing it frame live list
> Register EFLAGS [%reg23] is never used, removing it frame live list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20081007/6112d9cd/attachment.html>
More information about the llvm-commits
mailing list