[Bug target/88998] [7/8/9 Regression] bad codegen with mmx instructions for unordered_map

2019-01-24 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88998

Uroš Bizjak  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #8 from Uroš Bizjak  ---
Fixed everywhere.

[Bug target/88998] [7/8/9 Regression] bad codegen with mmx instructions for unordered_map

2019-01-24 Thread uros at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88998

--- Comment #7 from uros at gcc dot gnu.org ---
Author: uros
Date: Thu Jan 24 19:14:58 2019
New Revision: 268244

URL: https://gcc.gnu.org/viewcvs?rev=268244=gcc=rev
Log:
PR target/88998
* config/i386/sse.md (sse2_cvtpi2pd): Add SSE alternatives.
Disparage MMX alternative.
(sse2_cvtpd2pi): Ditto.
(sse2_cvttpd2pi): Ditto.

testsuite/ChangeLog:

PR target/88998
* g++.dg/pr88998.c: New test.


Added:
branches/gcc-7-branch/gcc/testsuite/g++.dg/pr88998.C
Modified:
branches/gcc-7-branch/gcc/ChangeLog
branches/gcc-7-branch/gcc/config/i386/sse.md
branches/gcc-7-branch/gcc/testsuite/ChangeLog

[Bug target/88998] [7/8/9 Regression] bad codegen with mmx instructions for unordered_map

2019-01-24 Thread uros at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88998

--- Comment #6 from uros at gcc dot gnu.org ---
Author: uros
Date: Thu Jan 24 19:12:55 2019
New Revision: 268242

URL: https://gcc.gnu.org/viewcvs?rev=268242=gcc=rev
Log:
PR target/88998
* config/i386/sse.md (sse2_cvtpi2pd): Add SSE alternatives.
Disparage MMX alternative.
(sse2_cvtpd2pi): Ditto.
(sse2_cvttpd2pi): Ditto.

testsuite/ChangeLog:

PR target/88998
* g++.dg/pr88998.c: New test.


Added:
branches/gcc-8-branch/gcc/testsuite/g++.dg/pr88998.C
Modified:
branches/gcc-8-branch/gcc/ChangeLog
branches/gcc-8-branch/gcc/config/i386/sse.md
branches/gcc-8-branch/gcc/testsuite/ChangeLog

[Bug target/88998] [7/8/9 Regression] bad codegen with mmx instructions for unordered_map

2019-01-23 Thread uros at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88998

--- Comment #5 from uros at gcc dot gnu.org ---
Author: uros
Date: Wed Jan 23 19:10:58 2019
New Revision: 268195

URL: https://gcc.gnu.org/viewcvs?rev=268195=gcc=rev
Log:
PR target/88998
* config/i386/sse.md (sse2_cvtpi2pd): Add SSE alternatives.
Disparage MMX alternative.
(sse2_cvtpd2pi): Ditto.
(sse2_cvttpd2pi): Ditto.

testsuite/ChangeLog:

PR target/88998
* g++.target/i386/pr88998.c: New test.


Added:
trunk/gcc/testsuite/g++.target/i386/pr88998.C
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/i386/sse.md
trunk/gcc/testsuite/ChangeLog

[Bug target/88998] [7/8/9 Regression] bad codegen with mmx instructions for unordered_map

2019-01-23 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88998

Uroš Bizjak  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |ubizjak at gmail dot com

--- Comment #4 from Uroš Bizjak  ---
Created attachment 45503
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45503=edit
Proposed patch

We can use cvtdq2pd instead of cvtpi2pd and directly use xmm input register.
The  patched compiler generates:

vmovd   %edi, %xmm1
vpinsrd $1, %esi, %xmm1, %xmm0
vcvtdq2pd   %xmm0, %xmm0
vhaddpd %xmm0, %xmm0, %xmm0
ret

which avoids MMX registers altogether.

The patch also amends cvtpd2pi/cvttpd2pi in a similar way, so it can output
directly to xmm register.

[Bug target/88998] [7/8/9 Regression] bad codegen with mmx instructions for unordered_map

2019-01-23 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88998

Richard Biener  changed:

   What|Removed |Added

   Keywords||wrong-code
   Priority|P3  |P2
  Known to work||6.4.0
   Target Milestone|--- |7.5
Summary|bad codegen with mmx|[7/8/9 Regression] bad
   |instructions for|codegen with mmx
   |unordered_map   |instructions for
   ||unordered_map
  Known to fail||7.3.1, 8.2.1, 9.0

--- Comment #3 from Richard Biener  ---
Hmm, I see no explicit MMX reg/intrinsic uses in the testcase if I am not
mistaken so the compiler should not end up using MMX.

GCC 6 "failed" to do this optimization, but the issue might have been latent
there.