This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: How to express the fact that arguments don't escape?
- From: Tobias Schlüter <tobias dot schlueter at physik dot uni-muenchen dot de>
- To: Janne Blomqvist <blomqvist dot janne at gmail dot com>
- Cc: Richard Guenther <richard dot guenther at gmail dot com>, fortran at gcc dot gnu dot org, matz at suse dot de
- Date: Sat, 15 Aug 2009 10:49:42 +0200
- Subject: Re: How to express the fact that arguments don't escape?
- References: <493FDD92.9030603@net-b.de> <84fc9c000812100724l53799ed4v397d708e8abd2564@mail.gmail.com> <200812101721.39235.franke.daniel@gmail.com> <84fc9c000812100831h379be350ybc9fcfa46f0958b2@mail.gmail.com> <4A85FA4A.3070509@physik.uni-muenchen.de> <4A866A3B.3050009@gmail.com>
Janne Blomqvist wrote:
Tobias Schlüter wrote:
Hi,
I reviewed some old discussions on argument passing, but I found
nothing which addressed a seemingly simple optimization for Fortran:
what I would like to see is a way to tell the compiler that a function
argument (which will be a pointer) will not have escaped after the
function has returned. I.e.
call f(i)
i = 1
call g(j) ! won't know about i
if (i != 1) then
can't happen
end if
Is there a way to do this? Unless I'm mistaken, this assumption holds
for all non-POINTER arguments.
Shouldn't the recent patch by Michael Matz fix this?
http://gcc.gnu.org/ml/fortran/2009-08/msg00104.html
By marking j as a restricted pointer it should know that it can't escape
and alias i.
It's not about j aliasing i, it's about f storing a pointer to i
somewhere which then can be used to modify i in a different function
call. Sorry if that wasn't clear.
Cheers,
- Tobi