[LLVMdev] [Fwd: Error while running my pass with opt]

John Criswell criswell at uiuc.edu
Mon May 10 10:29:11 PDT 2010


ambika wrote:
> Here is getAnalysisUsage() i am using,
>
>    void getAnalysisUsage(AnalysisUsage &AU) const {
>       AU.setPreservesAll();
>       AU.addRequired<DominatorTree>();
>     }
>
> and then I use it as,
>
>
> bool ptrTest::runOnModule(Module &M) {
>
>   DominatorTree &DT = getAnalysis<DominatorTree>();
>   ......
>
> }
>   

Weird.  There is nothing unusual about your getAnalysisUsage() method at 
all.

I assume ptrTest is either a ModulePass or FunctionPass, correct?

A few other questions:

1) Is ptrTest part of an analysis group?

2) Does ptrTest has a static ID member whose address is passed into its 
constructor as a default parameter?  The code should look something like 
this:

public :
    static char ID;
    ptrTest () : FunctionPass ((intptr_t) &ID) { }


-- John T.

> John Criswell wrote:
>   
>> ambika wrote:
>>     
>>> But this is already present in my pass.
>>> And I am not able to understand the cause for the error:
>>>   
>>>       
>> Can you send a copy of your getAnalysisUsage() method for your pass?  
>> There are some funny errors that can occur when you do things that the 
>> PassManager cannot handle.
>>
>> For example, if you're requiring a transform pass, that can cause 
>> strange assertions from the PassManager.  Requiring a BasicBlock pass 
>> from a FunctionPass might also hit assertions within PassManager (I 
>> think).
>>
>> If you post your getAnalysisUsage() method, I can take a quick look to 
>> see if you're doing something that I know is unsupported by PassManager.
>>
>> -- John T.
>>
>>     
>>> opt: 
>>> /home/ambika/llvm_3/llvm-2.6/include/llvm/PassAnalysisSupport.h:203: 
>>> AnalysisType& llvm::Pass::getAnalysisID(const llvm::PassInfo*) const 
>>> [with AnalysisType = llvm::DominatorTree]: Assertion `ResultPass && 
>>> "getAnalysis*() called on an analysis that was not " "'required' by 
>>> pass!"' failed.
>>>
>>> What can possibly cause this. Any ideas will also help.
>>>
>>> Tobias Grosser wrote:
>>>  
>>>       
>>>> Hi,
>>>>
>>>> you need something like this in your pass:
>>>>
>>>> void YourPass::getAnalysisUsage(AnalysisUsage &AU) const {
>>>>   AU.addRequired<DominatorTree>();
>>>> }
>>>>
>>>> because you need to specify which analysis you are using.
>>>>
>>>> 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