From patchwork Wed Jan 30 17:24:07 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Makarov X-Patchwork-Id: 216977 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 994FD2C0040 for ; Thu, 31 Jan 2013 08:24:21 +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=1360185862; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Message-ID:Date:From:User-Agent:MIME-Version:To:Subject: Content-Type:Mailing-List:Precedence:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:Sender:Delivered-To; bh=JZXPn/5 BaXyw9bVQZVK1MALEcsY=; b=LINUM95W4yLGarm/xvmbm1Gyq+xmpdrdGULY4DR Jv6Z3PE9Kovm3XJ5zAx9x1xpn9WI5HhtxyYWadL6mkt67tCFpYARPtu1BQrMktpB ntUuVSr9chpooZQ5M6yt26HxjLftJCyiHB0evB7wcONCyAUbMKN39GVhYCCa3Nzd weN4= 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:Message-ID:Date:From:User-Agent:MIME-Version:To:Subject:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=WBSvuoV23BpYBaLwuZS7Ou5e/mKX4aqDvxLTTS9MMJap2iG2QXlqKyqnaa8B8W wRhU+QeCFb5AjY0ZsJXMUQ4nWeZtkkEE8O80yHalnP2Jfg57stxxLNEllppEVMhU mltolKE0QcM6YmFMHAZIQ0vKVa/vwi0l9jChXd9MOj85k=; Received: (qmail 4243 invoked by alias); 30 Jan 2013 17:24:15 -0000 Received: (qmail 4233 invoked by uid 22791); 30 Jan 2013 17:24:14 -0000 X-SWARE-Spam-Status: No, hits=-6.7 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, KHOP_SPAMHAUS_DROP, RCVD_IN_DNSWL_HI, RCVD_IN_HOSTKARMA_W, RP_MATCHES_RCVD, SPF_HELO_PASS 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; Wed, 30 Jan 2013 17:24:09 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r0UHO9Qb024929 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 30 Jan 2013 12:24:09 -0500 Received: from Mair.local (vpn-61-149.rdu2.redhat.com [10.10.61.149]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r0UHO80o014219 for ; Wed, 30 Jan 2013 12:24:08 -0500 Message-ID: <51095737.6070109@redhat.com> Date: Wed, 30 Jan 2013 12:24:07 -0500 From: Vladimir Makarov User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:17.0) Gecko/20130107 Thunderbird/17.0.2 MIME-Version: 1.0 To: GCC Patches Subject: patch to fix PR56144 X-IsSubscribed: yes 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 The following patch fixes http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56144 The patch was successfully bootstrapped and tested on x86/x86-64. Committed as rev. 195582. 2013-01-30 Vladimir Makarov PR rtl-optimization/56144 * lra-constraints.c (get_reload_reg): Don't reuse reload pseudo for values with side effects. 2013-01-30 Vladimir Makarov PR rtl-optimization/56144 * gcc.dg/pr56144.c: New. Index: lra-constraints.c =================================================================== --- lra-constraints.c (revision 195581) +++ lra-constraints.c (working copy) @@ -414,24 +414,26 @@ get_reload_reg (enum op_type type, enum = lra_create_new_reg_with_unique_value (mode, original, rclass, title); return true; } - for (i = 0; i < curr_insn_input_reloads_num; i++) - if (rtx_equal_p (curr_insn_input_reloads[i].input, original) - && in_class_p (curr_insn_input_reloads[i].reg, rclass, &new_class)) - { - lra_assert (! side_effects_p (original)); - *result_reg = curr_insn_input_reloads[i].reg; - regno = REGNO (*result_reg); - if (lra_dump_file != NULL) - { - fprintf (lra_dump_file, " Reuse r%d for reload ", regno); - dump_value_slim (lra_dump_file, original, 1); - } - if (new_class != lra_get_allocno_class (regno)) - change_class (regno, new_class, ", change", false); - if (lra_dump_file != NULL) - fprintf (lra_dump_file, "\n"); - return false; - } + /* Prevent reuse value of expression with side effects, + e.g. volatile memory. */ + if (! side_effects_p (original)) + for (i = 0; i < curr_insn_input_reloads_num; i++) + if (rtx_equal_p (curr_insn_input_reloads[i].input, original) + && in_class_p (curr_insn_input_reloads[i].reg, rclass, &new_class)) + { + *result_reg = curr_insn_input_reloads[i].reg; + regno = REGNO (*result_reg); + if (lra_dump_file != NULL) + { + fprintf (lra_dump_file, " Reuse r%d for reload ", regno); + dump_value_slim (lra_dump_file, original, 1); + } + if (new_class != lra_get_allocno_class (regno)) + change_class (regno, new_class, ", change", false); + if (lra_dump_file != NULL) + fprintf (lra_dump_file, "\n"); + return false; + } *result_reg = lra_create_new_reg (mode, original, rclass, title); lra_assert (curr_insn_input_reloads_num < LRA_MAX_INSN_RELOADS); curr_insn_input_reloads[curr_insn_input_reloads_num].input = original;