[llvm-dev] How to distinguish between user defined function in a program and library functions
Mehdi AMINI via llvm-dev
llvm-dev at lists.llvm.org
Tue Feb 4 20:56:24 PST 2020
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>
More information about the llvm-dev
mailing list