i386: Restore Skylake SImode hard register store cost

On Skylake, we should move integer register to SSE register without
going through memory.  This patch restores Skylake SImode hard register
store cost to 6.

gcc/

	PR target/90878
	* config/i386/x86-tune-costs.h (skylake_cost): Restore SImode
	hard register store cost to 6.

gcc/testsuite/

	PR target/90878
	* gcc.target/i386/pr90878.c: New test.

From-SVN: r275906
This commit is contained in:
H.J. Lu 2019-09-18 19:50:45 +00:00 committed by H.J. Lu
parent 101a0841b6
commit 7706f2f312
4 changed files with 37 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2019-09-18 H.J. Lu <hongjiu.lu@intel.com>
PR target/90878
* config/i386/x86-tune-costs.h (skylake_cost): Restore SImode
hard register store cost to 6.
2019-09-18 H.J. Lu <hongjiu.lu@intel.com>
PR target/91446

View File

@ -1594,7 +1594,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 */
2, /* cost of reg,reg fld/fst */
{6, 6, 8}, /* cost of loading fp registers
in SFmode, DFmode and XFmode */

View File

@ -1,3 +1,8 @@
2019-09-18 H.J. Lu <hongjiu.lu@intel.com>
PR target/90878
* gcc.target/i386/pr90878.c: New test.
2019-09-18 H.J. Lu <hongjiu.lu@intel.com>
PR target/91446

View File

@ -0,0 +1,25 @@
/* { dg-do compile } */
/* { dg-options "-O2 -march=skylake" } */
union ieee754_float
{
float f;
struct
{
unsigned int mantissa:23;
unsigned int exponent:8;
unsigned int negative:1;
} ieee;
};
double
foo (float f)
{
union ieee754_float u;
u.f = f;
u.ieee.negative = 0;
return u.f;
}
/* { dg-final { scan-assembler-not "vcvtss2sd\[^\\n\]*\\\(%.sp\\\)" } } */