From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) by sourceware.org (Postfix) with ESMTPS id AD25D3857351 for ; Mon, 24 Oct 2022 07:34:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AD25D3857351 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x52e.google.com with SMTP id v27so5639830eda.1 for ; Mon, 24 Oct 2022 00:34:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=V2tuephZXn6FlJkL+XWUliTZd62GxhYwWuiwOBToAiA=; b=IlcZe6bM7O9CNTS6mbS3YhP1vd5050T3b6o1CwCrBP78Ynjc7Du2ua/K5Pw7YVH5Ok QwS8WcljAK+lk4neD1E/yMLB51jXfqEvuQwPZK93ab+f4QznoUi2zyOK7O3DQdekIAaV zzRGGgpJ88Pako0LYhV+cs+5HzQYvaZsmnvp+TyD8dlwgPwugoRP678rNEpFxbz4EY+5 9ih+auJl9CAmYoyI0EAD3Rg80zwM2SvSJLX9LgMuysG8m/oEXXj7eiGuBIRIg6BZIaC8 tg5r0c9LEG/DeNyoU9splpmoOdxt/cwq6IDsf3L47ZJaq/cUmTy+7OA5TYAqF1ghv3lB +KRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=V2tuephZXn6FlJkL+XWUliTZd62GxhYwWuiwOBToAiA=; b=PrbDwtgDMbehyB7ZheuZTNGdlp3GOMlly6zzF/lYLERq6+HnpdvQOa4pyMpvGdGDWZ JmuAfghh+zIa9V9E6epj0wjT8B2U0GdBSCAZV6pB9Lr7ZUgBeC9FzjTMXVj9gtHPJl1Z mXtZUm6fNAhlKGR2S7bm432H5HoFqQBAs0cOZiW84h5f7oVpGG0y8j2GE0RK8v7agNP/ gr1E9FOsLov5n4upshZJx8hFXm2uIXlSB69nSUoQSOB5GzhEKAmKHGQQPpzanwyat3pE LjG1QxsQWHS+bAgVobOm1sHkdtnbxn2aqTJVS5Y2/NSSOnWTUfCDpoHr44QuK8cqXoLv AZZQ== X-Gm-Message-State: ACrzQf0cB7t4Yl8Jwv93KIlDShekKCM2cXylsnI2VY1CZ2cvWhn+Nabu ojZ4razc2aR2xSuOyXc6shxPjjQXGLqcqALtZNg= X-Google-Smtp-Source: AMsMyM44V/DTXnk60k1nWN0+skaNWKg5WT0094yj1wvmnaO2s8CFj3qHAoGdVWQspaXfNqlHsfFrwFpJSZb/K5yvYa0= X-Received: by 2002:aa7:d8c4:0:b0:461:8d31:41fc with SMTP id k4-20020aa7d8c4000000b004618d3141fcmr8517789eds.202.1666596878399; Mon, 24 Oct 2022 00:34:38 -0700 (PDT) MIME-Version: 1.0 References: <20221023145633.501586-1-aldyh@redhat.com> In-Reply-To: <20221023145633.501586-1-aldyh@redhat.com> From: Richard Biener Date: Mon, 24 Oct 2022 09:34:26 +0200 Message-ID: Subject: Re: [PATCH] [PR tree-optimization/107365] Check HONOR_NANS instead of flag_finite_math_only in frange:verify_range. To: Aldy Hernandez Cc: GCC patches , Jakub Jelinek Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Sun, Oct 23, 2022 at 4:57 PM Aldy Hernandez via Gcc-patches wrote: > > [Jakub and other FP experts, would this be OK, or am I missing > something?] > > Vax does not seem to have !flag_finite_math_only, but float_type_node > does not HONOR_NANS. The check in frange::verify_range dependend on > flag_finite_math_only, which is technically not correct since > frange::set_varying() checks HONOR_NANS instead of > flag_finite_math_only. > > I'm actually getting tired of flag_finite_math_only and > !flag_finite_math_only discrepancies in the selftests (Vax and rx-elf > come to mind). I think we should just test both alternatives in the > selftests as in this patch. > > We could also check flag_finite_math_only=0 with a float_type_node > that does not HONOR_NANs, but I have no idea how to twiddle > FLOAT_MODE_FORMAT temporarily, and that may be over thinking it. > > How does this look? OK. As said elsewhere checking flag_* is never correct for any of the FP type features, always use HONOR_*. Thanks, Richard. > PR tree-optimization/107365 > > gcc/ChangeLog: > > * value-range.cc (frange::verify_range): Predicate NAN check in > VARYING range on HONOR_NANS instead of flag_finite_math_only. > (range_tests_floats): Same. > (range_tests_floats_various): New. > (range_tests): Call range_tests_floats_various. > --- > gcc/value-range.cc | 33 +++++++++++++++++++++++++-------- > 1 file changed, 25 insertions(+), 8 deletions(-) > > diff --git a/gcc/value-range.cc b/gcc/value-range.cc > index d779e9819e2..d8ee6ec0d0f 100644 > --- a/gcc/value-range.cc > +++ b/gcc/value-range.cc > @@ -720,13 +720,13 @@ frange::verify_range () > gcc_checking_assert (!m_type); > return; > case VR_VARYING: > - if (flag_finite_math_only) > - gcc_checking_assert (!m_pos_nan && !m_neg_nan); > - else > - gcc_checking_assert (m_pos_nan && m_neg_nan); > gcc_checking_assert (m_type); > gcc_checking_assert (frange_val_is_min (m_min, m_type)); > gcc_checking_assert (frange_val_is_max (m_max, m_type)); > + if (HONOR_NANS (m_type)) > + gcc_checking_assert (m_pos_nan && m_neg_nan); > + else > + gcc_checking_assert (!m_pos_nan && !m_neg_nan); > return; > case VR_RANGE: > gcc_checking_assert (m_type); > @@ -3957,10 +3957,9 @@ range_tests_floats () > // A range of [-INF,+INF] is actually VARYING if no other properties > // are set. > r0 = frange_float ("-Inf", "+Inf"); > - if (r0.maybe_isnan ()) > - ASSERT_TRUE (r0.varying_p ()); > + ASSERT_TRUE (r0.varying_p ()); > // ...unless it has some special property... > - if (!flag_finite_math_only) > + if (HONOR_NANS (r0.type ())) > { > r0.clear_nan (); > ASSERT_FALSE (r0.varying_p ()); > @@ -4041,6 +4040,24 @@ range_tests_floats () > } > } > > +// Run floating range tests for various combinations of NAN and INF > +// support. > + > +static void > +range_tests_floats_various () > +{ > + int save_finite_math_only = flag_finite_math_only; > + > + // Test -ffinite-math-only. > + flag_finite_math_only = 1; > + range_tests_floats (); > + // Test -fno-finite-math-only. > + flag_finite_math_only = 0; > + range_tests_floats (); > + > + flag_finite_math_only = save_finite_math_only; > +} > + > void > range_tests () > { > @@ -4049,7 +4066,7 @@ range_tests () > range_tests_int_range_max (); > range_tests_strict_enum (); > range_tests_nonzero_bits (); > - range_tests_floats (); > + range_tests_floats_various (); > range_tests_misc (); > } > > -- > 2.37.3 >