From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 94577 invoked by alias); 5 Apr 2017 15:11:59 -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 94547 invoked by uid 89); 5 Apr 2017 15:11:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-13.1 required=5.0 tests=BAYES_00,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,KAM_LAZY_DOMAIN_SECURITY,LOTS_OF_MONEY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 05 Apr 2017 15:11:56 +0000 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1E46F3DBE5 for ; Wed, 5 Apr 2017 15:11:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 1E46F3DBE5 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=vmakarov@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 1E46F3DBE5 Received: from [10.10.123.183] (ovpn-123-183.rdu2.redhat.com [10.10.123.183]) by smtp.corp.redhat.com (Postfix) with ESMTP id A1E8E88E6D for ; Wed, 5 Apr 2017 15:11:55 +0000 (UTC) To: "gcc-patches@gcc.gnu.org" From: Vladimir Makarov Subject: patch to fix PR70703 Message-ID: <92d87dc9-0d07-4540-55cd-eca8177ae533@redhat.com> Date: Wed, 05 Apr 2017 15:11:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------CAFD93E7FEE5A33706952031" X-IsSubscribed: yes X-SW-Source: 2017-04/txt/msg00224.txt.bz2 This is a multi-part message in MIME format. --------------CAFD93E7FEE5A33706952031 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 172 The following patch fixes https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70703 The patch was successfully bootstrapped and tested on x86-64. Committed as rev. 246707 --------------CAFD93E7FEE5A33706952031 Content-Type: text/x-patch; name="pr70703.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="pr70703.patch" Content-length: 2739 Index: ChangeLog =================================================================== --- ChangeLog (revision 246706) +++ ChangeLog (working copy) @@ -1,3 +1,10 @@ +2017-04-05 Vladimir Makarov + + PR rtl-optimization/70703 + * ira-color.c (update_costs_from_allocno): Use the smallest mode. + (update_conflict_hard_regno_costs): Use long instead of unsigned + arithmetic for cost calculation. + 2017-04-05 Jakub Jelinek Bernd Edlinger Index: testsuite/ChangeLog =================================================================== --- testsuite/ChangeLog (revision 246706) +++ testsuite/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2017-04-05 Vladimir Makarov + + PR rtl-optimization/70703 + * gcc.target/i386/pr70703.c: New. + 2017-04-05 Jakub Jelinek PR sanitizer/80308 Index: ira-color.c =================================================================== --- ira-color.c (revision 246536) +++ ira-color.c (working copy) @@ -1367,6 +1367,16 @@ update_costs_from_allocno (ira_allocno_t || ALLOCNO_ASSIGNED_P (another_allocno)) continue; + if (GET_MODE_SIZE (ALLOCNO_MODE (cp->second)) < GET_MODE_SIZE (mode)) + /* If we have different modes use the smallest one. It is + a sub-register move. It is hard to predict what LRA + will reload (the pseudo or its sub-register) but LRA + will try to minimize the data movement. Also for some + register classes bigger modes might be invalid, + e.g. DImode for AREG on x86. For such cases the + register move cost will be maximal. */ + mode = ALLOCNO_MODE (cp->second); + cost = (cp->second == allocno ? ira_register_move_cost[mode][rclass][aclass] : ira_register_move_cost[mode][aclass][rclass]); @@ -1512,7 +1522,7 @@ update_conflict_hard_regno_costs (int *c index = ira_class_hard_reg_index[aclass][hard_regno]; if (index < 0) continue; - cost = (int) ((unsigned) conflict_costs [i] * mult) / div; + cost = (int) (((long) conflict_costs [i] * mult) / div); if (cost == 0) continue; cont_p = true; Index: testsuite/gcc.target/i386/pr70703.c =================================================================== --- testsuite/gcc.target/i386/pr70703.c (nonexistent) +++ testsuite/gcc.target/i386/pr70703.c (working copy) @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fomit-frame-pointer" } */ +/* { dg-require-effective-target ia32 } */ +/* { dg-final { scan-assembler "movl\t\\\$6700417, %eax" } } */ + +unsigned ud_x_641_mul(unsigned x) { + /* optimized version of x / 641 */ + return ((unsigned long long)x * 0x663d81) >> 32; +} --------------CAFD93E7FEE5A33706952031--