http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47464
--- Comment #3 from Jeffrey A. Law <law at redhat dot com> 2011-01-26 04:33:24 UTC --- Stranger and stranger. It looks like my patch may have exposed a latent bug in the post-reload ifcvt pass. It's moving some insns which clearly aren't safe to move. IF-CASE-1 found, start 2, then 3 rescanning insn with uid = 25. deleting insn with uid = 25. changing bb of uid 27 changing bb of uid 69 from 3 to 2 changing bb of uid 28 from 3 to 2 changing bb of uid 78 unscanned insn scanning new insn with uid = 79. deleting insn with uid = 26. deleting insn with uid = 65. deleting insn with uid = 66. deleting block 3 shoving block 9 into 3 Conversion succeeded on pass 1. [ ... ] (insn 69 27 28 2 (set (reg/v:SI 0 ax [orig:75 ix ] [75]) (mem/s/c:SI (reg/f:DI 1 dx [orig:71 D.17991 ] [71]) [6 MEM[(const struct VEC_tree_base *)D.17991_13].num+0 S4 A64])) j.c:7464 64 {*movsi_internal} (nil)) (insn 28 69 24 2 (parallel [ (set (reg/v:SI 0 ax [orig:75 ix ] [75]) (plus:SI (reg/v:SI 0 ax [orig:75 ix ] [75]) (const_int -1 [0xffffffffffffffff]))) (clobber (reg:CC 17 flags)) ]) j.c:7464 252 {*addsi_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))) (insn 24 28 25 2 (set (reg:CCZ 17 flags) (compare:CCZ (reg/f:DI 1 dx [orig:71 D.17991 ] [71]) (const_int 0 [0]))) j.c:7464 3 {*cmpdi_ccno_1} (nil)) (jump_insn 25 24 78 2 (set (pc) (if_then_else (ne (reg:CCZ 17 flags) (const_int 0 [0])) (label_ref:DI 64) (pc))) j.c:7464 591 {*jcc_1} (expr_list:REG_DEAD (reg:CCZ 17 flags) (expr_list:REG_BR_PROB (const_int 8500 [0x2134]) (nil))) insns 69 & 28 had previously been in a different block and guarded by the compare & jump at insns 24 & 25 respectively. Very very interesting.