[llvm-dev] [RFC][clang/llvm] Allow efficient implementation of libc's memory functions in C/C++

David Chisnall via llvm-dev llvm-dev at lists.llvm.org
Mon Apr 29 01:48:16 PDT 2019


On 26/04/2019 12:47, Guillaume Chatelet via llvm-dev wrote:
>      1.2 A specific attribute to disable synthesis of all libc calls
> __attribute__((disable_libc_call_synthesis))
> With this one we are losing precision and we may inline too much. There 
> is also the question of what is considered a libc function, LLVM mainly 
> defines target library calls.

Target library is probably more relevant than libc. We have a number of 
issues with libm on tier 2 platforms for FreeBSD without assembly fast 
paths.  This requires work-arounds for the fact that clang likes to say 
'oh, this function seems to be calling X on the result of Y, and I know 
that this can be more efficient if you replace that sequence with Z', 
ignoring the fact that this case is an implementation of Z.

The same thing is true in Objective-C runtime implementations, where we 
need to be careful to avoid LLVM performing optimisations on the ARC 
functions that result in infinite recursion.

There are numerous cases of compiler-rt suffering from the same issue.

TL;DR: This is a really important problem for clang and your proposed 
solution 1 looks like it is far more broadly applicable.

David


More information about the llvm-dev mailing list