Hello, I would like to find out a detail about intrinsics functions. When I use memset form a standard library it is always converted to llvm's memset, however the usage of some others as sqrt, pow, sin do not lead to the same. How can I get the same effect? Why there is no overall LLVM pass like IntrinsicLowerinPass.cpp (it has only some specific ones)? There is only a function that does this. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170711/1f364965/attachment-0001.html>
On 7/11/2017 10:26 AM, Anastasiya Ruzhanskaya via llvm-dev wrote:> Hello, > I would like to find out a detail about intrinsics functions. When I > use memset form a standard library it is always converted to llvm's > memset, however the usage of some others as sqrt, pow, sin do not lead > to the same. How can I get the same effect?For math functions in particular, the intrinsics don't really match the semantics of the actual C library functions, so clang doesn't normally convert them. (If you use -ffast-math, clang will convert them anyway.) This is an area which could probably be improved, but it's complicated because we depend on the host's libm.> Why there is no overall LLVM pass like IntrinsicLowerinPass.cpp (it > has only some specific ones)? There is only a function that does this.Some intrinsics expose functionality which can't be expressed using IR instructions. -Eli -- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
And are such intrinsics, as memset, memcpy, memmove replaced by standard library calls? This is said in sources, that it looks for such functions in global symbol table. 2017-07-11 20:16 GMT+02:00 Friedman, Eli <efriedma at codeaurora.org>:> On 7/11/2017 10:26 AM, Anastasiya Ruzhanskaya via llvm-dev wrote: > >> Hello, >> I would like to find out a detail about intrinsics functions. When I use >> memset form a standard library it is always converted to llvm's memset, >> however the usage of some others as sqrt, pow, sin do not lead to the same. >> How can I get the same effect? >> > > For math functions in particular, the intrinsics don't really match the > semantics of the actual C library functions, so clang doesn't normally > convert them. (If you use -ffast-math, clang will convert them anyway.) > This is an area which could probably be improved, but it's complicated > because we depend on the host's libm. > > Why there is no overall LLVM pass like IntrinsicLowerinPass.cpp (it has >> only some specific ones)? There is only a function that does this. >> > > Some intrinsics expose functionality which can't be expressed using IR > instructions. > > -Eli > > -- > Employee of Qualcomm Innovation Center, Inc. > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux > Foundation Collaborative Project > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170711/cd8888f7/attachment.html>