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] |
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] |