ubsan: Don't test for NaNs if those do not exist (PR97926)

2021-03-22  Segher Boessenkool  <segher@kernel.crashing.org>

	PR target/97926
	* ubsan.c (ubsan_instrument_float_cast): Don't test for unordered if
	there are no NaNs.
This commit is contained in:
Segher Boessenkool 2021-03-19 15:02:00 +00:00
parent 00b46c00c8
commit ba16797fe6
1 changed files with 10 additions and 2 deletions

View File

@ -1890,8 +1890,16 @@ ubsan_instrument_float_cast (location_t loc, tree type, tree expr)
else
return NULL_TREE;
t = fold_build2 (UNLE_EXPR, boolean_type_node, expr, min);
tt = fold_build2 (UNGE_EXPR, boolean_type_node, expr, max);
if (HONOR_NANS (mode))
{
t = fold_build2 (UNLE_EXPR, boolean_type_node, expr, min);
tt = fold_build2 (UNGE_EXPR, boolean_type_node, expr, max);
}
else
{
t = fold_build2 (LE_EXPR, boolean_type_node, expr, min);
tt = fold_build2 (GE_EXPR, boolean_type_node, expr, max);
}
t = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, t, tt);
if (integer_zerop (t))
return NULL_TREE;