This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [patches] Re: teach simplify_rtx to simplify unordered compares


>>>>> Jan Hubicka writes:

>> This  can be removed - or change the condition below.
 > It can not be, since the code in between may cause exception in the NAN case on
 > architectures not masking them by default and return wia longjmp.
I see:

But in that case the can look like (the extra args->unordered = 1 is
not needed) :

   args->unordered = 1;
 
   REAL_VALUE_FROM_CONST_DOUBLE (d0, args->op0);
   REAL_VALUE_FROM_CONST_DOUBLE (d1, args->op1);
   if (!REAL_VALUE_ISNAN (d0)
       && REAL_VALUE_ISNAN (d1))
     args->unordered = 0;

or even (if it's unordered, args->equal, args->op0lt and args->ob1lt
should all be false!):
   args->unordered = 1;
 
   REAL_VALUE_FROM_CONST_DOUBLE (d0, args->op0);
   REAL_VALUE_FROM_CONST_DOUBLE (d1, args->op1);
   if (REAL_VALUE_ISNAN (d0)
       || REAL_VALUE_ISNAN (d1))
     return;
   else
     args->unordered = 0;

Btw. what happens if d0 or d1 is an infinity?  In that case you also
have an unordered comparison - therefore change the if to:
   if (!REAL_VALUE_ISNAN (d0) && !REAL_VALUE_ISNAN (d1)
       && !REAL_VALUE_ISINF (d0) && !REAL_VALUE_ISINF (d1))

Andreas
-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.inka.de
    http://www.suse.de/~aj

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]