On Wed, Apr 19, 2017 at 12:38 AM, Bill Schmidt <wschm...@linux.vnet.ibm.com> wrote: > Hi, > > While investigating a performance issue, I happened to notice that vectorized > COND_EXPRs were not contributing to the vectorizer cost model. This patch > addresses that. > > Bootstrapped and tested on powerpc64le-unknown-linux-gnu. Is this ok for > trunk, or should it wait for GCC 8?
Ok for GCC 8, this is not a regression. Thanks, Richard. > Thanks, > Bill > > > [gcc] > > 2017-04-18 Bill Schmidt <wschm...@linux.vnet.ibm.com> > > PR tree-optimization/80457 > * tree-vect-stmts.c (vectorizable_condition): Update the cost > model when vectorizing a COND_EXPR. > > [gcc/testsuite] > > 2017-04-18 Bill Schmidt <wschm...@linux.vnet.ibm.com> > > PR tree-optimization/80457 > * gcc.target/powerpc/pr78604.c: Verify that vectorized COND_EXPRs > call vect_model_simple_cost. > > > Index: gcc/testsuite/gcc.target/powerpc/pr78604.c > =================================================================== > --- gcc/testsuite/gcc.target/powerpc/pr78604.c (revision 246948) > +++ gcc/testsuite/gcc.target/powerpc/pr78604.c (working copy) > @@ -2,7 +2,7 @@ > /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ > /* { dg-require-effective-target powerpc_p8vector_ok } */ > /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { > "-mcpu=power8" } } */ > -/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize" } */ > +/* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fdump-tree-vect-details" > } */ > > #ifndef SIZE > #define SIZE 1024 > @@ -110,3 +110,4 @@ uns_gte (UNS_TYPE val1, UNS_TYPE val2) > /* { dg-final { scan-assembler-times {\mvcmpgtsd\M} 4 } } */ > /* { dg-final { scan-assembler-times {\mvcmpgtud\M} 4 } } */ > /* { dg-final { scan-assembler-not {\mvcmpequd\M} } } */ > +/* { dg-final { scan-tree-dump-times "vect_model_simple_cost" 8 "vect" } } */ > Index: gcc/tree-vect-stmts.c > =================================================================== > --- gcc/tree-vect-stmts.c (revision 246948) > +++ gcc/tree-vect-stmts.c (working copy) > @@ -7746,7 +7746,7 @@ vectorizable_condition (gimple *stmt, gimple_stmt_ > tree vec_compare; > tree new_temp; > loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info); > - enum vect_def_type dt, dts[4]; > + enum vect_def_type dt[2], dts[4]; > int ncopies; > enum tree_code code, cond_code, bitop1 = NOP_EXPR, bitop2 = NOP_EXPR; > stmt_vec_info prev_stmt_info = NULL; > @@ -7813,10 +7813,10 @@ vectorizable_condition (gimple *stmt, gimple_stmt_ > return false; > > gimple *def_stmt; > - if (!vect_is_simple_use (then_clause, stmt_info->vinfo, &def_stmt, &dt, > + if (!vect_is_simple_use (then_clause, stmt_info->vinfo, &def_stmt, &dt[0], > &vectype1)) > return false; > - if (!vect_is_simple_use (else_clause, stmt_info->vinfo, &def_stmt, &dt, > + if (!vect_is_simple_use (else_clause, stmt_info->vinfo, &def_stmt, &dt[1], > &vectype2)) > return false; > > @@ -7900,8 +7900,12 @@ vectorizable_condition (gimple *stmt, gimple_stmt_ > return false; > } > } > - return expand_vec_cond_expr_p (vectype, comp_vectype, > - cond_code); > + if (expand_vec_cond_expr_p (vectype, comp_vectype, cond_code)) > + { > + vect_model_simple_cost (stmt_info, ncopies, dt, NULL, NULL); > + return true; > + } > + return false; > } > > /* Transform. */ >