[PATCH] D71082: Allow system header to provide their own implementation of some builtin

George Burgess IV via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 3 16:17:05 PDT 2020


george.burgess.iv added a comment.

For a more direct comparison, I offer https://godbolt.org/z/fqAhUC . The lack of optimization in the later case is because we're forced to mark the call to `__builtin_memcpy` in the inline memcpy as `nobuiltin`. If we instead rename things, this issue doesn't happen: https://godbolt.org/z/FKNTWo.

All other FORTIFY impls I know of defer to `_chk` functions for checking that's not guarded by `__builtin_constant_p`, rather than having size checks inline like the kernel. Both GCC and Clang have special knowledge of these intrinsics, so they can optimize them well: https://godbolt.org/z/L7rVHp . It'd be nice if the kernel's FORTIFY were more like all of the other existing ones in this way.

Deferring to `_chk` builtins has the side-benefit that the `inline` `memcpy` is often smaller, which increases the inlineability of any functions that `memcpy` gets inlined into(*). The down-side is that the kernel now needs to carry definitions for `__memcpy_chk` et al.

(*) -- not in an underhanded way. It's just that any condition that depends on `__builtin_constant_p` or `__builtin_object_size(obj)` is guaranteed to be folded away at compile-time; not representing them in IR is more "honest" to anything that's trying to determine the inlinability of a function.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D71082/new/

https://reviews.llvm.org/D71082





More information about the cfe-commits mailing list