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

           Summary: Dead store elimination deficient
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Scalar Optimizations
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]


Given the following test case:


int foo(int *p){
    static int x = 0;
    x++;
    *p = 1;
    x++;
    return x;
}


dead store elimination fails to observe that the assignment into "*p" cannot
possibly affect "x" because the address of "x" is never taken. Thus, LLVM
generates an unnecessary store into "x" and an unnecessary reload of "x". GCC
does not generate the extra code.

This issue affects the performance and code size of the EEMBC "matrix01"
benchmark.

Here is the ARM output at -O3 that demonstrates the problem:


        ldr     r1, .LCPI0_0    <-- address of "x"
        mov     r3, #1
        ldr     r2, [r1]
        add     r2, r2, #1
        str     r2, [r1]      <--- Unnecessary store into "x"
        str     r3, [r0]
        ldr     r0, [r1]      <--- Unnecessary reload of "x"
        add     r0, r0, #1
        str     r0, [r1]
        mov     pc, lr

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