https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89650
--- Comment #2 from 刘袋鼠 <crazylht at gmail dot com> --- (In reply to Richard Biener from comment #1) > There are unreachable blocks which are not allowed for > pre_and_rev_post_order_compute. Somebody forgets to call cfg-cleanup here. Yes, pass_split1 strip off REG_EH_REGION before spilt1: (insn 18 94 102 2 (set (reg:SF 88 [ _19 ]) (subreg:SF (reg:V4SF 115) 0)) "../partial.i":4:20 112 {*movsf_internal} (expr_list:REG_EH_REGION (const_int 2 [0x2]) (nil))) after split1: (insn 18 94 102 2 (set (reg:SF 88 [ _19 ]) (subreg:SF (reg:V4SF 115) 0)) "../partial.i":4:20 112 {*movsf_internal} (nil)) but didn't cleanup_cfg, It's said in recog.c: 3017 default_rtl_profile (); 3018 if (changed) 3019 { 3020 find_many_sub_basic_blocks (blocks); 3021 3022 /* Splitting could drop an REG_EH_REGION if it potentially 3023 trapped in its original form, but does not in its split 3024 form. Consider a FLOAT_TRUNCATE which splits into a memory 3025 store/load pair and -fnon-call-exceptions. */ 3026=> if (need_cfg_cleanup) 3027 cleanup_cfg (0); 3028 } 3029 3030 checking_verify_flow_info (); 3031}