------- Comment #6 from jsjodin at gcc dot gnu dot org 2008-12-18 19:39 ------- > This still fails here: > > gfortran -v -O2 -g -ffree-form -fgraphite -fgraphite-identity -cpp -D__FFTSG > PR38492.f90 >
I looked into this failure. It fails because the number of iterations cannot be computed (chrec_unknown) when the loop domain is translated, and is ignored by scan_tree_for_params. In general it can be dangerous to throw away chrec_unknown, because it may code that we must generate. The patch will prevent the scop from being transformed if the number of iterations cannot be analyzed, and it will no longer ignore chrec_unknown. I will run some more tests to make sure it does not break anything else. The patch is below: Index: graphite.c =================================================================== --- graphite.c (revision 142764) +++ graphite.c (working copy) @@ -2356,6 +2356,7 @@ graphite_loop_normal_form (loop_p loop) tree nit; gimple_seq stmts; edge exit = single_dom_exit (loop); + tree iv = NULL_TREE; if (!number_of_iterations_exit (loop, exit, &niter, false)) gcc_unreachable (); @@ -2369,7 +2370,14 @@ graphite_loop_normal_form (loop_p loop) if (nb_reductions_in_loop (loop) > 0) return NULL_TREE; - return canonicalize_loop_ivs (loop, NULL, nit); + iv = canonicalize_loop_ivs (loop, NULL, nit); + + nit = number_of_latch_executions (loop); + nit = analyze_scalar_evolution (loop, nit); + if (nit == chrec_dont_know) + return NULL_TREE; + + return iv; } /* Record LOOP as occuring in SCOP. Returns true when the operation @@ -2602,7 +2610,7 @@ scan_tree_for_params (scop_p s, tree e, int cst_col, param_col; if (e == chrec_dont_know) - return; + gcc_unreachable (); switch (TREE_CODE (e)) { -- jsjodin at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jsjodin at gcc dot gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38492