From patchwork Mon Mar 14 08:40:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Li X-Patchwork-Id: 51930 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 C65DF385AC3D for ; Mon, 14 Mar 2022 08:41:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C65DF385AC3D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1647247274; bh=XDvh4j7F+QER7KVQCg10uYulsfGnDlX7SjXxD31iyN0=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=Vw8emJMenxq5UY9Jr8CVS6Hru6N8rwcwQEiJzPMsk/jIrmp+QKG3rDc4cfllaTf90 2SsjpQGI+J3QFRlYM3kRL9iHzQzpMpGKOL4QUcar50lOtvkVicMf8xIaQ5cwF2ayna GdjEq9EqZ/YEP9jkwV9o2Sx4Og5jITp42WLlqYZk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from out30-43.freemail.mail.aliyun.com (out30-43.freemail.mail.aliyun.com [115.124.30.43]) by sourceware.org (Postfix) with ESMTPS id 5FE44385E45C for ; Mon, 14 Mar 2022 08:40:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5FE44385E45C X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R401e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=e01e04407; MF=ashimida@linux.alibaba.com; NM=1; PH=DS; RN=3; SR=0; TI=SMTPD_---0V77G9mC_1647247202; Received: from 192.168.193.162(mailfrom:ashimida@linux.alibaba.com fp:SMTPD_---0V77G9mC_1647247202) by smtp.aliyun-inc.com(127.0.0.1); Mon, 14 Mar 2022 16:40:03 +0800 Message-ID: Date: Mon, 14 Mar 2022 01:40:02 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: [PING] AArch64: add R30_REGNUM into shrink-wrapping separate To: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Content-Language: en-US X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00, ENV_AND_HDR_SPF_MATCH, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, UNPARSEABLE_RELAY, USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Dan Li via Gcc-patches From: Dan Li Reply-To: Dan Li Cc: Dan Li Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Gentile ping for this :), thanks. Link: https://gcc.gnu.org/pipermail/gcc-patches/2022-February/590906.html > R30_REGNUM could also be used as a component in shrink-wrapping > separate, this patch enables it in aarch64. > > gcc/ChangeLog: > > * config/aarch64/aarch64.cc (aarch64_get_separate_components): > Remove bitmap clear of R30_REGNUM. > (aarch64_components_for_bb): Support R30_REGNUM as a component. > > gcc/testsuite/ChangeLog: > > * gcc.target/aarch64/shrink_wrap_separate_1.c: New test. --- gcc/config/aarch64/aarch64.cc | 4 ++-- .../gcc.target/aarch64/shrink_wrap_separate_1.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/shrink_wrap_separate_1.c diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 8bcee8be9eb..6e1589b0312 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -8463,7 +8463,6 @@ aarch64_get_separate_components (void) if (reg1 != INVALID_REGNUM) bitmap_clear_bit (components, reg1); - bitmap_clear_bit (components, LR_REGNUM); bitmap_clear_bit (components, SP_REGNUM); return components; @@ -8500,7 +8499,8 @@ aarch64_components_for_bb (basic_block bb) /* GPRs are used in a bb if they are in the IN, GEN, or KILL sets. */ for (unsigned regno = 0; regno <= LAST_SAVED_REGNUM; regno++) if (!fixed_regs[regno] - && !crtl->abi->clobbers_full_reg_p (regno) + && (regno == R30_REGNUM + || !crtl->abi->clobbers_full_reg_p (regno)) && (TEST_HARD_REG_BIT (extra_caller_saves, regno) || bitmap_bit_p (in, regno) || bitmap_bit_p (gen, regno) diff --git a/gcc/testsuite/gcc.target/aarch64/shrink_wrap_separate_1.c b/gcc/testsuite/gcc.target/aarch64/shrink_wrap_separate_1.c new file mode 100644 index 00000000000..34002705ace --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/shrink_wrap_separate_1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fomit-frame-pointer -fdump-rtl-pro_and_epilogue" } */ + +void f(); + +int g(int x) +{ + if (x == 0) + { + __asm__ ("":::"x19", "x20"); + return 1; + } + f(); + return 2; +} + +/* { dg-final { scan-rtl-dump {The components we wrap separately are \[sep 30\]} "pro_and_epilogue" } } */