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