http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54455
Steven Bosscher <steven at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC|steven at gcc dot gnu.org |abel at gcc dot gnu.org
--- Comment #8 from Steven Bosscher <steven at gcc dot gnu.org> 2012-09-02
15:14:58 UTC ---
(In reply to comment #7)
But actually the problem is only visible if you print non-slim rtl. Before
sched1:
(jump_insn 13 12 15 3 (parallel [
(asm_operands/v ("") ("") 0 [
(reg:SI 62)
(reg:SI 63)
]
[
(asm_input:SI ("r") (null):0)
(asm_input:SI ("r") (null):0)
]
[
(label_ref:DI 17)
] t.c:11)
(clobber (reg:QI 18 fpsr))
(clobber (reg:QI 17 flags))
(clobber (mem:BLK (scratch) [0 A8]))
]) t.c:3 -1
(nil)
-> 17)
(note 15 13 17 ("lab") NOTE_INSN_DELETED_LABEL 3)
(code_label 17 15 18 4 1 "" [1 uses])
(note 18 17 0 4 [bb 4] NOTE_INSN_BASIC_BLOCK)
After sched1:
(jump_insn 13 12 15 3 (parallel [
(asm_operands/v ("") ("") 0 [
(reg:SI 62)
(reg:SI 63)
]
[
(asm_input:SI ("r") (null):0)
(asm_input:SI ("r") (null):0)
]
[
(label_ref:DI 17) <--- ref to code_label 17
] t.c:11)
(clobber (reg:QI 18 fpsr))
(clobber (reg:QI 17 flags))
(clobber (mem:BLK (scratch) [0 A8]))
]) t.c:3 -1
(expr_list:REG_DEAD (reg:SI 63)
(expr_list:REG_DEAD (reg:SI 62)
(expr_list:REG_UNUSED (reg:QI 18 fpsr)
(expr_list:REG_UNUSED (reg:QI 17 flags)
(nil)))))
-> 17)
(note 15 13 21 ("lab") NOTE_INSN_DELETED_LABEL 3)
...but code_label 17 has disappeared...
(note 21 15 0 NOTE_INSN_DELETED)
Note that the jump_insn now jumps to a non-existing label.
There are two problems here:
1. verify_flow_info should detect that a jump references a non-existing label,
and abort if that happens
2. The code_label 17 shouldn't be removed by the selective scheduler because
it's still referenced.