http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49007
--- Comment #13 from John David Anglin <danglin at gcc dot gnu.org> 2011-05-23 15:48:43 UTC --- Ok, I'll see if I can find out why it's being deleted. In the first try, we have the following rtl: Breakpoint 12, mark_target_live_regs (insns=0x1b8a020, target=0x1b98f90, res=0xbfffeda0) at ../../gcc/gcc/resource.c:975 975 for (insn = start_insn; insn != stop_insn; (gdb) p debug_rtx_list (start_insn, 12) (code_label 322 386 91 16 617 "" [1 uses]) (note 91 322 433 [bb 16] NOTE_INSN_BASIC_BLOCK) (insn 433 91 64 (use (insn/s 92 59 366 (set (reg/v:SI 4 %r4 [orig:111 i ] [111]) (const_int 2 [0x2])) 37 {*pa.md:2542} (expr_list:REG_EQUAL (const_int 2 [0x2]) (nil)))) -1 (nil)) (insn 64 433 65 ../../gcc/gcc/tree-cfgcleanup.c:697 (set (reg/f:SI 1 %r1 [216]) (high:SI (symbol_ref:SI ("cfun") [flags 0x240] <var_decl 0xc204e0 cfun>))) 49 {*pa.md:3017} (expr_list:REG_EQUIV (high:SI (symbol_ref:SI ("cfun") [flags 0x240] <var_decl 0xc204e0 cfun>)) (nil))) (insn 65 64 94 ../../gcc/gcc/tree-cfgcleanup.c:697 (set (reg/f:SI 3 %r3 [217]) (lo_sum:SI (reg/f:SI 1 %r1 [216]) (symbol_ref:SI ("cfun") [flags 0x240] <var_decl 0xc204e0 cfun>))) 52 {*pa.md:3097} (expr_list:REG_DEAD (reg/f:SI 1 %r1 [216]) (nil))) (note 94 65 95 [bb 17] NOTE_INSN_BASIC_BLOCK) (insn 95 94 435 ../../gcc/gcc/basic-block.h:194 (set (reg:SI 28 %r28 [143]) (plus:SI (reg/v:SI 4 %r4 [orig:111 i ] [111]) (const_int 2 [0x2]))) 111 {addsi3} (nil)) (code_label 435 95 96 620 "" [1 uses]) (insn 96 435 97 ../../gcc/gcc/basic-block.h:194 (set (reg/v/f:SI 26 %r26 [orig:110 bb ] [110]) (mem/s/f/j:SI (plus:SI (mult:SI (reg:SI 28 %r28 [143]) (const_int 4 [0x4])) (reg/f:SI 26 %r26 [orig:104 iftmp.1903 ] [104])) [0 <variable>.vec S4 A32])) 37 {*pa.md:2542} (expr_list:REG_DEAD (reg:SI 28 %r28 [143]) (nil))) (jump_insn 97 96 98 ../../gcc/gcc/tree-cfgcleanup.c:698 (set (pc) (if_then_else (eq (reg/v/f:SI 26 %r26 [orig:110 bb ] [110]) (const_int 0 [0x0])) (label_ref 105) (pc))) 25 {*pa.md:1770} (expr_list:REG_BR_PROB (const_int 2820 [0xb04]) (nil))) (note 98 97 100 [bb 18] NOTE_INSN_BASIC_BLOCK) (call_insn 100 98 101 ../../gcc/gcc/tree-cfgcleanup.c:699 (parallel [ (set (reg:SI 28 %r28) (call (mem:SI (symbol_ref/v:SI ("@cleanup_tree_cfg_bb") [flags 0x203] <function_decl 0x1564850 cleanup_tree_cfg_bb>) [0 S4 A32]) (const_int 16 [0x10]))) (clobber (reg:SI 1 %r1)) (clobber (reg:SI 2 %r2)) (use (const_int 0 [0x0])) ]) 212 {call_val_symref} (expr_list:REG_DEAD (reg:SI 26 %r26) (expr_list:REG_EH_REGION (const_int 0 [0x0]) (nil))) (expr_list:REG_DEP_TRUE (use (reg:SI 26 %r26)) (nil))) As can be seen, insn 64 is subsequently replaced by a use. Maybe this causes the deletion of insn 433. 433 to be deleted