[PATCH] REG_EQUAL notes on floatlib comparison libcalls

Roger Sayle roger@eyesopen.com
Mon Oct 6 04:18:00 GMT 2003


Damn!  I posted an earlier version of the patch :<
The logic describing the UNORDERED comparison operator should have
read:

> + 	  if (comparison == UNORDERED)
> + 	    {
> + 	      rtx temp = simplify_gen_relational (NE, word_mode,
> + 						  mode, x, x);
> + 	      equiv = simplify_gen_relational (NE, word_mode,
> + 					       mode, y, y);
                                                     ^^^^
> + 	      equiv = simplify_gen_ternary (IF_THEN_ELSE, word_mode,
> + 					    word_mode, temp,
> + 					    const_true_rtx, equiv);
> + 	    }


I.e. we annotate the REG_EQUAL note with the RTL equivalent of
"(x != x) ? 1 : (y != y)", which is also "(x  != x) || (y != y)".
The typo in my earlier attempt, tested x for NaN twice ignoring
the value of y.  My apologies for any inconvenience.

Roger
--



More information about the Gcc-patches mailing list