> The following reverts part of the changes done by r16-869-ge3d3d6d7d2c8ab
> which AFAICS was never posted on the mailing list.  The hunk reverted
Sorry for that.  I also can not find it :(
> adds extra costs for vector construction of AVX or AVX512 vectors
> because Honza thought we're only adding 1 conversion for all constructs,
> but in fact we're costing each individual unique scalar source used.
> 
> Noticed when investigating PR120234, but this does not affect it
> since there it's all SSE sized operations.
> 
> Still this is a regression, though reading r16-869-ge3d3d6d7d2c8ab
> commit message indicating "correct numbers regress benchmarks" might
> make this somewhat dangerous.  Still r16-531-g37e61c793c1b22 already
> made the constructor costs much more expensive for integers, so
> this might compensate.

This was part of Zen re-tunning where I basically tried to set
load/store costs to match latencies which did not work.
> 
> Bootstrapped and tested on x86_64-unknown-linux-gnu.
> 
> OK?
OK, thanks!
(possibly it would make sense to add a comment that we do multiple scala
conversions)
Honza
> 
> Thanks,
> Richard.
> 
>       * config/i386/i386.cc (ix86_vector_costs::add_stmt_cost):
>       Remove double and triple accounting of GPR -> XMM moves
>       in construction of AVX and AVX512 vectors.
> ---
>  gcc/config/i386/i386.cc | 16 +---------------
>  1 file changed, 1 insertion(+), 15 deletions(-)
> 
> diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
> index 42ae9ccb051..8a54648337d 100644
> --- a/gcc/config/i386/i386.cc
> +++ b/gcc/config/i386/i386.cc
> @@ -26422,21 +26422,7 @@ ix86_vector_costs::add_stmt_cost (int count, 
> vect_cost_for_stmt kind,
>               {
>                 m_num_gpr_needed[where]++;
>  
> -               int cost = COSTS_N_INSNS (ix86_cost->integer_to_sse) / 2;
> -
> -               /* For integer construction, the number of actual GPR -> XMM
> -                  moves will be somewhere between 0 and n.
> -                  We do not have very good idea about actual number, since
> -                  the source may be a constant, memory or a chain of
> -                  instructions that will be later converted by
> -                  scalar-to-vector pass.  */
> -               if (kind == vec_construct
> -                   && GET_MODE_BITSIZE (mode) == 256)
> -                 cost *= 2;
> -               else if (kind == vec_construct
> -                        && GET_MODE_BITSIZE (mode) == 512)
> -                 cost *= 3;
> -               stmt_cost += cost;
> +               stmt_cost += COSTS_N_INSNS (ix86_cost->integer_to_sse) / 2;
>               }
>           }
>       }
> -- 
> 2.51.0

Reply via email to