David Sela
2014-Aug-07 10:22 UTC
[LLVMdev] Prevent clang from replacing code with library calls
Hi, I downloaded the latest NDK (r10) and compiled with the following cmd: *arm-linux-androideabi-clang myMemcpy.c -S -fno-builtin -o0* It still produces assembly with a call to "memcpy". Maybe the -*fno-builtin *is broken also in the latest release. Do you have some other idea that can help here? Thanks, David On Tue, Aug 5, 2014 at 11:00 AM, Jim Grosbach <grosbach at apple.com> wrote:> I'm not sure then. Clang 3.1 is rather old. It's possible that was broken > in that version. Sorry I wasn't more help. That's the correct option to > control the behavior. > > On Aug 5, 2014, at 12:01 AM, David Sela <sela.david at gmail.com> wrote: > > Hi Jim, > I have tried "-fno-builtin" but it didn't help. > Thanks, > David > > > On Tue, Aug 5, 2014 at 12:12 AM, Jim Grosbach <grosbach at apple.com> wrote: > >> Hi David, >> >> "-fno-builtin” is probably what you want. >> >> -Jim >> >> On Aug 4, 2014, at 2:19 AM, David Sela <sela.david at gmail.com> wrote: >> >> Clang optimizes code by replacing some parts with efficient library >> functions. >> >> For example the following code: >> >> for (i=0;i<size;++i) >> dest[i]=src[i]; >> >> will be compiled to (target=ARM assembly): >> >> bl __aeabi_memcpy(PLT) >> >> The compile cmd: >> >> /usr/share/android-arm-l14-toolchain/bin/clang31 -cc1 -triple >> arm-none-linux-androideabi -S -target-abi aapcs-linux -target-cpu arm1022e >> -backend-option -arm-enable-ehabi -backend-option >> -arm-enable-ehabi-descriptors -backend-option -arm-ignore-has-ras >> -internal-isystem >> /usr/share/android-arm-l14-toolchain/lib/clang/3.1/include >> -internal-externc-isystem >> /usr/share/android-arm-l14-toolchain/bin/../sysroot/usr/include -o >> myMemcpy.s -x c myMemcpy.c >> >> >> Is there a flag or some other way to prevent the compiler from replacing >> the code with library calls? >> >> >> Thanks in advance, >> David >> >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> >> >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140807/675fe8d2/attachment.html>
Anton Korobeynikov
2014-Aug-07 11:12 UTC
[LLVMdev] Prevent clang from replacing code with library calls
> I downloaded the latest NDK (r10) and compiled with the following cmd: > arm-linux-androideabi-clang myMemcpy.c -S -fno-builtin -o0 > It still produces assembly with a call to "memcpy". Maybe the -fno-builtin > is broken also in the latest release.It's not broken. Even freestanding implementation is supposed to provide mem* functions. -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University
Jim Grosbach
2014-Aug-07 21:49 UTC
[LLVMdev] Prevent clang from replacing code with library calls
> On Aug 7, 2014, at 4:12 AM, Anton Korobeynikov <anton at korobeynikov.info> wrote: > >> I downloaded the latest NDK (r10) and compiled with the following cmd: >> arm-linux-androideabi-clang myMemcpy.c -S -fno-builtin -o0 >> It still produces assembly with a call to "memcpy". Maybe the -fno-builtin >> is broken also in the latest release. > It's not broken. Even freestanding implementation is supposed to > provide mem* functions. >It’s also supposed to be possible to write a memcpy() implementation in C without the compiler’s idiom recognizer just transforming it into a call to the system memcpy(). -fno-builtin is supposed to be how to do that, right? -jim