public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/37340] New: wrong code for loading an sse2 register
@ 2008-09-02 19:54 Emmanuel dot Thome at inria dot fr
2008-09-02 19:55 ` [Bug c/37340] " Emmanuel dot Thome at inria dot fr
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Emmanuel dot Thome at inria dot fr @ 2008-09-02 19:54 UTC (permalink / raw)
To: gcc-bugs
The following code is miscompiled at -O3 with gcc 4.3.0 ; g[1] is filled with
movq+movlps instead of movq+movhps.
void frob(long long *t, const long long *s1,
const long long *s2)
{
long long w_s2[2];
long long z;
z = s2[0];
w_s2[0] = z & 0x1fUL;
z >>= 5;
w_s2[1] = z;
typedef union {
__v2di s;
long long x[2];
} __v2di_proxy;
__v2di g[4];
g[0] = (__v2di) { 0,};
g[1] = (__v2di) { w_s2[0], w_s2[1],};
// it's unused in my testcase, and makes the assembly diff more
// readable.
// g[2] = (__v2di) { 0,};
g[3] = g[1];
__v2di_proxy r;
r.s = g[s1[0]];
t[0] = r.x[0];
t[1] = r.x[1];
}
Here is the diff of the generated asm. A full testcase follows in the form of a
tar file.
frob:
movq (%rdx), %rax
pxor %xmm0, %xmm0
movdqa %xmm0, -72(%rsp)
movq %rax, %rdx
andl $31, %edx
movq %rdx, -96(%rsp)
sarq $5, %rax
- movq %rax, -104(%rsp)
- movq -96(%rsp), %xmm1
- movhps -104(%rsp), %xmm1
+ movq %rax, -112(%rsp)
+ movq -112(%rsp), %xmm1
+ movlps -96(%rsp), %xmm1
Notice how the shifted rax stored in -112(%rsp) goes to xmm1 with movq while it
should reach the high word.
Have I done anything wrong ?
E.
--
Summary: wrong code for loading an sse2 register
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: Emmanuel dot Thome at inria dot fr
GCC build triplet: x86_64-redhat-linux
GCC host triplet: x86_64-redhat-linux
GCC target triplet: x86_64-redhat-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37340
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c/37340] wrong code for loading an sse2 register
2008-09-02 19:54 [Bug c/37340] New: wrong code for loading an sse2 register Emmanuel dot Thome at inria dot fr
@ 2008-09-02 19:55 ` Emmanuel dot Thome at inria dot fr
2008-09-02 19:57 ` [Bug c/37340] -foptimize-register-move => " Emmanuel dot Thome at inria dot fr
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Emmanuel dot Thome at inria dot fr @ 2008-09-02 19:55 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from Emmanuel dot Thome at inria dot fr 2008-09-02 19:53 -------
Created an attachment (id=16198)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=16198&action=view)
testcase
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37340
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c/37340] -foptimize-register-move => wrong code for loading an sse2 register
2008-09-02 19:54 [Bug c/37340] New: wrong code for loading an sse2 register Emmanuel dot Thome at inria dot fr
2008-09-02 19:55 ` [Bug c/37340] " Emmanuel dot Thome at inria dot fr
@ 2008-09-02 19:57 ` Emmanuel dot Thome at inria dot fr
2008-09-02 20:07 ` rguenth at gcc dot gnu dot org
2008-09-02 20:54 ` [Bug target/37340] " Emmanuel dot Thome at inria dot fr
3 siblings, 0 replies; 5+ messages in thread
From: Emmanuel dot Thome at inria dot fr @ 2008-09-02 19:57 UTC (permalink / raw)
To: gcc-bugs
------- Comment #2 from Emmanuel dot Thome at inria dot fr 2008-09-02 19:56 -------
> Here is the diff of the generated asm.
One more note. The flags are, respectively:
-O
-O -foptimize-register-move
--
Emmanuel dot Thome at inria dot fr changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|wrong code for loading an |-foptimize-register-move =>
|sse2 register |wrong code for loading an
| |sse2 register
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37340
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c/37340] -foptimize-register-move => wrong code for loading an sse2 register
2008-09-02 19:54 [Bug c/37340] New: wrong code for loading an sse2 register Emmanuel dot Thome at inria dot fr
2008-09-02 19:55 ` [Bug c/37340] " Emmanuel dot Thome at inria dot fr
2008-09-02 19:57 ` [Bug c/37340] -foptimize-register-move => " Emmanuel dot Thome at inria dot fr
@ 2008-09-02 20:07 ` rguenth at gcc dot gnu dot org
2008-09-02 20:54 ` [Bug target/37340] " Emmanuel dot Thome at inria dot fr
3 siblings, 0 replies; 5+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-09-02 20:07 UTC (permalink / raw)
To: gcc-bugs
------- Comment #3 from rguenth at gcc dot gnu dot org 2008-09-02 20:06 -------
Sounds like a dup of PR37101 which is fixed for GCC 4.3.2.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37340
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug target/37340] -foptimize-register-move => wrong code for loading an sse2 register
2008-09-02 19:54 [Bug c/37340] New: wrong code for loading an sse2 register Emmanuel dot Thome at inria dot fr
` (2 preceding siblings ...)
2008-09-02 20:07 ` rguenth at gcc dot gnu dot org
@ 2008-09-02 20:54 ` Emmanuel dot Thome at inria dot fr
3 siblings, 0 replies; 5+ messages in thread
From: Emmanuel dot Thome at inria dot fr @ 2008-09-02 20:54 UTC (permalink / raw)
To: gcc-bugs
------- Comment #4 from Emmanuel dot Thome at inria dot fr 2008-09-02 20:53 -------
(In reply to comment #3)
> Sounds like a dup of PR37101 which is fixed for GCC 4.3.2.
indeed. Thanks.
*** This bug has been marked as a duplicate of 37101 ***
--
Emmanuel dot Thome at inria dot fr changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |DUPLICATE
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37340
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-09-02 20:54 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-09-02 19:54 [Bug c/37340] New: wrong code for loading an sse2 register Emmanuel dot Thome at inria dot fr
2008-09-02 19:55 ` [Bug c/37340] " Emmanuel dot Thome at inria dot fr
2008-09-02 19:57 ` [Bug c/37340] -foptimize-register-move => " Emmanuel dot Thome at inria dot fr
2008-09-02 20:07 ` rguenth at gcc dot gnu dot org
2008-09-02 20:54 ` [Bug target/37340] " Emmanuel dot Thome at inria dot fr
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).