Richard Sandiford schrieb:
Oleg Endo <oleg.e...@t-online.de> writes:
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 :)

Well, I certainly wasn't suggesting you had to do anything with
overloaded hooks (which I agree are unfortunate).  It's just that
rtlanal.c:address_cost already gets an address space argument, so if
we're going through all the ports adding the mode argument to the hook,
it seemed a pity not to add the address space argument at the same time.

Agreed.

It's not possible to determine the costs from the address and the mode
alone, cf. HImode and the address spaces of the avr port for example.

Costs are very different depending no the address space and strangely
the address space isnot part of the address but only of the surrounding
mem...

Johann


I don't see anything wrong with adding address space arguments to hooks
outside the addr_space substructure.

But like I say, I won't insist.

 /* 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:

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)


Instead I've added ATTRIBUTE_UNUSED to avoid the warning.

Note that I said remove the "mode" parameter _name_, not the parameter
itself :-)  We're C++ now, so leaving out the name is better than
supplying an unused one and then adding ATTRIBUTE_UNUSED to it.

Richard


Reply via email to