Message ID | 20220801061540.229684-1-aldyh@redhat.com |
---|---|
State | New, archived |
Headers |
Return-Path: <gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6a10:b5d6:b0:2b9:3548:2db5 with SMTP id v22csp2149053pxt; Sun, 31 Jul 2022 23:17:15 -0700 (PDT) X-Google-Smtp-Source: AA6agR52eqZo5Gt5AjzZif+IFfCyDoI/zfIJEHRQME0EiLy3QNjodDsRoRo9wSv2WIRZUKypoNbc X-Received: by 2002:a50:fc85:0:b0:43d:2284:1ea5 with SMTP id f5-20020a50fc85000000b0043d22841ea5mr13172615edq.105.1659334635547; Sun, 31 Jul 2022 23:17:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1659334635; cv=none; d=google.com; s=arc-20160816; b=wmAZ818vKZ3iqGNlIQVxMXHEjNi1mf6AQwHkpXJDfAN8x8SFWWId7zVRxvYwLMh7xa dLibtLos0bPl34wovhxkKioSqX+ZTva5Ab/qJE6ycCPChZShj/6PIPwsD+qMJJ3SIj0+ rCgZNAXR2MGQGappbm1geJeBqitMLKSuUs8zYb0gFhPZNp/bl9LJakbBcyvlAbOnTQ/N LerW+cuWwIpHxqrvEKA1iyl3VcukITaS+N0idm89P0tF+XDCATqdiS5yNV+jiyw8n6lQ wvRs6wLYWiT6TQIbm3ZViYhf53qsvxLmT+MOPKvRZF4y0S0wAbSJtBEMMa0gHz52YOGC kp5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:to :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=lAzDFg4csQXQ3bAOaK6awcorr0T3e5LiyjNons4EYqc=; b=H7B6sF3ps/UGmAHSUuXWWN2tJtxKXBaIKurbbpH0xnbKDtz2FuZerq7Nt50CqTqVGv 3OjO6wRh5b4mNN2ngoOW2GPytjgRUJJ44PjZCwmyESGN5LsYxxqKsBOPkKQKHyuOXhTY RmrpdpggHOBho2MXIG46aO8llkP2/ygX6mmvJRzal5w8HZ98ySrZpfzGjVwhRn2t92hq 47rnhagBAmyq6gjk0tWTSdGvKZxP8QfY12JCkKo5kKqj0I5slhF6hf+ce9iaP2qU5XTN H26zEPgJZbaZa+n09XqRnThqnVDKt1WL4ew+mvVR7n4nOFWEN2ySCAvrNYTmOcyhlSVI A0fg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vM0lw5P9; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id a6-20020a1709063a4600b007111f8df172si9983683ejf.271.2022.07.31.23.17.15 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 31 Jul 2022 23:17:15 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vM0lw5P9; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0D8CC3846473 for <ouuuleilei@gmail.com>; Mon, 1 Aug 2022 06:16:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0D8CC3846473 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1659334598; bh=lAzDFg4csQXQ3bAOaK6awcorr0T3e5LiyjNons4EYqc=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=vM0lw5P9ASDK5Yqi/urFCG6kE6Vug9cSzcUAHd5WiDXbJwxVaVJQiteij/t9MIMq5 vmyjd1SwiRYCU4jWdHGb3ou7FmvDUItpVfDSCbrKSxbMcWIYPpRqiq0XlC+lbODQWE hxoj3dHmSdUMA2R+tDJpr8uF4HL6t9Iaj0nw87cg= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id D641F3858422 for <gcc-patches@gcc.gnu.org>; Mon, 1 Aug 2022 06:15:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D641F3858422 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-674-En5gvD-qPDmO8TJ4DJK3EQ-1; Mon, 01 Aug 2022 02:15:51 -0400 X-MC-Unique: En5gvD-qPDmO8TJ4DJK3EQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 505501C1F1E1 for <gcc-patches@gcc.gnu.org>; Mon, 1 Aug 2022 06:15:51 +0000 (UTC) Received: from abulafia.quesejoda.com (unknown [10.39.192.163]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E169B909FE; Mon, 1 Aug 2022 06:15:50 +0000 (UTC) Received: from abulafia.quesejoda.com (localhost [127.0.0.1]) by abulafia.quesejoda.com (8.17.1/8.17.1) with ESMTPS id 2716Fi9E229702 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 1 Aug 2022 08:15:44 +0200 Received: (from aldyh@localhost) by abulafia.quesejoda.com (8.17.1/8.17.1/Submit) id 2716FhWs229701; Mon, 1 Aug 2022 08:15:43 +0200 To: GCC patches <gcc-patches@gcc.gnu.org> Subject: [COMMITTED] Make irange dependency explicit for range_of_ssa_name_with_loop_info. Date: Mon, 1 Aug 2022 08:15:38 +0200 Message-Id: <20220801061540.229684-1-aldyh@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list <gcc-patches.gcc.gnu.org> List-Unsubscribe: <https://gcc.gnu.org/mailman/options/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe> List-Archive: <https://gcc.gnu.org/pipermail/gcc-patches/> List-Post: <mailto:gcc-patches@gcc.gnu.org> List-Help: <mailto:gcc-patches-request@gcc.gnu.org?subject=help> List-Subscribe: <https://gcc.gnu.org/mailman/listinfo/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe> From: Aldy Hernandez via Gcc-patches <gcc-patches@gcc.gnu.org> Reply-To: Aldy Hernandez <aldyh@redhat.com> Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" <gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org> X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1739938474988915612?= X-GMAIL-MSGID: =?utf-8?q?1739938474988915612?= |
Series |
[COMMITTED] Make irange dependency explicit for range_of_ssa_name_with_loop_info.
|
|
Commit Message
Aldy Hernandez
Aug. 1, 2022, 6:15 a.m. UTC
Even though ranger is type agnostic, SCEV seems to only work with integers. This patch removes some FIXME notes making it explicit that bounds_of_var_in_loop only works with iranges. Tested on x86-64 Linux. gcc/ChangeLog: * gimple-range-fold.cc (fold_using_range::range_of_phi): Only query SCEV for integers. (fold_using_range::range_of_ssa_name_with_loop_info): Remove irange check. --- gcc/gimple-range-fold.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
Comments
On Mon, Aug 1, 2022 at 8:17 AM Aldy Hernandez via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > Even though ranger is type agnostic, SCEV seems to only work with > integers. This patch removes some FIXME notes making it explicit that > bounds_of_var_in_loop only works with iranges. SCEV also handles floats, where do you see this failing? Yes, support is somewhat limited, but still. > Tested on x86-64 Linux. > > gcc/ChangeLog: > > * gimple-range-fold.cc (fold_using_range::range_of_phi): Only > query SCEV for integers. > (fold_using_range::range_of_ssa_name_with_loop_info): Remove > irange check. > --- > gcc/gimple-range-fold.cc | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc > index 6f907df5bf5..7665c954f2b 100644 > --- a/gcc/gimple-range-fold.cc > +++ b/gcc/gimple-range-fold.cc > @@ -853,12 +853,14 @@ fold_using_range::range_of_phi (vrange &r, gphi *phi, fur_source &src) > } > > // If SCEV is available, query if this PHI has any knonwn values. > - if (scev_initialized_p () && !POINTER_TYPE_P (TREE_TYPE (phi_def))) > + if (scev_initialized_p () > + && !POINTER_TYPE_P (TREE_TYPE (phi_def)) > + && irange::supports_p (TREE_TYPE (phi_def))) > { > - value_range loop_range; > class loop *l = loop_containing_stmt (phi); > if (l && loop_outer (l)) > { > + int_range_max loop_range; > range_of_ssa_name_with_loop_info (loop_range, phi_def, l, phi, src); > if (!loop_range.varying_p ()) > { > @@ -1337,9 +1339,7 @@ fold_using_range::range_of_ssa_name_with_loop_info (irange &r, tree name, > { > gcc_checking_assert (TREE_CODE (name) == SSA_NAME); > tree min, max, type = TREE_TYPE (name); > - // FIXME: Remove the supports_p() once all this can handle floats, etc. > - if (irange::supports_p (type) > - && bounds_of_var_in_loop (&min, &max, src.query (), l, phi, name)) > + if (bounds_of_var_in_loop (&min, &max, src.query (), l, phi, name)) > { > if (TREE_CODE (min) != INTEGER_CST) > { > -- > 2.37.1 >
On Tue, Aug 2, 2022 at 9:19 AM Richard Biener <richard.guenther@gmail.com> wrote: > > On Mon, Aug 1, 2022 at 8:17 AM Aldy Hernandez via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > Even though ranger is type agnostic, SCEV seems to only work with > > integers. This patch removes some FIXME notes making it explicit that > > bounds_of_var_in_loop only works with iranges. > > SCEV also handles floats, where do you see this failing? Yes, support is > somewhat limited, but still. Oh, it does? We could convert range_of_ssa_name_with_loop_info to the type agnostic vrange if so... (see attached untested patch). I'm looking at the testcase for 24021 with the attached patch, and bounds_of_var_in_loop() is returning false because SCEV couldn't figure out the direction of the loop: dir = scev_direction (chrec); if (/* Do not adjust ranges if we do not know whether the iv increases or decreases, ... */ dir == EV_DIR_UNKNOWN /* ... or if it may wrap. */ || scev_probably_wraps_p (NULL_TREE, init, step, stmt, get_chrec_loop (chrec), true)) return false; The chrec in question is rather simple... a loop increasing by 0.01: (gdb) p debug(chrec) {1.00000000000000002081668171172168513294309377670288085938e-2, +, 1.00000001490116119384765625e-1}_1 I also see that bounds_of_var_in_loop() calls niter's max_loop_iterations(), which if I understand things correctly, bails at several points if the step is not integral. I'd be happy to adapt our code, if SCEV can give me useful information. Aldy
On Tue, Aug 2, 2022 at 1:41 PM Aldy Hernandez <aldyh@redhat.com> wrote: > > On Tue, Aug 2, 2022 at 9:19 AM Richard Biener > <richard.guenther@gmail.com> wrote: > > > > On Mon, Aug 1, 2022 at 8:17 AM Aldy Hernandez via Gcc-patches > > <gcc-patches@gcc.gnu.org> wrote: > > > > > > Even though ranger is type agnostic, SCEV seems to only work with > > > integers. This patch removes some FIXME notes making it explicit that > > > bounds_of_var_in_loop only works with iranges. > > > > SCEV also handles floats, where do you see this failing? Yes, support is > > somewhat limited, but still. > > Oh, it does? We could convert range_of_ssa_name_with_loop_info to > the type agnostic vrange if so... (see attached untested patch). > > I'm looking at the testcase for 24021 with the attached patch, and > bounds_of_var_in_loop() is returning false because SCEV couldn't > figure out the direction of the loop: > > dir = scev_direction (chrec); > if (/* Do not adjust ranges if we do not know whether the iv increases > or decreases, ... */ > dir == EV_DIR_UNKNOWN > /* ... or if it may wrap. */ > || scev_probably_wraps_p (NULL_TREE, init, step, stmt, > get_chrec_loop (chrec), true)) > return false; > > The chrec in question is rather simple... a loop increasing by 0.01: > > (gdb) p debug(chrec) > {1.00000000000000002081668171172168513294309377670288085938e-2, +, > 1.00000001490116119384765625e-1}_1 Well, yeah - I meant it "supports" floats in that it can analyze the CHRECs (you quote that) and it shouldn't ICE anywhere. But of course some things may return "I don't know" when not implemented. Like scev_direction which has step = CHREC_RIGHT (chrec); if (TREE_CODE (step) != INTEGER_CST) return EV_DIR_UNKNOWN; if (tree_int_cst_sign_bit (step)) return EV_DIR_DECREASES; else return EV_DIR_GROWS; so it lacks support for REAL_CST step. Would be interesting to see what happens with a loop with -0.0 "increment" and honoring signed zeros. That said, inspecting the sign bit of a REAL_CST and handling zero (of any sign) as EV_DIR_UNKNOWN would probably work. > I also see that bounds_of_var_in_loop() calls niter's > max_loop_iterations(), which if I understand things correctly, bails > at several points if the step is not integral. Yes, a lot of code is "simplified" by not considering FP IVs. But it "works" in terms of "it doesn't ICE" ;) > I'd be happy to adapt our code, if SCEV can give me useful information. > > Aldy
On Tue, Aug 2, 2022 at 2:07 PM Richard Biener <richard.guenther@gmail.com> wrote: > > On Tue, Aug 2, 2022 at 1:41 PM Aldy Hernandez <aldyh@redhat.com> wrote: > > > > On Tue, Aug 2, 2022 at 9:19 AM Richard Biener > > <richard.guenther@gmail.com> wrote: > > > > > > On Mon, Aug 1, 2022 at 8:17 AM Aldy Hernandez via Gcc-patches > > > <gcc-patches@gcc.gnu.org> wrote: > > > > > > > > Even though ranger is type agnostic, SCEV seems to only work with > > > > integers. This patch removes some FIXME notes making it explicit that > > > > bounds_of_var_in_loop only works with iranges. > > > > > > SCEV also handles floats, where do you see this failing? Yes, support is > > > somewhat limited, but still. > > > > Oh, it does? We could convert range_of_ssa_name_with_loop_info to > > the type agnostic vrange if so... (see attached untested patch). > > > > I'm looking at the testcase for 24021 with the attached patch, and > > bounds_of_var_in_loop() is returning false because SCEV couldn't > > figure out the direction of the loop: > > > > dir = scev_direction (chrec); > > if (/* Do not adjust ranges if we do not know whether the iv increases > > or decreases, ... */ > > dir == EV_DIR_UNKNOWN > > /* ... or if it may wrap. */ > > || scev_probably_wraps_p (NULL_TREE, init, step, stmt, > > get_chrec_loop (chrec), true)) > > return false; > > > > The chrec in question is rather simple... a loop increasing by 0.01: > > > > (gdb) p debug(chrec) > > {1.00000000000000002081668171172168513294309377670288085938e-2, +, > > 1.00000001490116119384765625e-1}_1 > > Well, yeah - I meant it "supports" floats in that it can analyze the CHRECs (you > quote that) and it shouldn't ICE anywhere. But of course some things may > return "I don't know" when not implemented. Like scev_direction which has > > step = CHREC_RIGHT (chrec); > if (TREE_CODE (step) != INTEGER_CST) > return EV_DIR_UNKNOWN; > > if (tree_int_cst_sign_bit (step)) > return EV_DIR_DECREASES; > else > return EV_DIR_GROWS; > > so it lacks support for REAL_CST step. Would be interesting to see what happens > with a loop with -0.0 "increment" and honoring signed zeros. That said, > inspecting the sign bit of a REAL_CST and handling zero (of any sign) as > EV_DIR_UNKNOWN would probably work. > > > I also see that bounds_of_var_in_loop() calls niter's > > max_loop_iterations(), which if I understand things correctly, bails > > at several points if the step is not integral. > > Yes, a lot of code is "simplified" by not considering FP IVs. But it "works" > in terms of "it doesn't ICE" ;) That's a very generous interpretation of "works" :-). In that case I will make our code type agnostic, with the previously attached patch (after testing). Then whenever SCEV and bounds_of_var_in_loop (which also seems to be integer centric) support floats, everything will just work. Thanks. Aldy
On Tue, Aug 2, 2022 at 2:11 PM Aldy Hernandez <aldyh@redhat.com> wrote: > > On Tue, Aug 2, 2022 at 2:07 PM Richard Biener > <richard.guenther@gmail.com> wrote: > > > > On Tue, Aug 2, 2022 at 1:41 PM Aldy Hernandez <aldyh@redhat.com> wrote: > > > > > > On Tue, Aug 2, 2022 at 9:19 AM Richard Biener > > > <richard.guenther@gmail.com> wrote: > > > > > > > > On Mon, Aug 1, 2022 at 8:17 AM Aldy Hernandez via Gcc-patches > > > > <gcc-patches@gcc.gnu.org> wrote: > > > > > > > > > > Even though ranger is type agnostic, SCEV seems to only work with > > > > > integers. This patch removes some FIXME notes making it explicit that > > > > > bounds_of_var_in_loop only works with iranges. > > > > > > > > SCEV also handles floats, where do you see this failing? Yes, support is > > > > somewhat limited, but still. > > > > > > Oh, it does? We could convert range_of_ssa_name_with_loop_info to > > > the type agnostic vrange if so... (see attached untested patch). > > > > > > I'm looking at the testcase for 24021 with the attached patch, and > > > bounds_of_var_in_loop() is returning false because SCEV couldn't > > > figure out the direction of the loop: > > > > > > dir = scev_direction (chrec); > > > if (/* Do not adjust ranges if we do not know whether the iv increases > > > or decreases, ... */ > > > dir == EV_DIR_UNKNOWN > > > /* ... or if it may wrap. */ > > > || scev_probably_wraps_p (NULL_TREE, init, step, stmt, > > > get_chrec_loop (chrec), true)) > > > return false; > > > > > > The chrec in question is rather simple... a loop increasing by 0.01: > > > > > > (gdb) p debug(chrec) > > > {1.00000000000000002081668171172168513294309377670288085938e-2, +, > > > 1.00000001490116119384765625e-1}_1 > > > > Well, yeah - I meant it "supports" floats in that it can analyze the CHRECs (you > > quote that) and it shouldn't ICE anywhere. But of course some things may > > return "I don't know" when not implemented. Like scev_direction which has > > > > step = CHREC_RIGHT (chrec); > > if (TREE_CODE (step) != INTEGER_CST) > > return EV_DIR_UNKNOWN; > > > > if (tree_int_cst_sign_bit (step)) > > return EV_DIR_DECREASES; > > else > > return EV_DIR_GROWS; > > > > so it lacks support for REAL_CST step. Would be interesting to see what happens > > with a loop with -0.0 "increment" and honoring signed zeros. That said, > > inspecting the sign bit of a REAL_CST and handling zero (of any sign) as > > EV_DIR_UNKNOWN would probably work. > > > > > I also see that bounds_of_var_in_loop() calls niter's > > > max_loop_iterations(), which if I understand things correctly, bails > > > at several points if the step is not integral. > > > > Yes, a lot of code is "simplified" by not considering FP IVs. But it "works" > > in terms of "it doesn't ICE" ;) > > That's a very generous interpretation of "works" :-). ;) > In that case I will make our code type agnostic, with the previously > attached patch (after testing). Then whenever SCEV and > bounds_of_var_in_loop (which also seems to be integer centric) support > floats, everything will just work. Sounds good. Richard. > Thanks. > Aldy >
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc index 6f907df5bf5..7665c954f2b 100644 --- a/gcc/gimple-range-fold.cc +++ b/gcc/gimple-range-fold.cc @@ -853,12 +853,14 @@ fold_using_range::range_of_phi (vrange &r, gphi *phi, fur_source &src) } // If SCEV is available, query if this PHI has any knonwn values. - if (scev_initialized_p () && !POINTER_TYPE_P (TREE_TYPE (phi_def))) + if (scev_initialized_p () + && !POINTER_TYPE_P (TREE_TYPE (phi_def)) + && irange::supports_p (TREE_TYPE (phi_def))) { - value_range loop_range; class loop *l = loop_containing_stmt (phi); if (l && loop_outer (l)) { + int_range_max loop_range; range_of_ssa_name_with_loop_info (loop_range, phi_def, l, phi, src); if (!loop_range.varying_p ()) { @@ -1337,9 +1339,7 @@ fold_using_range::range_of_ssa_name_with_loop_info (irange &r, tree name, { gcc_checking_assert (TREE_CODE (name) == SSA_NAME); tree min, max, type = TREE_TYPE (name); - // FIXME: Remove the supports_p() once all this can handle floats, etc. - if (irange::supports_p (type) - && bounds_of_var_in_loop (&min, &max, src.query (), l, phi, name)) + if (bounds_of_var_in_loop (&min, &max, src.query (), l, phi, name)) { if (TREE_CODE (min) != INTEGER_CST) {