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}

Reply via email to