This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix PR39580


2009/4/22 Andrey Belevantsev <abel@ispras.ru>:
> Hello,
>
> PR 39580 is a test that ices with selective scheduling on ia64. ?As
> explained in the audit trail, the assert that was hit with the testcase did
> not describe all situations happening when the history of changes of two
> expressions is being merged. ?The expression history vector contains one
> entry for each insn uid, on which the expression was changed, and for each
> entry we save the form of expression before and after the transformation.
> ?As long as the assert condition was true, it meant that ?whatever
> unifications we perform, this single entry is enough to find all unified
> expressions. ?The PR testcase shows the counterexample for that. ?In the
> corner situations, only one unified expression will be found below the merge
> point, which does not influence correctness but only effectiveness of
> unification.
>
> Extending assert to handle the PR case would make it useless, as it used to
> assert that only certain situations could happen, and now we know that all
> cases can happen. ?The best solution IMHO is to remove the assert. ?This
> fixes the testcase and bootstraps/regtests fine on ia64 with all default
> languages enabled.
>
> OK for trunk?

Ok.

Thanks,
Richard.

> Andrey
>
> 2009-04-22 ?Andrey Belevantsev ?<abel@ispras.ru>
>
> ? ? ? ?PR rtl-optimization/39580
> ? ? ? ?* sel-sched-ir.c (insert_in_history_vect): Remove incorrect
> gcc_assert.
>
>
> Index: gcc/sel-sched-ir.c
> ===================================================================
> *** gcc/sel-sched-ir.c ?(revision 146520)
> --- gcc/sel-sched-ir.c ?(working copy)
> *************** insert_in_history_vect (VEC (expr_histor
> *** 1512,1525 ****
> ? ? ?{
> ? ? ? ?expr_history_def *phist = VEC_index (expr_history_def, vect, ind);
>
> - ? ? ? /* When merging, either old vinsns are the *same* or, if not, both
> - ? ? ? ? ?old and new vinsns are different pointers. ?In the latter case,
> - ? ? ? ? ?though, new vinsns should be equal. ?*/
> - ? ? ? gcc_assert (phist->old_expr_vinsn == old_expr_vinsn
> - ? ? ? ? ? ? ? ? ? || (phist->new_expr_vinsn != new_expr_vinsn
> - ? ? ? ? ? ? ? ? ? ? ? && (vinsn_equal_p
> - ? ? ? ? ? ? ? ? ? ? ? ? ? (phist->old_expr_vinsn, old_expr_vinsn))));
> -
> ? ? ? ?/* It is possible that speculation types of expressions that were
> ? ? ? ? ? propagated through different paths will be different here. In this
> ? ? ? ? ? case, merge the status to get the correct check later. ?*/
> --- 1512,1517 ----
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]