This is the mail archive of the
mailing list for the GCC project.
Re: Miscompilation of remainder expressions
On Wed, Jan 17, 2007 at 12:43:40AM +0100, Vincent Lefevre wrote:
> On 2007-01-16 21:27:42 +0000, Andrew Haley wrote:
> > Ian Lance Taylor writes:
> > > I suspect that the best fix, in the sense of generating the best
> > > code, would be to do this at the tree level. That will give loop
> > > and VRP optimizations the best chance to eliminate the test for -1.
> > > Doing it during gimplification would be easy, if perhaps rather
> > > ugly. If there are indeed several processors with this oddity,
> > > then it would even make a certain degree of sense as a
> > > target-independent option.
> > x86, x86-64, S/390, as far as I'm aware.
> and PowerPC G4 and G5, where I don't get a crash, but an incorrect
> result (as said on PR#30484).
On PPC, the solution is to use "divo."  followed by an unlikely
conditional branch to out of line code to handle the corner cases.
The question is: what do we do in the case of a divide by zero on PPC?
Are there other architectures that do not trap?
 sadly gcc does not know about the overflow flag and (unless it has
improved greatly since the last time I checked on a small ADA program)
generates bloated and slow code when checking for overflow. This is not
specific to the rs6000 backend.