[gfortran,patch] PR31399: handle large DO loops

Jerry DeLisle jvdelisle@verizon.net
Mon May 7 01:50:00 GMT 2007


:REVIEWMAIL:
FX Coudert wrote:
> Hi all,
> 
> Attached patch fixes PR31399 by changing the code we generate for DO 
> loops. Except for simple loops (with step 1 or -1), we compute the loop 
> count and iterate by decreasing it until it reaches zero. However, for 
> the largest loop, the count can overflow the corresponding unsigned 
> type. (For example, the loop going from -huge(0)-1 to huge(0) has 
> 2*huge(0)+2 elements, while the largest unsigned integer of this kind is 
> 2*huge(0)+1.) The solution is to store the loop count minus one, 
> instead, and reorder the generated code.
> 
> Bootstrapped and regtested on i686-linux, it comes with a testcase for 
> both integer and real loops. OK for mainline? (It's a regression wrt 
> g77, but it affects very little user code, so I don't think it's worth a 
> backport.)
> 
> FX
> 
> 
> 
> :ADDPATCH fortran:
> 
> 2007-05-02  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
> 
>         PR fortran/31399
>         * trans-stmt.c (gfc_trans_do): Handle large loop counts.
> 
> 
> 2007-05-02  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
> 
>         PR fortran/31399
>         * gfortran.dg/do_3.F90: New test.
> 
> 
This is OK,

Jerry



More information about the Fortran mailing list