[fortran PATCH] Implement a(:,:) = 0.0 using memset

Tobias Schlüter tobias.schlueter@physik.uni-muenchen.de
Mon Dec 18 17:50:00 GMT 2006


roger@eyesopen.com wrote on Mon, 18 Dec 2006:
> The following patch makes use of the recently added gfc_full_array_ref_p
> function to provide the optimization of using memset when assigning an
> entire array to zero.  Currently, the source code below:
>
>   integer :: a(20)
>   a(:) = 0;
>
> we currently generate the following with -fdump-tree-original
>
>   int8 S.0;
>
>   S.0 = 1;
>   while (1)
>     {
>       if (S.0 > 20) goto L.1; else (void) 0;
>       (*a)[NON_LVALUE_EXPR <S.0> + -1] = 0;
>       S.0 = S.0 + 1;
>     }
>   L.1:;
>
> with the patch below, we now generate this instead.
>
>   (void) __builtin_memset ((void *) a, 0, 80);

Does this work for strided arrays?  Say
program t
  real :: arr(4)
  call a(arr(1:4:2))
  print *, arr
contains
subroutine a(b)
   real :: b(:)
   b(:) = 0
end subroutine
end program

- Tobi

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.




More information about the Fortran mailing list