[PATCH] CodeGen target hook for emitting intrinsic or libcall for pow*

Eli Bendersky eliben at google.com
Thu Jul 11 11:18:41 PDT 2013


>
> I'm not asking you to wrap the driver.  I'm asking you to change clang's
> driver logic when targeting *-*-nacl to use the existing logic to suppress
> builtin treatment of functions.
>
>
>> Oh, it turns out Clang does not currently support -fno-builtin-<FUNC> at
>> all:
>> http://llvm.org/bugs/show_bug.cgi?id=4941
>>
>>
>> What functions do you want to opt out of builtin treatment?  All of them?
>>  Just math functions?
>>
>
> For starters, math functions. There aren't many libc math functions
> handled there, BTW. When I was working on the original patch I dug through
> history - a couple were added (pow and sqrt) I think, and sqrt was then
> backed off due to some problems. Even with pow there are other constrains
> such as errno (the builtin is not generated when we want errno, naturally,
> even without -fno-builtins). Perhaps I can make the target hook more
> generic - controlling all math libraries (the BIfoo ones, not
> BI__builtin_foo) instead of just pow?
>
>
> I really don't want this to be an IR-gen target hook, but adding a
> cc1-level ability to disable builtin treatment for math functions makes
> sense to me, or you can just add frontend support for -fno-builtin-<FUNC>.
>

I looked some more into this. There currently no hooks to say something
like "disable builtin treatment for math functions" because of the way
builtins are populated and identified. If I understand you correctly, you
want this decision to be made before IR gen; meaning that you want
something that says "this name is not a builtin at all, for some special
conditions".

One way to implement this is mark the math builtins somehow in Builtins.def
and then have a new LangOpts option to tweak that. Then, when builtins are
read and populated in Builtin::Context::InitializeBuiltins, math builtins
can be skipped. Recognizing math builtins can be done by looking at the
header specified for them in Builtins.def - would this work, or do we need
some special attribute?

Now, once that's in place a new cc1-level flag can be added and in the
driver we can always force this flag for PNaCl (is there a place/precedent
for target-specific forcing of cc1 flags in the driver?)

As for:

> just add frontend support for -fno-builtin-<FUNC>.

This looks quite challenging. I'm not sure the LangOptions infrastructure
supports such options (and the command-line parsing library for the
gcc-compatible way) so there's a whole bunch of infrastructure that needs
to be upgraded. Maybe I'm missing something basic, though.

Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130711/78633198/attachment.html>


More information about the cfe-commits mailing list