From patchwork Tue Oct 16 09:17:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Leoshkevich X-Patchwork-Id: 984615 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-487623-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="L3WOEhql"; dkim-atps=neutral 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 42Z8q311bsz9s5c for ; Tue, 16 Oct 2018 20:17:49 +1100 (AEDT) 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:mime-version:content-transfer-encoding :message-id; q=dns; s=default; b=BeuCLs0BJnO3zhzADQ3ennBI/5uz2y7 hzoENtjRsDHK1AOLMMc+wS1TUcD7jfPKYGbA9wlwsUVBOqXSYqIolei23w9+exCc KOmODl1slr/E6zt2GY9exrXyBPsYAKs0ctIxTQUJxYJR+SRDUyc0nh7t2DAbFOye XpDcn4URT40M= 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:mime-version:content-transfer-encoding :message-id; s=default; bh=JV40LqnO+ImNWKJbvspid7Nldn8=; b=L3WOE hqlfslBGQr4aS5l8eJWPH5S/LZCUyuvJM5BS4kVWW7K2Z1WanUTQ0J4FH258+zG5 B6975lO0yjhyIiFvtHyss7ZrTSHwErMCaC5AbWtbX+Pxc02bPz5kq/T1O+4LD/vC jRBIq3dmEsQLf7P6rR9Nnf6gF9n8nTYHsTW6p8= Received: (qmail 126318 invoked by alias); 16 Oct 2018 09:17:41 -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 125059 invoked by uid 89); 16 Oct 2018 09:17:39 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KHOP_DYNAMIC, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=arseny, solokha, Solokha, Arseny X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0b-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.158.5) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 16 Oct 2018 09:17:38 +0000 Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w9G9FlQq159767 for ; Tue, 16 Oct 2018 05:17:36 -0400 Received: from e06smtp04.uk.ibm.com (e06smtp04.uk.ibm.com [195.75.94.100]) by mx0b-001b2d01.pphosted.com with ESMTP id 2n5acb764m-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 16 Oct 2018 05:17:36 -0400 Received: from localhost by e06smtp04.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 16 Oct 2018 10:17:34 +0100 Received: from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194) by e06smtp04.uk.ibm.com (192.168.101.134) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Tue, 16 Oct 2018 10:17:33 +0100 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w9G9HVcQ56361050 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 16 Oct 2018 09:17:31 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 928F652051; Tue, 16 Oct 2018 09:17:31 +0000 (GMT) Received: from white.boeblingen.de.ibm.com (unknown [9.152.98.167]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 54D7B52050; Tue, 16 Oct 2018 09:17:31 +0000 (GMT) From: Ilya Leoshkevich To: gcc-patches@gcc.gnu.org Cc: vmakarov@gcc.gnu.org, asolokha@gmx.com, bergner@vnet.ibm.com, krebbel@linux.ibm.com, rdapp@linux.ibm.com, Ilya Leoshkevich Subject: [PATCH] lra: fix spill_hard_reg_in_range clobber check Date: Tue, 16 Oct 2018 11:17:27 +0200 MIME-Version: 1.0 x-cbid: 18101609-0016-0000-0000-000002139CB0 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18101609-0017-0000-0000-0000326B2DE9 Message-Id: <20181016091727.14213-1-iii@linux.ibm.com> X-IsSubscribed: yes Bootstrap and regtest are running on x86_64-redhat-linux. Insns in FROM..TO range might not be recognized yet, and their corresponding entries in lra_insn_recog_data[] might be NULLs. In the code from PR87596 the problematic insn is merely (note 148 154 68 7 NOTE_INSN_DELETED) however I assume that non-note insns may occur as well. So make sure they are recognized before touching their lra_insn_recog_data_t. gcc/ChangeLog: 2018-10-16 Ilya Leoshkevich PR rtl-optimization/87596 * lra-constraints.c (spill_hard_reg_in_range): Use lra_get_insn_recog_data () instead of lra_insn_recog_data[] for instructions in FROM..TO range. gcc/testsuite/ChangeLog: 2018-10-16 Ilya Leoshkevich PR rtl-optimization/87596 * gcc.target/i386/pr87596.c: New test. --- gcc/lra-constraints.c | 3 ++- gcc/testsuite/gcc.target/i386/pr87596.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr87596.c diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 774d1ff3aaa..0d9cac07fb2 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -5696,10 +5696,11 @@ spill_hard_reg_in_range (int regno, enum reg_class rclass, rtx_insn *from, rtx_i continue; for (insn = from; insn != NEXT_INSN (to); insn = NEXT_INSN (insn)) { - lra_insn_recog_data_t id = lra_insn_recog_data[uid = INSN_UID (insn)]; + lra_insn_recog_data_t id = lra_get_insn_recog_data (insn); struct lra_static_insn_data *static_id = id->insn_static_data; struct lra_insn_reg *reg; + uid = INSN_UID (insn); if (bitmap_bit_p (&lra_reg_info[hard_regno].insn_bitmap, uid)) break; for (reg = static_id->hard_regs; reg != NULL; reg = reg->next) diff --git a/gcc/testsuite/gcc.target/i386/pr87596.c b/gcc/testsuite/gcc.target/i386/pr87596.c new file mode 100644 index 00000000000..764708b694a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr87596.c @@ -0,0 +1,16 @@ +/* LRA corner case which triggered a segfault. */ +/* Reduced testcase by Arseny Solokha. */ +/* { dg-do compile { target int128 } } */ +/* { dg-options "-O1 -fschedule-insns -ftrapv -funroll-all-loops -fno-tree-dominator-opts -fno-tree-loop-im" } */ + +void +wh (__int128 *ku) +{ + unsigned int *dp; + + while (*ku < 1) + { + *dp <<= 32; /* { dg-warning "left shift count >= width of type" } */ + ++*ku; + } +}