MIN/MAX should be treated similar as comparisons for trapping

While looking into moving optimizations from minmax_replacement
in phiopt to match.pd, I Noticed that min/max were considered
trapping even if -ffinite-math-only was being used. This changes
those expressions to be similar as comparisons so that they are
not considered trapping if -ffinite-math-only is on.

OK? Bootstrapped and tested with no regressions on x86_64-linux-gnu.

gcc/ChangeLog:

	* rtlanal.cc (may_trap_p_1): Treat SMIN/SMAX similar as
	COMPARISON.
	* tree-eh.cc (operation_could_trap_helper_p): Treate
	MIN_EXPR/MAX_EXPR similar as other comparisons.
This commit is contained in:
Andrew Pinski 2023-04-01 22:50:27 +00:00
parent ba9975a259
commit 5fecfed878
2 changed files with 6 additions and 0 deletions

View file

@ -3204,6 +3204,9 @@ may_trap_p_1 (const_rtx x, unsigned flags)
case LT:
case LTGT:
case COMPARE:
/* Treat min/max similar as comparisons. */
case SMIN:
case SMAX:
/* Some floating point comparisons may trap. */
if (!flag_trapping_math)
break;

View file

@ -2490,6 +2490,9 @@ operation_could_trap_helper_p (enum tree_code op,
case GT_EXPR:
case GE_EXPR:
case LTGT_EXPR:
/* MIN/MAX similar as LT/LE/GT/GE. */
case MIN_EXPR:
case MAX_EXPR:
/* Some floating point comparisons may trap. */
return honor_nans;