From patchwork Wed Dec 4 20:07:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Georg-Johann Lay X-Patchwork-Id: 102426 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BC8E43858C52 for ; Wed, 4 Dec 2024 20:08:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BC8E43858C52 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gjlay.de header.i=@gjlay.de header.a=rsa-sha256 header.s=strato-dkim-0002 header.b=GP++Yosx; dkim=pass header.d=gjlay.de header.i=@gjlay.de header.a=ed25519-sha256 header.s=strato-dkim-0003 header.b=Cd5RlRtH X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mo4-p00-ob.smtp.rzone.de (mo4-p00-ob.smtp.rzone.de [85.215.255.21]) by sourceware.org (Postfix) with ESMTPS id AC3663858D20 for ; Wed, 4 Dec 2024 20:07:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AC3663858D20 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=gjlay.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gjlay.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AC3663858D20 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=85.215.255.21 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1733342828; cv=pass; b=dMB1xZ3VeXmRp+jDkLKvAxgoYHzvjNryEvDRrXVEUiuChqq0M4QnnrE2NgXvyEMDi4bREZyyQgtnHU9VA4zo54X9fT2LqJNMpLCfq4zIzFOMuYyvz9zs1HCF2TUFWKbCNwUolE0wqx/fzfdOnnJQFA9Id++gd2FmrvAGvXUX8Ig= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1733342828; c=relaxed/simple; bh=ceLfn0a3nAy49bh17B+kJPkKLtTDeZo9K+u9cLnnRug=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:MIME-Version:From: To:Subject; b=eRTm19C49ElUheIRMbee6yOPMauMhsLjBykNl5zyTgXksL2XqXsXLrOJR64iRw7sx5bqsjsAHRXn6Y1NtX4PSBCzjHkG1HxP/MDsPwQMZiR8Wz7OXkA7Y8Addh+hLmKMtHNOmesfyDmB7FHNYoTXh2QkPJAQmpW7ipwFR8prSKQ= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AC3663858D20 ARC-Seal: i=1; a=rsa-sha256; t=1733342826; cv=none; d=strato.com; s=strato-dkim-0002; b=FeGEr3IJqQrs33p5TcU+eLJOqzYEPJCPdSVbK6eqwAo1K07FEBXajjTkjvs5qcE0o7 JjHVGSbbcp05u8dLZgT2Cu5DoGBKs9KBjS+f14B84JX377tro3Zn1l/uMLnm0gXOoaNT QJe4sMnd2qIaeS2rO/UImVnrLuN1V0cP0nwgTl5UeTk4jMDM284N87vT8oj/5ADqzcZ8 HBDoms+RWOpq1K9fEIDtjBYRpwgSRmGRoDy2JaTlOJWARbt6DR7HdUADyGp41hKQLrOF 1PNqqjZLnSRm/VrJ8JD89MYBceMh9KCQWJbU/YepCWJZh04LctSRClptBKnbihjIl2zP oYpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1733342826; s=strato-dkim-0002; d=strato.com; h=Subject:To:From:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=9NUPphai4iOS77F0CXfGRdkRdyAZAjsLo8Nbo84YDT0=; b=Yn+maCgo3eI5/asJpEB2Ix5ecbkr0Ty94X+Q7qfpYga56Zd9xoKbH2g3rrh0l5KDPT 3KvewLCHYKh1E4Xqijy8ZpNStpBd5mfXtv5Nl38Yy9TqPPUkRhqubxMfzvKeiyg6SVVB LJH7uUAQCJsXR8ugMKAPrZjQWc6uN6e0Zxqn3C8Ypoo9PovfmP85mnkEzkCYjGFc9Lhl KK5UKKCw3W9VscbMIaHSuTk62WGOsaNh3vMpmUcvjyczHhSokiiRUSsx1PhUGe1S0NqE bxrXHi6HdzL9bSAWW752zRdFOi7ip2giHLP40e5fXgBMMRSb0tvEY8iZRaz/n451t9P3 /SsA== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1733342826; s=strato-dkim-0002; d=gjlay.de; h=Subject:To:From:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=9NUPphai4iOS77F0CXfGRdkRdyAZAjsLo8Nbo84YDT0=; b=GP++Yosx7IkvEgloJOy5lR6u7kp1zzO7vr41GBn7ueQOmKhvK/ozaEd2KbR8ys6WI1 84Fa1ZYwiK2RkmtXoC+w7MtpKWu4FJ5z8RwehIxbiZ0/IN9V4lloRuxM6o8cc95yBqBq 5SWAw2sXxSFXB/GG++DTWreY0Cmhjq7S87eUmfPH9Tm/mTB7hFnT5cGf+TsxZWslGxkz PysNSf0QjBqZapyG44R/LzDYsqP7xWU9Ju4vul0sWzVgay8fYX/DXUjPJUobbp3jHbHB TrVmkiz6+ZNeu7He/9T843YzLir2KnR91CoMZTgpS2z22zCUh+GGCqB3GK890GGiljIT AaJA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1733342826; s=strato-dkim-0003; d=gjlay.de; h=Subject:To:From:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=9NUPphai4iOS77F0CXfGRdkRdyAZAjsLo8Nbo84YDT0=; b=Cd5RlRtH/3jBiWNgbtY2wX4wt0XMTtHfN59HxCzfMURE2fbdmLAk/RFCY+E+ttM14q qN1712kMnryLXVji9GAQ== X-RZG-AUTH: ":LXoWVUeid/7A29J/hMvvT3koxZnKXKoq0dKoR0vVqyQb0R7G22gRW+Qr5Q==" Received: from [192.168.2.102] by smtp.strato.de (RZmta 51.2.11 AUTH) with ESMTPSA id xd5faa0B4K753PU (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Wed, 4 Dec 2024 21:07:05 +0100 (CET) Message-ID: Date: Wed, 4 Dec 2024 21:07:05 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Georg-Johann Lay Content-Language: en-US To: "gcc-patches@gcc.gnu.org" , Denis Chertykov Subject: [patch,avr] PR64242: Fix failing nonlocal goto X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org In nonlocal_goto sets, change hard_frame_pointer_rtx only after emit_stack_restore() restored SP. This is needed because SP my be stored in some frame location. The only change to test results is that gcc.c-torture/execute/pr64242.c is passing now. Ok to apply? Johann --- AVR: target/64242 - Copy FP to a local reg in nonlocal_goto. In nonlocal_goto sets, change hard_frame_pointer_rtx only after emit_stack_restore() restores SP. This is needed because SP my be stored in some frame location. gcc/ PR target/64242 * config/avr/avr.md (nonlocal_goto): Don't restore hard_frame_pointer_rtx directly, but copy it to local register, and only set hard_frame_pointer_rtx from it after emit_stack_restore(). AVR: target/64242 - Copy FP to a local reg in nonlocal_goto. In nonlocal_goto sets, change hard_frame_pointer_rtx only after emit_stack_restore() restored SP. This is needed because SP my be stored in some frame location. gcc/ PR target/64242 * config/avr/avr.md (nonlocal_goto): Don't restore hard_frame_pointer_rtx directly, but copy it to local register, and only set hard_frame_pointer_rtx from it after emit_stack_restore(). diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 0c98318c03d..ea9f81d1bfb 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -411,9 +411,14 @@ (define_expand "nonlocal_goto" emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx)); - emit_move_insn (hard_frame_pointer_rtx, r_fp); + // PR64242: When r_sp is located in the frame, we must not + // change FP prior to reading r_sp. Hence copy r_fp to a + // local register (and hope that reload won't spill it). + rtx r_fp_reg = copy_to_reg (r_fp); emit_stack_restore (SAVE_NONLOCAL, r_sp); + emit_move_insn (hard_frame_pointer_rtx, r_fp_reg); + emit_use (hard_frame_pointer_rtx); emit_use (stack_pointer_rtx);