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.  */
>

Reply via email to