diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2025-05-03 00:26:29 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@ucw.cz> | 2025-05-03 10:34:09 +0200 |
commit | 20d184e3f84d859e7e9f44a8d91772a02b658872 (patch) | |
tree | 5181d6ae8374f93c67ac380f6b2acb51541b8deb /gcc/testsuite/gcc.target/riscv/attribute-c-4.c | |
parent | 4beae371c435df8d77a7f806f1a40b3d1c50e76f (diff) | |
download | gcc-master.zip gcc-master.tar.gz gcc-master.tar.bz2 |
ix86_rtx_costs VEC_MERGE by special casing AVX512 mask operations and otherwise
returning cost->sse_op completely ignoring costs of the operands. Since
VEC_MERGE is also used to represent scalar variant of SSE/AVX operation, this
means that many instructions (such as SSE converisions) are often costed as
sse_op instead of their real cost.
This patch adds pattern matching for the VEC_MERGE pattern which also forced me
to add special cases for masked versions and vcmp otherwise combine is confused
by the default cost compred to the cost of recognized version of the
instruction.
Since now the important cases should be handled, I also added recursion to the
remaining cases so substituting constants and memory is adequately costed.
gcc/ChangeLog:
* config/i386/i386.cc (unspec_pcmp_p): New function.
(ix86_rtx_costs): Cost VEC_MERGE more realistically.
Diffstat (limited to 'gcc/testsuite/gcc.target/riscv/attribute-c-4.c')
0 files changed, 0 insertions, 0 deletions