Hi,

when investigating a regression, I realized that we create a superfluous
load on S390.  The snippet looks something like

LA  %r10, 0(%r8,%r9)
LLH %r4, 0(%r10)

meaning the address in r10 is computed by an LA even though LLH supports
the addressing already.  The same address is used multiple times so
combine cannot do something about it.

Looking into fwprop, I realized it actually tries to propagate the
address but exits because we specify higher costs for an address with
index than for one without.  This was meant to account for the fact
that, in general and all other things being equal, not every instruction
can handle indexed addressing mode.

Now, in this case, fwprop actually knows the instructions it propagates
into and could decide based on the full costs, seeing that it would not
be more expensive.  Currently, it recursively descends to the parts that
are going to be propagated or replaced and compares the costs of both
without regarding the full instruction.

Would it make sense to enhance fwprop with a more detailed cost
evaluation or are there other passes that should do the same - i.e.
what's the preferred way to solve this? Is changing the address costs in
the backend depending on addressing mode sensible at all? As far as I
can see, the x86 backend also changes costs depending on global
properties (i.e. to prefer fewer registers when addressing).

Regards
 Robin

Reply via email to