Hi, I'm attempting to do some alias analysis & other memory inspection. I've written a pointless AliasAnalysis pass (that says everything must alias) to attempt to verify that my pass is getting picked up & run by opt. I run opt with: opt -load ~/Applications/llvm/lib/MustAA.so -must-aa -aa-eval -debug < trace0.ll I see my pass being initialized, but never being called (I see only may alias results). Any ideas as to what to do to debug this? Or what I'm missing? I've read through http://llvm.org/docs/AliasAnalysis.html and don't see anything that I'm missing. Thanks, Matthew P.S. Here's the full source code of my pass: #define DEBUG_TYPE "must-aa" #include "llvm/Pass.h" #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Debug.h" using namespace llvm; namespace { struct EverythingMustAlias : public ImmutablePass, public AliasAnalysis { static char ID; EverythingMustAlias() : ImmutablePass(ID) {} virtual void initializePass() { DEBUG(dbgs() << "Initializing everything-must-alias\n"); InitializeAliasAnalysis(this); } virtual void getAnalysisUsage(AnalysisUsage &AU) const { AliasAnalysis::getAnalysisUsage(AU); AU.setPreservesAll(); } virtual AliasResult alias(const Location &LocA, const Location &LocB) { DEBUG(dbgs() << "Everything must alias!\n"); return AliasAnalysis::MustAlias; } }; } namespace llvm { void initializeEverythingMustAliasPass(PassRegistry &Registry); } char EverythingMustAlias::ID = 0; static RegisterPass<EverythingMustAlias> A("must-aa", "Everything must alias"); INITIALIZE_AG_PASS(EverythingMustAlias, AliasAnalysis, "must-aa", "Everything must alias", false, true, false) -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140424/e840ea66/attachment.html>
Matthew O'Connor wrote:> Hi, > > I'm attempting to do some alias analysis & other memory inspection. I've > written a pointless AliasAnalysis pass (that says everything must alias) > to attempt to verify that my pass is getting picked up & run by opt. > > I run opt with: opt -load ~/Applications/llvm/lib/MustAA.so -must-aa > -aa-eval -debug < trace0.ll > > I see my pass being initialized, but never being called (I see only may > alias results). > > Any ideas as to what to do to debug this? Or what I'm missing? I've read > through http://llvm.org/docs/AliasAnalysis.html and don't see anything > that I'm missing. > > Thanks, > Matthew > > P.S. Here's the full source code of my pass: > > #define DEBUG_TYPE "must-aa" > #include "llvm/Pass.h" > #include "llvm/Analysis/AliasAnalysis.h" > #include "llvm/Support/raw_ostream.h" > #include "llvm/Support/Debug.h" > using namespace llvm; > > namespace { > struct EverythingMustAlias : public ImmutablePass, public AliasAnalysis {Because you have multiple inheritance on a Pass, you'll need this: /// getAdjustedAnalysisPointer - This method is used when a pass implements /// an analysis interface through multiple inheritance. If needed, it /// should override this to adjust the this pointer as needed for the /// specified pass info. void *getAdjustedAnalysisPointer(const void *ID) override { if (ID == &AliasAnalysis::ID) return (AliasAnalysis*)this; return this; } There may be another issue beyond that, I haven't tried it. Nick> static char ID; > EverythingMustAlias() : ImmutablePass(ID) {} > > virtual void initializePass() { > DEBUG(dbgs() << "Initializing everything-must-alias\n"); > InitializeAliasAnalysis(this); > } > > virtual void getAnalysisUsage(AnalysisUsage &AU) const { > AliasAnalysis::getAnalysisUsage(AU); > AU.setPreservesAll(); > } > > virtual AliasResult alias(const Location &LocA, const Location &LocB) { > DEBUG(dbgs() << "Everything must alias!\n"); > return AliasAnalysis::MustAlias; > } > }; > } > > namespace llvm { > void initializeEverythingMustAliasPass(PassRegistry &Registry); > } > > char EverythingMustAlias::ID = 0; > static RegisterPass<EverythingMustAlias> A("must-aa", "Everything must > alias"); > INITIALIZE_AG_PASS(EverythingMustAlias, AliasAnalysis, "must-aa", > "Everything must alias", false, true, false) > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
On Sat, Apr 26, 2014 at 4:59 PM, Nick Lewycky <nicholas at mxc.ca> wrote:> Matthew O'Connor wrote: > >> Hi, >> >> I'm attempting to do some alias analysis & other memory inspection. I've >> written a pointless AliasAnalysis pass (that says everything must alias) >> to attempt to verify that my pass is getting picked up & run by opt. >> >> I run opt with: opt -load ~/Applications/llvm/lib/MustAA.so -must-aa >> -aa-eval -debug < trace0.ll >> >> I see my pass being initialized, but never being called (I see only may >> alias results). >> >> Any ideas as to what to do to debug this? Or what I'm missing? I've read >> through http://llvm.org/docs/AliasAnalysis.html and don't see anything >> that I'm missing. >> >> Thanks, >> Matthew >> >> P.S. Here's the full source code of my pass: >> >> #define DEBUG_TYPE "must-aa" >> #include "llvm/Pass.h" >> #include "llvm/Analysis/AliasAnalysis.h" >> #include "llvm/Support/raw_ostream.h" >> #include "llvm/Support/Debug.h" >> using namespace llvm; >> >> namespace { >> struct EverythingMustAlias : public ImmutablePass, public AliasAnalysis { >> > > Because you have multiple inheritance on a Pass, you'll need this: > > /// getAdjustedAnalysisPointer - This method is used when a pass > implements > /// an analysis interface through multiple inheritance. If needed, it > /// should override this to adjust the this pointer as needed for the > /// specified pass info. > void *getAdjustedAnalysisPointer(const void *ID) override { > if (ID == &AliasAnalysis::ID) > return (AliasAnalysis*)this; > return this; > } > > There may be another issue beyond that, I haven't tried it. > > Nick >I overrode Pass's member function: virtual void *getAdjustedAnalysisPointer(AnalysisID ID); I'm not seeing getAdjustedAnalysisPointer being called. Any other ideas?> > static char ID; >> EverythingMustAlias() : ImmutablePass(ID) {} >> >> virtual void initializePass() { >> DEBUG(dbgs() << "Initializing everything-must-alias\n"); >> InitializeAliasAnalysis(this); >> } >> >> virtual void getAnalysisUsage(AnalysisUsage &AU) const { >> AliasAnalysis::getAnalysisUsage(AU); >> AU.setPreservesAll(); >> } >> >> virtual AliasResult alias(const Location &LocA, const Location &LocB) { >> DEBUG(dbgs() << "Everything must alias!\n"); >> return AliasAnalysis::MustAlias; >> } >> }; >> } >> >> namespace llvm { >> void initializeEverythingMustAliasPass(PassRegistry &Registry); >> } >> >> char EverythingMustAlias::ID = 0; >> static RegisterPass<EverythingMustAlias> A("must-aa", "Everything must >> alias"); >> INITIALIZE_AG_PASS(EverythingMustAlias, AliasAnalysis, "must-aa", >> "Everything must alias", false, true, false) >> >> >> >> _______________________________________________ >> 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/20140428/81d8f352/attachment.html>
On Thu, Apr 24, 2014 at 4:38 PM, Matthew O'Connor <thegreendragon at gmail.com>wrote:> Hi, > > I'm attempting to do some alias analysis & other memory inspection. I've > written a pointless AliasAnalysis pass (that says everything must alias) to > attempt to verify that my pass is getting picked up & run by opt. > > I run opt with: opt -load ~/Applications/llvm/lib/MustAA.so -must-aa > -aa-eval -debug < trace0.ll > > I see my pass being initialized, but never being called (I see only may > alias results). > > Any ideas as to what to do to debug this? Or what I'm missing? I've read > through http://llvm.org/docs/AliasAnalysis.html and don't see anything > that I'm missing. > > Thanks, > Matthew > > P.S. Here's the full source code of my pass: > > #define DEBUG_TYPE "must-aa" > #include "llvm/Pass.h" > #include "llvm/Analysis/AliasAnalysis.h" > #include "llvm/Support/raw_ostream.h" > #include "llvm/Support/Debug.h" > using namespace llvm; > > namespace { > struct EverythingMustAlias : public ImmutablePass, public AliasAnalysis { > static char ID; > EverythingMustAlias() : ImmutablePass(ID) {} > > virtual void initializePass() { > DEBUG(dbgs() << "Initializing everything-must-alias\n"); > InitializeAliasAnalysis(this); > } > > virtual void getAnalysisUsage(AnalysisUsage &AU) const { > AliasAnalysis::getAnalysisUsage(AU); > AU.setPreservesAll(); > } > > virtual AliasResult alias(const Location &LocA, const Location &LocB) { > DEBUG(dbgs() << "Everything must alias!\n"); > return AliasAnalysis::MustAlias; > } > }; > } > > namespace llvm { > void initializeEverythingMustAliasPass(PassRegistry &Registry); > } > > char EverythingMustAlias::ID = 0; > static RegisterPass<EverythingMustAlias> A("must-aa", "Everything must > alias"); >static RegisterPass<EverythingMustAlias> A("must-aa", "Everything must alias", false, true); Can you try this?> INITIALIZE_AG_PASS(EverythingMustAlias, AliasAnalysis, "must-aa", > "Everything must alias", false, true, false) > > > _______________________________________________ > 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/20140428/9655f69b/attachment.html>
Hi Matthew, Did you add your alias analysis pass initializeEverythingMustAliasPass() into llvm::initializeAnalysis(PassRegistry &Registry) {} ? This will initialize it linked into the Analysis library. thanks, chen On Apr 28, 2014, at 8:43 PM, Jingyue Wu <jingyue at google.com> wrote:> > > > On Thu, Apr 24, 2014 at 4:38 PM, Matthew O'Connor <thegreendragon at gmail.com> wrote: > Hi, > > I'm attempting to do some alias analysis & other memory inspection. I've written a pointless AliasAnalysis pass (that says everything must alias) to attempt to verify that my pass is getting picked up & run by opt. > > I run opt with: opt -load ~/Applications/llvm/lib/MustAA.so -must-aa -aa-eval -debug < trace0.ll > > I see my pass being initialized, but never being called (I see only may alias results). > > Any ideas as to what to do to debug this? Or what I'm missing? I've read through http://llvm.org/docs/AliasAnalysis.html and don't see anything that I'm missing. > > Thanks, > Matthew > > P.S. Here's the full source code of my pass: > > #define DEBUG_TYPE "must-aa" > #include "llvm/Pass.h" > #include "llvm/Analysis/AliasAnalysis.h" > #include "llvm/Support/raw_ostream.h" > #include "llvm/Support/Debug.h" > using namespace llvm; > > namespace { > struct EverythingMustAlias : public ImmutablePass, public AliasAnalysis { > static char ID; > EverythingMustAlias() : ImmutablePass(ID) {} > > virtual void initializePass() { > DEBUG(dbgs() << "Initializing everything-must-alias\n"); > InitializeAliasAnalysis(this); > } > > virtual void getAnalysisUsage(AnalysisUsage &AU) const { > AliasAnalysis::getAnalysisUsage(AU); > AU.setPreservesAll(); > } > > virtual AliasResult alias(const Location &LocA, const Location &LocB) { > DEBUG(dbgs() << "Everything must alias!\n"); > return AliasAnalysis::MustAlias; > } > }; > } > > namespace llvm { > void initializeEverythingMustAliasPass(PassRegistry &Registry); > } > > char EverythingMustAlias::ID = 0; > static RegisterPass<EverythingMustAlias> A("must-aa", "Everything must alias"); > > static RegisterPass<EverythingMustAlias> A("must-aa", "Everything must alias", false, true); > > Can you try this? > > INITIALIZE_AG_PASS(EverythingMustAlias, AliasAnalysis, "must-aa", > "Everything must alias", false, true, false) > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://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/20140428/afa22b80/attachment.html>
Apparently Analagous Threads
- [LLVMdev] writing an alias analysis pass?
- [LLVMdev] Using an alias analysis pass
- [LLVMdev] What is the right way to register an alias analysis pass
- [LLVMdev] llvm pass INITIALIZE
- [LLVMdev] PLEASE help with Alias Analysis initialization assertion at the end of my pass