https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105686
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
CC| |ebotcazou at gcc dot gnu.org
Last reconfirmed| |2022-05-23
Priority|P3 |P2
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
@@ -67,31 +63,11 @@
179: NOTE_INSN_BASIC_BLOCK 3
9: NOTE_INSN_DELETED
183: x2:DI=[sp:DI+0x40]
- 184: x0:DI=[sp:DI+0x48]
- REG_UNUSED x0:DI
- 185: x0:DI=[sp:DI+0x50]
- REG_UNUSED x0:DI
- REG_EH_REGION 0x2
217: NOTE_INSN_BASIC_BLOCK 4
- 186: x0:DI=[sp:DI+0x58]
- REG_UNUSED x0:DI
- REG_EH_REGION 0x2
218: NOTE_INSN_BASIC_BLOCK 5
- 187: x0:DI=[sp:DI+0x60]
- REG_UNUSED x0:DI
- REG_EH_REGION 0x2
219: NOTE_INSN_BASIC_BLOCK 6
- 188: x0:DI=[sp:DI+0x68]
- REG_UNUSED x0:DI
- REG_EH_REGION 0x2
220: NOTE_INSN_BASIC_BLOCK 7
- 189: x0:DI=[sp:DI+0x70]
- REG_UNUSED x0:DI
- REG_EH_REGION 0x2
221: NOTE_INSN_BASIC_BLOCK 8
- 190: x0:DI=[sp:DI+0x78]
- REG_UNUSED x0:DI
- REG_EH_REGION 0x2
226: NOTE_INSN_BASIC_BLOCK 9
228: pc=L227
229: barrier
while there's nothing wrong with the transform, cprop-hardreg likely lacks
cleanup of EH side-effects / edges.
/* Detect obviously dead sets (via REG_UNUSED notes) and remove them. */
if (set
&& !RTX_FRAME_RELATED_P (insn)
&& NONJUMP_INSN_P (insn)
&& !may_trap_p (set)
&& find_reg_note (insn, REG_UNUSED, SET_DEST (set))
&& !side_effects_p (SET_SRC (set))
&& !side_effects_p (SET_DEST (set)))
{
bool last = insn == BB_END (bb);
delete_insn (insn);
if (last)
break;
continue;
using delete_insn_and_edges here fixes it but reg_cprop doesn't schedule
a CFG cleanup so that isn't enough.
leaving to RTL maintainers.