From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 18A7A3858D20 for ; Mon, 29 Jan 2024 10:38:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 18A7A3858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 18A7A3858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706524718; cv=none; b=igCM3EyhgB5k68liA3i6TALQMk9/7pjw24zc1UT/EL90MF1/iolT8tT0GNgHqJazX9avXYcCpl91rRAESs2DlICbL21nOq2bAz2wECtfADIp7T7QFDIFxzhjGbFYTfFPcFYS3HPw9zZEXqLbU+n4u8WPsX2SwlYLm4ef15sWTcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706524718; c=relaxed/simple; bh=uQS4qIX8l5qqW7pjXpG4CDmPW5e5cjD8KYg8vVeabxQ=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=iBVS+9zdLGlWyrL8bEMjchKz//mJ+I6tagV9mX4pn5OSpR5LK/FCsKzmO0AFK8LDR1/fKsfFzV7/ra7OuVZkxVrjlgMJecDFuHFou4P0CNZar9Wigs20/guI9fGa9ZHo+DMU+umXPvUugnQf2Rskr/1vvUu0YQKbBtPALGk+3P8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1706524716; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references; bh=LUrDmczydu0VaR/KKnlv70F3EUh69Z9QWbMc61ASGTo=; b=aT4TWCK67OrHz3tfjptLAy1ROvyhmDPlvZ9jNg9NQm0XPiP/pMfnf4HbgqLSacS1rj54YO mR0L61Fn4BYmWlGcMrr+CDupeT1lsML5UdMspgj6rDXRZNus4tdsPiCIdHeF1wgN12bbRN GYeMXb9pxLF+aPu6w2ILjy7Vq5uVQCM= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-230-XqMD5CvcMCOiCdMc5JQPHQ-1; Mon, 29 Jan 2024 05:38:34 -0500 X-MC-Unique: XqMD5CvcMCOiCdMc5JQPHQ-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 573151C04325; Mon, 29 Jan 2024 10:38:34 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.39.192.70]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1CD6E400DF52; Mon, 29 Jan 2024 10:38:33 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.17.1/8.17.1) with ESMTPS id 40TAcVBV2972989 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 29 Jan 2024 11:38:31 +0100 Received: (from jakub@localhost) by tucnak.zalov.cz (8.17.1/8.17.1/Submit) id 40TAcUPt2972988; Mon, 29 Jan 2024 11:38:30 +0100 Date: Mon, 29 Jan 2024 11:38:30 +0100 From: Jakub Jelinek To: Richard Biener Cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH] middle-end/113622 - allow .VEC_SET and .VEC_EXTRACT for global hard regs Message-ID: Reply-To: Jakub Jelinek References: <20240129103038.CAAD13858439@sourceware.org> MIME-Version: 1.0 In-Reply-To: <20240129103038.CAAD13858439@sourceware.org> X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.2 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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 Mon, Jan 29, 2024 at 11:24:58AM +0100, Richard Biener wrote: > The following expands .VEC_SET and .VEC_EXTRACT instruction selection > to global hard registers, not only automatic variables (possibly) > promoted to registers. This can avoid some ICEs later and create > better code. > > Bootstrapped and tested on x86_64-unknown-linux-gnu. > > OK? > > Thanks, > Richard. > > PR middle-end/113622 > * gimple-isel.cc (gimple_expand_vec_set_extract_expr): > Also allow DECL_HARD_REGISTER variables. > > * gcc.target/i386/pr113622-1.c: New testcase. > --- > gcc/gimple-isel.cc | 3 ++- > gcc/testsuite/gcc.target/i386/pr113622-1.c | 12 ++++++++++++ > 2 files changed, 14 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.target/i386/pr113622-1.c > > diff --git a/gcc/gimple-isel.cc b/gcc/gimple-isel.cc > index 7e2392ecd38..e94f292dd38 100644 > --- a/gcc/gimple-isel.cc > +++ b/gcc/gimple-isel.cc > @@ -104,7 +104,8 @@ gimple_expand_vec_set_extract_expr (struct function *fun, > machine_mode outermode = TYPE_MODE (TREE_TYPE (view_op0)); > machine_mode extract_mode = TYPE_MODE (TREE_TYPE (ref)); > > - if (auto_var_in_fn_p (view_op0, fun->decl) > + if ((auto_var_in_fn_p (view_op0, fun->decl) > + || DECL_HARD_REGISTER (view_op0)) > && !TREE_ADDRESSABLE (view_op0) > && ((!is_extract && can_vec_set_var_idx_p (outermode)) > || (is_extract All we know here from the earlier checks is DECL_P (view_op0), but DECL_HARD_REGISTER uses VAR_DECL_CHECK, shouldn't this be || (VAR_P (view_op0) && DECL_HARD_REGISTER (view_op0))) instead? > diff --git a/gcc/testsuite/gcc.target/i386/pr113622-1.c b/gcc/testsuite/gcc.target/i386/pr113622-1.c > new file mode 100644 > index 00000000000..2d6cb3c89a8 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr113622-1.c > @@ -0,0 +1,12 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -mavx512f -w" } */ > + > +typedef float __attribute__ ((vector_size (64))) vec; > +register vec a asm("zmm2"), b asm("zmm0"), c asm("zmm1"); I'd feel better if this used say zmm5, zmm6, zmm7 or something similar so that it doesn't clash with some of the implicitly used SSE registers, but on the other side still fit into 8 SSE registers which ia32 has access to. > + > +void > +test (void) > +{ > + for (int i = 0; i < 8; i++) > + c[i] = a[i] < b[i] ? 0.1 : 0.2; > +} Otherwise LGTM. Jakub