From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 122916 invoked by alias); 3 Jul 2019 08:02:12 -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 122891 invoked by uid 89); 3 Jul 2019 08:02:12 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-10.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 03 Jul 2019 08:02:10 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 99A64AF98; Wed, 3 Jul 2019 08:02:08 +0000 (UTC) Date: Wed, 03 Jul 2019 08:02:00 -0000 From: Richard Biener To: Jakub Jelinek cc: Jeff Law , Alexandre Oliva , gcc-patches@gcc.gnu.org Subject: Re: [PATCH] Fix out-of-ssa with unsupported vector types (PR rtl-optimization/90756) In-Reply-To: <20190703075941.GU815@tucnak> Message-ID: References: <20190703075941.GU815@tucnak> User-Agent: Alpine 2.20 (LSU 67 2015-01-07) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="-1609908220-835499525-1562140928=:2976" X-SW-Source: 2019-07/txt/msg00217.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1609908220-835499525-1562140928=:2976 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8BIT Content-length: 3036 On Wed, 3 Jul 2019, Jakub Jelinek wrote: > Hi! > > This weird hink has been added by Alex in r228175, it isn't clear why > nor how it ever can be correct. While say for DECL_MODE we have the problem > that for global vars when switching between functions with different ISA > selections the mode might not be ok, TYPE_MODE is stored as a raw vector > mode that a function overrides to BLKmode if that particular vector mode is > not supported. This hunk breaks that assumption and leaks unsupported > vector modes in the IL of the functions which then have no way to handle > that, but even before that happens usually it breaks because we try to > convert_mode between BLKmode and the unsupported vector mode or vice versa > on PHI nodes. > > Alex, do you remember why this has been done? > > Patch has been bootstrapped/regtested on x86_64-linux and i686-linux (the > latter didn't have SSE enabled by default), Jeff said he'll test it on many > crosses. Ok for trunk if that testing succeeds? OK. Thanks, Richard. > 2019-07-03 Jakub Jelinek > > PR rtl-optimization/90756 > * explow.c (promote_ssa_mode): Always use TYPE_MODE, don't bypass it > for VECTOR_TYPE_P. > > * gcc.dg/pr90756.c: New test. > > --- gcc/explow.c.jj 2019-06-26 13:51:54.289358743 +0200 > +++ gcc/explow.c 2019-07-02 20:32:11.318360013 +0200 > @@ -892,16 +892,7 @@ promote_ssa_mode (const_tree name, int * > > tree type = TREE_TYPE (name); > int unsignedp = TYPE_UNSIGNED (type); > - machine_mode mode = TYPE_MODE (type); > - > - /* Bypass TYPE_MODE when it maps vector modes to BLKmode. */ > - if (mode == BLKmode) > - { > - gcc_assert (VECTOR_TYPE_P (type)); > - mode = type->type_common.mode; > - } > - > - machine_mode pmode = promote_mode (type, mode, &unsignedp); > + machine_mode pmode = promote_mode (type, TYPE_MODE (type), &unsignedp); > if (punsignedp) > *punsignedp = unsignedp; > > --- gcc/testsuite/gcc.dg/pr90756.c.jj 2019-07-02 20:30:17.651131684 +0200 > +++ gcc/testsuite/gcc.dg/pr90756.c 2019-07-02 20:29:49.038574696 +0200 > @@ -0,0 +1,26 @@ > +/* PR rtl-optimization/90756 */ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -Wno-psabi" } */ > +/* { dg-additional-options "-mno-sse" { target ia32 } } */ > + > +typedef float B __attribute__((vector_size(4 * sizeof (float)))); > +typedef unsigned long long C __attribute__((vector_size(4 * sizeof (long long)))); > +typedef short D __attribute__((vector_size(4 * sizeof (short)))); > +B z; > +void foo (C); > +C bar (D); > +B baz (); > +D qux (B); > + > +void > +quux (int x) > +{ > + B n = z, b = z; > + while (1) > + switch (x) > + { > + case 0: n = baz (); /* FALLTHRU */ > + case 1: { B o = n; n = b; b = o; } /* FALLTHRU */ > + case 2: { D u = qux (b); C v = bar (u); foo (v); } > + } > +} > > Jakub > -- Richard Biener SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer, Mary Higgins, Sri Rasiah; HRB 21284 (AG Nürnberg) ---1609908220-835499525-1562140928=:2976--