On January 22, 2016 11:09:06 PM GMT+01:00, Jakub Jelinek <ja...@redhat.com> wrote: >Hi! > >I've noticed we create a VEC_COND_EXPR tree just to grab the arguments >from >it to construct a ternary gimple assign. > >The following patch fixes that by creating the ternary gimple assign >directly. Bootstrapped/regtested on x86_64-linux and i686-linux, ok >for >trunk?
OK. Thanks, Richard. >2016-01-22 Jakub Jelinek <ja...@redhat.com> > > * tree-vect-stmts.c (vectorizable_condition): Build a VEC_COND_EXPR > directly instead of building a temporary tree. > >--- gcc/tree-vect-stmts.c.jj 2016-01-20 15:39:08.000000000 +0100 >+++ gcc/tree-vect-stmts.c 2016-01-22 10:25:59.744444625 +0100 >@@ -7478,7 +7478,7 @@ vectorizable_condition (gimple *stmt, gi > tree comp_vectype = NULL_TREE; > tree vec_cond_lhs = NULL_TREE, vec_cond_rhs = NULL_TREE; > tree vec_then_clause = NULL_TREE, vec_else_clause = NULL_TREE; >- tree vec_compare, vec_cond_expr; >+ tree vec_compare; > tree new_temp; > loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info); > enum vect_def_type dt, dts[4]; >@@ -7691,12 +7691,10 @@ vectorizable_condition (gimple *stmt, gi > vec_compare = build2 (TREE_CODE (cond_expr), vec_cmp_type, > vec_cond_lhs, vec_cond_rhs); > } >- vec_cond_expr = build3 (VEC_COND_EXPR, vectype, >- vec_compare, vec_then_clause, vec_else_clause); >- >- new_stmt = gimple_build_assign (vec_dest, vec_cond_expr); >- new_temp = make_ssa_name (vec_dest, new_stmt); >- gimple_assign_set_lhs (new_stmt, new_temp); >+ new_temp = make_ssa_name (vec_dest); >+ new_stmt = gimple_build_assign (new_temp, VEC_COND_EXPR, >+ vec_compare, vec_then_clause, >+ vec_else_clause); > vect_finish_stmt_generation (stmt, new_stmt, gsi); > if (slp_node) > SLP_TREE_VEC_STMTS (slp_node).quick_push (new_stmt); > > Jakub