From patchwork Tue Nov 1 19:11:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Max Filippov X-Patchwork-Id: 690094 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 3t7gpN0KPMz9t1P for ; Wed, 2 Nov 2016 06:12:07 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=MtEgB2Mh; 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:from :to:cc:subject:date:message-id; q=dns; s=default; b=BpYuDMstuXVI /ai8dbesXLRxnjxLgcgbYSxmTLkNTpbOEaapjkXnTTvSzlSUKzvKyzO/ib57DMf1 rcksrGs9MtDVBTGIbVQaX/qR1yalVKKw1n2+f4Qmxb7YoJbM5xHMPRX6ISfN+TTQ 6QJbpTeIf4NwoW21rbHxyBhx2jgxut4= 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:from :to:cc:subject:date:message-id; s=default; bh=hZ3YNYQCH0RcZq1g8B fYD5vnDP0=; b=MtEgB2Mh6d0Of74WzajbRtZwCXWLuH72rHKgUVpOt073j7V6Bu a5NFWu1xYiiesH+1r1mRVa7FwMiwty3dc3FbmQl+1aukdJy2Wgkjx+akAa5Y5Ve4 rzDaJS0d0UVHu0sCNkysDxRCN3RRNM3Wm7LNJw/h34lAYq4osNVaQnKlE= Received: (qmail 29115 invoked by alias); 1 Nov 2016 19:11:59 -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 29101 invoked by uid 89); 1 Nov 2016 19:11:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, FROM_LOCAL_NOVOWEL, HK_RANDOM_ENVFROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:2252 X-HELO: mail-pf0-f196.google.com Received: from mail-pf0-f196.google.com (HELO mail-pf0-f196.google.com) (209.85.192.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 01 Nov 2016 19:11:57 +0000 Received: by mail-pf0-f196.google.com with SMTP id y68so6499818pfb.1 for ; Tue, 01 Nov 2016 12:11:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=4diz7fGsiqg76xHhJnQSvtCFDD4zzfTx7gS5IFN2m1s=; b=U7FGIeXakkjAa6pJbmZdXCPKRCoQDzVE5mYDePNKL19TMMKsz8Mt587V0l6gIILSnl ucxy/aofYyGsVPd/Q+32Jmx7Wk2EojYBDYawPQp38Trprvpjb6UIh9/4/guicbgYLkdu yf1pWan+6DmWdFaK8WHrOtFh5JSp+6+wk0/appsRg0kbYjTxzbqJl1RfVJhgfEByqsVT fna0v/bg/FH5JtakxQjWKScD4mvq+tqiJ7MA1NZ2ftOq4lS/e/iQjiByLF6CBfuzx1ss XSkLOZWLm+1cQ5aFmbGHjooX5g/UqnBlq7/EZSu/Sh2hxfMtX5Y3dH9r8W720D1y+m3g Swbw== X-Gm-Message-State: ABUngve57Q91CiGZv/Z5tNj+GyGz6Wl+9S3tpDsgVJRt7OmGyGnVBjlyAb+10vqDXTPaNw== X-Received: by 10.99.244.18 with SMTP id g18mr51906519pgi.129.1478027515967; Tue, 01 Nov 2016 12:11:55 -0700 (PDT) Received: from octofox.metropolis (corp.Cadence.COM. [158.140.1.28]) by smtp.gmail.com with ESMTPSA id xk6sm43985657pab.26.2016.11.01.12.11.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 01 Nov 2016 12:11:54 -0700 (PDT) From: Max Filippov To: gcc-patches@gcc.gnu.org Cc: linux-xtensa@linux-xtensa.org, Sterling Augustine , Max Filippov Subject: [PATCH] xtensa: fix ICE on pr59037.c test Date: Tue, 1 Nov 2016 12:11:45 -0700 Message-Id: <1478027505-15674-1-git-send-email-jcmvbkbc@gmail.com> X-IsSubscribed: yes xtensa gcc gets ICE on pr59037.c test because its xtensa_output_literal function cannot handle integer literals of sizes other than 4 and 8, whereas the test uses 16-byte int vector. Split integer literal formatting into the recursive function xtensa_output_integer_literal_parts capable of handling literals of any power of 2 size not less than 4. 2016-11-01 Max Filippov gcc/ * config/xtensa/xtensa.c (xtensa_output_integer_literal_parts): New function. (xtensa_output_literal): Use xtensa_output_integer_literal_parts to format MODE_INT and MODE_PARTIAL_INT literals. --- gcc/config/xtensa/xtensa.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c index 2115b57..6e8a25d 100644 --- a/gcc/config/xtensa/xtensa.c +++ b/gcc/config/xtensa/xtensa.c @@ -2535,13 +2535,32 @@ xtensa_output_addr_const_extra (FILE *fp, rtx x) return false; } +static void +xtensa_output_integer_literal_parts (FILE *file, rtx x, int size) +{ + if (size > 4 && !(size & (size - 1))) + { + rtx first, second; + + split_double (x, &first, &second); + xtensa_output_integer_literal_parts (file, first, size / 2); + fputs (", ", file); + xtensa_output_integer_literal_parts (file, second, size / 2); + } + else if (size == 4) + { + output_addr_const (file, x); + } + else + { + gcc_unreachable(); + } +} void xtensa_output_literal (FILE *file, rtx x, machine_mode mode, int labelno) { long value_long[2]; - int size; - rtx first, second; fprintf (file, "\t.literal .LC%u, ", (unsigned) labelno); @@ -2580,25 +2599,8 @@ xtensa_output_literal (FILE *file, rtx x, machine_mode mode, int labelno) case MODE_INT: case MODE_PARTIAL_INT: - size = GET_MODE_SIZE (mode); - switch (size) - { - case 4: - output_addr_const (file, x); - fputs ("\n", file); - break; - - case 8: - split_double (x, &first, &second); - output_addr_const (file, first); - fputs (", ", file); - output_addr_const (file, second); - fputs ("\n", file); - break; - - default: - gcc_unreachable (); - } + xtensa_output_integer_literal_parts (file, x, GET_MODE_SIZE (mode)); + fputs ("\n", file); break; default: