]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fixup unaligned load/store cost for znver4
authorRichard Biener <rguenther@suse.de>
Mon, 15 Jul 2024 11:01:24 +0000 (13:01 +0200)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 23 Jul 2024 07:32:20 +0000 (09:32 +0200)
Currently unaligned YMM and ZMM load and store costs are cheaper than
aligned which causes the vectorizer to purposely mis-align accesses
by adding an alignment prologue.  It looks like the unaligned costs
were simply left untouched from znver3 where they equate the aligned
costs when tweaking aligned costs for znver4.  The following makes
the unaligned costs equal to the aligned costs.

This avoids the miscompile seen in PR115843 but it's of course not
a real fix for the issue uncovered there.  But it makes it qualify
as a regression fix.

PR tree-optimization/115843
* config/i386/x86-tune-costs.h (znver4_cost): Update unaligned
load and store cost from the aligned costs.

(cherry picked from commit 1e3aa9c9278db69d4bdb661a750a7268789188d6)

gcc/config/i386/x86-tune-costs.h

index f105d57cae797b13e19e4ca51a3cb8d59c4c478c..d588278889948fe333ea12b8c256d2cbd4f08d66 100644 (file)
@@ -1894,8 +1894,8 @@ struct processor_costs znver4_cost = {
                                           in 32bit, 64bit, 128bit, 256bit and 512bit */
   {8, 8, 8, 12, 12},                   /* cost of storing SSE register
                                           in 32bit, 64bit, 128bit, 256bit and 512bit */
-  {6, 6, 6, 6, 6},                     /* cost of unaligned loads.  */
-  {8, 8, 8, 8, 8},                     /* cost of unaligned stores.  */
+  {6, 6, 10, 10, 12},                  /* cost of unaligned loads.  */
+  {8, 8, 8, 12, 12},                   /* cost of unaligned stores.  */
   2, 2, 2,                             /* cost of moving XMM,YMM,ZMM
                                           register.  */
   6,                                   /* cost of moving SSE register to integer.  */