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

--- Comment #5 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2012-02-19 
13:34:13 UTC ---
In spbtrf.f I have put PRINT statements before and after the loops

            DO 90 J = 1, NB
               DO 80 I = J + 1, NB
                  WORK( I, J ) = ZERO
   80          CONTINUE
   90       CONTINUE

The print after the loops is never reached. The code generated between the last
print before the loops and the first one after with -O2 is

    call    __gfortran_st_write_done
    leal    1(%r14), %edi
    movl    $1, %eax
    movq    168(%rsp), %r8
    movl    $1, %ecx
L30:
    leaq    34(%rax), %rsi
    addl    $1, %ecx
    cmpl    %r14d, %ecx
    jg      L28
    leaq    (%r8,%rax,4), %rax
    movl    %r14d, %edx
    subl    %ecx, %edx
    addq    %rsi, %rdx
    leaq    572(%rsp,%rdx,4), %rdx
    .align 4,0x90
L29:
    movl    $0x00000000, (%rax)
    addq    $4, %rax
    cmpq    %rdx, %rax
    jne     L29
L28:
    cmpl    %edi, %ecx
    movq    %rsi, %rax
    jne     L30
    leaq    LC14(%rip), %rcx
    movl    $343, 240(%rsp)
    leaq    224(%rsp), %rdi
    movq    %rcx, 232(%rsp)
    movl    $128, 224(%rsp)
    movl    $6, 228(%rsp)
    call    __gfortran_st_write

When compiled with -O2 -floop-flatten, it is

    call    __gfortran_st_write_done
    movl    $2, %ecx
    movl    $4294967295, %esi
    subq    %r15, %rcx
    movq    %rcx, %rdx
    movq    %rcx, %rax
    sarq    $63, %rdx
    idivq   %rsi
    testq   %rdx, %rdx
    je      L27
    movq    %rcx, %rdx
    xorq    %rsi, %rdx
    notq    %rdx
    shrq    $63, %rdx
    addq    %rdx, %rax
L27:
    movabsq $-8589934593, %rcx
    movq    %r15, %rdx
    salq    $32, %rdx
    addq    %r15, %rdx
    addq    %rdx, %rcx
    cmpq    %rcx, %rax
    jge     L28
    movabsq $-8589934594, %r11
    movl    $2, %r9d
    movq    %rax, %r8
    leaq    -2(%r15), %r10
    addq    %rdx, %r11
    subq    %r15, %r9
L31:
    leaq    (%r9,%r8), %rax
    cmpq    %r10, %r8
    movq    %r10, %rdi
    cmovle  %r8, %rdi
    movq    %rax, %rsi
    sarq    $32, %rsi
    testl   %eax, %eax
    setne   %al
    movzbl  %al, %eax
    addq    %rax, %rsi
    cmpq    %rdi, %rsi
    jg      L29
    leaq    (%rsi,%r8), %rdx
    movq    %rsi, %rax
    salq    $5, %rax
    leaq    1(%rdx,%rax), %rax
    leaq    704(%rsp,%rax,4), %rdx
    xorl    %eax, %eax
    .align 4,0x90
L30:
    movl    $0x00000000, (%rdx)
    leaq    (%rax,%rsi), %rcx
    addq    $132, %rdx
    addq    $1, %rax
    cmpq    %rdi, %rcx
    jl      L30
L29:
    leaq    1(%r8), %rax
    cmpq    %r8, %r11
    jle     L28
    movq    %rax, %r8
    jmp     L31
L28:
    leaq    LC14(%rip), %rax
    movl    $343, 240(%rsp)
    leaq    224(%rsp), %rdi
    movq    %rax, 232(%rsp)
    movl    $128, 224(%rsp)
    movl    $6, 228(%rsp)
    call    __gfortran_st_write

Reply via email to