http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46265
--- Comment #3 from davidxl <davidxl at gcc dot gnu.org> 2010-11-03 05:59:30 UTC --- Another example gcc fails to ifcvt (succeeds only if only one statement is in if and else block. void ref_int_p(int *); void foo (int j, int k) { int i; int a[200], b[100]; i = 0; for ( ; i < 100; i++) { if (j < k) { a[i] = j; b[i] = j; } else { a[i] = 1; b[i] = 1; } } ref_int_p (&a[0]); ref_int_p (&b[0]); return; } It (the loop) should be generated like: LBB0_1: cmpl %esi, %edi movl $1, %ecx cmovll %edi, %ecx movl %ecx, -800(%rbp,%rax,4) movl %ecx, -1200(%rbp,%rax,4) incq %rax cmpq $100, %rax jne .LBB0_1 David