From patchwork Tue Feb 18 15:35:49 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Bruel X-Patchwork-Id: 321533 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 9225F2C00CA for ; Wed, 19 Feb 2014 02:36:35 +1100 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:subject:references :in-reply-to:content-type; q=dns; s=default; b=FfW0Lqz0ejc8n84Jx XgwMw0ofPHUSkr2PT3VvcHq0b5RB9BcZyj1x7hdMGBVgq2jWmmcPg1QQGhUp4E2j M2JBZCoxurzml1tt8U28yHmjI6O7CvHED5kckF07XWgcYrCDVlcruOl8tWVB8lOo u6YlXJCpud8DNnjDwmh8EcApsQ= 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 :message-id:date:from:mime-version:to:subject:references :in-reply-to:content-type; s=default; bh=Dz0e7RW8iCiFJhUYACuIm8b JEVI=; b=h2ATpYCubDrf41zaFohpqfbdNzqAbj8e6heXHc1nZGBTYeJ1PXYm/QU WYBJf72CnahfVhvB0IJMBvl0Upr8lV16fxC3CN9etYt5ESUNmJGXACdc7I+UMiqd 9aalBbbq0STXikdlLxublgPKyMl7U0mAevRJZLAruvBMijlQr0Rg= Received: (qmail 30106 invoked by alias); 18 Feb 2014 15:36:27 -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 30088 invoked by uid 89); 18 Feb 2014 15:36:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00 autolearn=ham version=3.3.2 X-HELO: eu1sys200aog103.obsmtp.com Received: from eu1sys200aog103.obsmtp.com (HELO eu1sys200aog103.obsmtp.com) (207.126.144.115) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) SMTP; Tue, 18 Feb 2014 15:35:54 +0000 Received: from beta.dmz-eu.st.com ([164.129.1.35]) (using TLSv1) by eu1sys200aob103.postini.com ([207.126.147.11]) with SMTP ID DSNKUwN919YUbzD51+Q45GEjYUUjcRvnP7zN@postini.com; Tue, 18 Feb 2014 15:35:54 UTC Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id BCCB7106 for ; Tue, 18 Feb 2014 15:35:50 +0000 (GMT) Received: from Webmail-eu.st.com (safex1hubcas3.st.com [10.75.90.18]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id A4848B358 for ; Tue, 18 Feb 2014 15:35:50 +0000 (GMT) Received: from [164.129.122.166] (164.129.122.166) by webmail-eu.st.com (10.75.90.13) with Microsoft SMTP Server (TLS) id 8.3.297.1; Tue, 18 Feb 2014 16:35:49 +0100 Message-ID: <53037DD5.9020205@st.com> Date: Tue, 18 Feb 2014 16:35:49 +0100 From: Christian Bruel User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:17.0) Gecko/20130307 Thunderbird/17.0.4 MIME-Version: 1.0 To: Subject: Re: [PATCH ARM] Fix PR60264 (ICE in dwarf2out_frame_debug_adjust_cfa) References: <53037D1C.1000104@st.com> In-Reply-To: <53037D1C.1000104@st.com> X-IsSubscribed: yes probably easier to review with patch attached... 2014-02-18 Christian Bruel PR target/60264 * config/arm/arm.c (arm_emit_vfp_multi_reg_pop): Restore cfa register. (arm_expand_epilogue_apcs_frame): Set RTX_FRAME_RELATED_P. 2014-02-18 Christian Bruel PR target/60264 * gcc.target/arm/pr60264.c * gcc.target/arm/pr60264-2.c Index: gcc/config/arm/arm.c =================================================================== --- gcc/config/arm/arm.c (revision 207817) +++ gcc/config/arm/arm.c (working copy) @@ -19909,8 +19909,13 @@ arm_emit_vfp_multi_reg_pop (int first_reg, int num par = emit_insn (par); REG_NOTES (par) = dwarf; + /* Make sure cfa doesn't leave with IP_REGNUM. */ + if (TARGET_VFP && REGNO (base_reg) == IP_REGNUM) + add_reg_note (par, REG_CFA_DEF_CFA, hard_frame_pointer_rtx); + arm_add_cfa_adjust_cfa_note (par, 2 * UNITS_PER_WORD * num_regs, base_reg, base_reg); + } /* Generate and emit a pattern that will be recognized as LDRD pattern. If even @@ -27103,10 +27108,12 @@ arm_expand_epilogue_apcs_frame (bool really_return int saved_size = arm_get_vfp_saved_size (); if (saved_size > 0) { - floats_from_frame += saved_size; - emit_insn (gen_addsi3 (gen_rtx_REG (SImode, IP_REGNUM), - hard_frame_pointer_rtx, - GEN_INT (-floats_from_frame))); + rtx insn; + floats_from_frame += saved_size; + insn = emit_insn (gen_addsi3 (gen_rtx_REG (SImode, IP_REGNUM), + hard_frame_pointer_rtx, + GEN_INT (-floats_from_frame))); + RTX_FRAME_RELATED_P (insn) = 1; } /* Generate VFP register multi-pop. */ @@ -27179,11 +27186,13 @@ arm_expand_epilogue_apcs_frame (bool really_return num_regs = bit_count (saved_regs_mask); if ((offsets->outgoing_args != (1 + num_regs)) || cfun->calls_alloca) { + rtx insn; emit_insn (gen_blockage ()); /* Unwind the stack to just below the saved registers. */ - emit_insn (gen_addsi3 (stack_pointer_rtx, - hard_frame_pointer_rtx, - GEN_INT (- 4 * num_regs))); + insn = emit_insn (gen_addsi3 (stack_pointer_rtx, + hard_frame_pointer_rtx, + GEN_INT (- 4 * num_regs))); + RTX_FRAME_RELATED_P (insn) = 1; } arm_emit_multi_reg_pop (saved_regs_mask); Index: gcc/testsuite/gcc.target/arm/pr60264-2.c =================================================================== --- gcc/testsuite/gcc.target/arm/pr60264-2.c (revision 0) +++ gcc/testsuite/gcc.target/arm/pr60264-2.c (working copy) @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-mapcs -mfloat-abi=hard -g" } */ + +double bar(void); + +int foo(void) +{ + int i = bar() + bar(); + + return i; +} + Index: gcc/testsuite/gcc.target/arm/pr60264.c =================================================================== --- gcc/testsuite/gcc.target/arm/pr60264.c (revision 0) +++ gcc/testsuite/gcc.target/arm/pr60264.c (working copy) @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-mapcs -g" } */ + +void +bar() +{ + foo(); + foo(); +}