r18252 - x*x -> sqr(x) optimization (Was: Re: [fpc-devel] ARM native compilation (Toshiba AC100))
Jonas Maebe
jonas.maebe at elis.ugent.be
Fri Sep 23 10:52:17 CEST 2011
On 23 Sep 2011, at 01:21, Thomas Schatzl wrote:
> I found that 18251 is okay, but the newer ones are not when
> compiling with -O2. It seems that one optimization that transforms
> expressions of type x*x into sqr(x) for floats in 18252 (and 18257
> and 18263 that seem to have been fixing issues with the original
> implementation) causes troubles. With that in place, a compiler
> cycle hangs at ppc2 compiling something (processing real2str.inc
> from the system unit fyi).
>
> Florian, Jonas, any ideas? Seems to be related to softfloat code
> generation because apparently other platforms are fine.
The optimization changes x*x into sqr(x). For ARM/softfloat, the
compiler calls the fpc_sqr_real() helper from the RTL.
The code of this helper is:
function fpc_sqr_real(d : ValReal) : ValReal;compilerproc;{$ifdef
MATHINLINE}inline;{$endif}
begin
result := d*d;
end;
So yes, this clearly puts the compiler into an endless loop. I'm not
sure what would be a clean fix for this (other than completely
disabling the transformation; does it improve the generated code that
much beyond what CSE can achieve?)
Jonas
More information about the fpc-devel
mailing list