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 > >