diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2025-05-11 23:49:11 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@ucw.cz> | 2025-05-11 23:49:48 +0200 |
commit | 37e61c793c1b22bdcfbf142cd6086da2745be596 (patch) | |
tree | eeda93129a3b232017908c8a9277a143a7ca9de2 /libstdc++-v3/doc/doxygen/stdheader.cc | |
parent | aa0d25683bb5c7f2256d9e897fe471f0de84ea9b (diff) | |
download | gcc-37e61c793c1b22bdcfbf142cd6086da2745be596.zip gcc-37e61c793c1b22bdcfbf142cd6086da2745be596.tar.gz gcc-37e61c793c1b22bdcfbf142cd6086da2745be596.tar.bz2 |
i386: Fix move costs in vectorizer cost model.
This patch complements the change to stv and uses COSTS_N_INSNS (...)/2
to convert move costs to COSTS_N_INSNS based costs used by vectorizer.
The patch makes pr9981 to XPASS so I removed xfail but it also makes
pr91446 fail. This is about SLP
/* { dg-options "-O2 -march=icelake-server -ftree-slp-vectorize -mtune-ctrl=^sse_typeless_stores" } */
typedef struct
{
unsigned long long width, height;
long long x, y;
} info;
extern void bar (info *);
void
foo (unsigned long long width, unsigned long long height,
long long x, long long y)
{
info t;
t.width = width;
t.height = height;
t.x = x;
t.y = y;
bar (&t);
}
/* { dg-final { scan-assembler-times "vmovdqa\[^\n\r\]*xmm\[0-9\]" 2 } } */
With fixed cost the construction cost is now too large so vectorization does
not happen. This is the hack increasing cost to account integer->sse move which
I think we can handle incrementally.
gcc/ChangeLog:
* config/i386/i386.cc (ix86_widen_mult_cost): Use sse_op to cost
SSE integer addition.
(ix86_multiplication_cost): Use COSTS_N_INSNS (...)/2 to cost sse
loads.
(ix86_shift_rotate_cost): Likewise.
(ix86_vector_costs::add_stmt_cost): Likewise.
gcc/testsuite/ChangeLog:
* gcc.target/i386/pr91446.c: xfail.
* gcc.target/i386/pr99881.c: remove xfail.
Diffstat (limited to 'libstdc++-v3/doc/doxygen/stdheader.cc')
0 files changed, 0 insertions, 0 deletions