[LLVMbugs] [Bug 935] NEW: Loop optimization deficiencies

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Tue Oct 3 11:47:01 PDT 2006


           Summary: Loop optimization deficiencies
           Product: libraries
           Version: 1.5
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Scalar Optimizations
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: sabre at nondot.org

Consider these nested loops:

void foo(unsigned char *ptr, unsigned r, unsigned g, unsigned b, unsigned h, unsigned w) {
unsigned row, col;

for (row = 0; row < h; row++) {
for (col = 0; col < w; col += 3) { 
ptr[col] = r;
ptr[col+1] = g;
ptr[col+2] = b;

We currently don't rotate the inner loop (bad), though this produces decent X86 code for the inner loop:

        xorl %ebx, %ebx
        jmp LBB1_4      #bb16
LBB1_3: #bb1
        movb %cl, (%edi,%ebx)
        movb %ah, 1(%edi,%ebx)
        movb %al, 2(%edi,%ebx)
        addl $3, %ebx
LBB1_4: #bb16
        cmpl %edx, %ebx
        jb LBB1_3       #bb1

For PowerPC though, we're getting an extra IV:

        li r9, 0
        b LBB1_4        ;bb16
LBB1_3: ;bb1
        stbx r4, r3, r9
        add r10, r3, r9
        addi r9, r9, 3
        stb r5, 1(r10)
        stb r6, 2(r10)
LBB1_4: ;bb16
        cmplw cr0, r9, r8
        blt cr0, LBB1_3 ;bb1

Further, the use of postinc addressing modes would eliminate the need for *any* adds in the loop.


------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

More information about the llvm-bugs mailing list