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>
On 7/11/2017 11:19 AM, Anastasiya Ruzhanskaya wrote:> 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. >The backend will sometimes generate a call to the C library memset, memcpy, or memmove to lower a call to the LLVM intrinsics with the same name. Depending on the target/optimization flags/length of the operation, in some cases it will generate inline code, or generate a call to a function with a different name. -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/f495eb62/attachment.html>
great, thank you! Still, I have tried fast option: clang -S -O3 -mllvm -ffast-math -emit-llvm sqrt.c -o sqrt.s and also with specifying this option in opt (not in clang) - it stays the same sqrt. #include <stdlib.h> #include <stdio.h> int main() { int a; scanf("%d", &a); double b = sqrt(a); int c = (b > 10) ? 1 : 0; return c; } 2017-07-11 20:33 GMT+02:00 Friedman, Eli <efriedma at codeaurora.org>:> On 7/11/2017 11:19 AM, Anastasiya Ruzhanskaya wrote: > > 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. > > > The backend will sometimes generate a call to the C library memset, > memcpy, or memmove to lower a call to the LLVM intrinsics with the same > name. Depending on the target/optimization flags/length of the operation, > in some cases it will generate inline code, or generate a call to a > function with a different name. > > -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/a62644fb/attachment.html>