From patchwork Tue Jun 27 13:19:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Hubicka X-Patchwork-Id: 113426 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp8190980vqr; Tue, 27 Jun 2023 06:19:57 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6QlwY34ZsUFVs2EhzFxzI0S349zbuessYDfSMJ/EhUQxnSsGBbfnyZoBRnxuUd0P/qqZtF X-Received: by 2002:a2e:9683:0:b0:2b6:9ebc:daf8 with SMTP id q3-20020a2e9683000000b002b69ebcdaf8mr4483134lji.31.1687871997527; Tue, 27 Jun 2023 06:19:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687871997; cv=none; d=google.com; s=arc-20160816; b=bpqLmIQKnj60W8Eg0YD8iRBqGvrqd9SECcrPARA6jZIxpKp07Afz+qOXVrb5LoB2HO ocehtWBKZQDmXPqi0P9mfr29OQ3dlBuSWmSdZQfEvxhZkj1aPJfPvkSzTHU42YARaNd9 teg7db8QjGUcnSLdMyciPFU1RNNfoGhWtJmphxA9rYJXGTcBgSebmpJkqZE8dZviiZqK ButEioZaY1AhOtO3QaaEDASe6QfAimCIuseWTitkdrB4KOdvOJVxmHRLpNpSCLEDZCIe oLW9svurD+BghgwsO/FIESwfp4JkbVkjb0MdbVo6s7RFjbzrCRbrnkcoZvFXIl5M4t4l xwHA== 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-disposition:mime-version:message-id:subject:to:date :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=/FmfnSjWkXmkBMHeiB3RaBSHxutVbPR67qOZAHEvlJ8=; fh=wP6QucSBdcAQobp5EVAx4+hosKlFTsk8yMLp4vwCdWI=; b=F3eRZie47rgVqQS36Pxzp0aEWVTpYOczNmwpwraapZ5ok88HgRw6eVnzRf4e9EeKch 49B1Ew60U4uXWJFObmxdL4e5IAS9RwxGlAzc0qEK1ZAgGLSPwNS1808OnQLvrdWkHnSE gsNQqnUmywvY9F8+FmFD+v4QkrMlc/s9MeAYxTbWqDjLEvQkw+11246mwU0+AkuAhH86 I1rUGKymZeOAEoCeoELRu57aYWsz7fFQTiNiAA1bnmmq7r3OQNX4zS0SN2/Qj2XWjEEf C88BFscA6/nc1bJQdKAd8XP6Z3zwE1W/KaxlMOJTOis7A/LCYQ6wz1IGhtyYyh5l0IYi T11g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=C8zhN5Dy; 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 bx14-20020a170906a1ce00b009891f47b282si4174521ejb.1012.2023.06.27.06.19.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Jun 2023 06:19:57 -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=C8zhN5Dy; 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 8DB93385800A for ; Tue, 27 Jun 2023 13:19:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8DB93385800A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687871990; bh=/FmfnSjWkXmkBMHeiB3RaBSHxutVbPR67qOZAHEvlJ8=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=C8zhN5DyW0rdxSKeLowmxrnkoNjVq7PEHY7qe2cldgvXltKBCIMqZ5pnNYMZ5m9Cz OVCd3GaQyGKFQBMYlgInbMAeYOU5P5gFV4dXkYBrct58Ipdb5vxzDVtq9eyUMYhU56 SbxDYqpRyDxL5WTobOx0ttb+5jbyamKGVSI2lGvs= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from nikam.ms.mff.cuni.cz (nikam.ms.mff.cuni.cz [195.113.20.16]) by sourceware.org (Postfix) with ESMTPS id 5A4EA3858D28 for ; Tue, 27 Jun 2023 13:19:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5A4EA3858D28 Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 1F134280FC1; Tue, 27 Jun 2023 15:19:05 +0200 (CEST) Date: Tue, 27 Jun 2023 15:19:05 +0200 To: aldyh@redhat.com, mjambor@suse.cz, gcc-patches@gcc.gnu.org, amacleod@redhat.com, jwakely@redhat.com Subject: Enable ranger for ipa-prop Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jan Hubicka via Gcc-patches From: Jan Hubicka Reply-To: Jan Hubicka Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1769862067705449313?= X-GMAIL-MSGID: =?utf-8?q?1769862067705449313?= Hi, as shown in the testcase (which would eventually be useful for optimizing std::vector's push_back), ipa-prop can use context dependent ranger queries for better value range info. Bootstrapped/regtested x86_64-linux, OK? Honza gcc/ChangeLog: PR middle-end/110377 * ipa-prop.cc (ipa_compute_jump_functions_for_edge): Add ranger parameter; use ranger instance for rnage queries. (ipa_compute_jump_functions_for_bb): Pass around ranger. (analysis_dom_walker::before_dom_children): Enable ranger. gcc/testsuite/ChangeLog: PR middle-end/110377 * gcc.dg/tree-ssa/pr110377.c: New test. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr110377.c b/gcc/testsuite/gcc.dg/tree-ssa/pr110377.c new file mode 100644 index 00000000000..cbe3441caea --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr110377.c @@ -0,0 +1,16 @@ +/* { dg-do compile */ +/* { dg-options "-O2 -fdump-ipa-fnsummary" } */ +int test3(int); +__attribute__ ((noinline)) +void test2(int a) +{ + test3(a); +} +void +test(int n) +{ + if (n > 5) + __builtin_unreachable (); + test2(n); +} +/* { dg-final { scan-tree-dump "-INF, 5-INF" "fnsummary" } } */ diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc index 41c812194ca..693d4805d93 100644 --- a/gcc/ipa-prop.cc +++ b/gcc/ipa-prop.cc @@ -2341,7 +2341,8 @@ ipa_set_jfunc_vr (ipa_jump_func *jf, const ipa_vr &vr) static void ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi, - struct cgraph_edge *cs) + struct cgraph_edge *cs, + gimple_ranger *ranger) { ipa_node_params *info = ipa_node_params_sum->get (cs->caller); ipa_edge_args *args = ipa_edge_args_sum->get_create (cs); @@ -2386,7 +2387,7 @@ ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi, if (TREE_CODE (arg) == SSA_NAME && param_type - && get_range_query (cfun)->range_of_expr (vr, arg) + && get_range_query (cfun)->range_of_expr (vr, arg, cs->call_stmt) && vr.nonzero_p ()) addr_nonzero = true; else if (tree_single_nonzero_warnv_p (arg, &strict_overflow)) @@ -2408,7 +2409,7 @@ ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi, && Value_Range::supports_type_p (param_type) && irange::supports_p (TREE_TYPE (arg)) && irange::supports_p (param_type) - && get_range_query (cfun)->range_of_expr (vr, arg) + && ranger->range_of_expr (vr, arg, cs->call_stmt) && !vr.undefined_p ()) { Value_Range resvr (vr); @@ -2517,7 +2518,8 @@ ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi, from BB. */ static void -ipa_compute_jump_functions_for_bb (struct ipa_func_body_info *fbi, basic_block bb) +ipa_compute_jump_functions_for_bb (struct ipa_func_body_info *fbi, basic_block bb, + gimple_ranger *ranger) { struct ipa_bb_info *bi = ipa_get_bb_info (fbi, bb); int i; @@ -2536,7 +2538,7 @@ ipa_compute_jump_functions_for_bb (struct ipa_func_body_info *fbi, basic_block b && !gimple_call_fnspec (cs->call_stmt).known_p ()) continue; } - ipa_compute_jump_functions_for_edge (fbi, cs); + ipa_compute_jump_functions_for_edge (fbi, cs, ranger); } } @@ -3110,19 +3112,27 @@ class analysis_dom_walker : public dom_walker { public: analysis_dom_walker (struct ipa_func_body_info *fbi) - : dom_walker (CDI_DOMINATORS), m_fbi (fbi) {} + : dom_walker (CDI_DOMINATORS), m_fbi (fbi) + { + m_ranger = enable_ranger (cfun, false); + } + ~analysis_dom_walker () + { + disable_ranger (cfun); + } edge before_dom_children (basic_block) final override; private: struct ipa_func_body_info *m_fbi; + gimple_ranger *m_ranger; }; edge analysis_dom_walker::before_dom_children (basic_block bb) { ipa_analyze_params_uses_in_bb (m_fbi, bb); - ipa_compute_jump_functions_for_bb (m_fbi, bb); + ipa_compute_jump_functions_for_bb (m_fbi, bb, m_ranger); return NULL; }