This may be DCE. DOM uses ranger through simplify_using_ranges::fold_cond() to fold the following conditional to false, because we know x_185 is a NAN:
x_185 = __builtin_sqrtf (-1.0e+0); if (x_185 ord x_185) I believe we can do that, because there are no user observable effects. But DCE removes the sqrt which could trap: Eliminating unnecessary statements: Deleting : x_185 = __builtin_sqrtf (-1.0e+0); Is DCE allowed to remove that sqrtf call? Thanks. Aldy On Thu, Nov 17, 2022 at 5:48 PM Aldy Hernandez <al...@redhat.com> wrote: > > > > On 11/17/22 17:40, Aldy Hernandez wrote: > > To go along with whatever magic we're gonna tack along to the > > range-ops sqrt implementation, here is another revision addressing the > > VARYING issue you pointed out. > > > > A few things... > > > > Instead of going through trees, I decided to call do_mpfr_arg1 > > directly. Let's not go the wide int <-> tree rat hole in this one. > > > > The function do_mpfr_arg1 bails on +INF, so I had to handle it manually. > > > > There's a regression in gfortran.dg/ieee/ieee_6.f90, which I'm not > > sure how to handle. We are failing because we are calculating > > sqrt(-1) and expecting certain IEEE flags set. These flags aren't > > set, presumably because we folded sqrt(-1) into a NAN directly: > > > > // All negatives. > > if (real_compare (LT_EXPR, &lh_ub, &dconst0)) > > { > > real_nan (&lb, "", 0, TYPE_MODE (type)); > > ub = lb; > > maybe_nan = true; > > return; > > } > > FWIW, we could return [-0.0, +INF] +-NAN which would keep us from > eliding the sqrt, but it'd be a pity to keep the sqrt unless it's > mandated by some IEEE canon. > > Aldy