https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105231
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- Initially we generate (insn 36 35 37 (set (reg:XF 95) (float_extend:XF (reg:SF 96))) "t.c":6:3 -1 (expr_list:REG_EH_REGION (const_int 1 [0x1]) (expr_list:REG_EQUAL (const_double:XF 1.8446744073709551616e+19 [0x0.8p+65]) (nil)))) (insn 37 36 38 (set (reg:XF 94) (plus:XF (reg:XF 94) (reg:XF 95))) "t.c":6:3 -1 (expr_list:REG_EH_REGION (const_int 1 [0x1]) (nil))) but then when creating BBs we end up with (insn 36 35 37 12 (set (reg:XF 95) (float_extend:XF (reg:SF 96))) "t.c":6:3 -1 (expr_list:REG_EQUAL (const_double:XF 1.8446744073709551616e+19 [0x0.8p+65]) (nil))) (insn 37 36 38 12 (set (reg:XF 94) (plus:XF (reg:XF 94) (reg:XF 95))) "t.c":6:3 -1 (expr_list:REG_EH_REGION (const_int 1 [0x1]) (nil))) ;; succ: 17 [never] count:0 (precise) (ABNORMAL,EH) so it seems we retain the GIMPLE BB structure which just had _3 = (double) 18446744073709551614; ;; succ: 7 ;; 5 rather than splitting the EH into the now two possibly throwing stmts? Maybe it's also specially handled because of the REG_EQUAL note? At least find_many_sub_basic_blocks via control_flow_insn_p doesn't consider insns with a REG_EH_REGION note as ending a BB but it only checks can_throw_internal which may or may not be enough here.