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


On 22.04.2009 15:22, Richard Guenther wrote:
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.

this was reported to the debian bug tracker, seen for 4.4.4. the patch applies on the 4.4 branch as well and fixes the ICE. currently running the testsuites on ia64-linux-gnu and i486-linux-gnu. Is this ok for the 4.4 branch if the testsuites run without regressions?


Matthias

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]