Bernd Schmidt <bschm...@redhat.com> writes:
> On 11/25/2015 01:26 PM, Richard Sandiford wrote:
>> Later patches in the series add a new form of attribute that takes the
>> attribute number as an argument, rather than it being stored in the
>> global which_alternative variable.
>>
>> Having both a local alternative number and a global alternative number
>> is likely to cause confusion.  This patch therefore gets rid of the
>> global variable.
>
> I don't really feel that this is appropriate for this stage, and some of 
> the formatting changes are pretty ugly. I'd put this pattern
>    constrain_operands (1, get_enabled_alternatives (temp)) >= 0
> into an inline function
>    constraints_ok_p (temp).
> and possibly also have a variant with an extract_insn call, similar to 
> extract_constrain_insn.

The idea is to force callers to think about whether they're asking:

  (1) Can I constrain this instruction to match any enabled alternative?
  (2) Can I constrain this instruction to match an alternative that is
      good for size?
  (3) Can I constrain this instruction to match an alternative that is
      good for speed?

Perhaps we could use the optimization_type added in patch 21 for this,
with a new enum value to mean "ignore optimisation".

I'm just worried that if we have a constraints_ok_p that hides the
decision altogether, it will get used by optimisation passes when
testing the result of a transform, whereas really they should be
taking the containing block's size/speed choice into account.

> Do any of the subsequent patches actually depend on this?

I guess not, but without it we have both local and global variables
called which_alternative.  The new-style attributes will use a local
which_alternative and the old-style ones will use a global
which_alternative.  The global which_alternative will still be visible
to arch.c files, so there's an obvious danger of confusion.

Thanks,
Richard

Reply via email to