From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 69442 invoked by alias); 2 Dec 2017 07:53:30 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 69432 invoked by uid 89); 2 Dec 2017 07:53:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.7 required=5.0 tests=BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KB_WAM_FROM_NAME_SINGLEWORD,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy= X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 02 Dec 2017 07:53:29 +0000 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id DE291ADD8; Sat, 2 Dec 2017 07:53:26 +0000 (UTC) Date: Sat, 02 Dec 2017 07:53:00 -0000 User-Agent: K-9 Mail for Android In-Reply-To: <20171202001415.GF2353@tucnak> References: <20171202001415.GF2353@tucnak> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [PATCH] Small hack for DECL_MODE lack of vector_type_mode-like behavior (PR target/78643, PR target/80583) To: Jakub Jelinek CC: gcc-patches@gcc.gnu.org From: Richard Biener Message-ID: <34566DF3-6E93-42BE-9BA8-60384AF501CC@suse.de> X-SW-Source: 2017-12/txt/msg00091.txt.bz2 On December 2, 2017 1:14:15 AM GMT+01:00, Jakub Jelinek = wrote: >Hi! > >In TYPE_MODE we have a hack for vector types where we dynamically >adjust it based on whether it is used from a function where the vector >mode >is or isn't supported (depending on target attribute, function >multiversioning, etc.), but we don't have anything like that in >DECL_MODE. > >The following is just a small hack that should be backportable to >adjust >similarly DECL_MODE when looking at fields - for static VAR_DECLs we >already >have code to cope with that, furthermore we need to cope there with the >case where DECL_RTL is created in one context and used in another one. > >Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? OK.=20 Richard.=20 >2017-12-01 Jakub Jelinek > > PR target/78643 > PR target/80583 > * expr.c (get_inner_reference): If DECL_MODE of a non-bitfield > is BLKmode for vector field with vector raw mode, use TYPE_MODE > instead of DECL_MODE. > > * gcc.target/i386/pr80583.c: New test. > >--- gcc/expr.c.jj 2017-11-27 09:27:41.000000000 +0100 >+++ gcc/expr.c 2017-12-01 11:36:19.011863308 +0100 >@@ -7032,7 +7032,16 @@ get_inner_reference (tree exp, HOST_WIDE > size. */ > mode =3D TYPE_MODE (DECL_BIT_FIELD_TYPE (field)); > else if (!DECL_BIT_FIELD (field)) >- mode =3D DECL_MODE (field); >+ { >+ mode =3D DECL_MODE (field); >+ /* For vector fields re-check the target flags, as DECL_MODE >+ could have been set with different target flags than >+ the current function has. */ >+ if (mode =3D=3D BLKmode >+ && VECTOR_TYPE_P (TREE_TYPE (field)) >+ && VECTOR_MODE_P (TYPE_MODE_RAW (TREE_TYPE (field)))) >+ mode =3D TYPE_MODE (TREE_TYPE (field)); >+ } > else if (DECL_MODE (field) =3D=3D BLKmode) > blkmode_bitfield =3D true; >=20 >--- gcc/testsuite/gcc.target/i386/pr80583.c.jj 2017-12-01 >11:44:28.106603314 +0100 >+++ gcc/testsuite/gcc.target/i386/pr80583.c 2017-12-01 >11:44:12.000000000 +0100 >@@ -0,0 +1,13 @@ >+/* PR target/80583 */ >+/* { dg-do compile } */ >+/* { dg-options "-O0 -mno-avx" } */ >+ >+typedef int V __attribute__((__vector_size__(32))); >+struct S { V a; }; >+ >+V __attribute__((target ("avx"))) >+foo (struct S *b) >+{ >+ V x =3D b->a; >+ return x; >+} > > Jakub