Why isn't gcc designed to use option boundary only for targets in target_clones attribute?

Mingye Wang (Arthur2e5) arthur200126@gmail.com
Wed Dec 14 02:17:00 GMT 2016


On 16/12/13 16:21, Evgeny Stupachenko wrote:
> First, to be able to run a function through resolver we always need
> "default" as separate target.
> As for separating. As far as I understand all "arch" options assumes
> the same tuning. So you can skip "tune=generic".

My experiments with an (service as a software alternative) copy of gcc 
6.2.0 in [1] seems to separate "tune=" clones and actually generate 
different code. You can see only the generic version generates the `rep 
ret` pattern, which seems to be generally known as a workaround for AMD 
CPUs.

   [1]: https://godbolt.org/g/o3xTaj

But whether gcc would actually dispatch to tuned variants is what 
determines whether this clone will be run, so yes I should just skip it 
for now. (Should I write a feature request, though?)

> With above your example becomes "sse3", "default" and
> "arch=ivybridge". Which could be implemented with current algorithm.

True. Could have done it with easier things...

> The other point is inlining. It is clear when you have just 1 option:
> foo() for sse3 could be inlined into bar() for sse3, but not into
> bar() for sse2.

Right... But on the other hand, it's possible, however, that inlining 
will eventually have to deal with sets of instruction sets to 
effectively combine `arch=` definitions.

> If we have multiple options it is harder to inline.
> So multiple options are doable, but right now I don't see a
> significant reason for this. If you have some source code example
> where it is better that would be great.

A probable use case for such fine-grained control may be found in MIPS. 
One may pass `no-branch-likely` for MIPS or similar options that 
disables instructions removed in later revisions to achieve better 
upward compatibility, but still wants `branch-likely` in order to use 
`fix-r10000`. Arguably one can avoid this by just using `arch=` in many 
cases.

--
Thanks,

Arthur2e5

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 538 bytes
Desc: OpenPGP digital signature
URL: <https://gcc.gnu.org/pipermail/gcc-help/attachments/20161214/7a10f8af/attachment-0001.sig>


More information about the Gcc-help mailing list