------- Comment #14 from rguenth at gcc dot gnu dot org  2008-01-03 17:06 
-------
With optimization we now avoid the error, but unoptimized code is still wrong:

_Z10InitializeP16SQLU_DICT_INFO_0:
.LFB3:
        pushq   %rbp
.LCFI2:
        movq    %rsp, %rbp
.LCFI3:
        pushq   %rbx
.LCFI4:
        subq    $8, %rsp
.LCFI5:
        movq    %rdi, -16(%rbp)
        movq    -16(%rbp), %rax
        movb    $0, 8(%rax)
        movq    -16(%rbp), %rax
        movb    $0, 9(%rax)
        movq    -16(%rbp), %rbx
        call    _Z17INIT_6_BYTES_ZEROv
        movzbl  %al, %ecx
        movzbl  10(%rbx), %edx
        andl    $0, %edx
        orl     %ecx, %edx
        movb    %dl, 10(%rbx)
        movzbl  %ah, %edx
        mov     %edx, %ecx
        movq    10(%rbx), %rdx
   ^^^^^^^^^^^^^  here
        movb    %cl, %dh
        movq    %rdx, 10(%rbx)
   ^^^^^^^^^^^^^  and here
        movq    %rax, %rdx
        shrq    $16, %rdx
        movzbq  %dl,%rcx
        movzbl  12(%rbx), %edx
        andl    $0, %edx
        orl     %ecx, %edx
        movb    %dl, 12(%rbx)
        movq    %rax, %rdx
        shrq    $24, %rdx
        movzbq  %dl,%rcx
        movzbl  13(%rbx), %edx
        andl    $0, %edx
        orl     %ecx, %edx
        movb    %dl, 13(%rbx)
        movq    %rax, %rdx
        shrq    $32, %rdx
        movzbq  %dl,%rcx
        movzbl  14(%rbx), %edx
        andl    $0, %edx
        orl     %ecx, %edx
        movb    %dl, 14(%rbx)
        shrq    $40, %rax
        movzbq  %al,%rdx
        movzbl  15(%rbx), %eax
        andl    $0, %eax
        orl     %edx, %eax
        movb    %al, 15(%rbx)
        addq    $8, %rsp
        popq    %rbx
        leave
        ret

without inlining we do optimize this to

_Z10InitializeP16SQLU_DICT_INFO_0:
.LFB3:
        pushq   %rbx
.LCFI0:
        movq    %rdi, %rbx
        movb    $0, 8(%rdi)
        movb    $0, 9(%rdi)
        call    _Z17INIT_6_BYTES_ZEROv
        movb    %al, 10(%rbx)
        movzbl  %ah, %edx
        movb    %dl, 11(%rbx)
        movq    %rax, %rdx
        shrq    $16, %rdx
        movb    %dl, 12(%rbx)
        movq    %rax, %rdx
        shrq    $24, %rdx
        movb    %dl, 13(%rbx)
        movq    %rax, %rdx
        shrq    $32, %rdx
        movb    %dl, 14(%rbx)
        shrq    $40, %rax
        movb    %al, 15(%rbx)
        popq    %rbx
        ret

which doesn't have the 8 byte move any more.  4.2, even when optimizing
retains the 8 byte move.


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2007-03-22 10:03:14         |2008-01-03 17:06:20
               date|                            |


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

Reply via email to