From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id 9F2D7383666C; Thu, 10 Nov 2022 14:19:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9F2D7383666C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1668089998; bh=1xrhl+vPtpBpHI8d1HbbsETqY760uNSLWajP0qALbnQ=; h=From:To:Subject:Date:From; b=RNU4jOX7kZGC+Z/Id2TL64c8GS0UpUnJTmRvyEwRD+l8stP0K8M1klWHl7ygpznxY w552nYjuwjQleg56O4idx4eb/Y8ITLQ1zHMLkixvw72OVNL1HGRFKXQlXP+bm9i5vE Sqf/dWgRWKjSU+ukYl9K4gKQRPilkZXRnBTOca3I= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-3879] better PHI copy propagation for forwprop X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/master X-Git-Oldrev: 2f6cb9c51a933de19cd88f4c9180ac9cf5093522 X-Git-Newrev: f1b76811f2c3773e8cabcc07932bf13e82e264db Message-Id: <20221110141958.9F2D7383666C@sourceware.org> Date: Thu, 10 Nov 2022 14:19:58 +0000 (GMT) List-Id: https://gcc.gnu.org/g:f1b76811f2c3773e8cabcc07932bf13e82e264db commit r13-3879-gf1b76811f2c3773e8cabcc07932bf13e82e264db Author: Richard Biener Date: Thu Nov 10 15:02:37 2022 +0100 better PHI copy propagation for forwprop We can handle _1 = PHI <_1, _2> as a copy. PR tree-optimization/84646 * tree-ssa-forwprop.cc (pass_forwprop::execute): Improve copy propagation across PHIs. Diff: --- gcc/tree-ssa-forwprop.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index 4b693ef095c..7c7942600ef 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -3384,7 +3384,12 @@ pass_forwprop::execute (function *fun) FOR_EACH_PHI_ARG (use_p, phi, it, SSA_OP_USE) { tree use = USE_FROM_PTR (use_p); - if (! first) + if (use == res) + /* The PHI result can also appear on a backedge, if so + we can ignore this case for the purpose of determining + the singular value. */ + ; + else if (! first) first = use; else if (! operand_equal_p (first, use, 0)) {