This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [middle-end] Add machine_mode to address_cost target hook


On Tue, 2012-09-04 at 12:02 -0300, Alexandre Oliva wrote:

> > Index: gcc/config/mn10300/mn10300.c
> 
> > -      total = mn10300_address_cost (XEXP (x, 0), speed);
> > +      total = mn10300_address_cost (XEXP (x, 0), GET_MODE (x),
> > +				    ADDR_SPACE_GENERIC, speed);
> 
> Instead of ADDR_SPACE_GENERIC, this should be MEM_ADDR_SPACE (x), no?

Effectively, it actually doesn't matter, since the address space is not
used in the cost function.  But yeah, true, fixed thusly.  The change
log entry for this was also wrong.  Fixed that, too.  Thanks.  Updated
patch and change log below.

On Tue, 2012-09-04 at 12:38 +0200, Paolo Bonzini wrote:

> > I think you only need explicit approval for mn10300.  All other
> >changes are trivial.
> >

On Tue, 2012-09-04 at 19:43 +0100, Richard Sandiford wrote:

> Thanks, looks good to me.
> 
> Hopefully a friendly global maintainer will approve the whole thing in
> one go (modulo Alex's comment) so that you don't need to get
> individual
> approvals for all targets.

Hmm .. the ACK status so far is:

[x] target-independent bits
[ ] alpha     [x] arm       [ ] avr         [ ] bfin
[ ] cr16      [ ] cris      [ ] epiphany    [ ] i386
[ ] ia64      [x] iq2000    [ ] lm32        [ ] m32c
[x] m32r      [x] mcore     [ ] mep         [x] microblaze
[x] mips      [ ] mmix      [x] mn10300     [ ] pa
[ ] rs6000    [x] rx        [ ] s390        [ ] score
[x] sh        [ ] sparc     [ ] spu         [x] stormy16
[x] v850      [ ] vax       [ ] xtensa

I think I'll wait until Friday.  If there are no further objections
until then,  I'd like to and install the patch even if some of the boxes
should still remain unchecked.  Would that be OK?


On Tue, 2012-09-04 at 16:32 +0200, Richard Guenther wrote:
> 
> >> +hook_int_rtx_mode_as_bool_0 (rtx, enum machine_mode, addr_space_t,
> bool)
> >
> > So we're using C++ already?  Or do we want ATTRIBUTE_UNUSED here?
> 
> Use C++ where it is so nicely obvious an improvement ;)

ProblemFactoryManagerListenerSingleton? ;)


Cheers,
Oleg

ChangeLog:

        * hooks.c (hook_int_rtx_mode_as_bool_0): New function.
        * hooks.h (hook_int_rtx_mode_as_bool_0): Declare it.
        * output.h (default_address_cost): Add machine_mode 
        and address space arguments.
        * target.def (address_cost): Likewise.
        * rtlanal.c (address_cost): Pass mode and address space to
        target hook.
        (default_address_cost): Add unnamed machine_mode and address 
        space arguments.
        * doc/tm.texi: Regenerate.
        * config/alpha/alpha.c (TARGET_ADDRESS_COST): Use 
        hook_int_rtx_mode_as_bool_0 instead of hook_int_rtx_bool_0.
        * config/arm/arm.c (arm_address_cost): Add machine_mode 
        and address space arguments.
        * config/avr/avr.c (avr_address_cost): Likewise.
        * config/bfin/bfin.c (bfin_address_cost): Likewise.
        * config/cr16/cr16.c (cr16_address_cost): Likewise.
        * config/cris/cris.c (cris_address_cost): Likewise.
        * config/epiphany/epiphany.c (epiphany_address_cost): Likewise.
        * config/i386/i386.c (ix86_address_cost): Likewise.
        * config/ia64/ia64.c (TARGET_ADDRESS_COST): Use 
        hook_int_rtx_mode_as_bool_0 instead of hook_int_rtx_bool_0.
        * config/iq2000/iq2000.c (iq2000_address_cost): Add 
        machine_mode and address space arguments.  Pass them on in
        recursive invocation.
        * config/lm32/lm32.c (TARGET_ADDRESS_COST): Use 
        hook_int_rtx_mode_as_bool_0 instead of hook_int_rtx_bool_0.
        * config/m32c/m32c.c (m32c_address_cost): Add machine_mode 
        and address space arguments.
        * config/m32r/m32r.c (TARGET_ADDRESS_COST): Use 
        hook_int_rtx_mode_as_bool_0 instead of hook_int_rtx_bool_0.
        * config/mcore/mcore.c (TARGET_ADDRESS_COST): Likewise.
        * config/mep/mep.c (mep_address_cost): Add machine_mode 
        and address space arguments.
        * config/microblaze/microblaze.c (microblaze_address_cost): 
        Likewise.
        * config/mips/mips.c (mips_address_cost): Likewise.
        * config/mmix/mmix.c (TARGET_ADDRESS_COST): Use 
        hook_int_rtx_mode_as_bool_0 instead of hook_int_rtx_bool_0.
        * config/mn10300/mn10300.c (mn10300_address_cost): Add
        machine_mode and address space arguments.
	(mn10300_rtx_costs):  Pass GET_MODE (x) and MEM_ADDR_SPACE (x)
	to mn10300_address_cost.
        * config/pa/pa.c (hppa_address_cost): Add machine_mode and 
        address space arguments.
        * config/rs6000/rs6000.c (rs6000_debug_address_cost): Likewise.
        (TARGET_ADDRESS_COST): Use hook_int_rtx_mode_as_bool_0 instead 
        of hook_int_rtx_bool_0.
        * config/rx/rx.c (rx_address_cost): Add machine_mode and 
        address space arguments.
        * config/s390/s390.c (s390_address_cost): Likewise.
        * config/score/score-protos.h (score_address_cost): Likewise.
        * config/score/score.c (score_address_cost): Likewise.
        * config/sh/sh.c (sh_address_cost): Likewise.
        * config/sparc/sparc.c (TARGET_ADDRESS_COST): Use 
        hook_int_rtx_mode_as_bool_0 instead of hook_int_rtx_bool_0.
        * config/spu/spu.c (TARGET_ADDRESS_COST): Likewise.
        * config/stormy16/stormy16.c (xstormy16_address_cost): Add 
        machine_mode and address space arguments.
        * config/v850/v850.c (TARGET_ADDRESS_COST): Use 
        hook_int_rtx_mode_as_bool_0 instead of hook_int_rtx_bool_0.
        * config/vax/vax.c (vax_address_cost): Add machine_mode 
        and address space arguments.
        * config/xtensa/xtensa (TARGET_ADDRESS_COST): Use 
        hook_int_rtx_mode_as_bool_0 instead of hook_int_rtx_bool_0.
Index: gcc/rtlanal.c
===================================================================
--- gcc/rtlanal.c	(revision 190910)
+++ gcc/rtlanal.c	(working copy)
@@ -3820,13 +3820,13 @@
   if (!memory_address_addr_space_p (mode, x, as))
     return 1000;
 
-  return targetm.address_cost (x, speed);
+  return targetm.address_cost (x, mode, as, 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, addr_space_t, bool speed)
 {
   return rtx_cost (x, MEM, 0, speed);
 }
Index: gcc/hooks.c
===================================================================
--- gcc/hooks.c	(revision 190910)
+++ gcc/hooks.c	(working copy)
@@ -200,6 +200,12 @@
   return 0;
 }
 
+int
+hook_int_rtx_mode_as_bool_0 (rtx, enum machine_mode, addr_space_t, bool)
+{
+  return 0;
+}
+
 unsigned int
 hook_uint_void_0 (void)
 {
Index: gcc/hooks.h
===================================================================
--- gcc/hooks.h	(revision 190910)
+++ gcc/hooks.h	(working copy)
@@ -75,6 +75,8 @@
 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_as_bool_0 (rtx, enum machine_mode, addr_space_t,
+					bool);
 
 extern tree hook_tree_const_tree_null (const_tree);
 
Index: gcc/config/sparc/sparc.c
===================================================================
--- gcc/config/sparc/sparc.c	(revision 190910)
+++ 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_as_bool_0
 #undef TARGET_REGISTER_MOVE_COST
 #define TARGET_REGISTER_MOVE_COST sparc_register_move_cost
 
Index: gcc/config/sh/sh.c
===================================================================
--- gcc/config/sh/sh.c	(revision 190910)
+++ gcc/config/sh/sh.c	(working copy)
@@ -255,7 +255,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, addr_space_t, 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);
@@ -3430,7 +3430,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,
+		 addr_space_t as 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 190910)
+++ gcc/config/microblaze/microblaze.c	(working copy)
@@ -1043,7 +1043,9 @@
 /* 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,
+			 addr_space_t as ATTRIBUTE_UNUSED,
+			 bool speed ATTRIBUTE_UNUSED)
 {
   return COSTS_N_INSNS (microblaze_address_insns (addr, GET_MODE (addr)));
 }
Index: gcc/config/vax/vax.c
===================================================================
--- gcc/config/vax/vax.c	(revision 190910)
+++ 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, addr_space_t, 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,9 @@
 }
 
 static int
-vax_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED)
+vax_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED,
+		  addr_space_t as ATTRIBUTE_UNUSED,
+		  bool speed ATTRIBUTE_UNUSED)
 {
   return (1 + (REG_P (x) ? 0 : vax_address_cost_1 (x)));
 }
Index: gcc/config/ia64/ia64.c
===================================================================
--- gcc/config/ia64/ia64.c	(revision 190910)
+++ 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_as_bool_0
 
 #undef TARGET_UNSPEC_MAY_TRAP_P
 #define TARGET_UNSPEC_MAY_TRAP_P ia64_unspec_may_trap_p
Index: gcc/config/mn10300/mn10300.c
===================================================================
--- gcc/config/mn10300/mn10300.c	(revision 190910)
+++ 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,
+		      addr_space_t as ATTRIBUTE_UNUSED, bool speed)
 {
   HOST_WIDE_INT i;
   rtx base, index;
@@ -2457,7 +2458,8 @@
       break;
 
     case MEM:
-      total = mn10300_address_cost (XEXP (x, 0), speed);
+      total = mn10300_address_cost (XEXP (x, 0), GET_MODE (x),
+				    MEM_ADDR_SPACE (x), speed);
       if (speed)
 	total = COSTS_N_INSNS (2 + total);
       goto alldone;
Index: gcc/config/spu/spu.c
===================================================================
--- gcc/config/spu/spu.c	(revision 190910)
+++ 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_as_bool_0
 
 #undef TARGET_SCHED_ISSUE_RATE
 #define TARGET_SCHED_ISSUE_RATE spu_sched_issue_rate
Index: gcc/config/mep/mep.c
===================================================================
--- gcc/config/mep/mep.c	(revision 190910)
+++ 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, addr_space_t, 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,10 @@
 }
 
 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,
+		  addr_space_t as ATTRIBUTE_UNUSED,
+		  bool ATTRIBUTE_UNUSED speed_p)
 {
   return 1;
 }
Index: gcc/config/stormy16/stormy16.c
===================================================================
--- gcc/config/stormy16/stormy16.c	(revision 190910)
+++ 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, addr_space_t, bool);
 static bool xstormy16_return_in_memory (const_tree, const_tree);
 
 static GTY(()) section *bss100_section;
@@ -103,7 +103,9 @@
 }
 
 static int
-xstormy16_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED)
+xstormy16_address_cost (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED,
+			addr_space_t as ATTRIBUTE_UNUSED,
+			bool speed ATTRIBUTE_UNUSED)
 {
   return (CONST_INT_P (x) ? 2
 	  : GET_CODE (x) == PLUS ? 7
Index: gcc/config/mips/mips.c
===================================================================
--- gcc/config/mips/mips.c	(revision 190910)
+++ gcc/config/mips/mips.c	(working copy)
@@ -3943,9 +3943,11 @@
 /* Implement TARGET_ADDRESS_COST.  */
 
 static int
-mips_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED)
+mips_address_cost (rtx addr, enum machine_mode mode,
+		   addr_space_t as ATTRIBUTE_UNUSED,
+		   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/epiphany/epiphany.c
===================================================================
--- gcc/config/epiphany/epiphany.c	(revision 190910)
+++ 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,
+		       addr_space_t as ATTRIBUTE_UNUSED, bool speed)
 {
   rtx reg;
   rtx off = const0_rtx;
Index: gcc/config/avr/avr.c
===================================================================
--- gcc/config/avr/avr.c	(revision 190910)
+++ gcc/config/avr/avr.c	(working copy)
@@ -8886,7 +8886,9 @@
 /* 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,
+		  addr_space_t as ATTRIBUTE_UNUSED,
+		  bool speed ATTRIBUTE_UNUSED)
 {
   int cost = 4;
   
Index: gcc/config/v850/v850.c
===================================================================
--- gcc/config/v850/v850.c	(revision 190910)
+++ 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_as_bool_0
 
 #undef  TARGET_MACHINE_DEPENDENT_REORG
 #define TARGET_MACHINE_DEPENDENT_REORG v850_reorg
Index: gcc/config/mmix/mmix.c
===================================================================
--- gcc/config/mmix/mmix.c	(revision 190910)
+++ 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_as_bool_0
 
 #undef TARGET_REGISTER_MOVE_COST
 #define TARGET_REGISTER_MOVE_COST mmix_register_move_cost
Index: gcc/config/cr16/cr16.c
===================================================================
--- gcc/config/cr16/cr16.c	(revision 190910)
+++ gcc/config/cr16/cr16.c	(working copy)
@@ -1286,7 +1286,9 @@
 
 /* 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,
+		   addr_space_t as 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 190910)
+++ gcc/config/bfin/bfin.c	(working copy)
@@ -1288,7 +1288,10 @@
    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,
+		   addr_space_t as ATTRIBUTE_UNUSED,
+		   bool speed ATTRIBUTE_UNUSED)
 {
   return 1;
 }
Index: gcc/config/s390/s390.c
===================================================================
--- gcc/config/s390/s390.c	(revision 190910)
+++ gcc/config/s390/s390.c	(working copy)
@@ -2613,7 +2613,9 @@
 /* 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,
+		   addr_space_t as ATTRIBUTE_UNUSED,
+		   bool speed ATTRIBUTE_UNUSED)
 {
   struct s390_address ad;
   if (!s390_decompose_address (addr, &ad))
Index: gcc/config/pa/pa.c
===================================================================
--- gcc/config/pa/pa.c	(revision 190910)
+++ 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, addr_space_t, 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,8 @@
    as GO_IF_LEGITIMATE_ADDRESS.  */
 
 static int
-hppa_address_cost (rtx X,
+hppa_address_cost (rtx X, enum machine_mode mode ATTRIBUTE_UNUSED,
+		   addr_space_t as ATTRIBUTE_UNUSED,
 		   bool speed ATTRIBUTE_UNUSED)
 {
   switch (GET_CODE (X))
Index: gcc/config/xtensa/xtensa.c
===================================================================
--- gcc/config/xtensa/xtensa.c	(revision 190910)
+++ 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_as_bool_0
 
 #undef TARGET_MEMBER_TYPE_FORCES_BLK
 #define TARGET_MEMBER_TYPE_FORCES_BLK xtensa_member_type_forces_blk
Index: gcc/config/m32c/m32c.c
===================================================================
--- gcc/config/m32c/m32c.c	(revision 190910)
+++ gcc/config/m32c/m32c.c	(working copy)
@@ -2278,7 +2278,9 @@
 #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,
+		   addr_space_t as ATTRIBUTE_UNUSED,
+		   bool speed ATTRIBUTE_UNUSED)
 {
   int i;
   /*  fprintf(stderr, "\naddress_cost\n");
Index: gcc/config/mcore/mcore.c
===================================================================
--- gcc/config/mcore/mcore.c	(revision 190910)
+++ 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_as_bool_0
 #undef  TARGET_MACHINE_DEPENDENT_REORG
 #define TARGET_MACHINE_DEPENDENT_REORG	mcore_reorg
 
Index: gcc/config/score/score.c
===================================================================
--- gcc/config/score/score.c	(revision 190910)
+++ gcc/config/score/score.c	(working copy)
@@ -1232,7 +1232,8 @@
 
 /* Implement TARGET_ADDRESS_COST macro.  */
 int
-score_address_cost (rtx addr,
+score_address_cost (rtx addr, enum machine_mode mode ATTRIBUTE_UNUSED,
+		    addr_space_t as ATTRIBUTE_UNUSED,
 		    bool speed ATTRIBUTE_UNUSED)
 {
   return score_address_insns (addr, SImode);
Index: gcc/config/score/score-protos.h
===================================================================
--- gcc/config/score/score-protos.h	(revision 190910)
+++ gcc/config/score/score-protos.h	(working copy)
@@ -39,7 +39,8 @@
 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 mode,
+			       addr_space_t as, 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/m32r/m32r.c
===================================================================
--- gcc/config/m32r/m32r.c	(revision 190910)
+++ 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_as_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 190910)
+++ gcc/config/i386/i386.c	(working copy)
@@ -12027,7 +12027,9 @@
    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,
+		   addr_space_t as ATTRIBUTE_UNUSED,
+		   bool speed ATTRIBUTE_UNUSED)
 {
   struct ix86_address parts;
   int cost = 1;
Index: gcc/config/iq2000/iq2000.c
===================================================================
--- gcc/config/iq2000/iq2000.c	(revision 190910)
+++ gcc/config/iq2000/iq2000.c	(working copy)
@@ -152,7 +152,8 @@
 					   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, addr_space_t,
+				       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 +780,8 @@
 /* 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, addr_space_t as,
+		     bool speed)
 {
   switch (GET_CODE (addr))
     {
@@ -830,7 +832,7 @@
 	  case LABEL_REF:
 	  case HIGH:
 	  case LO_SUM:
-	    return iq2000_address_cost (plus1, speed) + 1;
+	    return iq2000_address_cost (plus1, mode, as, speed) + 1;
 
 	  default:
 	    break;
Index: gcc/config/lm32/lm32.c
===================================================================
--- gcc/config/lm32/lm32.c	(revision 190910)
+++ 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_as_bool_0
 #undef TARGET_RTX_COSTS
 #define TARGET_RTX_COSTS lm32_rtx_costs
 #undef TARGET_IN_SMALL_DATA_P
Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c	(revision 190910)
+++ 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, addr_space_t, 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,
+		  addr_space_t as ATTRIBUTE_UNUSED, bool speed ATTRIBUTE_UNUSED)
 {
   return TARGET_32BIT ? arm_arm_address_cost (x) : arm_thumb_address_cost (x);
 }
Index: gcc/config/alpha/alpha.c
===================================================================
--- gcc/config/alpha/alpha.c	(revision 190910)
+++ 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_as_bool_0
 
 #undef TARGET_MACHINE_DEPENDENT_REORG
 #define TARGET_MACHINE_DEPENDENT_REORG alpha_reorg
Index: gcc/config/rx/rx.c
===================================================================
--- gcc/config/rx/rx.c	(revision 190910)
+++ gcc/config/rx/rx.c	(working copy)
@@ -2724,7 +2724,8 @@
 }
 
 static int
-rx_address_cost (rtx addr, bool speed)
+rx_address_cost (rtx addr, enum machine_mode mode ATTRIBUTE_UNUSED,
+		 addr_space_t as ATTRIBUTE_UNUSED, bool speed)
 {
   rtx a, b;
 
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c	(revision 190910)
+++ gcc/config/rs6000/rs6000.c	(working copy)
@@ -928,7 +928,8 @@
 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, addr_space_t,
+				      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 +1295,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_as_bool_0
 
 #undef TARGET_DWARF_REGISTER_SPAN
 #define TARGET_DWARF_REGISTER_SPAN rs6000_dwarf_register_span
@@ -26070,7 +26071,8 @@
 /* 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 ATTRIBUTE_UNUSED,
+			   addr_space_t as ATTRIBUTE_UNUSED, bool speed)
 {
   int ret = TARGET_ADDRESS_COST (x, speed);
 
Index: gcc/config/cris/cris.c
===================================================================
--- gcc/config/cris/cris.c	(revision 190910)
+++ 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, addr_space_t, 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,9 @@
 /* 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,
+		   addr_space_t as 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/target.def
===================================================================
--- gcc/target.def	(revision 190910)
+++ gcc/target.def	(working copy)
@@ -1758,7 +1758,7 @@
 DEFHOOK
 (address_cost,
  "",
- int, (rtx address, bool speed),
+ int, (rtx address, enum machine_mode mode, addr_space_t as, bool speed),
  default_address_cost)
 
 /* Return where to allocate pseudo for a given hard register initial value.  */
Index: gcc/doc/tm.texi
===================================================================
--- gcc/doc/tm.texi	(revision 190910)
+++ 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}, addr_space_t @var{as}, 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/output.h
===================================================================
--- gcc/output.h	(revision 190910)
+++ 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, addr_space_t, bool);
 
 /* Output stack usage information.  */
 extern void output_stack_usage (void);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]