From patchwork Thu Dec 21 10:21:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 1878992 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Swmh134LSz1ySd for ; Thu, 21 Dec 2023 21:22:08 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C4F7F385C6E5 for ; Thu, 21 Dec 2023 10:22:06 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 12FF53858407 for ; Thu, 21 Dec 2023 10:21:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 12FF53858407 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 12FF53858407 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703154117; cv=none; b=LRZQJolhnWQFGaTzDEm87r1FLnXaYyjajLwPN7bFsvJ6uHsvtiwWyqv446viqGmvFE/AdSKOk/NjnKFuj4+pYiknMwdJhxbRxOlPdkKLn4u40ybE2KawNFK08rDTo5U6eNNuFWXvBRwQORpYQpuCxf+Q1y35/pNNOJF4kCE3eLw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703154117; c=relaxed/simple; bh=qAjauNxv4j2DiWIJJ+nwpvXw1jXw5E6wT+WDmTtHh/M=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=IUkcqQA9+B3fzxUlBUul/obTQ9Fjnq8CTipu/IjU5BCcH6wdMt1AMLnJ6B5nHoBGi3mYf5aPWtj8glr3jlM05xbk446TL74ihXIl+/Q0SFWiYbJrJrfDp4N7ULcVsSg8LDNgBL5rf70wO8iQe49bvCts1TnviOb/DBRWsenhBlU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 91E492F4 for ; Thu, 21 Dec 2023 02:22:40 -0800 (PST) Received: from localhost (e121540-lin.manchester.arm.com [10.32.110.72]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 62C823F5A1 for ; Thu, 21 Dec 2023 02:21:55 -0800 (PST) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Subject: [pushed] aarch64: Fix early RA handling of deleted insns [PR113094] Date: Thu, 21 Dec 2023 10:21:54 +0000 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 X-Spam-Status: No, score=-21.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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+incoming=patchwork.ozlabs.org@gcc.gnu.org The testcase constructs a sequence of insns that are fully dead and yet (due to forced options) are not removed as such. This triggered a case where we would emit a meaningless reload for a to-be-deleted insn. We can't delete the insns first because that might disrupt the iteration ranges. So this patch turns them into notes before the walk and then continues to delete them properly afterwards. Tested on aarch64-linux-gnu & pushed. Richard gcc/ PR target/113094 * config/aarch64/aarch64-early-ra.cc (apply_allocation): Stub out instructions that are going to be deleted before iterating over the rest. gcc/testsuite/ PR target/113094 * gcc.target/aarch64/pr113094.c: New test. --- gcc/config/aarch64/aarch64-early-ra.cc | 3 +++ gcc/testsuite/gcc.target/aarch64/pr113094.c | 10 ++++++++++ 2 files changed, 13 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/pr113094.c diff --git a/gcc/config/aarch64/aarch64-early-ra.cc b/gcc/config/aarch64/aarch64-early-ra.cc index 24415bd829c..5d2da3e1110 100644 --- a/gcc/config/aarch64/aarch64-early-ra.cc +++ b/gcc/config/aarch64/aarch64-early-ra.cc @@ -3210,6 +3210,9 @@ early_ra::maybe_convert_to_strided_access (rtx_insn *insn) void early_ra::apply_allocation () { + for (auto *insn : m_dead_insns) + set_insn_deleted (insn); + rtx_insn *prev; for (auto insn_range : m_insn_ranges) for (rtx_insn *insn = insn_range.first; diff --git a/gcc/testsuite/gcc.target/aarch64/pr113094.c b/gcc/testsuite/gcc.target/aarch64/pr113094.c new file mode 100644 index 00000000000..b79e1f744ed --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pr113094.c @@ -0,0 +1,10 @@ +/* { dg-options "-fno-tree-dse -Ofast -fno-tree-coalesce-vars -fno-dce -fno-tree-dce" } */ + +struct TV4 { + __attribute__((vector_size(sizeof(int) * 4))) int v; +}; +void modify() { + struct TV4 __trans_tmp_1, temp; + temp.v[0] = temp.v[3] = 0; + __trans_tmp_1 = temp; +}