From patchwork Mon Mar 28 13:10:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Li X-Patchwork-Id: 52402 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 B84993858C74 for ; Mon, 28 Mar 2022 13:10:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B84993858C74 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1648473037; 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=L0alsDc8QfYQV97JoOVNc2VLxLO/Uzc4j88loqeejMlNSCIgo0oVAqNdusVA4rZfF vQo4a8xrlbD1/RZ4xcvBa2hOZHDgthZY+HjiBpoVU6Dt8dwzxvzYBRVyAW7FFGllJD iPH7zqY18CB0ckNF9RYJ6NMtiF7811SriioCxkr0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from out30-132.freemail.mail.aliyun.com (out30-132.freemail.mail.aliyun.com [115.124.30.132]) by sourceware.org (Postfix) with ESMTPS id E002C3858C56 for ; Mon, 28 Mar 2022 13:10:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E002C3858C56 X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R461e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=e01e04395; MF=ashimida@linux.alibaba.com; NM=1; PH=DS; RN=3; SR=0; TI=SMTPD_---0V8UBW.4_1648473001; Received: from 192.168.193.172(mailfrom:ashimida@linux.alibaba.com fp:SMTPD_---0V8UBW.4_1648473001) by smtp.aliyun-inc.com(127.0.0.1); Mon, 28 Mar 2022 21:10:01 +0800 Message-ID: <3a720099-ddc4-e1e4-0a22-ff80b04cc0e6@linux.alibaba.com> Date: Mon, 28 Mar 2022 06:10:01 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: [PING^2] 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.7 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_H4, 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" } } */