This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug middle-end/19391] New: [4.0 Regression] missed optimization with size of 8 vectors


We do not generate the vector instructions with the following code on x86_64 (and x86 -msse3):
 typedef short mmxw  __attribute__ ((vector_size(8)));
 typedef int   mmxdw __attribute__ ((vector_size(8)));
mmxdw dw;
mmxw w;
void test(){
    w+=w;
    dw= (mmxdw)w;
}

The code comes from PR 14552 but we don't use the vector unit any more for the addition so we 
produce so much crappy code:
        movq    w(%rip), %xmm0
        movabsq $-9223231297218904064, %rax
        movq    %xmm0, -8(%rsp)
        movq    -8(%rsp), %rsi
        movq    %rsi, %rcx
        movq    %rsi, %rdx
        xorq    %rsi, %rcx
        andq    %rax, %rcx
        movabsq $9223231297218904063, %rax
        andq    %rax, %rdx
        addq    %rdx, %rdx
        xorq    %rdx, %rcx
        movq    %rcx, -16(%rsp)
        movq    -16(%rsp), %xmm0
        movq    %xmm0, w(%rip)
        movq    %xmm0, dw(%rip)
        ret

Compared to what we got in 3.4:
test:
        movq    w, %mm1
        psllw   $1, %mm1
        movq    %mm1, w
        movq    w, %mm0
        movq    %mm0, dw
        ret

-- 
           Summary: [4.0 Regression] missed optimization with size of 8
                    vectors
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Keywords: missed-optimization, ssemmx
          Severity: normal
          Priority: P2
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: pinskia at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: x86_64-*-*
OtherBugsDependingO 14552
             nThis:


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19391


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]