https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107569
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- __builtin_isfinite (x) is implemented as ~UNGT_EXPR<ABS_EXPR<x>, DBL_MAX>. So, if we have: _3 = ABS_EXPR <x_2(D)>; _4 = _3 u> 1.79769313486231570814527423731704356798070567525844996599e+308; _5 = ~_4; return _5; for assume function, we should start with [1,1] assumption on _5, that implies _4 [0,0], and from UNGT_EXPR being false, we should derive that _3 is [-inf, 1.79769313486231570814527423731704356798070567525844996599e+308] and not NaN (if any operand is NaN, UNGT_EXPR is true, it stands for unordered or greater). And from _3 being [-inf, 1.79769313486231570814527423731704356798070567525844996599e+308] not NaN we should derive that x_2(D) is [-1.79769313486231570814527423731704356798070567525844996599e+308, 1.79769313486231570814527423731704356798070567525844996599e+308] not NaN (aka finite number).