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