From patchwork Fri Dec 3 20:39:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andrew MacLeod X-Patchwork-Id: 48480 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F226F3858D39 for ; Fri, 3 Dec 2021 20:40:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F226F3858D39 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1638564058; bh=Gdmhvu4T2LL4WLnpq3WRjSWYHqnjx6iL/KA0tizko20=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=rsYovkgmKW4wu8Kelc0Ls2tqhhLzcd+TdSSzOFuaDpQ4+XhYkwxtVeydQVoe4DfIF XyZKOMmFUpnR+Ugw3g4yrcEyXGQtnYD5AmIGXCRH3BGk+WvbomvC2gplutCenBUUA3 dIon3za3teH5HHrJSjYVdtMHF3T7sMKjUARS1mEs= 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 9AA593858D35 for ; Fri, 3 Dec 2021 20:39:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9AA593858D35 Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-8-y1XszrfQOQ-977CHeB0Z2Q-1; Fri, 03 Dec 2021 15:39:37 -0500 X-MC-Unique: y1XszrfQOQ-977CHeB0Z2Q-1 Received: by mail-qk1-f200.google.com with SMTP id q5-20020a05620a0d8500b0045edb4779dbso4499921qkl.2 for ; Fri, 03 Dec 2021 12:39:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:cc:from:subject; bh=70fA2Te/LQ6ksyuUI96x+qSvrij/GoBb3z4UXN4tBL0=; b=HJZmZBXZekJ3RJa3mmPnLjUw0iFkOLQalvIzyyN0FutfDeN/BLLAhsBxfehCE2NX4D aIVKf3sy3iKJBScnTiJ29hPkCNaEW7IGK1WL91UMeC3+dOPCDQwrDw7gcuIRWzb2OZG9 VoNa/W/tHmi3IbXEFFCL65inKj9BKneBN1DQWppXUUPJ6C9Z+jZcyZzWRUmrDoD5AQnc dZ3taAFRLWssBi/ynMDPU/5dh/Pp0WG9I5yYliSxUIQ26pJWL5/UCzoCEQnDYL0t64kj zJwTfFMx3Zu1fyvwcsrPeUrdcAj/WGihGEJQUnSC7X34YL1ZDGu2wQk5gQjQrPRbYxBK 59VQ== X-Gm-Message-State: AOAM530/rMGNxb1siUKlHuPuW5xRcMu18hnXBdqTtbubXstRFXm4X+0O WIlZquqZbpaHwLvKElGZi/bkDAGMuEpAueUffgo1Cfu8Dby630zcHvVf1u1Unf7S9c15UEtDth5 UhYAcKw7CaycXnyYuFoLD/lA9XfS5IKqW+4IAxjX15MB2NLJrAMvfzWL3D1t752vxdEDEbg== X-Received: by 2002:a05:622a:307:: with SMTP id q7mr23312583qtw.330.1638563977163; Fri, 03 Dec 2021 12:39:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJy5XWLlEdgcLTv3BgPggXPWsjiFs/kTWNXllFmhVWp5F/Nvh+g6OMTPub2L6ugCzYz3AyW13Q== X-Received: by 2002:a05:622a:307:: with SMTP id q7mr23312563qtw.330.1638563976905; Fri, 03 Dec 2021 12:39:36 -0800 (PST) Received: from ?IPV6:2607:fea8:a262:5f00::6d7? ([2607:fea8:a262:5f00::6d7]) by smtp.gmail.com with ESMTPSA id d15sm3182144qtd.70.2021.12.03.12.39.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 03 Dec 2021 12:39:36 -0800 (PST) Message-ID: <361a454e-db25-4966-9d78-ace3022c8d93@redhat.com> Date: Fri, 3 Dec 2021 15:39:35 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 To: gcc-patches Subject: [PATCH 1/2] - Add BB option for outgoing_edge_range_p. X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-CA 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_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" has_edge_range_p() and may_recompute_p() currently only take an optional edge as a parameter.  They only indicate if a range *might* be calculated for a name, but they do not do any calculations. To determine the results, they always consult the exports for the edge->src block. the value is true or false for every edge, so its really a basic block property.  This patch makes the option available to consult directly with the BB, and calls that for the edge version. Without this, if you want to know if a basic block can affect a range, you have to pick an arbitrary outgoing edge and ask with that.. which seems a little awkward. This patch is used by the next one. Bootstrapped on  x86_64-pc-linux-gnu with no regressions. OK? Andrew From cfe5cdcace399a8e615e103022140359790b3c8b Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Fri, 3 Dec 2021 10:51:18 -0500 Subject: [PATCH 1/2] Add BB option for outgoing_edge_range_p and may_reocmpute_p. There are times we only need to know if any edge from a block can calculate a range. * gimple-range-gori.h (class gori_compute):: Add prototypes. * gimple-range-gori.cc (gori_compute::has_edge_range_p): Add alternate API for basic block. Call for edge alterantive. (gori_compute::may_recompute_p): Ditto. --- gcc/gimple-range-gori.cc | 74 +++++++++++++++++++++++++--------------- gcc/gimple-range-gori.h | 6 ++-- 2 files changed, 51 insertions(+), 29 deletions(-) diff --git a/gcc/gimple-range-gori.cc b/gcc/gimple-range-gori.cc index 0dba34b58c5..6c17267ad37 100644 --- a/gcc/gimple-range-gori.cc +++ b/gcc/gimple-range-gori.cc @@ -1166,33 +1166,12 @@ gori_compute::compute_operand1_and_operand2_range (irange &r, r.intersect (op_range); return true; } -// Return TRUE if a range can be calculated or recomputed for NAME on edge E. - -bool -gori_compute::has_edge_range_p (tree name, edge e) -{ - // Check if NAME is an export or can be recomputed. - if (e) - return is_export_p (name, e->src) || may_recompute_p (name, e); - - // If no edge is specified, check if NAME can have a range calculated - // on any edge. - return is_export_p (name) || may_recompute_p (name); -} - -// Dump what is known to GORI computes to listing file F. - -void -gori_compute::dump (FILE *f) -{ - gori_map::dump (f); -} -// Return TRUE if NAME can be recomputed on edge E. If any direct dependant -// is exported on edge E, it may change the computed value of NAME. +// Return TRUE if NAME can be recomputed on any edge exiting BB. If any +// direct dependant is exported, it may also change the computed value of NAME. bool -gori_compute::may_recompute_p (tree name, edge e) +gori_compute::may_recompute_p (tree name, basic_block bb) { tree dep1 = depend1 (name); tree dep2 = depend2 (name); @@ -1207,13 +1186,47 @@ gori_compute::may_recompute_p (tree name, edge e) return false; // If edge is specified, check if NAME can be recalculated on that edge. - if (e) - return ((is_export_p (dep1, e->src)) - || (dep2 && is_export_p (dep2, e->src))); + if (bb) + return ((is_export_p (dep1, bb)) + || (dep2 && is_export_p (dep2, bb))); return (is_export_p (dep1)) || (dep2 && is_export_p (dep2)); } +// Return TRUE if NAME can be recomputed on edge E. If any direct dependant +// is exported on edge E, it may change the computed value of NAME. + +bool +gori_compute::may_recompute_p (tree name, edge e) +{ + gcc_checking_assert (e); + return may_recompute_p (name, e->src); +} + + +// Return TRUE if a range can be calculated or recomputed for NAME on any +// edge exiting BB. + +bool +gori_compute::has_edge_range_p (tree name, basic_block bb) +{ + // Check if NAME is an export or can be recomputed. + if (bb) + return is_export_p (name, bb) || may_recompute_p (name, bb); + + // If no block is specified, check for anywhere in the IL. + return is_export_p (name) || may_recompute_p (name); +} + +// Return TRUE if a range can be calculated or recomputed for NAME on edge E. + +bool +gori_compute::has_edge_range_p (tree name, edge e) +{ + gcc_checking_assert (e); + return has_edge_range_p (name, e->src); +} + // Calculate a range on edge E and return it in R. Try to evaluate a // range for NAME on this edge. Return FALSE if this is either not a // control edge or NAME is not defined by this edge. @@ -1287,6 +1300,13 @@ gori_compute::outgoing_edge_range_p (irange &r, edge e, tree name, return false; } +// Dump what is known to GORI computes to listing file F. + +void +gori_compute::dump (FILE *f) +{ + gori_map::dump (f); +} // ------------------------------------------------------------------------ // GORI iterator. Although we have bitmap iterators, don't expose that it diff --git a/gcc/gimple-range-gori.h b/gcc/gimple-range-gori.h index ec0b95145f0..b15497e9f59 100644 --- a/gcc/gimple-range-gori.h +++ b/gcc/gimple-range-gori.h @@ -158,10 +158,12 @@ class gori_compute : public gori_map public: gori_compute (int not_executable_flag = 0); bool outgoing_edge_range_p (irange &r, edge e, tree name, range_query &q); - bool has_edge_range_p (tree name, edge e = NULL); + bool has_edge_range_p (tree name, basic_block bb = NULL); + bool has_edge_range_p (tree name, edge e); void dump (FILE *f); private: - bool may_recompute_p (tree name, edge e = NULL); + bool may_recompute_p (tree name, edge e); + bool may_recompute_p (tree name, basic_block bb = NULL); bool compute_operand_range (irange &r, gimple *stmt, const irange &lhs, tree name, class fur_source &src); bool compute_operand_range_switch (irange &r, gswitch *s, const irange &lhs, -- 2.17.2