From patchwork Wed May 25 19:02:23 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pat Haugen X-Patchwork-Id: 97400 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]) by ozlabs.org (Postfix) with SMTP id C5DC8B6F98 for ; Thu, 26 May 2011 05:03:08 +1000 (EST) Received: (qmail 2531 invoked by alias); 25 May 2011 19:03:06 -0000 Received: (qmail 2411 invoked by uid 22791); 25 May 2011 19:03:04 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, TW_DB, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from e8.ny.us.ibm.com (HELO e8.ny.us.ibm.com) (32.97.182.138) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 25 May 2011 19:02:50 +0000 Received: from d01relay03.pok.ibm.com (d01relay03.pok.ibm.com [9.56.227.235]) by e8.ny.us.ibm.com (8.14.4/8.13.1) with ESMTP id p4PIq4M2008593 for ; Wed, 25 May 2011 14:52:04 -0400 Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay03.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p4PJ2etP108866 for ; Wed, 25 May 2011 15:02:42 -0400 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p4PF2RjI019491 for ; Wed, 25 May 2011 12:02:28 -0300 Received: from pthw510.rchland.ibm.com (sig-9-65-153-125.mts.ibm.com [9.65.153.125]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p4PF2CAU017864; Wed, 25 May 2011 12:02:12 -0300 Message-ID: <4DDD523F.1030108@linux.vnet.ibm.com> Date: Wed, 25 May 2011 14:02:23 -0500 From: Pat Haugen User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org CC: David Edelsohn Subject: [PATCH, rs6000] Tidy up dumping of register/memory move cost X-IsSubscribed: yes 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 The following fixes a problem when dumping register costs, where the incorrect 'from' value was being written out because the code modified the incoming parameter value. It also changes things so that register/memory costs are only dumped on the outermost call, eliminating intermediate output when a cost calculation requires going through memory or GPRs. Bootstrap/regtest on powerpc64-linux with no new regressions. Ok for trunk? -Pat 2011-05-25 Pat Haugen * config/rs6000/rs6000.c (rs6000_register_move_cost): Preserve from parameter value for dump. Dump cost on outermost call only. (rs6000_memory_move_cost): Dump cost on outermost call only. Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c (revision 174138) +++ gcc/config/rs6000/rs6000.c (working copy) @@ -189,6 +189,8 @@ enum reg_class rs6000_regno_regclass[FIR /* Reload functions based on the type and the vector unit. */ static enum insn_code rs6000_vector_reload[NUM_MACHINE_MODES][2]; +static int dbg_cost_ctrl; + /* Built in types. */ tree rs6000_builtin_types[RS6000_BTI_MAX]; tree rs6000_builtin_decls[RS6000_BUILTIN_COUNT]; @@ -26428,26 +26430,31 @@ rs6000_register_move_cost (enum machine_ { int ret; + if (TARGET_DEBUG_COST) + dbg_cost_ctrl++; + /* Moves from/to GENERAL_REGS. */ if (reg_classes_intersect_p (to, GENERAL_REGS) || reg_classes_intersect_p (from, GENERAL_REGS)) { + reg_class_t rclass = from; + if (! reg_classes_intersect_p (to, GENERAL_REGS)) - from = to; + rclass = to; - if (from == FLOAT_REGS || from == ALTIVEC_REGS || from == VSX_REGS) - ret = (rs6000_memory_move_cost (mode, from, false) + if (rclass == FLOAT_REGS || rclass == ALTIVEC_REGS || rclass == VSX_REGS) + ret = (rs6000_memory_move_cost (mode, rclass, false) + rs6000_memory_move_cost (mode, GENERAL_REGS, false)); /* It's more expensive to move CR_REGS than CR0_REGS because of the shift. */ - else if (from == CR_REGS) + else if (rclass == CR_REGS) ret = 4; /* Power6 has slower LR/CTR moves so make them more expensive than memory in order to bias spills to memory .*/ else if (rs6000_cpu == PROCESSOR_POWER6 - && reg_classes_intersect_p (from, LINK_OR_CTR_REGS)) + && reg_classes_intersect_p (rclass, LINK_OR_CTR_REGS)) ret = 6 * hard_regno_nregs[0][mode]; else @@ -26471,10 +26478,14 @@ rs6000_register_move_cost (enum machine_ + rs6000_register_move_cost (mode, from, GENERAL_REGS)); if (TARGET_DEBUG_COST) - fprintf (stderr, - "rs6000_register_move_cost:, ret=%d, mode=%s, from=%s, to=%s\n", - ret, GET_MODE_NAME (mode), reg_class_names[from], - reg_class_names[to]); + { + if (dbg_cost_ctrl == 1) + fprintf (stderr, + "rs6000_register_move_cost:, ret=%d, mode=%s, from=%s, to=%s\n", + ret, GET_MODE_NAME (mode), reg_class_names[from], + reg_class_names[to]); + dbg_cost_ctrl--; + } return ret; } @@ -26488,6 +26499,9 @@ rs6000_memory_move_cost (enum machine_mo { int ret; + if (TARGET_DEBUG_COST) + dbg_cost_ctrl++; + if (reg_classes_intersect_p (rclass, GENERAL_REGS)) ret = 4 * hard_regno_nregs[0][mode]; else if (reg_classes_intersect_p (rclass, FLOAT_REGS)) @@ -26498,9 +26512,13 @@ rs6000_memory_move_cost (enum machine_mo ret = 4 + rs6000_register_move_cost (mode, rclass, GENERAL_REGS); if (TARGET_DEBUG_COST) - fprintf (stderr, - "rs6000_memory_move_cost: ret=%d, mode=%s, rclass=%s, in=%d\n", - ret, GET_MODE_NAME (mode), reg_class_names[rclass], in); + { + if (dbg_cost_ctrl == 1) + fprintf (stderr, + "rs6000_memory_move_cost: ret=%d, mode=%s, rclass=%s, in=%d\n", + ret, GET_MODE_NAME (mode), reg_class_names[rclass], in); + dbg_cost_ctrl--; + } return ret; }