This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
A question about redudant load elimination
- From: "Jiangning Liu" <jiangning dot liu at arm dot com>
- To: <gcc at gcc dot gnu dot org>
- Date: Mon, 14 Nov 2011 16:01:42 +0800
- Subject: A question about redudant load elimination
Hi,
For this test case,
int x;
extern void f(void);
void g(int *a)
{
a[x] = 1;
if (x == 100)
f();
a[x] = 2;
}
For trunk, the x86 assembly code is like below,
movl x, %eax
movl 16(%esp), %ebx
movl $1, (%ebx,%eax,4)
movl x, %eax // Is this a redundant one?
cmpl $100, %eax
je .L4
movl $2, (%ebx,%eax,4)
addl $8, %esp
.cfi_remember_state
.cfi_def_cfa_offset 8
popl %ebx
.cfi_restore 3
.cfi_def_cfa_offset 4
ret
.p2align 4,,7
.p2align 3
.L4:
.cfi_restore_state
call f
movl x, %eax
movl $2, (%ebx,%eax,4)
addl $8, %esp
.cfi_def_cfa_offset 8
popl %ebx
.cfi_restore 3
.cfi_def_cfa_offset 4
Ret
Is the 2nd "movl x, %eax" is a redundant one for single thread programming
model? If yes, can this be optimized away?
Thanks,
-Jiangning