[LLVMdev] loadable passes with dependencies?

ret val retval386 at gmail.com
Tue Nov 8 14:34:43 PST 2011


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




More information about the llvm-dev mailing list