Commit 86c8d1f6 by Ira Rosen Committed by Ira Rosen

re PR tree-optimization/48290 (FAIL: gcc.dg/vect/pr38529.c, ICE in…

re PR tree-optimization/48290 (FAIL: gcc.dg/vect/pr38529.c, ICE in vect_get_vec_def_for_operand, at tree-vect-stmts.c:1072)


        PR tree-optimization/48290
        * tree-vect-loop.c (vect_analyze_loop_operations): In outer loop
        vectorization, check that relevant phis in the basic block after 
        the inner loop are really inner loop's exit phis.

From-SVN: r171657
parent e8cf17e7
2011-03-29 Ira Rosen <ira.rosen@linaro.org>
PR tree-optimization/48290
* tree-vect-loop.c (vect_analyze_loop_operations): In outer loop
vectorization, check that relevant phis in the basic block after
the inner loop are really inner loop's exit phis.
2011-03-29 Richard Sandiford <richard.sandiford@linaro.org> 2011-03-29 Richard Sandiford <richard.sandiford@linaro.org>
PR debug/48190 PR debug/48190
......
...@@ -1184,11 +1184,11 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo) ...@@ -1184,11 +1184,11 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo)
print_gimple_stmt (vect_dump, phi, 0, TDF_SLIM); print_gimple_stmt (vect_dump, phi, 0, TDF_SLIM);
} }
/* Inner-loop loop-closed exit phi in outer-loop vectorization
(i.e., a phi in the tail of the outer-loop). */
if (! is_loop_header_bb_p (bb)) if (! is_loop_header_bb_p (bb))
{ {
/* inner-loop loop-closed exit phi in outer-loop vectorization /* FORNOW: we currently don't support the case that these phis
(i.e. a phi in the tail of the outer-loop).
FORNOW: we currently don't support the case that these phis
are not used in the outerloop (unless it is double reduction, are not used in the outerloop (unless it is double reduction,
i.e., this phi is vect_reduction_def), cause this case i.e., this phi is vect_reduction_def), cause this case
requires to actually do something here. */ requires to actually do something here. */
...@@ -1202,6 +1202,32 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo) ...@@ -1202,6 +1202,32 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo)
"Unsupported loop-closed phi in outer-loop."); "Unsupported loop-closed phi in outer-loop.");
return false; return false;
} }
/* If PHI is used in the outer loop, we check that its operand
is defined in the inner loop. */
if (STMT_VINFO_RELEVANT_P (stmt_info))
{
tree phi_op;
gimple op_def_stmt;
if (gimple_phi_num_args (phi) != 1)
return false;
phi_op = PHI_ARG_DEF (phi, 0);
if (TREE_CODE (phi_op) != SSA_NAME)
return false;
op_def_stmt = SSA_NAME_DEF_STMT (phi_op);
if (!op_def_stmt || !vinfo_for_stmt (op_def_stmt))
return false;
if (STMT_VINFO_RELEVANT (vinfo_for_stmt (op_def_stmt))
!= vect_used_in_outer
&& STMT_VINFO_RELEVANT (vinfo_for_stmt (op_def_stmt))
!= vect_used_in_outer_by_reduction)
return false;
}
continue; continue;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment