Jeremy Salwen
2014-Jun-12 20:46 UTC
[LLVMdev] Creating and implementing an analysis group out of tree
Hi Eli, Thanks for the link! I'm able to compile a standalone pass outside of the source tree, and I'm obviously ably to compile analysis groups inside the source tree. However, the problem comes when I try to do what the tutorial suggests to create an analysis group outside of the source tree. My understanding is that building out of tree requires different methods to register the passes. For example, the class RegisterPass, which the tutorial instructs you to use (and is used by sample repository you linked), never shows up in the source tree. Likewise for RegisterAnalysisGroup. Furthermore I've found that just copying the way it's done in the source tree and not using RegisterPass causes opt to not recognize your command-line arguments. Do you know of any other projects that will demonstrate how to build passes out of tree, only creating an analysis group as well? Thanks Jeremy On Thu, Jun 12, 2014 at 4:20 PM, Eli Bendersky <eliben at google.com> wrote:> > > > On Thu, Jun 12, 2014 at 1:10 PM, Jeremy Salwen <jeremysalwen at gmail.com> > wrote: > >> Hello all, >> >> I'm trying to follow the guide >> http://llvm.org/docs/WritingAnLLVMPass.html to build an some passes and >> analysis groups out of tree. However, I'm having some trouble with crashes >> when I try to follow the guide. >> The first section provides a very useful example of what the whole .cpp >> file should look like for the HelloWorld pass. Obviously it's a bit more >> complex to write the whole setup with an analysis group, an analysis pass, >> and a transform pass that uses the analysis, but example code would be >> extremely helpful, and could serve as a good starting point for anyone who >> wants to do something similar. Is there anywhere i could find such example >> code, perhaps as part of a project, that demonstrates how to define and use >> an analysis group out of tree? >> > > It's not entirely clear which part you're having a problem with. If it's > creating an analysis group, there should be samples within the LLVM source > code. If it's building out-of-tree, take a look at > https://github.com/eliben/llvm-clang-samples -- it's a repository with a > bunch of LLVM/Clang samples, all built out of tree. It keeps pretty close > track to ToT, as well as having branches for prior releases (3.3 and 3.4, > for now). > > Eli > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140612/4d424d7f/attachment.html>
Eli Bendersky
2014-Jun-12 20:52 UTC
[LLVMdev] Creating and implementing an analysis group out of tree
On Thu, Jun 12, 2014 at 1:46 PM, Jeremy Salwen <jeremysalwen at gmail.com> wrote:> Hi Eli, > > Thanks for the link! I'm able to compile a standalone pass outside of the > source tree, and I'm obviously ably to compile analysis groups inside the > source tree. However, the problem comes when I try to do what the tutorial > suggests to create an analysis group outside of the source tree. > > My understanding is that building out of tree requires different methods > to register the passes. >I don't think so; or I may be misunderstanding what you mean by "out of tree"?> For example, the class RegisterPass, which the tutorial instructs you to > use (and is used by sample repository you linked), never shows up in the > source tree. Likewise for RegisterAnalysisGroup. >What makes you say that? Both appear there.> Furthermore I've found that just copying the way it's done in the source > tree and not using RegisterPass causes opt to not recognize your > command-line arguments. > > Do you know of any other projects that will demonstrate how to build > passes out of tree, only creating an analysis group as well? > >Nope, sorry. Eli> Thanks > Jeremy > > > On Thu, Jun 12, 2014 at 4:20 PM, Eli Bendersky <eliben at google.com> wrote: > >> >> >> >> On Thu, Jun 12, 2014 at 1:10 PM, Jeremy Salwen <jeremysalwen at gmail.com> >> wrote: >> >>> Hello all, >>> >>> I'm trying to follow the guide >>> http://llvm.org/docs/WritingAnLLVMPass.html to build an some passes and >>> analysis groups out of tree. However, I'm having some trouble with crashes >>> when I try to follow the guide. >>> The first section provides a very useful example of what the whole .cpp >>> file should look like for the HelloWorld pass. Obviously it's a bit more >>> complex to write the whole setup with an analysis group, an analysis pass, >>> and a transform pass that uses the analysis, but example code would be >>> extremely helpful, and could serve as a good starting point for anyone who >>> wants to do something similar. Is there anywhere i could find such example >>> code, perhaps as part of a project, that demonstrates how to define and use >>> an analysis group out of tree? >>> >> >> It's not entirely clear which part you're having a problem with. If it's >> creating an analysis group, there should be samples within the LLVM source >> code. If it's building out-of-tree, take a look at >> https://github.com/eliben/llvm-clang-samples -- it's a repository with a >> bunch of LLVM/Clang samples, all built out of tree. It keeps pretty close >> track to ToT, as well as having branches for prior releases (3.3 and 3.4, >> for now). >> >> Eli >> >> >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140612/922c2053/attachment.html>
John Criswell
2014-Jun-12 21:06 UTC
[LLVMdev] Creating and implementing an analysis group out of tree
On 6/12/14, 3:46 PM, Jeremy Salwen wrote:> Hi Eli, > > Thanks for the link! I'm able to compile a standalone pass outside of > the source tree, and I'm obviously ably to compile analysis groups > inside the source tree. However, the problem comes when I try to do > what the tutorial suggests to create an analysis group outside of the > source tree. > > My understanding is that building out of tree requires different > methods to register the passes. For example, the class RegisterPass, > which the tutorial instructs you to use (and is used by sample > repository you linked), never shows up in the source tree. Likewise > for RegisterAnalysisGroup. Furthermore I've found that just copying > the way it's done in the source tree and not using RegisterPass causes > opt to not recognize your command-line arguments. > > Do you know of any other projects that will demonstrate how to build > passes out of tree, only creating an analysis group as well?The poolalloc and SAFECode projects have analysis groups. For directions on downloading the code, please see http://sva.cs.illinois.edu/docs/Install.html. Regards, John Criswell> > Thanks > Jeremy > > > On Thu, Jun 12, 2014 at 4:20 PM, Eli Bendersky <eliben at google.com > <mailto:eliben at google.com>> wrote: > > > > > On Thu, Jun 12, 2014 at 1:10 PM, Jeremy Salwen > <jeremysalwen at gmail.com <mailto:jeremysalwen at gmail.com>> wrote: > > Hello all, > > I'm trying to follow the guide > http://llvm.org/docs/WritingAnLLVMPass.html to build an some > passes and analysis groups out of tree. However, I'm having > some trouble with crashes when I try to follow the guide. > The first section provides a very useful example of what the > whole .cpp file should look like for the HelloWorld pass. > Obviously it's a bit more complex to write the whole setup > with an analysis group, an analysis pass, and a transform pass > that uses the analysis, but example code would be extremely > helpful, and could serve as a good starting point for anyone > who wants to do something similar. Is there anywhere i could > find such example code, perhaps as part of a project, that > demonstrates how to define and use an analysis group out of tree? > > > It's not entirely clear which part you're having a problem with. > If it's creating an analysis group, there should be samples within > the LLVM source code. If it's building out-of-tree, take a look at > https://github.com/eliben/llvm-clang-samples -- it's a repository > with a bunch of LLVM/Clang samples, all built out of tree. It > keeps pretty close track to ToT, as well as having branches for > prior releases (3.3 and 3.4, for now). > > Eli > > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140612/75c95c99/attachment.html>
Jeremy Salwen
2014-Jun-12 22:43 UTC
[LLVMdev] Creating and implementing an analysis group out of tree
Eli, I'm referring to building a project in its own directory, without a copy of the llvm source being involved at all. If I grep for RegisterAnalysisGroup it only shows up in the header file it's defined, and in the docs directory. (RegisterPass does show up however, just not in all of the passes). John, thanks, I'm taking a look at poolalloc. It doesn't seem to compile with the latest SVN, but hopefully the code regarding analysis groups is up to date[1] Jeremy [1] I had to make some changes for headers being moved around, but after doing so, I still got error messages llvm[2]: Compiling AddressTakenAnalysis.cpp for Release+Asserts build (PIC)> AddressTakenAnalysis.cpp: In function ‘bool isAddressTaken(llvm::Value*)’: > AddressTakenAnalysis.cpp:39:16: error: cannot convert ‘llvm::Use’ to > ‘llvm::User*’ in initialization > User *U = *I; > ^ > AddressTakenAnalysis.cpp:63:25: error: no matching function for call to > ‘llvm::CallSite::isCallee(llvm::Value::use_iterator&)’ > if (!CS.isCallee(I)) > ^ > AddressTakenAnalysis.cpp:63:25: note: candidates are: > In file included from AddressTakenAnalysis.cpp:25:0: > /home/jeremy/hardware/llvm/llvmsource/llvm-toolchain-snapshot-3.5~svn209039/include/llvm/IR/CallSite.h:106:8: > note: bool llvm::CallSiteBase<FunTy, ValTy, UserTy, InstrTy, CallTy, > InvokeTy, IterTy>::isCallee(llvm::Value::const_user_iterator) const [with > FunTy = llvm::Function; ValTy = llvm::Value; UserTy = llvm::User; InstrTy > llvm::Instruction; CallTy = llvm::CallInst; InvokeTy = llvm::InvokeInst; > IterTy = llvm::Use*; llvm::Value::const_user_iterator > llvm::Value::user_iterator_impl<const llvm::User>] > bool isCallee(Value::const_user_iterator UI) const { > ^ > /home/jeremy/hardware/llvm/llvmsource/llvm-toolchain-snapshot-3.5~svn209039/include/llvm/IR/CallSite.h:106:8: > note: no known conversion for argument 1 from ‘llvm::Value::use_iterator’ > to ‘llvm::Value::const_user_iterator {aka > llvm::Value::user_iterator_impl<const llvm::User>}’ > /home/jeremy/hardware/llvm/llvmsource/llvm-toolchain-snapshot-3.5~svn209039/include/llvm/IR/CallSite.h:111:8: > note: bool llvm::CallSiteBase<FunTy, ValTy, UserTy, InstrTy, CallTy, > InvokeTy, IterTy>::isCallee(const llvm::Use*) const [with FunTy > llvm::Function; ValTy = llvm::Value; UserTy = llvm::User; InstrTy > llvm::Instruction; CallTy = llvm::CallInst; InvokeTy = llvm::InvokeInst; > IterTy = llvm::Use*] > bool isCallee(const Use *U) const { return getCallee() == U; } > ^ > /home/jeremy/hardware/llvm/llvmsource/llvm-toolchain-snapshot-3.5~svn209039/include/llvm/IR/CallSite.h:111:8: > note: no known conversion for argument 1 from ‘llvm::Value::use_iterator’ > to ‘const llvm::Use*’ > >On Thu, Jun 12, 2014 at 5:06 PM, John Criswell <criswell at illinois.edu> wrote:> On 6/12/14, 3:46 PM, Jeremy Salwen wrote: > > Hi Eli, > > Thanks for the link! I'm able to compile a standalone pass outside of the > source tree, and I'm obviously ably to compile analysis groups inside the > source tree. However, the problem comes when I try to do what the tutorial > suggests to create an analysis group outside of the source tree. > > My understanding is that building out of tree requires different methods > to register the passes. For example, the class RegisterPass, which the > tutorial instructs you to use (and is used by sample repository you > linked), never shows up in the source tree. Likewise for > RegisterAnalysisGroup. Furthermore I've found that just copying the way > it's done in the source tree and not using RegisterPass causes opt to not > recognize your command-line arguments. > > Do you know of any other projects that will demonstrate how to build > passes out of tree, only creating an analysis group as well? > > > The poolalloc and SAFECode projects have analysis groups. For directions > on downloading the code, please see > http://sva.cs.illinois.edu/docs/Install.html. > > Regards, > > John Criswell > > > Thanks > Jeremy > > > On Thu, Jun 12, 2014 at 4:20 PM, Eli Bendersky <eliben at google.com> wrote: > >> >> >> >> On Thu, Jun 12, 2014 at 1:10 PM, Jeremy Salwen <jeremysalwen at gmail.com> >> wrote: >> >>> Hello all, >>> >>> I'm trying to follow the guide >>> http://llvm.org/docs/WritingAnLLVMPass.html to build an some passes and >>> analysis groups out of tree. However, I'm having some trouble with crashes >>> when I try to follow the guide. >>> The first section provides a very useful example of what the whole .cpp >>> file should look like for the HelloWorld pass. Obviously it's a bit more >>> complex to write the whole setup with an analysis group, an analysis pass, >>> and a transform pass that uses the analysis, but example code would be >>> extremely helpful, and could serve as a good starting point for anyone who >>> wants to do something similar. Is there anywhere i could find such example >>> code, perhaps as part of a project, that demonstrates how to define and use >>> an analysis group out of tree? >>> >> >> It's not entirely clear which part you're having a problem with. If >> it's creating an analysis group, there should be samples within the LLVM >> source code. If it's building out-of-tree, take a look at >> https://github.com/eliben/llvm-clang-samples -- it's a repository with a >> bunch of LLVM/Clang samples, all built out of tree. It keeps pretty close >> track to ToT, as well as having branches for prior releases (3.3 and 3.4, >> for now). >> >> Eli >> >> >> > > > _______________________________________________ > LLVM Developers mailing listLLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.eduhttp://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140612/b1e2d80e/attachment.html>