From patchwork Wed Jan 19 17:32:10 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anatoly Sokolov X-Patchwork-Id: 79499 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 3E76EB70E7 for ; Thu, 20 Jan 2011 04:31:58 +1100 (EST) Received: (qmail 28850 invoked by alias); 19 Jan 2011 17:31:52 -0000 Received: (qmail 28838 invoked by uid 22791); 19 Jan 2011 17:31:51 -0000 X-SWARE-Spam-Status: No, hits=1.9 required=5.0 tests=AWL, BAYES_50, KAM_THEBAT, RCVD_IN_DNSWL_NONE, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from contrabass.post.ru (HELO contrabass.post.ru) (85.21.78.5) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 19 Jan 2011 17:31:44 +0000 Received: from corbina.ru (mail.post.ru [195.14.50.16]) by contrabass.post.ru (Postfix) with ESMTP id 5FC61CA1D4; Wed, 19 Jan 2011 20:31:41 +0300 (MSK) Received: from [95.24.211.18] (account aesok@post.ru HELO Vista.corbina.ru) by corbina.ru (CommuniGate Pro SMTP 5.1.14) with ESMTPA id 293816784; Wed, 19 Jan 2011 20:31:41 +0300 Date: Wed, 19 Jan 2011 20:32:10 +0300 From: Anatoly Sokolov Message-ID: <1895370735.20110119203210@post.ru> To: gcc-patches@gcc.gnu.org CC: hpenner@de.ibm.com, uweigand@de.ibm.com, Andreas.Krebbel@de.ibm.com Subject: [S390] Hookize REGISTER_MOVE_COST and MEMORY_MOVE_COST MIME-Version: 1.0 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 Hi. This patch removes obsolete REGISTER_MOVE_COST and MEMORY_MOVE_COST macros from the S390 back end in the GCC and introduces equivalent TARGET_REGISTER_MOVE_COST and TARGET_MEMORY_MOVE_COST target hooks. Not tested. OK to install? * config/s390/s390.h (REGISTER_MOVE_COST, MEMORY_MOVE_COST): Remove. * config/s390/s390.c (s390_register_move_cost, s390_memory_move_cost): Make static. (TARGET_REGISTER_MOVE_COST, TARGET_MEMORY_MOVE_COST): Define. Anatoly. Index: gcc/config/s390/s390.c =================================================================== --- gcc/config/s390/s390.c (revision 169002) +++ gcc/config/s390/s390.c (working copy) @@ -2426,7 +2426,32 @@ && value == CONST0_RTX (GET_MODE (value))); } +/* Implement TARGET_REGISTER_MOVE_COST. */ +static int +s390_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, + reg_class_t from, reg_class_t to) +{ +/* On s390, copy between fprs and gprs is expensive. */ + if ((reg_classes_intersect_p (from, GENERAL_REGS) + && reg_classes_intersect_p (to, FP_REGS)) + || (reg_classes_intersect_p (from, FP_REGS) + && reg_classes_intersect_p (to, GENERAL_REGS))) + return 10; + + return 1; +} + +/* Implement TARGET_MEMORY_MOVE_COST. */ + +static int +s390_memory_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, + reg_class_t rclass ATTRIBUTE_UNUSED, + bool in ATTRIBUTE_UNUSED) +{ + return 1; +} + /* Compute a (partial) cost for rtx X. Return true if the complete cost has been computed, and false if subexpressions should be scanned. In either case, *TOTAL contains the cost result. @@ -10640,6 +10665,10 @@ #define TARGET_RTX_COSTS s390_rtx_costs #undef TARGET_ADDRESS_COST #define TARGET_ADDRESS_COST s390_address_cost +#undef TARGET_REGISTER_MOVE_COST +#define TARGET_REGISTER_MOVE_COST s390_register_move_cost +#undef TARGET_MEMORY_MOVE_COST +#define TARGET_MEMORY_MOVE_COST s390_memory_move_cost #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG s390_reorg Index: gcc/config/s390/s390.h =================================================================== --- gcc/config/s390/s390.h (revision 169002) +++ gcc/config/s390/s390.h (working copy) @@ -780,18 +780,6 @@ /* Relative costs of operations. */ -/* On s390, copy between fprs and gprs is expensive. */ -#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \ - (( ( reg_classes_intersect_p ((CLASS1), GENERAL_REGS) \ - && reg_classes_intersect_p ((CLASS2), FP_REGS)) \ - || ( reg_classes_intersect_p ((CLASS1), FP_REGS) \ - && reg_classes_intersect_p ((CLASS2), GENERAL_REGS))) ? 10 : 1) - -/* A C expression for the cost of moving data of mode M between a - register and memory. A value of 2 is the default; this cost is - relative to those in `REGISTER_MOVE_COST'. */ -#define MEMORY_MOVE_COST(M, C, I) 1 - /* A C expression for the cost of a branch instruction. A value of 1 is the default; other values are interpreted relative to that. */ #define BRANCH_COST(speed_p, predictable_p) 1