http://llvm.org/bugs/show_bug.cgi?id=10066

           Summary: Greedy allocator fails to fold a memory operand when
                    spilling
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Register Allocator
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]


Created an attachment (id=6676)
 --> (http://llvm.org/bugs/attachment.cgi?id=6676)
LLVM IR source

Hi. 

The code produced for the test in attachment is worse with the greedy allocator
than it was with the linear scan allocator (note that the test is compiled with
-disable-fp-elim option).

The test is a pair of nested loops. The outer loop counter (in vreg17) is
spilled on x86 but despite being used only once (for decrementing) stack slot
is not folded into the instruction. This happens because vreg17 is first split
into two registers (vreg54 and vreg53). Physical register is allocated for the
first one and the second one is spilled, so at that point it is not possible to
fold the memory operand unless it is somehow known that the two registers
originated from a common one.

Seems that greedy allocator is too greedy at splitting the intervals :) This
might not be a problem for a RISC architecture but it is not very good for
CISC.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to