[llvm-dev] How to distinguish between user defined function in a program and library functions
George Burgess IV via llvm-dev
llvm-dev at lists.llvm.org
Fri Feb 7 16:04:28 PST 2020
I'd imagine you can tweak clang's CodeGen to add a Metadata node to all
`llvm::Function`s clang emits that basically says whether or not the code
appeared in a system header. SourceManager::isInSystemHeader should help
you figure out what's where. You'll probably need special handling for
generated code, like `__cxx_global_var_init`
I offer no guarantees about the LLVM community accepting this patch, though
:)
To Mehdi's point, inlining can make things materially more difficult.
On Wed, Feb 5, 2020 at 10:16 AM Jacob Carlborg via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> On 2020-02-04 17:24, Sunil via llvm-dev 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'.
>
> Perhaps you can check where a function is defined and treat all
> functions defined in a file passed to the compiler as user defined and
> all other as system defined. Not sure if that's good enough for you.
>
> --
> /Jacob Carlborg
>
> _______________________________________________
> 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/20200207/5d1b9975/attachment.html>
More information about the llvm-dev
mailing list