[LLVMbugs] [Bug 11175] New: LoopRotation pass too restrictive

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Oct 18 15:28:11 PDT 2011


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

           Summary: LoopRotation pass too restrictive
           Product: libraries
           Version: trunk
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Loop Optimizer
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: pickensd at synopsys.com
                CC: llvmbugs at cs.uiuc.edu


Created an attachment (id=7477)
 --> (http://llvm.org/bugs/attachment.cgi?id=7477)
Test case

Attached is a test case that illustrates how GCC generates dramatically
superior code for a loop for ARM. LLVM could do something comparable if the
LoopRotation pass would not reject loops that have more than one exit. If
LoopRotation would properly handle such loops, then induction-variable analysis
and LICM would have more opportunities to clean things up (as is apparently
done in GCC).

Compiled with -O3, the LLVM generates the following loop code of 10
instructions:

.LBB0_1:                                @ %while.cond.i
                                        @ =>This Inner Loop Header: Depth=1
        add     r1, r0, #5
        cmp     r1, #1
        mov     r1, #0
        blt     .LBB0_3
        ldr     r2, [r4, -r0, lsl #2]
        ldr     r3, [r5, -r0, lsl #2]
        sub     r0, r0, #1
        mov     r1, #1
        tst     r3, r2
        beq     .LBB0_1


By contrast GCC generates the following 6-instruction loop:


.L3:
        ldr     r0, [r3], #4
        ldr     r1, [r2, #4]!
        tst     r0, r1
        bne     .L4
        cmp     r3, ip
        bne     .L3

-- 
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.



More information about the llvm-bugs mailing list