On Mon, Jun 18, 2018 at 4:54 PM Richard Sandiford
<richard.sandif...@arm.com> wrote:
>
> vectorizable_call stubs out the original scalar statement with
> a dummy assignment to the same lhs, so that we don't leave any bogus
> scalar calls around.  If the call is actually a pattern statement,
> the code rightly took the lhs of the original bb statement:
>
>   if (is_pattern_stmt_p (stmt_info))
>     lhs = gimple_call_lhs (STMT_VINFO_RELATED_STMT (stmt_info));
>   else
>     lhs = gimple_call_lhs (stmt);
>
> But it then associated the new statement with the stmt_vec_info of the
> pattern statement rather than the bb statement, which meant we had two
> stmt_vec_infos assigning to the same lhs.  This seems to be latent at
> the moment but caused problems further into the series.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

OK.

Richard.

> Richard
>
>
> 2018-06-18  Richard Sandiford  <richard.sandif...@arm.com>
>
> gcc/
>         * tree-vect-stmts.c (vectorizable_call): Make sure that we
>         use the stmt_vec_info of the original bb statement for the
>         new zero assignment, even if the call is part of a pattern.
>
> Index: gcc/tree-vect-stmts.c
> ===================================================================
> --- gcc/tree-vect-stmts.c       2018-06-18 15:24:21.005379580 +0100
> +++ gcc/tree-vect-stmts.c       2018-06-18 15:24:35.165254737 +0100
> @@ -3611,13 +3611,12 @@ vectorizable_call (gimple *gs, gimple_st
>
>    type = TREE_TYPE (scalar_dest);
>    if (is_pattern_stmt_p (stmt_info))
> -    lhs = gimple_call_lhs (STMT_VINFO_RELATED_STMT (stmt_info));
> -  else
> -    lhs = gimple_call_lhs (stmt);
> +    stmt_info = vinfo_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info));
> +  lhs = gimple_get_lhs (stmt_info->stmt);
>
>    new_stmt = gimple_build_assign (lhs, build_zero_cst (type));
>    set_vinfo_for_stmt (new_stmt, stmt_info);
> -  set_vinfo_for_stmt (stmt, NULL);
> +  set_vinfo_for_stmt (stmt_info->stmt, NULL);
>    STMT_VINFO_STMT (stmt_info) = new_stmt;
>    gsi_replace (gsi, new_stmt, false);
>

Reply via email to