I still have the addRequired: virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired<DominatorTree>(); } The other line DominatorTree *dt = &getAnalysis<DominatorTree>(); Is for later use when I try to use PromoteMemToReg On Tue, Nov 8, 2011 at 4:22 PM, Michael Ilseman <michael at lunarg.com> wrote:> Something's different here, earlier in the thread you said you had: > void getAnalysisUsage(AnalysisUsage &AU) const { > AU.addRequired<DominatorTree>(); > } > Now you have: > void getAnalysisUsage(AnalysisUsage &AU) const { > DominatorTree *dt = &getAnalysis<DominatorTree>(); > > I'm sort of confused, why did this change happen? I think the > "AU.addRequired" was correct to have in getAnalysisUsage, and the > "getAnalysis" goes e.g. in the top of runOnFunction/Module/Whatever. Sorry > if I misunderstood what's going on. > > On Tue, Nov 8, 2011 at 12:50 PM, ret val <retval386 at gmail.com> wrote: >> >> Just shows me what I expect >> void getAnalysisUsage(AnalysisUsage &AU) const { >> DominatorTree *dt = &getAnalysis<DominatorTree>(); >> >> So I'm only using it for DominatorTree(so I can use PromoteMemToReg). >> >> Thanks >> >> On Tue, Nov 8, 2011 at 2:28 PM, Tobias Grosser <tobias at grosser.es> wrote: >> > On 11/08/2011 07:33 PM, ret val wrote: >> >> >> >> Sorry to keep dragging this out on you. Im now getting: Assertion >> >> failed: (ResultPass&& "getAnalysis*() called on an analysis that was >> >> not " "'required' by pass!"), function getAnalysisID >> >> >> >> But I already have: >> >> void getAnalysisUsage(AnalysisUsage&AU) const { >> >> AU.addRequired<DominatorTree>(); >> >> } >> >> >> >> And changed the bottom of my pass too: >> >> >> >> char Hello::ID = 0; >> >> namespace llvm { void initializeHelloPass(llvm::PassRegistry&); } >> >> INITIALIZE_PASS_BEGIN(Hello, "hello", "Hello World Pass", false, true) >> >> INITIALIZE_PASS_DEPENDENCY(DominatorTree) >> >> INITIALIZE_PASS_END(Hello, "hello", "Hello World Pass", false, true) >> >> >> >> class StaticInitializer { >> >> public: >> >> StaticInitializer() { >> >> PassRegistry&Registry >> >> *PassRegistry::getPassRegistry(); >> >> initializeHelloPass(Registry); >> >> } >> >> }; >> >> >> >> static StaticInitializer InitializeEverything; >> > >> > Looks good to me. Are you sure you call getAnalysis only for the >> > DominatorTree? What is the output of "grep getAnalysis YourPass.cpp"? >> > >> > Cheers >> > Tobi >> > >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >
On 11/8/11 4:34 PM, ret val wrote:> I still have the addRequired: > virtual void getAnalysisUsage(AnalysisUsage&AU) const { > AU.addRequired<DominatorTree>(); > } > > The other line > DominatorTree *dt =&getAnalysis<DominatorTree>(); > Is for later use when I try to use PromoteMemToRegIsn't DominatorTree a FunctionPass? If your pass is a ModulePass, you need to pass a Function * or Function & to getAnalysis<>(): getAnalysis<DominatorTree>(F) -- John T.> > On Tue, Nov 8, 2011 at 4:22 PM, Michael Ilseman<michael at lunarg.com> wrote: >> Something's different here, earlier in the thread you said you had: >> void getAnalysisUsage(AnalysisUsage&AU) const { >> AU.addRequired<DominatorTree>(); >> } >> Now you have: >> void getAnalysisUsage(AnalysisUsage&AU) const { >> DominatorTree *dt =&getAnalysis<DominatorTree>(); >> >> I'm sort of confused, why did this change happen? I think the >> "AU.addRequired" was correct to have in getAnalysisUsage, and the >> "getAnalysis" goes e.g. in the top of runOnFunction/Module/Whatever. Sorry >> if I misunderstood what's going on. >> >> On Tue, Nov 8, 2011 at 12:50 PM, ret val<retval386 at gmail.com> wrote: >>> Just shows me what I expect >>> void getAnalysisUsage(AnalysisUsage&AU) const { >>> DominatorTree *dt =&getAnalysis<DominatorTree>(); >>> >>> So I'm only using it for DominatorTree(so I can use PromoteMemToReg). >>> >>> Thanks >>> >>> On Tue, Nov 8, 2011 at 2:28 PM, Tobias Grosser<tobias at grosser.es> wrote: >>>> On 11/08/2011 07:33 PM, ret val wrote: >>>>> Sorry to keep dragging this out on you. Im now getting: Assertion >>>>> failed: (ResultPass&& "getAnalysis*() called on an analysis that was >>>>> not " "'required' by pass!"), function getAnalysisID >>>>> >>>>> But I already have: >>>>> void getAnalysisUsage(AnalysisUsage&AU) const { >>>>> AU.addRequired<DominatorTree>(); >>>>> } >>>>> >>>>> And changed the bottom of my pass too: >>>>> >>>>> char Hello::ID = 0; >>>>> namespace llvm { void initializeHelloPass(llvm::PassRegistry&); } >>>>> INITIALIZE_PASS_BEGIN(Hello, "hello", "Hello World Pass", false, true) >>>>> INITIALIZE_PASS_DEPENDENCY(DominatorTree) >>>>> INITIALIZE_PASS_END(Hello, "hello", "Hello World Pass", false, true) >>>>> >>>>> class StaticInitializer { >>>>> public: >>>>> StaticInitializer() { >>>>> PassRegistry&Registry >>>>> *PassRegistry::getPassRegistry(); >>>>> initializeHelloPass(Registry); >>>>> } >>>>> }; >>>>> >>>>> static StaticInitializer InitializeEverything; >>>> Looks good to me. Are you sure you call getAnalysis only for the >>>> DominatorTree? What is the output of "grep getAnalysis YourPass.cpp"? >>>> >>>> Cheers >>>> Tobi >>>> >>> _______________________________________________ >>> 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
Awesome, that let me get far enough to trip: Assertion failed: (ResultPass && "Unable to find requested analysis info"), function getAnalysisID Is there something else I forgot? On Tue, Nov 8, 2011 at 5:47 PM, John Criswell <criswell at illinois.edu> wrote:> On 11/8/11 4:34 PM, ret val wrote: >> >> I still have the addRequired: >> virtual void getAnalysisUsage(AnalysisUsage&AU) const { >> AU.addRequired<DominatorTree>(); >> } >> >> The other line >> DominatorTree *dt =&getAnalysis<DominatorTree>(); >> Is for later use when I try to use PromoteMemToReg > > Isn't DominatorTree a FunctionPass? If your pass is a ModulePass, you need > to pass a Function * or Function & to getAnalysis<>(): > > getAnalysis<DominatorTree>(F) > > -- John T. > >> >> On Tue, Nov 8, 2011 at 4:22 PM, Michael Ilseman<michael at lunarg.com> >> wrote: >>> >>> Something's different here, earlier in the thread you said you had: >>> void getAnalysisUsage(AnalysisUsage&AU) const { >>> AU.addRequired<DominatorTree>(); >>> } >>> Now you have: >>> void getAnalysisUsage(AnalysisUsage&AU) const { >>> DominatorTree *dt =&getAnalysis<DominatorTree>(); >>> >>> I'm sort of confused, why did this change happen? I think the >>> "AU.addRequired" was correct to have in getAnalysisUsage, and the >>> "getAnalysis" goes e.g. in the top of runOnFunction/Module/Whatever. >>> Sorry >>> if I misunderstood what's going on. >>> >>> On Tue, Nov 8, 2011 at 12:50 PM, ret val<retval386 at gmail.com> wrote: >>>> >>>> Just shows me what I expect >>>> void getAnalysisUsage(AnalysisUsage&AU) const { >>>> DominatorTree *dt =&getAnalysis<DominatorTree>(); >>>> >>>> So I'm only using it for DominatorTree(so I can use PromoteMemToReg). >>>> >>>> Thanks >>>> >>>> On Tue, Nov 8, 2011 at 2:28 PM, Tobias Grosser<tobias at grosser.es> >>>> wrote: >>>>> >>>>> On 11/08/2011 07:33 PM, ret val wrote: >>>>>> >>>>>> Sorry to keep dragging this out on you. Im now getting: Assertion >>>>>> failed: (ResultPass&& "getAnalysis*() called on an analysis that >>>>>> was >>>>>> not " "'required' by pass!"), function getAnalysisID >>>>>> >>>>>> But I already have: >>>>>> void getAnalysisUsage(AnalysisUsage&AU) const { >>>>>> AU.addRequired<DominatorTree>(); >>>>>> } >>>>>> >>>>>> And changed the bottom of my pass too: >>>>>> >>>>>> char Hello::ID = 0; >>>>>> namespace llvm { void initializeHelloPass(llvm::PassRegistry&); } >>>>>> INITIALIZE_PASS_BEGIN(Hello, "hello", "Hello World Pass", false, true) >>>>>> INITIALIZE_PASS_DEPENDENCY(DominatorTree) >>>>>> INITIALIZE_PASS_END(Hello, "hello", "Hello World Pass", false, true) >>>>>> >>>>>> class StaticInitializer { >>>>>> public: >>>>>> StaticInitializer() { >>>>>> PassRegistry&Registry >>>>>> *PassRegistry::getPassRegistry(); >>>>>> initializeHelloPass(Registry); >>>>>> } >>>>>> }; >>>>>> >>>>>> static StaticInitializer InitializeEverything; >>>>> >>>>> Looks good to me. Are you sure you call getAnalysis only for the >>>>> DominatorTree? What is the output of "grep getAnalysis YourPass.cpp"? >>>>> >>>>> Cheers >>>>> Tobi >>>>> >>>> _______________________________________________ >>>> 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 > >