[Bug rtl-optimization/49007] ICE in extract_true_false_edges_from_block at tree-cfg.c:7379
danglin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat May 21 23:23:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49007
--- Comment #10 from John David Anglin <danglin at gcc dot gnu.org> 2011-05-21 22:47:34 UTC ---
This PR seems similar to PR rtl-optimization/40710.
It seems opposite_needed is incorrectly calculated after the
first delay slot iteration in fill_slots_from_thread:
mark_target_live_regs (get_insns (), opposite_thread, &opposite_needed);
Breakpoint 22, fill_slots_from_thread (insn=0x1b98f30, condition=0x1b99fa0,
thread=0x1b981e0, opposite_thread=0x1b98f90, likely=0, thread_if_true=1,
own_thread=0, slots_to_fill=1, pslots_filled=0xbfffee4c, delay_list=0x0) at
../../gcc/gcc/reorg.c:2600
2600 new_thread = thread = try_split (PATTERN (thread), thread, 0);
(gdb) p/x opposite_needed
$69 = {
memory = 0x1,
unch_memory = 0x0,
volatil = 0x0,
cc = 0x0,
regs = {0x440000e8, 0x0, 0x0}
}
Register %r4 is no longer marked as alive, so
(gdb) p debug_rtx (thread)
(insn 107 106 438 ../../gcc/gcc/tree-cfgcleanup.c:695 (set (reg/v:SI 4 %r4
[orig:111 i ] [111])
(plus:SI (reg/v:SI 4 %r4 [orig:111 i ] [111])
(const_int 1 [0x1]))) 111 {addsi3} (nil))
is moved from the branch target.
More information about the Gcc-bugs
mailing list