inline asm and multi-alternative constraints
Jeff Law
law@redhat.com
Fri Nov 6 22:29:00 GMT 2015
On 11/02/2015 11:30 PM, David Wohlferd wrote:
>>> I think the fundamental problem here is we ought not be exposing those
>>> modifiers to the user. They're inherently tied to the details of the
>>> register allocation and reloading passes.
>>
>> This is what I'm thinking as well.
>
> I agree.
>
> The only reason I didn't delete them before is that removing support for
> an existing feature can be contentious. But I see no practical way to
> doc this for compiler-users. And even as an inline-asm aficionado, I
> can't think of any use for them anyway. Since there seems to be
> consensus, they're gone.
It's never easy to predict whether or not something like this will be
contentious. Worst case is you post, it's contentious, we iterate a bit
and reach some kind of resolution (ok, worst case is no resolution is
reached, but that doesn't happen to often).
In this case I simply don't see a way to sensibly document those
modifiers without bringing in the implementation details of register
class preferencing, reload, IRA & LRA. And once those details are
brought into the picture, everyone loses.
I'm sure there's someone out there using '?' and '!' in a
multi-alternative asm constraint. They may even read the docs and
complain and we can try to educate them why those modifiers are no
longer documented.
>
>> Why would a user even need multi-alternative constraints in inline
>> asm? An insn template might be instantiated in many different
>> contexts and need to deal with different flavors of operands, but
>> inline asm code is generally unique and the programmer writing it
>> knows very well what the operands are supposed to be (this one is a
>> register, that one is an address, etc).
>
> I wouldn't go that far. There are libraries that use inline asm
> (sometimes in headers), and a library cannot know how it may be used.
> The only practical approach for them is to list all options so gcc can
> do its best.
>
>> Choosing the most efficient form of a logical-or instruction is hardly
>> a good motivating example, either -- nobody writes inline asm to do that.
>
> However, it does make a good example for machine definitions, which also
> @includes this file. And while perhaps not an optimal sample for inline
> asm, it is a reasonable one, since other platforms (including x86) have
> a similar instruction which has similar limitations.
It's a reasonable simple example which shows how one might use
multi-alternative constraints in an asm. It doesn't have to be
real-world, it has to be understandable and extendable to something a
user might want to do. I think this example fits that reasonably well.
>
>> I'm under the impression that the primary uses of inline asm are
>> either to access machine instructions not exposed by builtins, or to
>> provide a block of highly tuned code replacing all/most of a C
>> function body.
>
> I have attached a new patch. It removes the flags and the paragraph
> that tries to describe how the alternative is chosen from the non-md
> docs. Now it just says the compiler will choose the most efficient
> alternative.
>
> Other than the line about "All operands for a single instruction must
> have the same number of alternatives", the 'internals' docs (which also
> includes this file) should be unaffected.
This looks fine. I'll install it momentarily.
jeff
More information about the Gcc
mailing list