Add a combined_fn enum

Richard Sandiford richard.sandiford@arm.com
Mon Nov 9 15:53:00 GMT 2015


Bernd Schmidt <bschmidt@redhat.com> writes:
> On 11/09/2015 03:57 PM, Richard Sandiford wrote:
>
>> I'm not sure what you mean by "fix" though.  I don't think we can change
>> any of the constraints above.
>
> I don't see why they couldn't be relaxed. What's stopping us from 
> defining some builtins independently of the frontends, and don't all 
> languages except Fortran use the normal builtins.def anyway?

I think the problem isn't so much with the functions that we define
ourselves as those that simply mirror a standard library function.
We can't assume that all the libm functions exist.  It's also valid
for the implementation to add target-specific attributes on top of
what the standard says (e.g. "nomips16" on MIPS).

So if a call starts out as a call to sinf and we treat it as a call to
__builtin_sinf for optimisation purposes, there is always conceptually
an underlying "physical" sinf function.  We also can't convert calls
to __builtin_sin to calls to __builtin_sinf without proof that a sinf
definition exists (not guaranteed for C90).

> Also - if you can have an internal function without a fndecl, why
> wouldn't it work to allow that for builtins as well? But this is
> probably moot since I can now see a little more clearly what you want
> to do.

I think that's the defining characteristic of builtins vs. internal
functions though.  built-in functions are directly callable by source
code and have a defined function signature.  Internal functions are not
directly callable by source code and have a flexible function signature.

There are cases where this difference doesn't matter, which is why
the combined_fn enum seemed like a good idea.  But I don't think we
can do away with the distinction entirely.

>> The main goal is to allow functions to be vectorised simply by defining
>> the associated optab.
>
> Ok. So these internal functions would support arbitrary modes like 
> V[1248][SDX]F etc., unlike the builtins?

Yeah.  They also never set errno.

> That wasn't entirely clear from the patches I looked at, it seemed
> like you were just duplicating every builtin as an internal function
> (something to which I would have objected).

Yeah, sorry about that.  I'll post the patches shortly.

Thanks,
Richard



More information about the Gcc-patches mailing list