https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127019
Bug ID: 127019
Summary: znver4 mask register cost is too high
Product: gcc
Version: 16.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: rguenth at gcc dot gnu.org
Depends on: 103750
Target Milestone: ---
Target: x86
$ make check-gcc RUNTESTFLAGS="--target_board='unix{-m32\
-march=znver4,-march=znver4}' i386.exp=*pr103750*.c"
gave:
FAIL: gcc.target/i386/avx512bw-pr103750-2.c scan-assembler-not kmov
FAIL: gcc.target/i386/avx512fp16-pr103750-2.c scan-assembler-not kmov
FAIL: gcc.target/i386/avx512f-pr103750-2.c scan-assembler-not kmov
This patch
diff --git a/gcc/config/i386/x86-tune-costs.h
b/gcc/config/i386/x86-tune-costs.h
index bc3bb694349..7574cc4f1ad 100644
--- a/gcc/config/i386/x86-tune-costs.h
+++ b/gcc/config/i386/x86-tune-costs.h
@@ -2119,7 +2119,7 @@ struct processor_costs znver4_cost = {
8, 8, /* mask->integer and integer->mask moves */
{6, 6, 6}, /* cost of loading mask register
in QImode, HImode, SImode. */
- {8, 8, 8}, /* cost if storing mask register
+ {6, 6, 6}, /* cost if storing mask register
in QImode, HImode, SImode. */
2, /* cost of moving mask register. */
/* End of register allocator costs. */
fixed them.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103750
[Bug 103750] [i386] GCC schedules KMOV instructions that destroys performance
in loop