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

Reply via email to