From patchwork Fri Jan 6 19:30:52 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Oliva X-Patchwork-Id: 134693 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 4063AB6F69 for ; Sat, 7 Jan 2012 06:31:16 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1326483077; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:Received:Received:From:To:Cc:Subject:References:Date: In-Reply-To:Message-ID:User-Agent:MIME-Version:Content-Type: Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:Sender:Delivered-To; bh=AynjP/SSAnwEB4sgezUM T5A7YfE=; b=c/ZYg+HL9q5jUHCMcUz1XMfq+xG2Vz0ypgqSfLG2/dbXlfb1sy5g yRdKJ5qtPI4aYYoXAKbXtxGGgB3hM+mROH2TV7cCXqMwEoquH6P7WpGJUGPVRibu lsmFBdEH2YKajgWB42cC85XHZbpBy1p3Nb3F6S+ahZ3+mEB6t5KOffk= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Received:Received:Received:From:To:Cc:Subject:References:Date:In-Reply-To:Message-ID:User-Agent:MIME-Version:Content-Type:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=fvyGKijdBHKfEIAf9oHMsjODtHpTQLQLGbP8hfwRuCsfeTqGzwV8M066J/7l+x hHlyY94npONraCQjGEe0wLcpdmva4jQDDFWwi+nWVeCB5sOm8V066tRPDbyW+CFp dXDUr92X0iN4zxDNo9epY/FE/DFqf3H/M0CQGIojE1yXk=; Received: (qmail 5903 invoked by alias); 6 Jan 2012 19:31:13 -0000 Received: (qmail 5894 invoked by uid 22791); 6 Jan 2012 19:31:12 -0000 X-SWARE-Spam-Status: No, hits=-5.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_HI, SPF_HELO_PASS, T_RP_MATCHES_RCVD, T_TVD_MIME_NO_HEADERS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 06 Jan 2012 19:30:59 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q06JUxNM014351 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 6 Jan 2012 14:30:59 -0500 Received: from freie (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q06JUvR3019579 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 6 Jan 2012 14:30:58 -0500 Received: from livre.localdomain (livre-to-gw.oliva.athome.lsd.ic.unicamp.br [172.31.160.19]) by freie (8.14.5/8.14.5) with ESMTP id q06JUsoZ030149; Fri, 6 Jan 2012 17:30:55 -0200 Received: from livre.localdomain (aoliva@localhost.localdomain [127.0.0.1]) by livre.localdomain (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id q06JUs18009449; Fri, 6 Jan 2012 17:30:54 -0200 Received: (from aoliva@localhost) by livre.localdomain (8.14.3/8.14.3/Submit) id q06JUr93009447; Fri, 6 Jan 2012 17:30:53 -0200 From: Alexandre Oliva To: Jakub Jelinek Cc: Richard Henderson , Richard Guenther , gcc-patches@gcc.gnu.org Subject: Re: [PATCH] Another canonical cselib_val bootstrap fix (PR bootstrap/51725) References: <20120103191457.GZ18937@tyan-ft48-01.lab.bos.redhat.com> Date: Fri, 06 Jan 2012 17:30:52 -0200 In-Reply-To: <20120103191457.GZ18937@tyan-ft48-01.lab.bos.redhat.com> (Jakub Jelinek's message of "Tue, 3 Jan 2012 20:14:57 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) MIME-Version: 1.0 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org On Jan 3, 2012, Jakub Jelinek wrote: > My previous patch apparently wasn't enough. I think we need to propagate addr_lists to the canonical value too, and I found other spots that AFAICT require or would benefit from canonical values. Regstrapped on x86_64-linux-gnu and i686-linux-gnu, also verified with gnu-CORBA.list with a ia64-linux-gnu cross. Ok to install? for gcc/ChangeLog from Alexandre Oliva PR bootstrap/51725 * cselib.c (new_elt_loc_list): Promote addr_list to canonical node. Add canonical node to containing_mem chain after the non-canonical one, even if there weren't any locs to propagate. (remove_useless_values): Keep only canonical values. (add_mem_for_addr, cselib_lookup_mem): Canonicalize addr. (cselib_invalidate_mem): Likewise. Ensure v is canonical, and canonicalize mem_chain elements that are not discarded. Index: gcc/cselib.c =================================================================== --- gcc/cselib.c.orig 2012-01-06 14:15:37.049194330 -0200 +++ gcc/cselib.c 2012-01-06 14:18:38.954548069 -0200 @@ -277,12 +277,27 @@ new_elt_loc_list (cselib_val *val, rtx l } el->next = val->locs; next = val->locs = CSELIB_VAL_PTR (loc)->locs; - if (CSELIB_VAL_PTR (loc)->next_containing_mem != NULL - && val->next_containing_mem == NULL) - { - val->next_containing_mem = first_containing_mem; - first_containing_mem = val; - } + } + + if (CSELIB_VAL_PTR (loc)->addr_list) + { + /* Bring in addr_list into canonical node. */ + struct elt_list *last = CSELIB_VAL_PTR (loc)->addr_list; + while (last->next) + last = last->next; + last->next = val->addr_list; + val->addr_list = CSELIB_VAL_PTR (loc)->addr_list; + CSELIB_VAL_PTR (loc)->addr_list = NULL; + } + + if (CSELIB_VAL_PTR (loc)->next_containing_mem != NULL + && val->next_containing_mem == NULL) + { + /* Add VAL to the containing_mem list after LOC. LOC will + be removed when we notice it doesn't contain any + MEMs. */ + val->next_containing_mem = CSELIB_VAL_PTR (loc)->next_containing_mem; + CSELIB_VAL_PTR (loc)->next_containing_mem = val; } /* Chain LOC back to VAL. */ @@ -641,7 +656,7 @@ remove_useless_values (void) p = &first_containing_mem; for (v = *p; v != &dummy_val; v = v->next_containing_mem) - if (v->locs) + if (v->locs && v == canonical_cselib_val (v)) { *p = v; p = &(*p)->next_containing_mem; @@ -1270,6 +1285,7 @@ add_mem_for_addr (cselib_val *addr_elt, { struct elt_loc_list *l; + addr_elt = canonical_cselib_val (addr_elt); mem_elt = canonical_cselib_val (mem_elt); /* Avoid duplicates. */ @@ -1318,6 +1334,7 @@ cselib_lookup_mem (rtx x, int create) if (! addr) return 0; + addr = canonical_cselib_val (addr); /* Find a value that describes a value of our mode at that address. */ for (l = addr->addr_list; l; l = l->next) if (GET_MODE (l->elt->val_rtx) == mode) @@ -2214,15 +2231,22 @@ cselib_invalidate_mem (rtx mem_rtx) /* We must have a mapping from this MEM's address to the value (E). Remove that, too. */ addr = cselib_lookup (XEXP (x, 0), VOIDmode, 0, GET_MODE (x)); + addr = canonical_cselib_val (addr); + gcc_checking_assert (v == canonical_cselib_val (v)); mem_chain = &addr->addr_list; for (;;) { - if (canonical_cselib_val ((*mem_chain)->elt) == v) + cselib_val *canon = canonical_cselib_val ((*mem_chain)->elt); + + if (canon == v) { unchain_one_elt_list (mem_chain); break; } + /* Record canonicalized elt. */ + (*mem_chain)->elt = canon; + mem_chain = &(*mem_chain)->next; }