From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7879) id B63A23858433; Wed, 15 Feb 2023 10:14:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B63A23858433 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1676456050; bh=kPpw341QOeIupodzEeRdZQmk7ClC3WEySKAkcVdTim0=; h=From:To:Subject:Date:From; b=Q5QiD9yDyBD7cBGTFVI9rDXUGtsvhdV3teds7pLd2PTHntCZbQV1X11qgz+hmsEtj Bgii8OWLZVrzLbGPBHUtgtl5J09N6LTS0khWfvyb3PrcoJaDnYpcOQE45Brztw4zCB ktbHRNYiA+2yIOU9cz860cRwpM1683YDgns32Fcw= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Filip Kastl To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/pheeck/heads/sccp)] fixed bug when scc references same var multiple times X-Act-Checkin: gcc X-Git-Author: Filip Kastl X-Git-Refname: refs/users/pheeck/heads/sccp X-Git-Oldrev: 1314b83e0921108d78ba8d2c7aed1804cfd84e68 X-Git-Newrev: f2e8ddf3d4eff923162d990b05493f9b5b5f5305 Message-Id: <20230215101410.B63A23858433@sourceware.org> Date: Wed, 15 Feb 2023 10:14:10 +0000 (GMT) List-Id: https://gcc.gnu.org/g:f2e8ddf3d4eff923162d990b05493f9b5b5f5305 commit f2e8ddf3d4eff923162d990b05493f9b5b5f5305 Author: Filip Kastl Date: Mon Sep 5 11:27:39 2022 +0200 fixed bug when scc references same var multiple times Diff: --- gcc/sccp.cc | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/gcc/sccp.cc b/gcc/sccp.cc index 4dcedc293fd..1ac4474c019 100644 --- a/gcc/sccp.cc +++ b/gcc/sccp.cc @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see #include #include "gimple-pretty-print.h" #include "vec.h" +#include "hash-set.h" #include "libiberty.h" #include "print-tree.h" @@ -373,7 +374,7 @@ static void process_scc (vec scc) { vec inner = vNULL; - vec outer_ops = vNULL; + hash_set outer_ops; for (gphi *phi : scc) { @@ -400,7 +401,7 @@ process_scc (vec scc) if (!op_in_scc) { - outer_ops.safe_push (op); + outer_ops.add (op); is_inner = false; } } @@ -412,9 +413,19 @@ process_scc (vec scc) } // TODO if == 0 -> unreachable? - if (outer_ops.length () == 1) - replace_scc_by_value (scc, outer_ops.pop()); - else if (outer_ops.length () > 1) + if (outer_ops.elements () == 1) + { + /* Get the only operand in outer_ops. */ + tree outer_op; + for (tree foo : outer_ops) + { + outer_op = foo; + break; + } + + replace_scc_by_value (scc, outer_op); + } + else if (outer_ops.elements () > 1) { remove_redundant_phis (inner); }