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