aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2019-09-18 19:49:19 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2019-09-18 12:49:19 -0700
commit101a0841b6fad201172e90f716d6c1866d7b0a36 (patch)
tree8bf69732553f5ab877eee2dbbdf83545ef978e34 /gcc
parent22a8ab772c37dc6250f2b22afe1e91b55fda41f5 (diff)
downloadgcc-101a0841b6fad201172e90f716d6c1866d7b0a36.zip
gcc-101a0841b6fad201172e90f716d6c1866d7b0a36.tar.gz
gcc-101a0841b6fad201172e90f716d6c1866d7b0a36.tar.bz2
i386: Increase Skylake SImode pseudo register store cost
On Skylake, SImode store cost isn't less than half cost of 128-bit vector store. This patch increases Skylake SImode pseudo register store cost to make it the same as QImode and HImode. gcc/ PR target/91446 * config/i386/x86-tune-costs.h (skylake_cost): Increase SImode pseudo register store cost from 3 to 6 to make it the same as QImode and HImode. gcc/testsuite/ PR target/91446 * gcc.target/i386/pr91446.c: New test. From-SVN: r275905
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/x86-tune-costs.h2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr91446.c24
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6be55cd..d74b19f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-09-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/91446
+ * config/i386/x86-tune-costs.h (skylake_cost): Increase SImode
+ pseudo register store cost from 3 to 6 to make it the same as
+ QImode and HImode.
+
2019-09-18 Wilco Dijkstra <wdijkstr@arm.com>
* config/arm/arm.md (maddsidi4): Remove expander.
diff --git a/gcc/config/i386/x86-tune-costs.h b/gcc/config/i386/x86-tune-costs.h
index 00edece..42c9c25 100644
--- a/gcc/config/i386/x86-tune-costs.h
+++ b/gcc/config/i386/x86-tune-costs.h
@@ -1638,7 +1638,7 @@ struct processor_costs skylake_cost = {
{4, 4, 4}, /* cost of loading integer registers
in QImode, HImode and SImode.
Relative to reg-reg move (2). */
- {6, 6, 3}, /* cost of storing integer registers */
+ {6, 6, 6}, /* cost of storing integer registers */
{6, 6, 6, 10, 20}, /* cost of loading SSE register
in 32bit, 64bit, 128bit, 256bit and 512bit */
{8, 8, 8, 12, 24}, /* cost of storing SSE register
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dc84ed9..8ea581d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-09-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/91446
+ * gcc.target/i386/pr91446.c: New test.
+
2019-09-18 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/warn31.adb, gnat.dg/warn31.ads: New testcase.
diff --git a/gcc/testsuite/gcc.target/i386/pr91446.c b/gcc/testsuite/gcc.target/i386/pr91446.c
new file mode 100644
index 0000000..f7c4bea
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr91446.c
@@ -0,0 +1,24 @@
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O2 -march=skylake -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 } } */