------- Comment #8 from tkoenig at gcc dot gnu dot org  2009-08-12 20:36 -------
(In reply to comment #7)

> An interesting approach.  As long as you don't print array slices in the 
> loops this should work around the escaping pointer problem.  It comes at 
> the risk of creating excessive copies.

Apparently, the optimizers are smart enough for that at least for
simple cases.

The loop in the following subroutine gets translated to

subroutine foo
  do i=1,10
    call bar((i))
  end do
end subroutine foo

       leal    -12(%ebp), %esi
        .p2align 4,,7
L2:
        movl    %ebx, -12(%ebp)
        addl    $1, %ebx
        movl    %esi, (%esp)
        call    bar_
        cmpl    $11, %ebx
        jne     L2

which is pretty good.

> Actually, perhaps the right way of achieving this is not to add 
> OP_PARENTHESES in the frontend, but to do a copy when creating the call.

This would likely have the same result, the subprogram

subroutine foo
  do i=1,10
    j = i
    call bar(j)
  end do
end subroutine foo

gets the same code as the one above.

For comparision, the unadorned

$ cat a.f90
subroutine foo
  do i=1,10
    call bar(i)
  end do
end subroutine foo

gets

        movl    $1, -12(%ebp)
.L2:
        movl    %ebx, (%esp)
        call    bar_
        movl    -12(%ebp), %eax
        leal    1(%eax), %edx
        cmpl    $10, %eax
        movl    %edx, -12(%ebp)
        jne     .L2


-- 


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

  • ... tkoenig at gcc dot gnu dot org
    • ... Tobias Schlüter <tobias dot schlueter at physik dot uni-muenchen dot de>
    • ... tkoenig at gcc dot gnu dot org
    • ... tobi at gcc dot gnu dot org
    • ... jv244 at cam dot ac dot uk
    • ... rguenth at gcc dot gnu dot org
    • ... tobi at gcc dot gnu dot org
    • ... tkoenig at gcc dot gnu dot org
    • ... Tobias Schlüter <tobias dot schlueter at physik dot uni-muenchen dot de>
    • ... tobi at gcc dot gnu dot org
    • ... tobi at gcc dot gnu dot org
    • ... tobi at gcc dot gnu dot org
    • ... jvdelisle at gcc dot gnu dot org

Reply via email to