From patchwork Thu Apr 6 11:28:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 747713 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 3vzL7J4rbfz9s8N for ; Thu, 6 Apr 2017 21:28:28 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="cx5aDi4k"; 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=Mt/HK4fyOwQzH/nuU iXmafa6suxOdE5V4vjrprShesf39WMw3q3w085aidVxvvzmQXvpAMCX3poc1kmHM 6Oac8vJznEapHBXIgJEOEGsBZYo53kmrJNwUUWzGqUkvv7Or957s5zfy15BCKkI6 GjS+A25r7MjMpotqh7oRNYtnRs= 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=wdePYXLGpeN9MLrdcGFk1IK 7zWU=; b=cx5aDi4kbdBBZPVr+HsbPGv1zUZdAJCiqToUN48GD/SaVvMfy4wACJZ dRhq3oQHQOmDmZz42Y6wNbOA06rPpamsAsy09B287h8whlzYWtPAl+QynedMlK0P 5C1DP1VEGVEkhVQ4xlTBare+70IuVeDq+FzUtbWX8C3S17/by0DM= Received: (qmail 47170 invoked by alias); 6 Apr 2017 11:28:09 -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 47148 invoked by uid 89); 6 Apr 2017 11:28:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-10.6 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-yb0-f178.google.com Received: from mail-yb0-f178.google.com (HELO mail-yb0-f178.google.com) (209.85.213.178) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 06 Apr 2017 11:28:05 +0000 Received: by mail-yb0-f178.google.com with SMTP id f204so9643588ybc.2 for ; Thu, 06 Apr 2017 04:28:06 -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=OUNjndzxWcE7A+xZaFTSF3p/duBMA8zg6S/3Y/OHwuc=; b=Efba7O7IpbYNRNPybUqMBtwsxb5PYkSoXiKooPzMe8kJD+INZBGFw31QgZOX135CLF WiFoMon/iClMWIhL3OmTo9nBS7WhHgxzTU9MqrYS6dSgBcpw1g+8ogv0Vk1NoJ/lKN4C 4KZnD21oTEvy4aKxFWfxxNiB8YKSwcBknCoiyjbSTXuJzxm4PF2znYg4SntWJSklWdQX 82CYqLjtwQUgYrUsH1PsbVWd66w6rBTH3MCtMJSRr3N0BvPmRpIKbGWgzmXUbjY4Oif2 JAUDx7DQetppIcNjbpX8yrG6JyTPUBmRN/Z0GmOV38c9W5ZZQmX4aMKb8HwELBRpnZmq GG9A== X-Gm-Message-State: AN3rC/5yLB5gSMK2V7hvtKHwA21A0Mx04DI6rN7ekcIT9cn6HS102qtRkf2/wA+HhG7eCg== X-Received: by 10.37.174.84 with SMTP id g20mr2711912ybe.72.1491478084769; Thu, 06 Apr 2017 04:28:04 -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 f128sm450585ywf.25.2017.04.06.04.28.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Apr 2017 04:28:04 -0700 (PDT) Subject: Re: [PR 79905] ICE with vector_type To: Richard Biener , 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> <1b0a9ef8-dfe6-d289-2ee9-7108822454e4@acm.org> Cc: GCC Patches From: Nathan Sidwell Message-ID: Date: Thu, 6 Apr 2017 07:28:02 -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: Let's try this one then. nathan 2017-04-05 Nathan Sidwell 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,23 @@ 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); + + if (result == TYPE_CANONICAL (result)) + /* 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 +17290,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 +17323,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 +17457,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); +}