From patchwork Fri Feb 17 11:30:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 58520 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp834011wrn; Fri, 17 Feb 2023 03:32:17 -0800 (PST) X-Google-Smtp-Source: AK7set/NyJQXoZZ/M4vszthVAY6tIK7wRFYHZO6f1WM8QYlC0xgt3fMn62KKMA8evgfcOhkInKyl X-Received: by 2002:a17:906:edd2:b0:8b1:7e1e:7756 with SMTP id sb18-20020a170906edd200b008b17e1e7756mr2467466ejb.73.1676633537725; Fri, 17 Feb 2023 03:32:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676633537; cv=none; d=google.com; s=arc-20160816; b=a/JCqBfFMue/2Wi6fd8eYDO/z/ur+LV9zp9akN9c5cZGyWfnGqSVFmioCr/EAREHjD Qq4nmaOVWJoZRwy1nNeMoojdx7RHbAy1ZhTQD6q3/RdLXOQsTaaPh4aFn2GIHdusgVS0 69Tigol7z9/Gq60T3b5HziUDSjBZohlYpXXi3PZihrXAIn9W8YO0CF9WQTrpfeIvrLBG pp3GhTes6x0FGws9FKjBIIiq69dH6Gb+GoAXtByxweteMrCTk7Dc52+42jcjDCNztznl YKC0gx2CtZJIoHWvCjS6VkA+JXz3GZogRyLyZ82jv3qiOP6nYNiLazCCvK2ifC/NbJDT 9Nfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:sender:errors-to:reply-to:from:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :mime-version:user-agent:subject:to:date:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=T8IACNY2zACeJ+tQgKy+KY1k0jHMOnJtJFN3vHJypBQ=; b=TmXpy2+Gnm88SQp6Wnuu6tYD+dvBfKXpLUnvtYbmlQ4IJQIBmCRVpnT0yVB3HKY8B7 e7lg92XcHxQUguq/5J2vPMZO4FG+drmel/QJ1BeEtFoVKNsCWicU+ytqXp0Uz5f2ML28 s0WkzSgFilen8wwN0WrkLvrVKIEnN8yzknUa9SkjWE9rvVR5bJGYoxZAaVi9sYLYGI2J j9eYwdwVcbhAVNve3q1FOvQl1eS0GWjxK1qYBdHfeiIuXR7nhB3HN/SxCcYH8PfMU8Zi avW0XU+CmNTsi/FmttPGyTLsmhLMh3Ueh5tGEmoSwtnYfery0IdVMD9E/ZVYGvT2VI/m 6Fvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b="jV/XBrxV"; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 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. [8.43.85.97]) by mx.google.com with ESMTPS id j29-20020a170906105d00b008b1417a763dsi6306838ejj.796.2023.02.17.03.32.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Feb 2023 03:32:17 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b="jV/XBrxV"; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 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 6E2753860740 for ; Fri, 17 Feb 2023 11:31:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6E2753860740 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1676633513; bh=T8IACNY2zACeJ+tQgKy+KY1k0jHMOnJtJFN3vHJypBQ=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=jV/XBrxVk8snX0FdSSu0IWZpQVExopW77cXrRFRjwWK93KiGFxvn/pCTwUA9Z2MNy m84utpQLAIt/d8/fETQH9lQWpg8gSWIk8Jhbfd/2nYRvvSxYiRTKMVaiBIY7O+IA7F VY+Dl3f26qnJq1H8JEVksm0dwq40MyE6BKIvWCOg= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by sourceware.org (Postfix) with ESMTPS id E3AC83858C78 for ; Fri, 17 Feb 2023 11:31:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E3AC83858C78 Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out1.suse.de (Postfix) with ESMTP id C3AC722534 for ; Fri, 17 Feb 2023 11:31:00 +0000 (UTC) Received: from wotan.suse.de (wotan.suse.de [10.160.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id B7DF12C141 for ; Fri, 17 Feb 2023 11:30:59 +0000 (UTC) Date: Fri, 17 Feb 2023 11:30:59 +0000 (UTC) To: gcc-patches@gcc.gnu.org Subject: [PATCH] Fix wrong-code issue in VN User-Agent: Alpine 2.22 (LSU 394 2020-01-19) MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, MISSING_MID, 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 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: Richard Biener via Gcc-patches From: Richard Biener Reply-To: Richard Biener Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" Message-Id: <20230217113153.6E2753860740@sourceware.org> X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758077688724280605?= X-GMAIL-MSGID: =?utf-8?q?1758077688724280605?= The following fixes the wrong removed dead store discovered on the PR108657 testcase when the reported DSE issue is not fixed. The issue is we were using ssa_undefined_value_p on virtual operands which returns a result based on the real definition of the definition statement. That doesn't make sense so this patch guards the calls properly and makes sure nobody else does the same mistake. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. * tree-ssa.cc (ssa_undefined_value_p): Assert we are not called on virtual operands. * tree-ssa-sccvn.cc (vn_phi_lookup): Guard ssa_undefined_value_p calls. (vn_phi_insert): Likewise. (set_ssa_val_to): Likewise. (visit_phi): Avoid extra work with equivalences for virtual operand PHIs. --- gcc/tree-ssa-sccvn.cc | 20 +++++++++++++++----- gcc/tree-ssa.cc | 2 ++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc index 8ee77fd2b78..d5b081a309f 100644 --- a/gcc/tree-ssa-sccvn.cc +++ b/gcc/tree-ssa-sccvn.cc @@ -4824,7 +4824,8 @@ vn_phi_lookup (gimple *phi, bool backedges_varying_p) if (TREE_CODE (def) == SSA_NAME && (!backedges_varying_p || !(e->flags & EDGE_DFS_BACK))) { - if (ssa_undefined_value_p (def, false)) + if (!virtual_operand_p (def) + && ssa_undefined_value_p (def, false)) def = VN_TOP; else def = SSA_VAL (def); @@ -4877,7 +4878,8 @@ vn_phi_insert (gimple *phi, tree result, bool backedges_varying_p) if (TREE_CODE (def) == SSA_NAME && (!backedges_varying_p || !(e->flags & EDGE_DFS_BACK))) { - if (ssa_undefined_value_p (def, false)) + if (!virtual_operand_p (def) + && ssa_undefined_value_p (def, false)) def = VN_TOP; else def = SSA_VAL (def); @@ -5059,6 +5061,7 @@ set_ssa_val_to (tree from, tree to) } curr_invariant = is_gimple_min_invariant (currval); curr_undefined = (TREE_CODE (currval) == SSA_NAME + && !virtual_operand_p (currval) && ssa_undefined_value_p (currval, false)); if (currval != VN_TOP && !curr_invariant @@ -5081,6 +5084,7 @@ set_ssa_val_to (tree from, tree to) else if (currval != VN_TOP && !curr_undefined && TREE_CODE (to) == SSA_NAME + && !virtual_operand_p (to) && ssa_undefined_value_p (to, false)) { if (dump_file && (dump_flags & TDF_DETAILS)) @@ -5116,6 +5120,7 @@ set_and_exit: PR82320 for a testcase were we'd otherwise not terminate iteration. */ && !(curr_undefined && TREE_CODE (to) == SSA_NAME + && !virtual_operand_p (to) && ssa_undefined_value_p (to, false)) /* ??? For addresses involving volatile objects or types operand_equal_p does not reliably detect ADDR_EXPRs as equal. We know we are only @@ -5880,7 +5885,14 @@ visit_phi (gimple *phi, bool *inserted, bool backedges_varying_p) sameval = def; sameval_e = e; } - else if (!expressions_equal_p (def, sameval)) + else if (expressions_equal_p (def, sameval)) + sameval_e = NULL; + else if (virtual_operand_p (def)) + { + sameval = NULL_TREE; + break; + } + else { /* We know we're arriving only with invariant addresses here, try harder comparing them. We can do some caching here @@ -5957,8 +5969,6 @@ visit_phi (gimple *phi, bool *inserted, bool backedges_varying_p) sameval = NULL_TREE; break; } - else - sameval_e = NULL; } /* If the value we want to use is flowing over the backedge and we diff --git a/gcc/tree-ssa.cc b/gcc/tree-ssa.cc index 5126020d40f..a5cad2d344e 100644 --- a/gcc/tree-ssa.cc +++ b/gcc/tree-ssa.cc @@ -1320,6 +1320,8 @@ ssa_undefined_value_p (tree t, bool partial) { gimple *def_stmt; + gcc_checking_assert (!virtual_operand_p (t)); + if (ssa_defined_default_def_p (t)) return false;