[LLVMdev] loadable passes with dependencies?

Criswell, John T criswell at illinois.edu
Tue Nov 8 16:31:31 PST 2011


Make sure that the function F is not a declaration before calling getAnalysis<>().

Sent from my iPhone

On Nov 8, 2011, at 6:16 PM, "ret val" <retval386 at gmail.com> wrote:

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




More information about the llvm-dev mailing list