From patchwork Sat Sep 1 13:20:54 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleg Endo X-Patchwork-Id: 181136 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 6B33F2C008C for ; Sat, 1 Sep 2012 23:21:45 +1000 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1347110506; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:Mime-Version:Mailing-List:Precedence:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=F8BFRi9NAoroP6MdIBXgfFOTZZg=; b=yGMvT5Zjo1UO5+F QVotFq8MRRjItHRi6GAHoghEb8i81CpTZ/5VeaJMlHMmjn+YjfBixsSoVgQEtKZP DFHQhhibd7f/XBYQeVbpJxeN+6YQ3J+pPlA1+3oo4s/g/3NKxlV+TksmeXxL7UIs Z86gg8dCpWjN7aYtFhiCRvDPB64Y= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References:Content-Type:Mime-Version:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=EFCfpQfjHKk0/A7kfnkm2sy4r/NXkFe4wK+2fdYqfOopyjXFQsPh1QCduFni0X X77T7HGdhyjAN2NMvsC8k+Qf6x06YufLHJSNVVnAzbDm4Fg8oM77DTbKCkk+OH0i c/mkWuEVuLWv9o4Yg3k5p6WDlLe7aQPrCCQS2VK3n/siQ=; Received: (qmail 26611 invoked by alias); 1 Sep 2012 13:21:36 -0000 Received: (qmail 26591 invoked by uid 22791); 1 Sep 2012 13:21:32 -0000 X-SWARE-Spam-Status: No, hits=-3.6 required=5.0 tests=BAYES_00, KHOP_BIG_TO_CC, KHOP_THREADED, RCVD_IN_DNSWL_NONE, RCVD_IN_HOSTKARMA_NO, RP_MATCHES_RCVD, TW_DR, UNPARSEABLE_RELAY X-Spam-Check-By: sourceware.org Received: from mailout05.t-online.de (HELO mailout05.t-online.de) (194.25.134.82) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 01 Sep 2012 13:21:15 +0000 Received: from fwd04.aul.t-online.de (fwd04.aul.t-online.de ) by mailout05.t-online.de with smtp id 1T7ndO-0007Xa-9D; Sat, 01 Sep 2012 15:21:10 +0200 Received: from [192.168.0.100] (bKBXd8Z-ohabmMlUDzUrMq3WB0+IBBhm76C5t6Sr5dTKwfkOG2BYqtT8CYUFdzsQue@[93.218.156.167]) by fwd04.t-online.de with esmtp id 1T7nd9-1dPTGa0; Sat, 1 Sep 2012 15:20:55 +0200 Message-ID: <1346505654.2200.25.camel@yam-132-YW-E178-FTW> Subject: Re: [middle-end] Add machine_mode to address_cost target hook From: Oleg Endo To: Richard Sandiford Cc: gcc-patches , law@redhat.com, aoliva@redhat.com, nickc@redhat.com, geoffk@geoffk.org, dje.gcc@gmail.com, joern.rennecke@embecosm.com, richard.earnshaw@arm.com, paul@codesourcery.com, ramana.radhakrishnan@arm.com, eager@eagercon.com, bonzini@gnu.org Date: Sat, 01 Sep 2012 15:20:54 +0200 In-Reply-To: <87hariaz1y.fsf@talisman.home> References: <1346287598.2407.90.camel@yam-132-YW-E178-FTW> <87hariaz1y.fsf@talisman.home> 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 On Sat, 2012-09-01 at 10:10 +0100, Richard Sandiford wrote: > Thanks for doing this. We should perhaps add the address space too, > but if you don't feel like redoing the whole patch, that can wait until > someone wants it. I just had a look at the address space thing... There are already target hook overloads with address space parameters, like legitimate_address_p and legitimize_address. Paolo suggested to do something similar a while ago: http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01191.html .. but somehow this never made it into mainline?! Maybe it would be better to ... a) Add an 'address_cost' overload to the existing onces. (at least it would be consistent...) b) Remove the overloads altogether and add the address space arg to the original funcs. Personally, I'd probably favor b). Some targets (e.g. rl78) already override the address space overloads and just ignore the address space arg. Either way, maybe it's better to do it in a separate patch. This looks a bit like a pandora's box :) > > /* If the target doesn't override, compute the cost as with arithmetic. */ > > > > int > > -default_address_cost (rtx x, bool speed) > > +default_address_cost (rtx x, enum machine_mode mode, bool speed) > > { > > return rtx_cost (x, MEM, 0, speed); > > } > > Remove the "mode" parameter name because it's unused. I think this > would trigger a warning otherwise. Removing won't do here, because of: Instead I've added ATTRIBUTE_UNUSED to avoid the warning. > Please change this to: > > static int > mips_address_cost (rtx addr, enum machine_mode mode, > bool speed ATTRIBUTE_UNUSED) > { > return mips_address_insns (addr, mode, false); > } > > MIPS is one of those targets that wanted to know the mode all along. > OK, done. Updated patch attached. ACK status of the whole thing so far is below. Somebody please check all the boxes :) [x] target-independent bits [ ] alpha [ ] arm [ ] avr [ ] bfin [ ] cr16 [ ] cris [ ] epiphany [ ] i386 [ ] ia64 [ ] iq2000 [ ] lm32 [ ] m32c [ ] m32r [ ] mcore [ ] mep [x] microblaze [x] mips [ ] mmix [x] mn10300 [ ] pa [ ] rs6000 [ ] rx [ ] s390 [ ] score [x] sh [ ] sparc [ ] spu [ ] stormy16 [ ] v850 [ ] vax [ ] xtensa Cheers, Oleg Index: gcc/rtlanal.c =================================================================== --- gcc/rtlanal.c (revision 190840) +++ gcc/rtlanal.c (working copy) @@ -3820,13 +3820,14 @@ if (!memory_address_addr_space_p (mode, x, as)) return 1000; - return targetm.address_cost (x, speed); + return targetm.address_cost (x, mode, speed); } /* If the target doesn't override, compute the cost as with arithmetic. */ int -default_address_cost (rtx x, bool speed) +default_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed) { return rtx_cost (x, MEM, 0, speed); } Index: gcc/output.h =================================================================== --- gcc/output.h (revision 190840) +++ gcc/output.h (working copy) @@ -606,7 +606,7 @@ extern void default_elf_fini_array_asm_out_destructor (rtx, int); extern int maybe_assemble_visibility (tree); -extern int default_address_cost (rtx, bool); +extern int default_address_cost (rtx, enum machine_mode, bool); /* Output stack usage information. */ extern void output_stack_usage (void); Index: gcc/doc/tm.texi =================================================================== --- gcc/doc/tm.texi (revision 190840) +++ gcc/doc/tm.texi (working copy) @@ -6440,7 +6440,7 @@ processed, and false when @code{rtx_cost} should recurse. @end deftypefn -@deftypefn {Target Hook} int TARGET_ADDRESS_COST (rtx @var{address}, bool @var{speed}) +@deftypefn {Target Hook} int TARGET_ADDRESS_COST (rtx @var{address}, enum machine_mode @var{mode}, bool @var{speed}) This hook computes the cost of an addressing mode that contains @var{address}. If not defined, the cost is computed from the @var{address} expression and the @code{TARGET_RTX_COST} hook. Index: gcc/target.def =================================================================== --- gcc/target.def (revision 190840) +++ gcc/target.def (working copy) @@ -1758,7 +1758,7 @@ DEFHOOK (address_cost, "", - int, (rtx address, bool speed), + int, (rtx address, enum machine_mode mode, bool speed), default_address_cost) /* Return where to allocate pseudo for a given hard register initial value. */ Index: gcc/hooks.c =================================================================== --- gcc/hooks.c (revision 190840) +++ gcc/hooks.c (working copy) @@ -200,6 +200,14 @@ return 0; } +int +hook_int_rtx_mode_bool_0 (rtx a ATTRIBUTE_UNUSED, + enum machine_mode b ATTRIBUTE_UNUSED, + bool c ATTRIBUTE_UNUSED) +{ + return 0; +} + unsigned int hook_uint_void_0 (void) { Index: gcc/hooks.h =================================================================== --- gcc/hooks.h (revision 190840) +++ gcc/hooks.h (working copy) @@ -74,6 +74,7 @@ extern int hook_int_const_tree_const_tree_1 (const_tree, const_tree); extern int hook_int_rtx_0 (rtx); extern int hook_int_rtx_bool_0 (rtx, bool); +extern int hook_int_rtx_mode_bool_0 (rtx, enum machine_mode, bool); extern tree hook_tree_const_tree_null (const_tree); Index: gcc/config/s390/s390.c =================================================================== --- gcc/config/s390/s390.c (revision 190840) +++ gcc/config/s390/s390.c (working copy) @@ -2597,7 +2597,8 @@ /* Return the cost of an address rtx ADDR. */ static int -s390_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) +s390_address_cost (rtx addr, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { struct s390_address ad; if (!s390_decompose_address (addr, &ad)) Index: gcc/config/m32c/m32c.c =================================================================== --- gcc/config/m32c/m32c.c (revision 190840) +++ gcc/config/m32c/m32c.c (working copy) @@ -2278,7 +2278,8 @@ #undef TARGET_ADDRESS_COST #define TARGET_ADDRESS_COST m32c_address_cost static int -m32c_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) +m32c_address_cost (rtx addr, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { int i; /* fprintf(stderr, "\naddress_cost\n"); Index: gcc/config/m32r/m32r.c =================================================================== --- gcc/config/m32r/m32r.c (revision 190840) +++ gcc/config/m32r/m32r.c (working copy) @@ -161,7 +161,7 @@ #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS m32r_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_PROMOTE_PROTOTYPES #define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true Index: gcc/config/i386/i386.c =================================================================== --- gcc/config/i386/i386.c (revision 190840) +++ gcc/config/i386/i386.c (working copy) @@ -11955,7 +11955,8 @@ requires to two regs - that would mean more pseudos with longer lifetimes. */ static int -ix86_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) +ix86_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { struct ix86_address parts; int cost = 1; Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c (revision 190840) +++ gcc/config/rs6000/rs6000.c (working copy) @@ -928,7 +928,7 @@ static rtx rs6000_emit_set_long_const (rtx, HOST_WIDE_INT, HOST_WIDE_INT); static int rs6000_memory_move_cost (enum machine_mode, reg_class_t, bool); static bool rs6000_debug_rtx_costs (rtx, int, int, int, int *, bool); -static int rs6000_debug_address_cost (rtx, bool); +static int rs6000_debug_address_cost (rtx, enum machine_mode, bool); static int rs6000_debug_adjust_cost (rtx, rtx, rtx, int); static bool is_microcoded_insn (rtx); static bool is_nonpipeline_insn (rtx); @@ -1294,7 +1294,7 @@ #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS rs6000_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_DWARF_REGISTER_SPAN #define TARGET_DWARF_REGISTER_SPAN rs6000_dwarf_register_span @@ -26070,12 +26070,13 @@ /* Debug form of ADDRESS_COST that is selected if -mdebug=cost. */ static int -rs6000_debug_address_cost (rtx x, bool speed) +rs6000_debug_address_cost (rtx x, enum machine_mode mode, bool speed) { int ret = TARGET_ADDRESS_COST (x, speed); - fprintf (stderr, "\nrs6000_address_cost, return = %d, speed = %s, x:\n", - ret, speed ? "true" : "false"); + fprintf (stderr, + "\nrs6000_address_cost, return = %d, mode = %s, speed = %s, x:\n", + ret, GET_MODE_NAME (mode), speed ? "true" : "false"); debug_rtx (x); return ret; Index: gcc/config/alpha/alpha.c =================================================================== --- gcc/config/alpha/alpha.c (revision 190840) +++ gcc/config/alpha/alpha.c (working copy) @@ -9795,7 +9795,7 @@ #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS alpha_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG alpha_reorg Index: gcc/config/mn10300/mn10300.c =================================================================== --- gcc/config/mn10300/mn10300.c (revision 190840) +++ gcc/config/mn10300/mn10300.c (working copy) @@ -2142,7 +2142,8 @@ with an address register. */ static int -mn10300_address_cost (rtx x, bool speed) +mn10300_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed) { HOST_WIDE_INT i; rtx base, index; @@ -2457,7 +2458,7 @@ break; case MEM: - total = mn10300_address_cost (XEXP (x, 0), speed); + total = mn10300_address_cost (XEXP (x, 0), GET_MODE (x), speed); if (speed) total = COSTS_N_INSNS (2 + total); goto alldone; Index: gcc/config/pa/pa.c =================================================================== --- gcc/config/pa/pa.c (revision 190840) +++ gcc/config/pa/pa.c (working copy) @@ -91,7 +91,7 @@ static void fix_range (const char *); static int hppa_register_move_cost (enum machine_mode mode, reg_class_t, reg_class_t); -static int hppa_address_cost (rtx, bool); +static int hppa_address_cost (rtx, enum machine_mode mode, bool); static bool hppa_rtx_costs (rtx, int, int, int, int *, bool); static inline rtx force_mode (enum machine_mode, rtx); static void pa_reorg (void); @@ -1397,7 +1397,7 @@ as GO_IF_LEGITIMATE_ADDRESS. */ static int -hppa_address_cost (rtx X, +hppa_address_cost (rtx X, enum machine_mode mode ATTRIBUTE_UNUSED, bool speed ATTRIBUTE_UNUSED) { switch (GET_CODE (X)) Index: gcc/config/stormy16/stormy16.c =================================================================== --- gcc/config/stormy16/stormy16.c (revision 190840) +++ gcc/config/stormy16/stormy16.c (working copy) @@ -58,7 +58,7 @@ static void xstormy16_init_builtins (void); static rtx xstormy16_expand_builtin (tree, rtx, rtx, enum machine_mode, int); static bool xstormy16_rtx_costs (rtx, int, int, int, int *, bool); -static int xstormy16_address_cost (rtx, bool); +static int xstormy16_address_cost (rtx, enum machine_mode, bool); static bool xstormy16_return_in_memory (const_tree, const_tree); static GTY(()) section *bss100_section; @@ -103,7 +103,8 @@ } static int -xstormy16_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) +xstormy16_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { return (CONST_INT_P (x) ? 2 : GET_CODE (x) == PLUS ? 7 Index: gcc/config/sparc/sparc.c =================================================================== --- gcc/config/sparc/sparc.c (revision 190840) +++ gcc/config/sparc/sparc.c (working copy) @@ -689,7 +689,7 @@ #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS sparc_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_REGISTER_MOVE_COST #define TARGET_REGISTER_MOVE_COST sparc_register_move_cost Index: gcc/config/lm32/lm32.c =================================================================== --- gcc/config/lm32/lm32.c (revision 190840) +++ gcc/config/lm32/lm32.c (working copy) @@ -86,7 +86,7 @@ #undef TARGET_OPTION_OVERRIDE #define TARGET_OPTION_OVERRIDE lm32_option_override #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS lm32_rtx_costs #undef TARGET_IN_SMALL_DATA_P Index: gcc/config/epiphany/epiphany.c =================================================================== --- gcc/config/epiphany/epiphany.c (revision 190840) +++ gcc/config/epiphany/epiphany.c (working copy) @@ -729,7 +729,8 @@ If ADDR is not a valid address, its cost is irrelevant. */ static int -epiphany_address_cost (rtx addr, bool speed) +epiphany_address_cost (rtx addr, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed) { rtx reg; rtx off = const0_rtx; Index: gcc/config/cris/cris.c =================================================================== --- gcc/config/cris/cris.c (revision 190840) +++ gcc/config/cris/cris.c (working copy) @@ -130,7 +130,7 @@ static int cris_register_move_cost (enum machine_mode, reg_class_t, reg_class_t); static int cris_memory_move_cost (enum machine_mode, reg_class_t, bool); static bool cris_rtx_costs (rtx, int, int, int, int *, bool); -static int cris_address_cost (rtx, bool); +static int cris_address_cost (rtx, enum machine_mode, bool); static bool cris_pass_by_reference (cumulative_args_t, enum machine_mode, const_tree, bool); static int cris_arg_partial_bytes (cumulative_args_t, enum machine_mode, @@ -2149,7 +2149,8 @@ /* The ADDRESS_COST worker. */ static int -cris_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) +cris_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { /* The metric to use for the cost-macros is unclear. The metric used here is (the number of cycles needed) / 2, Index: gcc/config/arm/arm.c =================================================================== --- gcc/config/arm/arm.c (revision 190840) +++ gcc/config/arm/arm.c (working copy) @@ -162,7 +162,7 @@ static bool arm_xscale_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool); static bool arm_9e_rtx_costs (rtx, enum rtx_code, enum rtx_code, int *, bool); static bool arm_rtx_costs (rtx, int, int, int, int *, bool); -static int arm_address_cost (rtx, bool); +static int arm_address_cost (rtx, enum machine_mode, bool); static int arm_register_move_cost (enum machine_mode, reg_class_t, reg_class_t); static int arm_memory_move_cost (enum machine_mode, reg_class_t, bool); static void arm_init_builtins (void); @@ -8411,7 +8411,8 @@ } static int -arm_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) +arm_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { return TARGET_32BIT ? arm_arm_address_cost (x) : arm_thumb_address_cost (x); } Index: gcc/config/ia64/ia64.c =================================================================== --- gcc/config/ia64/ia64.c (revision 190840) +++ gcc/config/ia64/ia64.c (working copy) @@ -524,7 +524,7 @@ #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS ia64_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_UNSPEC_MAY_TRAP_P #define TARGET_UNSPEC_MAY_TRAP_P ia64_unspec_may_trap_p Index: gcc/config/rx/rx.c =================================================================== --- gcc/config/rx/rx.c (revision 190840) +++ gcc/config/rx/rx.c (working copy) @@ -2724,7 +2724,7 @@ } static int -rx_address_cost (rtx addr, bool speed) +rx_address_cost (rtx addr, enum machine_mode mode ATTRIBUTE_UNUSED, bool speed) { rtx a, b; Index: gcc/config/vax/vax.c =================================================================== --- gcc/config/vax/vax.c (revision 190840) +++ gcc/config/vax/vax.c (working copy) @@ -53,7 +53,7 @@ static void vax_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree); static int vax_address_cost_1 (rtx); -static int vax_address_cost (rtx, bool); +static int vax_address_cost (rtx, enum machine_mode, bool); static bool vax_rtx_costs (rtx, int, int, int, int *, bool); static rtx vax_function_arg (cumulative_args_t, enum machine_mode, const_tree, bool); @@ -738,7 +738,8 @@ } static int -vax_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) +vax_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { return (1 + (REG_P (x) ? 0 : vax_address_cost_1 (x))); } Index: gcc/config/sh/sh.c =================================================================== --- gcc/config/sh/sh.c (revision 190840) +++ gcc/config/sh/sh.c (working copy) @@ -248,7 +248,7 @@ static bool unspec_caller_rtx_p (rtx); static bool sh_cannot_copy_insn_p (rtx); static bool sh_rtx_costs (rtx, int, int, int, int *, bool); -static int sh_address_cost (rtx, bool); +static int sh_address_cost (rtx, enum machine_mode, bool); static int sh_pr_n_sets (void); static rtx sh_allocate_initial_value (rtx); static reg_class_t sh_preferred_reload_class (rtx, reg_class_t); @@ -3368,7 +3368,8 @@ /* Compute the cost of an address. */ static int -sh_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) +sh_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { /* 'reg + disp' addressing. */ if (satisfies_constraint_Sdd (x)) Index: gcc/config/microblaze/microblaze.c =================================================================== --- gcc/config/microblaze/microblaze.c (revision 190840) +++ gcc/config/microblaze/microblaze.c (working copy) @@ -1043,7 +1043,8 @@ /* Provide the costs of an addressing mode that contains ADDR. If ADDR is not a valid address, its cost is irrelevant. */ static int -microblaze_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) +microblaze_address_cost (rtx addr, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { return COSTS_N_INSNS (microblaze_address_insns (addr, GET_MODE (addr))); } Index: gcc/config/xtensa/xtensa.c =================================================================== --- gcc/config/xtensa/xtensa.c (revision 190840) +++ gcc/config/xtensa/xtensa.c (working copy) @@ -211,7 +211,7 @@ #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS xtensa_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_MEMBER_TYPE_FORCES_BLK #define TARGET_MEMBER_TYPE_FORCES_BLK xtensa_member_type_forces_blk Index: gcc/config/spu/spu.c =================================================================== --- gcc/config/spu/spu.c (revision 190840) +++ gcc/config/spu/spu.c (working copy) @@ -7161,7 +7161,7 @@ #define TARGET_RTX_COSTS spu_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_SCHED_ISSUE_RATE #define TARGET_SCHED_ISSUE_RATE spu_sched_issue_rate Index: gcc/config/mips/mips.c =================================================================== --- gcc/config/mips/mips.c (revision 190840) +++ gcc/config/mips/mips.c (working copy) @@ -3943,9 +3943,10 @@ /* Implement TARGET_ADDRESS_COST. */ static int -mips_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) +mips_address_cost (rtx addr, enum machine_mode mode, + bool speed ATTRIBUTE_UNUSED) { - return mips_address_insns (addr, SImode, false); + return mips_address_insns (addr, mode, false); } /* Information about a single instruction in a multi-instruction Index: gcc/config/mep/mep.c =================================================================== --- gcc/config/mep/mep.c (revision 190840) +++ gcc/config/mep/mep.c (working copy) @@ -212,7 +212,7 @@ static rtx mep_make_bundle (rtx, rtx); static void mep_bundle_insns (rtx); static bool mep_rtx_cost (rtx, int, int, int, int *, bool); -static int mep_address_cost (rtx, bool); +static int mep_address_cost (rtx, enum machine_mode, bool); static void mep_setup_incoming_varargs (cumulative_args_t, enum machine_mode, tree, int *, int); static bool mep_pass_by_reference (cumulative_args_t cum, enum machine_mode, @@ -7152,7 +7152,9 @@ } static int -mep_address_cost (rtx addr ATTRIBUTE_UNUSED, bool ATTRIBUTE_UNUSED speed_p) +mep_address_cost (rtx addr ATTRIBUTE_UNUSED, + enum machine_mode mode ATTRIBUTE_UNUSED, + bool ATTRIBUTE_UNUSED speed_p) { return 1; } Index: gcc/config/v850/v850.c =================================================================== --- gcc/config/v850/v850.c (revision 190840) +++ gcc/config/v850/v850.c (working copy) @@ -3130,7 +3130,7 @@ #define TARGET_RTX_COSTS v850_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG v850_reorg Index: gcc/config/mcore/mcore.c =================================================================== --- gcc/config/mcore/mcore.c (revision 190840) +++ gcc/config/mcore/mcore.c (working copy) @@ -191,7 +191,7 @@ #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS mcore_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG mcore_reorg Index: gcc/config/mmix/mmix.c =================================================================== --- gcc/config/mmix/mmix.c (revision 190840) +++ gcc/config/mmix/mmix.c (working copy) @@ -223,7 +223,7 @@ #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS mmix_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 +#define TARGET_ADDRESS_COST hook_int_rtx_mode_bool_0 #undef TARGET_REGISTER_MOVE_COST #define TARGET_REGISTER_MOVE_COST mmix_register_move_cost Index: gcc/config/iq2000/iq2000.c =================================================================== --- gcc/config/iq2000/iq2000.c (revision 190840) +++ gcc/config/iq2000/iq2000.c (working copy) @@ -152,7 +152,7 @@ enum machine_mode, tree, int *, int); static bool iq2000_rtx_costs (rtx, int, int, int, int *, bool); -static int iq2000_address_cost (rtx, bool); +static int iq2000_address_cost (rtx, enum machine_mode, bool); static section *iq2000_select_section (tree, int, unsigned HOST_WIDE_INT); static rtx iq2000_legitimize_address (rtx, rtx, enum machine_mode); static bool iq2000_pass_by_reference (cumulative_args_t, enum machine_mode, @@ -779,7 +779,7 @@ /* Provide the costs of an addressing mode that contains ADDR. */ static int -iq2000_address_cost (rtx addr, bool speed) +iq2000_address_cost (rtx addr, enum machine_mode mode, bool speed) { switch (GET_CODE (addr)) { @@ -830,7 +830,7 @@ case LABEL_REF: case HIGH: case LO_SUM: - return iq2000_address_cost (plus1, speed) + 1; + return iq2000_address_cost (plus1, mode, speed) + 1; default: break; Index: gcc/config/score/score-protos.h =================================================================== --- gcc/config/score/score-protos.h (revision 190840) +++ gcc/config/score/score-protos.h (working copy) @@ -39,7 +39,7 @@ extern bool score_unaligned_load (rtx* ops); extern bool score_unaligned_store (rtx* ops); extern bool score_block_move (rtx* ops); -extern int score_address_cost (rtx addr, bool speed); +extern int score_address_cost (rtx addr, enum machine_mode, bool speed); extern int score_address_p (enum machine_mode mode, rtx x, int strict); extern int score_reg_class (int regno); extern int score_hard_regno_mode_ok (unsigned int, enum machine_mode); Index: gcc/config/score/score.c =================================================================== --- gcc/config/score/score.c (revision 190840) +++ gcc/config/score/score.c (working copy) @@ -1232,7 +1232,7 @@ /* Implement TARGET_ADDRESS_COST macro. */ int -score_address_cost (rtx addr, +score_address_cost (rtx addr, enum machine_mode mode ATTRIBUTE_UNUSED, bool speed ATTRIBUTE_UNUSED) { return score_address_insns (addr, SImode); Index: gcc/config/cr16/cr16.c =================================================================== --- gcc/config/cr16/cr16.c (revision 190840) +++ gcc/config/cr16/cr16.c (working copy) @@ -1286,7 +1286,8 @@ /* Return cost of the memory address x. */ static int -cr16_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) +cr16_address_cost (rtx addr, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { enum cr16_addrtype addrtype; struct cr16_address address; Index: gcc/config/bfin/bfin.c =================================================================== --- gcc/config/bfin/bfin.c (revision 190840) +++ gcc/config/bfin/bfin.c (working copy) @@ -1288,7 +1288,9 @@ All addressing modes are equally cheap on the Blackfin. */ static int -bfin_address_cost (rtx addr ATTRIBUTE_UNUSED, bool speed ATTRIBUTE_UNUSED) +bfin_address_cost (rtx addr ATTRIBUTE_UNUSED, + enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { return 1; } Index: gcc/config/avr/avr.c =================================================================== --- gcc/config/avr/avr.c (revision 190840) +++ gcc/config/avr/avr.c (working copy) @@ -8886,7 +8886,8 @@ /* Implement `TARGET_ADDRESS_COST'. */ static int -avr_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) +avr_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { int cost = 4;