From patchwork Wed Apr 5 14:14:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 747332 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vynsP2nKlz9s8B for ; Thu, 6 Apr 2017 00:14:32 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="VX8C8FNI"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; q=dns; s=default; b=CGCBSllBoIIajaqoy bplHfjnheI+o7BWEyOjXFEBCBKODvIe/n790yaKcGl//kp55FGLYD3T7sOB99UJn XL/kuNKywtWX4IF9cIX3UnQ7hYNelQL96jItciEax6Il1mivZ5JCW2urWb9c7tbN Kk+71EzbMwZDOUxcHTTDaqGsZ4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; s=default; bh=rK5DGoYcXoKxjE/R5tvnSF3 zYvE=; b=VX8C8FNI1zi5aLCDNsyhISewr+AZBQLwe895N9LwYEidZ7EO0mjt7M9 BQ8q1r+M26f3zm4JfOF3LktdXGmC9/oFW/lHF8B9LBbm61h0mWEN8o1dg/FSdU39 MWKW6K7g1MznmsxKXXQgg54tFUgPzQWBtyl6+UEDyjdYRlu3qGKE= Received: (qmail 2820 invoked by alias); 5 Apr 2017 14:14:20 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2657 invoked by uid 89); 5 Apr 2017 14:14:18 -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=H*f:sk:15dff02, H*f:sk:4DC65C3, H*i:sk:4DC65C3, H*MI:sk:4DC65C3 X-HELO: mail-yb0-f170.google.com Received: from mail-yb0-f170.google.com (HELO mail-yb0-f170.google.com) (209.85.213.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 05 Apr 2017 14:14:16 +0000 Received: by mail-yb0-f170.google.com with SMTP id l201so3425594ybf.0 for ; Wed, 05 Apr 2017 07:14:17 -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=JpyLhc6UgjIseeJDrMP9PuAPd8+2m6b4PUENgwQGA5o=; b=k2kmVO9dTfI6txV8bmXvZ7OMVUQMDgBDoBw1iCzbJNnItZxu8jCOu3AInFnfTgDDzt 093ylctxOssvC+hVVJkZgvVy4/DuR7hMc2gJUQW9X/alZ5UkylpJnGYKjrXlBIIceHK+ YNrK7jcW/hA3PfY5z0X8pM88LH+8a0euaszwQW8ItohLj3f6RvvIbKnZjAewuR57JbVE gZUSNua6f3Lt/lC924FsPizeA/yqq0XlgRpEedxXU3fnwqvQlV7s2FbjvkfMCSFun0Oc IaNWPd5s0vvIrgEZt6dfC6fMJCFV/X5DiPp1AtgysiqG50UVGR74xPFvVB+b6g1vISH/ vKmA== X-Gm-Message-State: AFeK/H3LsCTMqfrHYjScIJSFCuMK64kmpDuVgf0ZyWWbjMdn9ElTPSZcpugnLStJLksWpQ== X-Received: by 10.37.164.170 with SMTP id g39mr17290160ybi.197.1491401656274; Wed, 05 Apr 2017 07:14:16 -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 f138sm9489739ywb.66.2017.04.05.07.14.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Apr 2017 07:14:15 -0700 (PDT) Subject: Re: [PR 79905] ICE with vector_type To: Bill Schmidt 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> Cc: Richard Biener , GCC Patches From: Nathan Sidwell Message-ID: <1b0a9ef8-dfe6-d289-2ee9-7108822454e4@acm.org> Date: Wed, 5 Apr 2017 10:14:14 -0400 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: <4DC65C33-038F-430C-8531-15B318861071@linux.vnet.ibm.com> > Thanks for the patch! Looks like there are some compile problems. I can fix "resut", but not sure what the intent is for "canonical": I'm a dumbass. I built the x86_64 compiler :( try this. nathan 2017-04-05 Nathan Sidwell PR target/79905 * config/rs6000/rs6000.c (rs6000_vt): New. (rs6000_init_builtins): Use it. c-family/ * c-common.c (set_underlying_type): Make builtin type-copy when name is error_mark. testsuite/ * g++.dg/torture/pr79905.C: New. Index: c-family/c-common.c =================================================================== --- c-family/c-common.c (revision 246647) +++ c-family/c-common.c (working copy) @@ -7465,7 +7465,12 @@ set_underlying_type (tree x) { if (x == error_mark_node) return; - if (DECL_IS_BUILTIN (x) && TREE_CODE (TREE_TYPE (x)) != ARRAY_TYPE) + if (DECL_IS_BUILTIN (x) + && TREE_CODE (TREE_TYPE (x)) != ARRAY_TYPE + /* Callers set name to error_mark_node to force the builtin to + have a type copy. That ensures the canonical type doesn't + get a name. */ + && TYPE_NAME (TREE_TYPE (x)) != error_mark_node) { if (TYPE_NAME (TREE_TYPE (x)) == 0) TYPE_NAME (TREE_TYPE (x)) = x; Index: config/rs6000/rs6000.c =================================================================== --- config/rs6000/rs6000.c (revision 246647) +++ config/rs6000/rs6000.c (working copy) @@ -17257,6 +17257,29 @@ 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); + tree orig_name = TYPE_NAME (result); + + /* Tell set_underlying_type to create a clone. */ + TYPE_NAME (result) = error_mark_node; + tree named_type = add_builtin_type (name, result); + TYPE_NAME (result) = orig_name; + if (named_type) + { + gcc_assert (TREE_TYPE (named_type) != result); + result = TREE_TYPE (named_type); + TREE_USED (result) = true; + } + + return result; +} + static void rs6000_init_builtins (void) { @@ -17273,18 +17296,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 +17329,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 +17463,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*-*-* } } } + + +typedef int V4i __attribute__((vector_size(16))); +void a (V4i) { + vector int b; + a (b); +}