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

Mehdi AMINI via llvm-dev
Wed, 05 Feb 2020 04:56:24 -0000

In general it isn't possible I believe, however if you are tolerant to
false positives / false negatives you can compile with debug information
(-g or -gline-tables-only) and figure it out.
Obviously after inlining this becomes more murky (user code can get inlined
into library code, and vice-versa).

--
Mehdi


On Tue, Feb 4, 2020 at 8:10 PM David Blaikie via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> 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
>>>
>> _______________________________________________
> 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/df7628f8/attachment.html>