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).