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>