[llvm-dev] How to distinguish between user defined function in a program and library functions

David Blaikie via llvm-dev
Wed, 05 Feb 2020 04:10:12 -0000

LLVM's analysis infrastructure is mostly intended for optimizations, which
should apply to any code equally - I don't believe there's any bit that
tracks which functions came from system libraries or not.

On Tue, Feb 4, 2020 at 8:01 PM sunilps <sunilps at iitk.ac.in> wrote:

>
> Actually I want to run some analysis pass only on the user defined
> functions but not on the library functions. Is there any boolean method
> that can tell which is a library function and which is not?
> On 5 Feb 2020 5:23 a.m., David Blaikie <dblaikie at gmail.com> wrote:
>
> Generally, you can't - and optimizations/the compiler shouldn't
> differentiate between them.
>
> On Tue, Feb 4, 2020 at 3:25 PM Sunil via llvm-dev <llvm-dev at
lists.llvm.org>
> wrote:
>
>> Say, I have the following program:
>>    #include <iostream>
>>    int main(){
>>      std::cout << "hello\n";
>>      return 0;
>>    }
>>
>> After generating llvm bitcode using the following command:
>>       $ clang++ -c -emit-llvm -O -Xclang -disable-llvm-passes a.cpp
>> the bitcode has the following function with define.
>>       __cxx_global_var_init
>>    main
>>    _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
>>    _ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate
>>    _ZNSt11char_traitsIcE6lengthEPKc
>>    _ZStorSt12_Ios_IostateS_
>>    _ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv
>>    _GLOBAL__sub_I_a.cpp
>>
>> In a pass, I want to know what are the functions defined by the user
e.g
>> 'main' and what are not e.g. other than 'main'.
>>
>> Regards,
>>    Sunil
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20200204/94bc8576/attachment.html>