This seems like a compiler bug so I am hoping it will be fixed, or is
already fixed in a later release.  In fact, I know some users are using
the Intel compiler, and we are not hearing reports of regression
failures, so I am hoping the release with this bug is not widely used.

---------------------------------------------------------------------------

Jeremy Drake wrote:
> Should also warn anyone who tries this that the regression tests for
> float4 and float8 fail under normal optimization flags.  I managed to
> track it down, and apparently some floating point optimizations (seemingly
> relating to SSE) cause comparisons involving NaN to give non-standard
> results.  This is worked around in float[48]cmp by explicitly checking
> isnan.  The issue I encountered was when dividing by NaN.  float[48]div do
> a check that if the divisor == 0.0, then a division by zero error is
> raised.  With the non-standard behavior, the comparison NaN == 0 is true,
> and so dividing by NaN results in a division by zero error rather than the
> expected result (NaN).
> 
> The workaround is to give the -mp1 flag to the compiler, which rectifies
> the behavior.
> 
> I do not know if this error is important enough to insert the option if
> the check for the Intel compiler succeeds.
> 
> The rest of this is an irrelevant but (imho) interesting detailed
> description of why the code generated by the compiler breaks, and why the
> -mp1 flag causes it to start working.
> 
> The exact cause of the nonstandard behavior is an interesting side-effect
> of the COMISD instruction, in that if the comparison is unordered, all
> three of the ZF, CF, and PF are set to 1.  The optimization results in
> assembly which looks like (inserted constants instead of registers for
> readability)
> 
> comisd 0, NaN
> je equal
> ; false
> equal:
> ; true
> 
> The use of the -mp1 flag results in code that checks the parity flag,
> which when set indicates an unordered result, like this:
> 
> comisd 0, NaN
> jp nequal
> je equal
> nequal:
> ; false
> equal:
> ; true
> 
> 
> 
> On Fri, 21 Apr 2006, Bruce Momjian wrote:
> 
> >
> > Comment added and patch applied.  Thanks.
> >
> > ---------------------------------------------------------------------------
> >
> >
> > Jeremy Drake wrote:
> > > This patch makes configure check for the __INTEL_COMPILER define (which is
> > > the recommended way to detect the intel compiler) before adding the extra
> > > CFLAGS if it thinks the compiler is GCC.  I am not an autoconf hacker, so
> > > I may have done it wrong or something, but it appears to work for me (ICC
> > > 9.0.032 on gentoo i686 with latest packages).
> 
> 
> -- 
> I tried the clone syscall on me, but it didn't work.
>       -- Mike Neuffer trying to fix a serious time problem
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
>        choose an index scan if your joining column's datatypes do not
>        match
> 

-- 
  Bruce Momjian   http://candle.pha.pa.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
       subscribe-nomail command to [EMAIL PROTECTED] so that your
       message can get through to the mailing list cleanly

Reply via email to