From patchwork Mon Nov 14 15:26:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Krebbel X-Patchwork-Id: 60604 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 1512C38438E2 for ; Mon, 14 Nov 2022 15:27:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1512C38438E2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1668439660; bh=yafJBmYE8qTb5lJPP5ThaYAYKx717WZ6Kc7VAAoeFCM=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=Y9mh1ENm+G7gBw7r13GciC6yzor6Vo8pTB8bhDB/0AxYYIbHNEvQZa8akjDJgJWy3 pjg0W2MEHVkG7lwpYiSfMbm4QpyJCrwlIl+aU/ZXhNnTizNJ2pnoUzFiOmQ+Xoa2hQ PuCecJiMP3ch5DsUo3CYEzLybCEAQ1LprN0D2ATk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 0C2533858404 for ; Mon, 14 Nov 2022 15:27:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0C2533858404 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.5) with ESMTP id 2AEFPteX017364 for ; Mon, 14 Nov 2022 15:27:04 GMT Received: from ppma06fra.de.ibm.com (48.49.7a9f.ip4.static.sl-reverse.com [159.122.73.72]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3kurafr0db-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 14 Nov 2022 15:27:03 +0000 Received: from pps.filterd (ppma06fra.de.ibm.com [127.0.0.1]) by ppma06fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 2AEFLlY0001457 for ; Mon, 14 Nov 2022 15:27:01 GMT Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by ppma06fra.de.ibm.com with ESMTP id 3kt2rj21da-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 14 Nov 2022 15:27:01 +0000 Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 2AEFQwi766126128 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 14 Nov 2022 15:26:58 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8C2AB11C050 for ; Mon, 14 Nov 2022 15:26:58 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 649FB11C04A for ; Mon, 14 Nov 2022 15:26:58 +0000 (GMT) Received: from li-ecc9ffcc-3485-11b2-a85c-e633c5126265.fritz.box (unknown [9.179.13.145]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTP for ; Mon, 14 Nov 2022 15:26:58 +0000 (GMT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/2] New reg note REG_CFA_NORESTORE Date: Mon, 14 Nov 2022 16:26:56 +0100 Message-Id: <20221114152657.43632-2-krebbel@linux.ibm.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221114152657.43632-1-krebbel@linux.ibm.com> References: <20221114152657.43632-1-krebbel@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: R9CarSX06k2OWL4Cnso3ufnbeN4sKKB8 X-Proofpoint-ORIG-GUID: R9CarSX06k2OWL4Cnso3ufnbeN4sKKB8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-11-14_12,2022-11-11_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 mlxlogscore=930 malwarescore=0 suspectscore=0 impostorscore=0 adultscore=0 mlxscore=0 phishscore=0 priorityscore=1501 spamscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2211140107 X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP 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.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Andreas Krebbel via Gcc-patches From: Andreas Krebbel Reply-To: Andreas Krebbel Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" This patch introduces a new reg note which can be used to tell the CFI verification in dwarf2cfi that a register is stored without intending to restore from it. This is useful when storing e.g. register contents to the stack and generate CFI for it although the register is not really supposed to be restored. gcc/ChangeLog: * dwarf2cfi.cc (dwarf2out_frame_debug_cfa_restore): Add EMIT_CFI parameter. (dwarf2out_frame_debug): Add case for REG_CFA_NORESTORE. * reg-notes.def (REG_CFA_NOTE): New reg note definition. --- gcc/dwarf2cfi.cc | 15 ++++++++++----- gcc/reg-notes.def | 5 +++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gcc/dwarf2cfi.cc b/gcc/dwarf2cfi.cc index bef3165e691..6686498d7cc 100644 --- a/gcc/dwarf2cfi.cc +++ b/gcc/dwarf2cfi.cc @@ -1496,10 +1496,12 @@ dwarf2out_frame_debug_cfa_val_expression (rtx set) update_row_reg_save (cur_row, dwf_regno (dest), cfi); } -/* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note. */ +/* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE + note. When called with EMIT_CFI set to false emitting a CFI + statement is suppressed. */ static void -dwarf2out_frame_debug_cfa_restore (rtx reg) +dwarf2out_frame_debug_cfa_restore (rtx reg, bool emit_cfi = true) { gcc_assert (REG_P (reg)); @@ -1507,7 +1509,8 @@ dwarf2out_frame_debug_cfa_restore (rtx reg) if (!span) { unsigned int regno = dwf_regno (reg); - add_cfi_restore (regno); + if (emit_cfi) + add_cfi_restore (regno); update_row_reg_save (cur_row, regno, NULL); } else @@ -1522,7 +1525,8 @@ dwarf2out_frame_debug_cfa_restore (rtx reg) reg = XVECEXP (span, 0, par_index); gcc_assert (REG_P (reg)); unsigned int regno = dwf_regno (reg); - add_cfi_restore (regno); + if (emit_cfi) + add_cfi_restore (regno); update_row_reg_save (cur_row, regno, NULL); } } @@ -2309,6 +2313,7 @@ dwarf2out_frame_debug (rtx_insn *insn) break; case REG_CFA_RESTORE: + case REG_CFA_NORESTORE: n = XEXP (note, 0); if (n == NULL) { @@ -2317,7 +2322,7 @@ dwarf2out_frame_debug (rtx_insn *insn) n = XVECEXP (n, 0, 0); n = XEXP (n, 0); } - dwarf2out_frame_debug_cfa_restore (n); + dwarf2out_frame_debug_cfa_restore (n, REG_NOTE_KIND (note) == REG_CFA_RESTORE); handled_one = true; break; diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def index 704bc75b0e7..ab08e65eedc 100644 --- a/gcc/reg-notes.def +++ b/gcc/reg-notes.def @@ -157,6 +157,11 @@ REG_CFA_NOTE (CFA_VAL_EXPRESSION) first pattern is the register to be restored. */ REG_CFA_NOTE (CFA_RESTORE) +/* Like CFA_RESTORE but without actually emitting CFI. This can be + used to tell the verification infrastructure that a register is + saved without intending to restore it. */ +REG_CFA_NOTE (CFA_NORESTORE) + /* Attached to insns that are RTX_FRAME_RELATED_P, marks insn that sets vDRAP from DRAP. If vDRAP is a register, vdrap_reg is initalized to the argument, if it is a MEM, it is ignored. */