From patchwork Thu Jun 17 00:13:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andrew MacLeod X-Patchwork-Id: 1493130 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=gFIZPSY4; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4G52bn6LJJz9sW4 for ; Thu, 17 Jun 2021 10:14:12 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CB403385500F for ; Thu, 17 Jun 2021 00:14:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CB403385500F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1623888847; bh=t6CAA9J/mBJ0nS+uj2NN4jsrOPHDHY5wl3o2daorOiQ=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=gFIZPSY4+2VjmsOTx0NEn1BpBk88fw44bpd3Lo8Mjm6qjk+jQXgcaedigCrCLc/4h U2TTJs/DYd0RsPyqruGEh8iw55evxIXO68Y4JJbwDqC4MdTJi8Bok1Q2x9e8XxruRO 4PQmf95xBXV5fgiKdy6JkaCChHUKuxluEf/E8NAI= 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 ESMTP id E244C3857824 for ; Thu, 17 Jun 2021 00:13:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E244C3857824 Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-296-Y4yfrgw4MkiZfi_UnppIHw-1; Wed, 16 Jun 2021 20:13:23 -0400 X-MC-Unique: Y4yfrgw4MkiZfi_UnppIHw-1 Received: by mail-qv1-f72.google.com with SMTP id v19-20020a0ce1d30000b02902187ed4452eso819764qvl.6 for ; Wed, 16 Jun 2021 17:13:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:cc:from:subject:message-id:date:user-agent :mime-version:content-language; bh=t6CAA9J/mBJ0nS+uj2NN4jsrOPHDHY5wl3o2daorOiQ=; b=MZMYUrPFDglzrBBmiNYXeMgpycpaxx03Y3/z7agLQNuwo3fFQT66ZrQx/KI36n3H4A 6m0rBzKLhB0gHXK0rmwVE3eGJfXW2J5X2Te3Rn6GtP+hhh2NPPvq1recJSB4tUEvcjYo 0GNWjRan66wmJ14KAfG5Y+aYNoL6hSYSwK9Xu/L6jB6hT2JIXY330ieDWao9TvMSY3ms HEr/nISF3iDrzc8WIefhcEreFzBCC5aQ1Mz1duWvlLw1j8YEIke/kEc74lhSHpKPqM3J vy8IRwtttMAYPYI9d+G0dHgSInKxJZtacEnFojXT0S5L4E6PWS2UL5KZl8OPhJVdMswC dEFw== X-Gm-Message-State: AOAM533+s9jNj8rXvU+mZDEH/LXqfDVD2mJCFffE7KOglHNEF5ZwZvIP RyC/7PbEHlABHBa6Iaskzzk+jXtQ+pZhrltC6vp0mxI6md/WYAsmg7XFSVK5xvKK3siGJRII5zq pjKGVnKbjl9XzvPyr/Q== X-Received: by 2002:ad4:4241:: with SMTP id l1mr2959726qvq.2.1623888802661; Wed, 16 Jun 2021 17:13:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzbMoRSQTjiz/Y9TZTwUh1U5pfFyUvjWCC3NdhpT9ZB9GOfwrtJv+8unxBV6CndnWT3gKp7fA== X-Received: by 2002:ad4:4241:: with SMTP id l1mr2959715qvq.2.1623888802514; Wed, 16 Jun 2021 17:13:22 -0700 (PDT) Received: from ?IPv6:2607:fea8:a241:4600::58f9? ([2607:fea8:a241:4600::58f9]) by smtp.gmail.com with ESMTPSA id v12sm2272343qtp.41.2021.06.16.17.13.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 16 Jun 2021 17:13:21 -0700 (PDT) To: gcc-patches Subject: [PATCH] Range_on_edge in ranger_cache should return true for all ranges. Message-ID: <5d17879b-0915-74f6-cd3a-f8218bac6bc4@redhat.com> Date: Wed, 16 Jun 2021 20:13:19 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-CA X-Spam-Status: No, score=-11.7 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_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Andrew MacLeod via Gcc-patches From: Andrew MacLeod Reply-To: Andrew MacLeod Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" This patch mostly affects an internal routine in the ranger_cache.  When doing the cache rework to also be a range_query object, I implemented range_on_edge to always return a range, but only return TRUE when the range was actually changed on the edge.  This was a well intention but misguided attempt to combine has_edge_range_p() and outgoing_edge_range_p (). With the GORI engine now using the ranger_cache as a "read only"range query to access the cache and fold statements, range_on_edge returning false meant that the fold_using_range code would turn constants and other ssa_name ranges into VARYING because the value FALSE was returned. This corrects that mistake, and changes range_on_edge to return TRUE whenever any range is calculated. Bootstraps on  x86_64-pc-linux-gnu with no regressions.  Pushed. Andrew commit 8a22a10c7879109c3906e1b865c50fe236b89f41 Author: Andrew MacLeod Date: Wed Jun 16 11:14:36 2021 -0400 Range_on_edge in ranger_cache should return true for all ranges. Range_on_edge was implemented in the cache to always return a range, but only returned true when the edge actally changed the range. Return true with any range that can be calculated. * gimple-range-cache.cc (ranger_cache::range_on_edge): Always return true when a range can be calculated. * gimple-range.cc (gimple_ranger::dump_bb): Check has_edge_range_p. diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc index 37e2acb19f9..cc2b7092dad 100644 --- a/gcc/gimple-range-cache.cc +++ b/gcc/gimple-range-cache.cc @@ -978,8 +978,7 @@ ranger_cache::range_of_expr (irange &r, tree name, gimple *stmt) } -// Implement range_on_edge. Return TRUE if the edge generates a range, -// otherwise false.. but still return a range. +// Implement range_on_edge. Always return the best available range. bool ranger_cache::range_on_edge (irange &r, edge e, tree expr) @@ -989,14 +988,11 @@ ranger_cache::range_of_expr (irange &r, tree name, gimple *stmt) exit_range (r, expr, e->src); int_range_max edge_range; if (m_gori.outgoing_edge_range_p (edge_range, e, expr, *this)) - { - r.intersect (edge_range); - return true; - } + r.intersect (edge_range); + return true; } - else - get_tree_range (r, expr, NULL); - return false; + + return get_tree_range (r, expr, NULL); } diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc index 481b89b2b80..efb919f1595 100644 --- a/gcc/gimple-range.cc +++ b/gcc/gimple-range.cc @@ -1394,7 +1394,8 @@ gimple_ranger::dump_bb (FILE *f, basic_block bb) for (x = 1; x < num_ssa_names; x++) { tree name = gimple_range_ssa_p (ssa_name (x)); - if (name && m_cache.range_on_edge (range, e, name)) + if (name && gori ().has_edge_range_p (name, e) + && m_cache.range_on_edge (range, e, name)) { gimple *s = SSA_NAME_DEF_STMT (name); // Only print the range if this is the def block, or