[LLVMdev] _Znwm is not a builtin

Chandler Carruth chandlerc at google.com
Wed May 15 19:49:45 PDT 2013


On Wed, May 15, 2013 at 8:31 PM, Richard Smith <richard at metafoo.co.uk>wrote:

> Hi,
>
> LLVM classifies _Znwm as a builtin by default. After some discussion, the
> C++ core working group have decreed that that is not correct: calls to
> "operator new" *can* be optimized, but only if they come from
> new-expressions, and not if they come from explicit calls to ::operator
> new. We cannot work around this in the frontend by marking the call as
> 'nobuiltin' for two reasons:
>
> 1) The 'nobuiltin' attribute doesn't actually prevent the optimization
> (see recent patch on llvmcommits)
> 2) We can't block the optimization if the call happens through a function
> pointer, unless we also annotate all calls through function pointers as
> 'nobuiltin'
>
> How feasible would it be to make the 'builtin-ness' of _Znwm etc be opt-in
> rather than opt-out? Is there some other option we could pursue?
>

I think we should just fix this when we build the system which allows
optimizing new expressions. Specifically, when we introduce a way to mark
new expressions for LLVM to optimize, that's the time to make the
builtin-ness of _Znwm opt-in instead of opt-out.

Doing anything before then would I think be really unfortunate for
performance -- this optimization does fire reasonably frequently.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130515/a3494131/attachment.html>


More information about the llvm-dev mailing list