From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id D097A3858D37 for ; Mon, 18 Mar 2024 17:46:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D097A3858D37 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 D097A3858D37 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=1710784007; cv=none; b=rxMe79Zoez4FQ1kveU+DY4c/PruI8ljsbRuDx8BtK5+zMvjmyoXC0dq0ENNlgFJKu7ZKfF05Cjvnz8kFAjenFhBP9lkItKSStrizo8YWuNfJWMbxrv68IkH6g8qmbQaX8p00l+GFoR1S9W7by3auBTMYZlc62FCnVgFqZejUrbI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710784007; c=relaxed/simple; bh=KW8WWJfw1n95/6nE8QTUFmWfNNd0pza44Z+AkXfAA4k=; h=Message-ID:Date:MIME-Version:Subject:To:From; b=nVSgjxhh8lWOBUipwiY1feJi48cwURn00k7y2oFicYFBOavUanZn2lWsJ4f0/gQLwupFii+sEZnaDBIDUVJ0gJk5I644DMw8SCeP1ZQOFbDuFyy+5K/w6YlKuvM0RzPsmplI0c20pJJuX8fGEEsBdPeDqnhp4I4IVwysWdcUKZU= 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 7A8161FB; Mon, 18 Mar 2024 10:47:20 -0700 (PDT) Received: from [10.57.82.50] (unknown [10.57.82.50]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9608C3F67D; Mon, 18 Mar 2024 10:46:44 -0700 (PDT) Message-ID: <5ee06283-2ee0-4ee4-8ce6-0a758b910278@arm.com> Date: Mon, 18 Mar 2024 17:46:43 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] arm: [MVE intrinsics] Fix support for loads [PR target/114323] Content-Language: en-GB To: Christophe Lyon , gcc-patches@gcc.gnu.org, richard.sandiford@arm.com, kyrylo.tkachov@arm.com References: <20240315200824.123127-1-christophe.lyon@linaro.org> From: "Richard Earnshaw (lists)" In-Reply-To: <20240315200824.123127-1-christophe.lyon@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3497.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 List-Id: On 15/03/2024 20:08, Christophe Lyon wrote: > The testcase in this PR shows that we would load from an uninitialized > location, because the vld1 instrinsics are reported as "const". This > is because function_instance::reads_global_state_p() does not take > CP_READ_MEMORY into account. Fixing this gives vld1 the "pure" > attribute instead, and solves the problem. > > 2024-03-15 Christophe Lyon > > PR target/114323 > gcc/ > * config/arm/arm-mve-builtins.cc > (function_instance::reads_global_state_p): Take CP_READ_MEMORY > into account. > > gcc/testsuite/ > * gcc.target/arm/mve/pr114323.c: New. OK. R. > --- > gcc/config/arm/arm-mve-builtins.cc | 2 +- > gcc/testsuite/gcc.target/arm/mve/pr114323.c | 22 +++++++++++++++++++++ > 2 files changed, 23 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.target/arm/mve/pr114323.c > > diff --git a/gcc/config/arm/arm-mve-builtins.cc b/gcc/config/arm/arm-mve-builtins.cc > index 2f2c0f4a02a..6a5775c67e5 100644 > --- a/gcc/config/arm/arm-mve-builtins.cc > +++ b/gcc/config/arm/arm-mve-builtins.cc > @@ -746,7 +746,7 @@ function_instance::reads_global_state_p () const > if (flags & CP_READ_FPCR) > return true; > > - return false; > + return flags & CP_READ_MEMORY; > } > > /* Return true if calls to the function could modify some form of > diff --git a/gcc/testsuite/gcc.target/arm/mve/pr114323.c b/gcc/testsuite/gcc.target/arm/mve/pr114323.c > new file mode 100644 > index 00000000000..bd9127b886a > --- /dev/null > +++ b/gcc/testsuite/gcc.target/arm/mve/pr114323.c > @@ -0,0 +1,22 @@ > +/* { dg-do run } */ > +/* { dg-require-effective-target arm_mve_hw } */ > +/* { dg-options "-O2" } */ > +/* { dg-add-options arm_v8_1m_mve_fp } */ > + > +#include > + > +__attribute__((noipa)) > +uint32x4_t foo (void) { > + uint32x4_t V0 = vld1q_u32(((const uint32_t[4]){1, 2, 3, 4})); > + return V0; > +} > + > +int main(void) > +{ > + uint32_t buf[4]; > + vst1q_u32 (buf, foo()); > + > + for (int i = 0; i < 4; i++) > + if (buf[i] != i+1) > + __builtin_abort (); > +}