On Sep 29, 2015, at 7:31 AM, James Greenhalgh <james.greenha...@arm.com> wrote:
> On Tue, Sep 29, 2015 at 11:16:37AM +0100, Richard Biener wrote:
>> On Fri, Sep 25, 2015 at 5:04 PM, James Greenhalgh
>> <james.greenha...@arm.com> wrote:
>>> 
>>> In relation to the patch I put up for review a few weeks ago to teach
>>> RTL if-convert to handle multiple sets in a basic block [1], I was
>>> asking about a sensible cost model to use. There was some consensus at
>>> Cauldron that what should be done in this situation is to introduce a
>>> target hook that delegates answering the question to the target.
>> 
>> Err - the consensus was to _not_ add gazillion of special target hooks
>> but instead enhance what we have with rtx_cost so that passes can
>> rely on comparing before and after costs of a sequence of insns.
> 
> Ah, I was not able to attend Cauldron this year, so I was trying to pick out
> "consensus" from the video. Rewatching it now, I see a better phrase would
> be "suggestion with some support”.

I’m not a big fan of rtx_cost.  To me it feels more like a crude, sledge 
hammer.  Now, that is the gcc way, we have a ton of these things, but would be 
nice to refine the tools so that the big escape hatch isn’t used as often and 
we have more finer grained ways of doing things.  rtx_cost should be what a 
code-generator generates with most new ports when they use the nice api to do a 
port.  The old sledge hammer wielding ports may well always define rtx_cost 
themselves, but, we should shoot for something better.

As a concrete example, I now have a code-generator for enum reg_class, 
N_REG_CLASSES, REG_CLASS_NAMES, REG_CLASS_CONTENTS, REGISTER_NAMES, 
FIXED_REGISTERS, CALL_USED_REGISTERS, ADDITIONAL_REGISTER_NAMES, 
REG_ALLOC_ORDER and more (some binutils code-gen to do with registers), and oh 
my, it is so much nicer to user than the original api.  If you only ever have 
to write once these things, fine, but, if you develop and prototype CPUs, the 
existing interface is, well, less than ideal.  I can do things like:

gccrclass
  rc_gprs = “GENERAL”;

r gpr[] = { rc_gprs, Fixed, Used,
                "$zero", "$sp", "$fp", "$lr" };
r gpr_sav[] = { Notfixed, Notused, alias ("$save_first"),
                "$sav1",   "$sav2",   "$sav3",   "$sav4”,

and get all the other goop I need for free.  I’d encourage people to find a way 
to do up an rtx_cost generator.  If you're a port maintainer, and want to redo 
your port to use a nicer api to do the registers, let me know.  I’d love to see 
progress made to rid gcc of the old crappy apis.

Reply via email to