On Wed, Aug 26, 2015 at 10:41 AM, Richard Biener <richard.guent...@gmail.com> wrote: > @@ -3763,32 +3776,46 @@ again: > if (vf > *min_vf) > *min_vf = vf; > > - if (gather) > + if (gatherscatter != SG_NONE) > { > tree off; > + if (vect_check_gather_scatter (stmt, loop_vinfo, NULL, &off, > NULL, true) != 0) > + gatherscatter = GATHER; > + else if (vect_check_gather_scatter (stmt, loop_vinfo, NULL, > &off, NULL, false) > + != 0) > + gatherscatter = SCATTER; > + else > + gatherscatter = SG_NONE; > > as I said vect_check_gather_scatter already knows whether the DR is a read or > a write and thus whether it needs to check for gather or scatter. Remove > the new argument. And simply do > > if (!vect_check_gather_scatter (stmt....)) > gatherscatter = SG_NONE; > > - STMT_VINFO_GATHER_P (stmt_info) = true; > + if (gatherscatter == GATHER) > + STMT_VINFO_GATHER_P (stmt_info) = true; > + else > + STMT_VINFO_SCATTER_P (stmt_info) = true; > } > > and as suggested merge STMT_VINFO_GATHER_P and STMT_VINFO_SCATTER_P > using the enum so you can simply do > > STMT_VINFO_SCATTER_GATHER_P (smt_info) = gatherscatter; > Otherwise the patch looks ok to me.
Fixed. Uros, could you please have a look at target part of patch? Thanks, Petr 2015-08-26 Andrey Turetskiy <andrey.turets...@intel.com> Petr Murzin <petr.mur...@intel.com> gcc/ * config/i386/i386-builtin-types.def (VOID_PFLOAT_HI_V8DI_V16SF_INT): New. (VOID_PDOUBLE_QI_V16SI_V8DF_INT): Ditto. (VOID_PINT_HI_V8DI_V16SI_INT): Ditto. (VOID_PLONGLONG_QI_V16SI_V8DI_INT): Ditto. * config/i386/i386.c (ix86_builtins): Add IX86_BUILTIN_SCATTERALTSIV8DF, IX86_BUILTIN_SCATTERALTDIV16SF, IX86_BUILTIN_SCATTERALTSIV8DI, IX86_BUILTIN_SCATTERALTDIV16SI. (ix86_init_mmx_sse_builtins): Define __builtin_ia32_scatteraltsiv8df, __builtin_ia32_scatteraltdiv8sf, __builtin_ia32_scatteraltsiv8di, __builtin_ia32_scatteraltdiv8si. (ix86_expand_builtin): Handle IX86_BUILTIN_SCATTERALTSIV8DF, IX86_BUILTIN_SCATTERALTDIV16SF, IX86_BUILTIN_SCATTERALTSIV8DI, IX86_BUILTIN_SCATTERALTDIV16SI. (ix86_vectorize_builtin_scatter): New. (TARGET_VECTORIZE_BUILTIN_SCATTER): Define as ix86_vectorize_builtin_scatter. * doc/tm.texi.in (TARGET_VECTORIZE_BUILTIN_SCATTER): New. * doc/tm.texi: Regenerate. * target.def: Add scatter builtin. * tree-vectorizer.h: Rename gather_p to gather_scatter_p and use it for loads/stores in case of gather/scatter accordingly. (STMT_VINFO_GATHER_SCATTER_P(S)): Use it instead of STMT_VINFO_GATHER_P(S). (vect_check_gather): Rename to ... (vect_check_gather_scatter): this. * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Use STMT_VINFO_GATHER_SCATTER_P instead of STMT_VINFO_SCATTER_P. (vect_check_gather_scatter): Use it instead of vect_check_gather. (vect_analyze_data_refs): Add gatherscatter enum and maybe_scatter variable and new checkings for it accordingly. * tree-vect-stmts.c (STMT_VINFO_GATHER_SCATTER_P(S)): Use it instead of STMT_VINFO_GATHER_P(S). (vect_check_gather_scatter): Use it instead of vect_check_gather. (vectorizable_store): Add checkings for STMT_VINFO_GATHER_SCATTER_P. gcc/testsuite/ * gcc.target/i386/avx512f-scatter-1.c: New. * gcc.target/i386/avx512f-scatter-2.c: Ditto. * gcc.target/i386/avx512f-scatter-3.c: Ditto.
scatter
Description: Binary data
tests
Description: Binary data