From patchwork Sat Jul 15 20:47:46 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Monakov X-Patchwork-Id: 788974 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3x91rC0Ggzz9s75 for ; Sun, 16 Jul 2017 06:49:12 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="ELVc8hCk"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:in-reply-to:references; q=dns; s= default; b=N+SuLKp0AU+JBw/crUuN+w4Geiht9c3wVqayrfrV2aJ+uf4glIvQm LoLGDEjiF7yMC0ZWGPPA7tnWUrksJ9tyciHIs5aooEZQI0L8GGB9cLY/0EbFR/f/ QM+coKMP6T+2QL3JfYhV5AvvIWXP869onl+P4qG448EkLXV6MZj/bE= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:in-reply-to:references; s=default; bh=ea0KE3S1mSzKC6aeIIoTANtRYEw=; b=ELVc8hCkl8UXELjWtx8g/KHgZuJo Z+Frpb4CDB5kQaSwiAQLmmoqnQ/KHO1LKaO1xfYm8+JV4J4+YFEzZc6fzL9UdiAH /+JV5V7bJLX0MxgrPvTEpzLKvyKXKuMoBXU4uhU0/nhR/CcQ3nkjX0lzyd5yYBVV 2dwzBvm1i78HgY0= Received: (qmail 19453 invoked by alias); 15 Jul 2017 20:48:55 -0000 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 Received: (qmail 115525 invoked by uid 89); 15 Jul 2017 20:48:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 spammy=Prefer X-HELO: smtp.ispras.ru Received: from bran.ispras.ru (HELO smtp.ispras.ru) (83.149.199.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 15 Jul 2017 20:48:22 +0000 Received: from monopod.intra.ispras.ru (monopod.intra.ispras.ru [10.10.3.121]) by smtp.ispras.ru (Postfix) with ESMTP id D681C60E6B for ; Sat, 15 Jul 2017 23:48:17 +0300 (MSK) From: Alexander Monakov To: gcc-patches@gcc.gnu.org Subject: [PATCH 3/6] lra-assigns.c: fix pseudo_compare_func Date: Sat, 15 Jul 2017 23:47:46 +0300 Message-Id: <20170715204749.24398-4-amonakov@ispras.ru> In-Reply-To: <20170715204749.24398-1-amonakov@ispras.ru> References: <20170715204749.24398-1-amonakov@ispras.ru> This comparator lacks anti-commutativity and can indicate A < B < A if both A and B satisfy non_spilled_static_chain_regno_p. Proceed to following tie-breakers in that case. (it looks like the code incorrectly assumes that at most one register in the array will satisfy non_spilled_static_chain_regno_p) * lra-assigns.c (pseudo_compare_func): Fix comparison step based on non_spilled_static_chain_regno_p. --- gcc/lra-assigns.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c index 42556d3..2aadeef 100644 --- a/gcc/lra-assigns.c +++ b/gcc/lra-assigns.c @@ -253,10 +253,9 @@ pseudo_compare_func (const void *v1p, const void *v2p) /* Assign hard reg to static chain pointer first pseudo when non-local goto is used. */ - if (non_spilled_static_chain_regno_p (r1)) - return -1; - else if (non_spilled_static_chain_regno_p (r2)) - return 1; + if ((diff = (non_spilled_static_chain_regno_p (r2) + - non_spilled_static_chain_regno_p (r1))) != 0) + return diff; /* Prefer to assign more frequently used registers first. */ if ((diff = lra_reg_info[r2].freq - lra_reg_info[r1].freq) != 0)