------- Comment #13 from rguenth at gcc dot gnu dot org 2008-02-01 13:04 ------- gcse-after-reload inserts
(insn 66 30 31 3 (set (reg:SF 1 dx [+4 ]) (mem/c:SF (plus:SI (reg/f:SI 6 bp) (const_int -16 [0xfffffffffffffff0])) [0 res$imag+0 S4 A] on the edge from bb3 to bb4, which looks correct. This insn vanishes during 184r.dse2: DCE: Deleting insn 66 deleting insn with uid = 66. One problem may be that gcse doesn't update LIFE: ... (insn 30 60 66 3 test-cacoshf.c:13 (parallel [ (asm_operands/v ("") ("") 0 [] [] 1606) (clobber (reg:QI 18 fpsr)) (clobber (reg:QI 17 flags)) (clobber (reg:QI 5 di)) (clobber (reg:QI 4 si)) (clobber (reg:QI 3 bx)) (clobber (reg:QI 2 cx)) ]) -1 (nil)) (insn 66 30 31 3 (set (reg:SF 1 dx [+4 ]) (mem/c:SF (plus:SI (reg/f:SI 6 bp) (const_int -16 [0xfffffffffffffff0])) [0 res$imag+0 S4 A8])) -1 (nil)) ;; End of basic block 3 -> ( 4) ;; lr out 6 [bp] 7 [sp] 9 [st(1)] 20 [frame] lr out doesn't include dx. Is gcse supposed to update lr out? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35045