On Sep 19, 2017, at 3:58 PM, Richard Sandiford <richard.sandif...@linaro.org> wrote: > > Bill Schmidt <wschm...@linux.vnet.ibm.com> writes: >> Index: gcc/tree-vect-stmts.c >> =================================================================== >> --- gcc/tree-vect-stmts.c (revision 252760) >> +++ gcc/tree-vect-stmts.c (working copy) >> @@ -1091,8 +1091,19 @@ vect_model_load_cost (stmt_vec_info stmt_info, int >> prologue_cost_vec, body_cost_vec, true); >> if (memory_access_type == VMAT_ELEMENTWISE >> || memory_access_type == VMAT_STRIDED_SLP) >> - inside_cost += record_stmt_cost (body_cost_vec, ncopies, vec_construct, >> - stmt_info, 0, vect_body); >> + { >> + int group_size = GROUP_SIZE (stmt_info); >> + int nunits = TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info)); >> + if (group_size < nunits) >> + { >> + if (dump_enabled_p ()) >> + dump_printf_loc (MSG_NOTE, vect_location, >> + "vect_model_load_cost: vec_construct required"); >> + inside_cost += record_stmt_cost (body_cost_vec, ncopies, >> + vec_construct, stmt_info, 0, >> + vect_body); >> + } >> + } >> >> if (dump_enabled_p ()) >> dump_printf_loc (MSG_NOTE, vect_location, > > This feels like we've probably got the wrong memory_access_type. > If it's a just a contiguous load then it should be VMAT_CONTIGUOUS > instead.
I tend to agree -- that will take more surgery to the code that detects strided loads in both the cost model analysis and in vectorizable_load. Bill > > Thanks, > Richard > >