sunilps via llvm-dev
2020-Feb-05 04:01 UTC
[llvm-dev] How to distinguish between user defined function in a program and library functions
<div dir="ltr"><br> </div><div dir="ltr">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? </div><div class="wps_quotion">On 5 Feb 2020 5:23 a.m., David Blaikie <dblaikie@gmail.com> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Generally, you can't - and optimizations/the compiler shouldn't differentiate between them.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 4, 2020 at 3:25 PM Sunil via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <div> <p>Say, I have the following program:</p> <div><font face="Courier New, Courier, monospace"> #include <iostream><br> int main(){<br> std::cout << "hello\n";<br> return 0;</font></div> <div><font face="Courier New, Courier, monospace"> }</font><br> </div> <div><br> </div> <div>After generating llvm bitcode using the following command: </div> <div> $ <font face="Courier New, Courier, monospace">clang++ -c -emit-llvm -O -Xclang -disable-llvm-passes a.cpp</font><br> </div> <div>the bitcode has the following function with define.</div> <div> <font face="Courier New, Courier, monospace">__cxx_global_var_init<br> main<br> _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc<br> _ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate<br> _ZNSt11char_traitsIcE6lengthEPKc<br> _ZStorSt12_Ios_IostateS_<br> _ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv<br> _GLOBAL__sub_I_a.cpp<br> </font></div> <div><br> </div> <div>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'.</div> <div><br> </div> <div>Regards,</div> <div> Sunil</div> </div> _______________________________________________<br> LLVM Developers mailing list<br> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br> </blockquote></div> </blockquote></div>
David Blaikie via llvm-dev
2020-Feb-05 04:10 UTC
[llvm-dev] How to distinguish between user defined function in a program and library functions
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>
Mehdi AMINI via llvm-dev
2020-Feb-05 04:56 UTC
[llvm-dev] How to distinguish between user defined function in a program and library functions
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>