Yafei Liu via llvm-dev
2019-Feb-26 10:14 UTC
[llvm-dev] How to implement function pointer?
Hi, I'm learning to use llvm api to generate IR code, I got two good tutorials, https://llvm.org/docs/tutorial/ and https://www.ibm.com/developerworks/library/os-createcompilerllvm1/index.html, but non of those showed how to implement a function pointer(or at least there is but I didn't find out). For example I got a c style code like this: int foo(int i) { return ++i; } int (*p)(int); int main() { p = foo; p(3); } I turn it into IR code and found the sytex of a function pointer is: @p = global i32 (i32)* null, align 8 I tried play with llvm::PointerType but I cannot get the sytex, so could anyone teach me how to do this? -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190226/76c12a80/attachment.html>
Philip Pfaffe via llvm-dev
2019-Feb-26 11:18 UTC
[llvm-dev] How to implement function pointer?
Hi Yafei, you're looking for the [FunctionType]( http://llvm.org/doxygen/classllvm_1_1FunctionType.html). Cheers, Philip On Tue, Feb 26, 2019 at 11:15 AM Yafei Liu via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hi, I'm learning to use llvm api to generate IR code, I got two good > tutorials, https://llvm.org/docs/tutorial/ and > https://www.ibm.com/developerworks/library/os-createcompilerllvm1/index.html, > but non of those showed how to implement a function pointer(or at least > there is but I didn't find out). > > For example I got a c style code like this: > > int foo(int i) { > return ++i; > } > > int (*p)(int); > > int main() { > p = foo; > p(3); > } > > I turn it into IR code and found the sytex of a function pointer is: > @p = global i32 (i32)* null, align 8 > I tried play with llvm::PointerType but I cannot get the sytex, so could > anyone teach me how to do this? > _______________________________________________ > 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/20190226/d61515fb/attachment.html>
Yafei Liu via llvm-dev
2019-Feb-26 11:41 UTC
[llvm-dev] How to implement function pointer?
Hi Philip, Isn't function pointer a pointer first? I checked FunctionType and still have no idea about how to do this, can you show me which api in FunctionType should I use? On Tue, Feb 26, 2019 at 7:18 PM Philip Pfaffe <philip.pfaffe at gmail.com> wrote:> Hi Yafei, > > you're looking for the [FunctionType]( > http://llvm.org/doxygen/classllvm_1_1FunctionType.html). > > Cheers, > Philip > > On Tue, Feb 26, 2019 at 11:15 AM Yafei Liu via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> Hi, I'm learning to use llvm api to generate IR code, I got two good >> tutorials, https://llvm.org/docs/tutorial/ and >> https://www.ibm.com/developerworks/library/os-createcompilerllvm1/index.html, >> but non of those showed how to implement a function pointer(or at least >> there is but I didn't find out). >> >> For example I got a c style code like this: >> >> int foo(int i) { >> return ++i; >> } >> >> int (*p)(int); >> >> int main() { >> p = foo; >> p(3); >> } >> >> I turn it into IR code and found the sytex of a function pointer is: >> @p = global i32 (i32)* null, align 8 >> I tried play with llvm::PointerType but I cannot get the sytex, so could >> anyone teach me how to do this? >> _______________________________________________ >> 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/20190226/74c5f7d7/attachment.html>