[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