[Bug middle-end/48486] New: cfgexpand leaves BARRIERs at the end of basic blocks
steven at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Apr 6 22:08:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48486
Summary: cfgexpand leaves BARRIERs at the end of basic blocks
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: steven@gcc.gnu.org
Consider this code, following the expansion of a gimple switch statement:
(gdb) call debug_rtx_list(last, -7)
(insn 594 593 595 (set (reg/f:DI 809)
(label_ref:DI 598))
../../../../trunk/libgcc/../gcc/config/soft-fp/divtf3.c:44 -1
(nil))
(insn 595 594 596 (set (reg:DI 810)
(mem/u/c:DI (plus:DI (mult:DI (reg:DI 808)
(const_int 8 [0x8]))
(reg/f:DI 809)) [0 S8 A8]))
../../../../trunk/libgcc/../gcc/config/soft-fp/divtf3.c:44 -1
(nil))
(jump_insn 596 595 597 (parallel [
(set (pc)
(reg:DI 810))
(use (label_ref 598))
]) ../../../../trunk/libgcc/../gcc/config/soft-fp/divtf3.c:44 -1
(nil))
(barrier 597 596 598)
(code_label 598 597 599 46 "" [0 uses])
(jump_insn 599 598 600 (addr_vec:DI [
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
(label_ref:DI 0)
]) ../../../../trunk/libgcc/../gcc/config/soft-fp/divtf3.c:44 -1
(nil))
(barrier 600 599 0)
At this point:
(gbd) p debug_rtx (get_last_insn())
(barrier 600 599 0)
$24 = void
Now cfgexpand tries to avoid having BARRIERs at the end of a basic block
because that is, well, wrong to have. So:
/* Find the block tail. The last insn in the block is the insn
before a barrier and/or table jump insn. */
last = get_last_insn ();
if (BARRIER_P (last))
last = PREV_INSN (last);
if (JUMP_TABLE_DATA_P (last))
last = PREV_INSN (PREV_INSN (last));
BB_END (bb) = last;
(gdb) p debug_rtx(last)
(barrier 597 596 598)
$25 = void
(gdb)
More information about the Gcc-bugs
mailing list