[Bug fortran/42131] Weird translation of DO loops
tkoenig at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Nov 23 21:48:00 GMT 2009
------- Comment #11 from tkoenig at gcc dot gnu dot org 2009-11-23 21:48 -------
Created an attachment (id=19104)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19104&action=view)
another proposed patch
Here's another proposed patch, but there is a problem with it.
If we calculate (m2 - m1 + m3)/m3 with signed types, then this will overflow,
for example, for
do i=-huge(i),huge(i),2
The current implementation gets around that by doing the addition and division
unsigned, then dividing unsigned as well. For this, there have to be two
cases, one for m3>0 and one for m3<0, which is what we generate
at the moment.
Possible solutions:
- get rid of the loop counter altogether
- perform the intermediate calculation with increased precision, if
available
- Multiply everything by the sign of m3 before doing the unsigned
math (which is what we do now, except that we hide this behind an
if)
- Trust two's complement arithmetic and hope that overflows don't trap
(not, in general, a good idea)
Any tricks I have missed?
--
tkoenig at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #19076|0 |1
is obsolete| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42131
More information about the Gcc-bugs
mailing list