------- Comment #7 from amonakov at gcc dot gnu dot org 2009-01-22 12:19 ------- (In reply to comment #6) > -static bool code_motion_path_driver (insn_t, av_set_t, ilist_t, > - cmpd_local_params_p, void *); > +static int code_motion_path_driver (insn_t, av_set_t, ilist_t, > + cmpd_local_params_p, void *); > > You probably don't want this bit...? >
The function returns -1 in some circumstances. This change is not relevant to the ICE in question, but is nevertheless a correction (maybe not the best, as 'return true' and 'return false' are used in function's body). I'm not sure what's best here -- to include this in PR fix submission, or as a separate patch. FWIW, there're a couple more unrelated changes: 1) check if a reg is actually a hard reg if (REG_P (*cur_rtx) + && HARD_REGISTER_P (*cur_rtx) && hard_regno_nregs[REGNO(*cur_rtx)][GET_MODE (*cur_rtx)] > 1) and 2) Do not merge info from successors if not relevant /* Merge data, clean up, etc. */ - if (code_motion_path_driver_info->after_merge_succs) + if (res != -1 && code_motion_path_driver_info->after_merge_succs) code_motion_path_driver_info->after_merge_succs (&lparams, static_params); Again, I will submit them separately if so desired. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38857