From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 97285 invoked by alias); 25 Oct 2016 12:47:48 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 97266 invoked by uid 89); 25 Oct 2016 12:47:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.3 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=braces, singleton, *iter, UD:put X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 25 Oct 2016 12:47:46 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6CD4969CC0 for ; Tue, 25 Oct 2016 12:47:45 +0000 (UTC) Received: from localhost.localdomain (vpn1-7-163.ams2.redhat.com [10.36.7.163]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u9PCliZE013549; Tue, 25 Oct 2016 08:47:44 -0400 Subject: Re: [PATCH] print_rtx: implement support for reuse IDs To: David Malcolm , "gcc-patches@gcc.gnu.org" References: <1477081644-19797-1-git-send-email-dmalcolm@redhat.com> From: Bernd Schmidt Message-ID: <547b2e53-c9d4-2f9c-08f8-1c4f2b48fdd0@redhat.com> Date: Tue, 25 Oct 2016 12:47:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 In-Reply-To: <1477081644-19797-1-git-send-email-dmalcolm@redhat.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2016-10/txt/msg02018.txt.bz2 On 10/21/2016 10:27 PM, David Malcolm wrote: > Thanks. I attemped to use those fields of recog_data, but it doesn't > seem to be exactly what's needed here. Yeah, I may have been confused. I'm not sure that just looking at SCRATCHes is the right thing either, but I think you're on the right track, and we can use something like your patch for now and extend it later if necessary. > + public: > + rtx_reuse_manager (); > + ~rtx_reuse_manager (); > + static rtx_reuse_manager *get () { return singleton; } OTOH, this setup looks a bit odd to me. Are you trying to avoid converting the print_rtx stuff to its own class, or avoid passing the reuse manager as an argument to a lot of functions? Some of this setup might not even be necessary. We have a "used" flag on rtx objects which is used to unshare RTL, and I think could also be used for a similar purpose when dumping. So, before printing, call reset_insn_used_flags on everything, then have another pass to set bits on everything that could conceivably be shared, and when you find something that already has the bit set, enter it into a table. Finally, print everything out, using the table. I think this would be somewhat simpler than adding another header file and class definition. > +void > +rtx_reuse_manager::preprocess (const_rtx x) > +{ > + subrtx_iterator::array_type array; > + FOR_EACH_SUBRTX (iter, array, x, NONCONST) > + if (uses_rtx_reuse_p (*iter)) > + { > + if (int *count = m_rtx_occurrence_count.get (*iter)) > + { > + if (*count == 1) > + { > + m_rtx_reuse_ids.put (*iter, m_next_id++); > + } > + (*count)++; > + } > + else > + m_rtx_occurrence_count.put (*iter, 1); > + } Formatting rules suggest no braces around single statements, I think a more readable version of this would be: if (uses_rtx_reuse_p (*iter)) { int *count = m_rtx_occurrence_count.get (*iter) if (count) { if ((*count)++ == 1) m_rtx_reuse_ids.put (*iter, m_next_id++); } else m_rtx_occurrence_count.put (*iter, 1); } Bernd