From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out30-44.freemail.mail.aliyun.com (out30-44.freemail.mail.aliyun.com [115.124.30.44]) by sourceware.org (Postfix) with ESMTPS id CD6373858D37 for ; Wed, 6 Apr 2022 01:30:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CD6373858D37 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=e01e04426; MF=ashimida@linux.alibaba.com; NM=1; PH=DS; RN=3; SR=0; TI=SMTPD_---0V9JJkCk_1649208620; Received: from 192.168.193.179(mailfrom:ashimida@linux.alibaba.com fp:SMTPD_---0V9JJkCk_1649208620) by smtp.aliyun-inc.com(127.0.0.1); Wed, 06 Apr 2022 09:30:21 +0800 Message-ID: <02c81576-897f-5852-fc90-673c683a9a78@linux.alibaba.com> Date: Tue, 5 Apr 2022 18:30:20 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 From: Dan Li Subject: [PING^3] AArch64: add R30 into shrink-wrapping separate To: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Cc: Dan Li Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-20.0 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-List-Received-Date: Wed, 06 Apr 2022 01:30:27 -0000 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" } } */ -- 2.17.1