> 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