From patchwork Tue May 3 11:32:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 617920 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 3qzfDB2S01z9t3x for ; Tue, 3 May 2016 21:32:42 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=mWOFJ8nb; 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:date :from:to:cc:subject:message-id:mime-version:content-type; q=dns; s=default; b=GsaOspKsnWrhkUS1cvBg1iAh9R8uwK4cx2jkpfgr55RUcorI9C 2MAOK7ebfmaGQ0scf+3XflyQjbKDAKkOfSbOK/OiADZhiD09UomI5X7x5Bj4P3xQ IhSJyqLf2bHxhaRtvUkpGL4qElQKslvWOSkAynecNI+Q7G29LqnKdUXyg= 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:date :from:to:cc:subject:message-id:mime-version:content-type; s= default; bh=151mdJ39OKw4ut/YzoZpn+0YNwc=; b=mWOFJ8nbblf1as6l2Dyq md0KwSkhVQtBL1yMVughk2uB0aQwQrtmli6uzRSI6v2I7ZbzRIzqNGepZVsdqwmG XYmB/Bv7tNLlXrZDASK0STCJ6Hpln2tTbfv0OO9ZFoW0W4X98KT2BSrRaYhRuzWg gLWz/+15Bn3EkoVedUY0QZM= Received: (qmail 105477 invoked by alias); 3 May 2016 11:32:34 -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 105462 invoked by uid 89); 3 May 2016 11:32:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=sometime, quality X-HELO: mail-pf0-f182.google.com Received: from mail-pf0-f182.google.com (HELO mail-pf0-f182.google.com) (209.85.192.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 03 May 2016 11:32:32 +0000 Received: by mail-pf0-f182.google.com with SMTP id 77so8826508pfv.2 for ; Tue, 03 May 2016 04:32:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:user-agent; bh=tcbN60fbfFlp07rGM91mjvY8WouUlE8EF3v9OGdcBLo=; b=jl4iUCjBHtqH5LiP9e75gDNTwxZ0CFFhhlvi+9l8k3nwoVnXHoYf/JKabbEZmvNdZc LjRLoZyXt1GBhtTDVGKOJ/Qzr+rifx1tNXEjXVR4ACwt8Wac/MWU7m8Mx/OlvK+hW3Yo LAvO8T04nZK2w6ZWKJRCkbY6lAHzzbQN4v1Ar9928Yqdq0qz2oBG1xwEdqITbyHWxA+3 3sI74/TPldVgo3lMMQU9H84FnME8680AJA5+OzHJDd07odA6iH6Cx3ygLC+9dk+chyhG eNpZh2loR5T5BK9LQFkhfXBqdUx2NfKF/dgPfkesNySdR+pcBsIuhvo2h5Hug8k8/d5n cWlw== X-Gm-Message-State: AOPr4FU4qSlGjP6/5EttDoJ1vhHnVAjQxYRzrlwSpAWMCwJBQvdFsJDr7Qdc9oq8doTgRA== X-Received: by 10.98.18.195 with SMTP id 64mr2648982pfs.152.1462275150826; Tue, 03 May 2016 04:32:30 -0700 (PDT) Received: from bubble.grove.modra.org (CPE-58-160-146-233.sa.bigpond.net.au. [58.160.146.233]) by smtp.gmail.com with ESMTPSA id 194sm5248960pfv.8.2016.05.03.04.32.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 May 2016 04:32:30 -0700 (PDT) Received: by bubble.grove.modra.org (Postfix, from userid 1000) id 21952EA0153; Tue, 3 May 2016 21:02:26 +0930 (ACST) Date: Tue, 3 May 2016 21:02:26 +0930 From: Alan Modra To: gcc-patches@gcc.gnu.org Cc: David Edelsohn , Segher Boessenkool Subject: [RS6000] Fix ICE caused by rs6000_savres_strategy thinko Message-ID: <20160503113225.GI18915@bubble.grove.modra.org> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-IsSubscribed: yes rev 235672 (git cffc0b35) changed the condition for SAVE_MULTIPLE/ STORE_MULTIPLE, wrongly allowing a single reg. Bootstrapped and regression tested powerpc64-linux. OK to apply? Incidentally, the added testcase function shows a regression in -m32 -Os code quality that I'll fix sometime soon. gcc/ * config/rs6000/rs6000.c (rs6000_savres_strategy): Correct condition for SAVE_MULTIPLE/STORE_MULTIPLE. gcc/testsuite/ * gcc.target/powerpc/savres.c: Add func using a single gpr. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index e94aa66..6fa8a0c 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -23438,7 +23438,7 @@ rs6000_savres_strategy (rs6000_stack_t *info, if (TARGET_MULTIPLE && !TARGET_POWERPC64 && !(TARGET_SPE_ABI && info->spe_64bit_regs_used) - && info->first_gp_reg_save != 32) + && info->first_gp_reg_save < 31) { /* Prefer store multiple for saves over out-of-line routines, since the store-multiple instruction will always be smaller. */ diff --git a/gcc/testsuite/gcc.target/powerpc/savres.c b/gcc/testsuite/gcc.target/powerpc/savres.c index 5ebadf6..9432ed7 100644 --- a/gcc/testsuite/gcc.target/powerpc/savres.c +++ b/gcc/testsuite/gcc.target/powerpc/savres.c @@ -447,6 +447,16 @@ void s_r (void) __asm __volatile ("#%0" : "=m" (a) : : "r30", "r31"); } +void s_r31 (void) +{ + char a[33]; +#ifndef NO_BODY + TRASH_GPR (r31); + __asm__ __volatile__ ("#%0" : : "r" (r31)); +#endif + __asm __volatile ("#%0" : "=m" (a) : : "r31"); +} + void s_c (void) { char a[33]; @@ -1154,6 +1164,8 @@ main (void) VERIFY_REGS; s_r (); VERIFY_REGS; + s_r31 (); + VERIFY_REGS; s_c (); VERIFY_REGS; s_0 ();