From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 71880 invoked by alias); 6 Apr 2017 18:34:10 -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 71866 invoked by uid 89); 6 Apr 2017 18:34:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.1 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=bills X-HELO: mail-yw0-f181.google.com Received: from mail-yw0-f181.google.com (HELO mail-yw0-f181.google.com) (209.85.161.181) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 06 Apr 2017 18:34:08 +0000 Received: by mail-yw0-f181.google.com with SMTP id j9so1215502ywj.3 for ; Thu, 06 Apr 2017 11:34:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:cc:from:message-id :date:user-agent:mime-version:in-reply-to; bh=a8/AtYYL+O1heJnIQoIEejStrPeciVl1Md69GqOQgbI=; b=XzHfLc904Y69pR1yM4lkP+4H6uMgC51YKNAGIv+/5V8ENNp4Nbrd2I9P+nmDGAHFHA N5EDMaBr8YQxzv1BdfN60muhhH1xCWwMdwvStrRRnORjmAB+lbJTVTGif4mvfgbbOnDl rkV1dLDQHQPYSdCr9MViNAaieubEnLZotUd3YL/gvNxS+DgPFtFhW1fCqzJfFlX0p184 IpDQ/XEVBh4c6ZcpIX/lsbfBCLcQ7ccmJ63CniyI2K5HzBR1uvUwO7b8vemQe4yJIJFg IHabLxauEJ81XQIzu58YMfiL7Mp/+L8/dwRs/Ob0tJjLM88Omx5vrEx+Kj6AUlp7JZEw S6Rg== X-Gm-Message-State: AFeK/H0TSwDNSaZzKrffScBzqQYYEs7bBQZ5omb0DGSmcgInVnKf9ZtCxzoM1OXX7k2cPw== X-Received: by 10.129.52.19 with SMTP id b19mr26132519ywa.44.1491503647736; Thu, 06 Apr 2017 11:34:07 -0700 (PDT) Received: from ?IPv6:2620:10d:c0a3:20fb:f6d0:5ac5:64cd:f102? ([2620:10d:c091:200::4:11a9]) by smtp.googlemail.com with ESMTPSA id c134sm904409ywb.51.2017.04.06.11.34.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Apr 2017 11:34:06 -0700 (PDT) Subject: Re: [PR 79905] ICE with vector_type To: Bill Schmidt , segher@kernel.crashing.org References: <7cd553e8-623a-d2d4-0ace-331f3df14701@acm.org> <6FEFB107-4422-4F67-8A66-31D13C277741@linux.vnet.ibm.com> <06e56d03-48eb-10cf-7214-171cd048a1d2@acm.org> <15dff029-b699-8205-90a7-7385254f3980@acm.org> <4DC65C33-038F-430C-8531-15B318861071@linux.vnet.ibm.com> <1b0a9ef8-dfe6-d289-2ee9-7108822454e4@acm.org> <3B736F4A-C0BA-47DA-B399-205DD820373 7@linux.vnet.ibm.com> <174640D1-4C16-41F2-BBB2-70DD72B2941C@linux.vnet.ibm.com> Cc: Richard Biener , GCC Patches From: Nathan Sidwell Message-ID: Date: Thu, 06 Apr 2017 18:34:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------B826B7EBEDBC2CC7AF458D76" X-SW-Source: 2017-04/txt/msg00321.txt.bz2 This is a multi-part message in MIME format. --------------B826B7EBEDBC2CC7AF458D76 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Content-length: 674 On 04/06/2017 11:13 AM, Bill Schmidt wrote: >>> Nathan's patch regstraps cleanly. I'll try Richard's variant (dropping the if test below) now. > > As expected, this version passes regstrap as well. Thanks for testing. Segher, this fixes a C++ ICE where TYPE_CANONICALs didn't match, but the types were the same (and non-structural comparison). The underlying cause is that types with different TYPE_NAME are considered different canonical types. add_builtin_type smacked TYPE_NAME of the canonical type, therefore guaranteeing that any subsequent vector types would be thought of as different. ok? Bill's been testing these patches. nathan -- Nathan Sidwell --------------B826B7EBEDBC2CC7AF458D76 Content-Type: text/x-patch; name="ppc-79905-3.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ppc-79905-3.diff" Content-length: 7770 2017-04-05 Nathan Sidwell Richard Biener PR target/79905 * config/rs6000/rs6000.c (rs6000_vt): New. (rs6000_init_builtins): Use it. testsuite/ * g++.dg/torture/pr79905.C: New. Index: config/rs6000/rs6000.c =================================================================== --- config/rs6000/rs6000.c (revision 246647) +++ config/rs6000/rs6000.c (working copy) @@ -17257,6 +17257,22 @@ rs6000_expand_builtin (tree exp, rtx tar gcc_unreachable (); } +/* Create a builtin vector type with a name. Taking care not to give + the canonical type a name. */ + +static tree +rs6000_vt (const char *name, tree elt_type, unsigned num_elts) +{ + tree result = build_vector_type (elt_type, num_elts); + + /* Copy so we don't give the canonical type a name. */ + result = build_variant_type_copy (result); + + add_builtin_type (name, result); + + return result; +} + static void rs6000_init_builtins (void) { @@ -17273,18 +17289,25 @@ rs6000_init_builtins (void) V2SI_type_node = build_vector_type (intSI_type_node, 2); V2SF_type_node = build_vector_type (float_type_node, 2); - V2DI_type_node = build_vector_type (intDI_type_node, 2); - V2DF_type_node = build_vector_type (double_type_node, 2); + V2DI_type_node = rs6000_vt (TARGET_POWERPC64 ? "__vector long" + : "__vector long long", intDI_type_node, 2); + V2DF_type_node = rs6000_vt ("__vector double", double_type_node, 2); V4HI_type_node = build_vector_type (intHI_type_node, 4); - V4SI_type_node = build_vector_type (intSI_type_node, 4); - V4SF_type_node = build_vector_type (float_type_node, 4); - V8HI_type_node = build_vector_type (intHI_type_node, 8); - V16QI_type_node = build_vector_type (intQI_type_node, 16); - - unsigned_V16QI_type_node = build_vector_type (unsigned_intQI_type_node, 16); - unsigned_V8HI_type_node = build_vector_type (unsigned_intHI_type_node, 8); - unsigned_V4SI_type_node = build_vector_type (unsigned_intSI_type_node, 4); - unsigned_V2DI_type_node = build_vector_type (unsigned_intDI_type_node, 2); + V4SI_type_node = rs6000_vt ("__vector signed int", intSI_type_node, 4); + V4SF_type_node = rs6000_vt ("__vector float", float_type_node, 4); + V8HI_type_node = rs6000_vt ("__vector signed short", intHI_type_node, 8); + V16QI_type_node = rs6000_vt ("__vector signed char", intQI_type_node, 16); + + unsigned_V16QI_type_node = rs6000_vt ("__vector unsigned char", + unsigned_intQI_type_node, 16); + unsigned_V8HI_type_node = rs6000_vt ("__vector unsigned short", + unsigned_intHI_type_node, 8); + unsigned_V4SI_type_node = rs6000_vt ("__vector unsigned int", + unsigned_intSI_type_node, 4); + unsigned_V2DI_type_node = rs6000_vt (TARGET_POWERPC64 + ? "__vector unsigned long" + : "__vector unsigned long long", + unsigned_intDI_type_node, 2); opaque_V2SF_type_node = build_opaque_vector_type (float_type_node, 2); opaque_V2SI_type_node = build_opaque_vector_type (intSI_type_node, 2); @@ -17299,8 +17322,9 @@ rs6000_init_builtins (void) must live in VSX registers. */ if (intTI_type_node) { - V1TI_type_node = build_vector_type (intTI_type_node, 1); - unsigned_V1TI_type_node = build_vector_type (unsigned_intTI_type_node, 1); + V1TI_type_node = rs6000_vt ("__vector __int128", intTI_type_node, 1); + unsigned_V1TI_type_node = rs6000_vt ("__vector unsigned __int128", + unsigned_intTI_type_node, 1); } /* The 'vector bool ...' types must be kept distinct from 'vector unsigned ...' @@ -17432,83 +17456,16 @@ rs6000_init_builtins (void) tdecl = add_builtin_type ("__pixel", pixel_type_node); TYPE_NAME (pixel_type_node) = tdecl; - bool_V16QI_type_node = build_vector_type (bool_char_type_node, 16); - bool_V8HI_type_node = build_vector_type (bool_short_type_node, 8); - bool_V4SI_type_node = build_vector_type (bool_int_type_node, 4); - bool_V2DI_type_node = build_vector_type (bool_long_type_node, 2); - pixel_V8HI_type_node = build_vector_type (pixel_type_node, 8); - - tdecl = add_builtin_type ("__vector unsigned char", unsigned_V16QI_type_node); - TYPE_NAME (unsigned_V16QI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector signed char", V16QI_type_node); - TYPE_NAME (V16QI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector __bool char", bool_V16QI_type_node); - TYPE_NAME (bool_V16QI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector unsigned short", unsigned_V8HI_type_node); - TYPE_NAME (unsigned_V8HI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector signed short", V8HI_type_node); - TYPE_NAME (V8HI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector __bool short", bool_V8HI_type_node); - TYPE_NAME (bool_V8HI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector unsigned int", unsigned_V4SI_type_node); - TYPE_NAME (unsigned_V4SI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector signed int", V4SI_type_node); - TYPE_NAME (V4SI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector __bool int", bool_V4SI_type_node); - TYPE_NAME (bool_V4SI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector float", V4SF_type_node); - TYPE_NAME (V4SF_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector __pixel", pixel_V8HI_type_node); - TYPE_NAME (pixel_V8HI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector double", V2DF_type_node); - TYPE_NAME (V2DF_type_node) = tdecl; - - if (TARGET_POWERPC64) - { - tdecl = add_builtin_type ("__vector long", V2DI_type_node); - TYPE_NAME (V2DI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector unsigned long", - unsigned_V2DI_type_node); - TYPE_NAME (unsigned_V2DI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector __bool long", bool_V2DI_type_node); - TYPE_NAME (bool_V2DI_type_node) = tdecl; - } - else - { - tdecl = add_builtin_type ("__vector long long", V2DI_type_node); - TYPE_NAME (V2DI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector unsigned long long", - unsigned_V2DI_type_node); - TYPE_NAME (unsigned_V2DI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector __bool long long", - bool_V2DI_type_node); - TYPE_NAME (bool_V2DI_type_node) = tdecl; - } - - if (V1TI_type_node) - { - tdecl = add_builtin_type ("__vector __int128", V1TI_type_node); - TYPE_NAME (V1TI_type_node) = tdecl; - - tdecl = add_builtin_type ("__vector unsigned __int128", - unsigned_V1TI_type_node); - TYPE_NAME (unsigned_V1TI_type_node) = tdecl; - } + bool_V16QI_type_node = rs6000_vt ("__vector __bool char", + bool_char_type_node, 16); + bool_V8HI_type_node = rs6000_vt ("__vector __bool short", + bool_short_type_node, 8); + bool_V4SI_type_node = rs6000_vt ("__vector __bool int", + bool_int_type_node, 4); + bool_V2DI_type_node = rs6000_vt (TARGET_POWERPC64 ? "__vector __bool long" + : "__vector __bool long long", + bool_long_type_node, 2); + pixel_V8HI_type_node = rs6000_vt ("__vector __pixel", pixel_type_node, 8); /* Paired and SPE builtins are only available if you build a compiler with the appropriate options, so only create those builtins with the Index: testsuite/g++.dg/torture/pr79905.C =================================================================== --- testsuite/g++.dg/torture/pr79905.C (revision 0) +++ testsuite/g++.dg/torture/pr79905.C (working copy) @@ -0,0 +1,9 @@ +// PR target/79905 +// { dg-do compile { target { powerpc*-*-* } } } +// { dg-require-effective-target powerpc_altivec_ok } + +typedef int V4i __attribute__((vector_size(16))); +void a (V4i) { + vector int b; + a (b); +} --------------B826B7EBEDBC2CC7AF458D76--