[PATCH] Teach libc++ to use __builtin_operator_new/__builtin_operator_delete when available

Richard Smith richard at metafoo.co.uk
Tue Jun 3 15:14:47 PDT 2014


Hi!

This patch causes libc++ to use Clang's new __builtin_operator_new and
__builtin_operator_delete builtins when possible. These builtins allow
optimizations that the standard builtins do not: in particular, if we can
remove all uses of an allocation, this permits removing the allocation
itself too.

In particular, this allows code using std::vector and its kin to be
optimized away to nothing. Previously it would get optimized to the point
where only the allocation and deallocation remained.

This change has been applied to most calls to ::operator new and ::operator
delete in libc++; I believe such optimizations are permitted by the
specification of all affected library components.

The exceptions are:
 * get_temporary_buffer wants to call nothrow new, and we don't support
that with the builtins (that would require teaching Clang about
std::nothrow_t)
 * __refstring is not affected; this doesn't seem particularly worthwhile
since the only purpose for it is ABI interoperability with GCC

One other caveat: the patch adds an include of <new> to <valarray>. <new>
is extremely light, so I doubt this is a problem, but I thought it was
worth calling out.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140603/2224a670/attachment.html>


More information about the cfe-commits mailing list