[LLVMdev] Problem getting LoopInfo inside non-LoopPass

Devang Patel dpatel at apple.com
Thu Nov 10 10:25:11 PST 2011


Ryan,

Why do your call graph pass need loop info ? Why can't it be a LoopPass ?
-
Devang

On Nov 10, 2011, at 10:03 AM, Ryan Taylor wrote:

> John,
> 
>   This did not work. It compiles (isDeclaration was the name of the function) and I passed a reference (&F) (F is a function pointer). I still get the opt load error from the original message (UNREACHABLE exectuted!).
> 
> Thanks.
> 
> On Thu, Nov 10, 2011 at 10:00 AM, Ryan Taylor <ryta1203 at gmail.com> wrote:
> 1. Ok will do.
> 2. Ok, will do.
> 3. It's a CallGraphPass. I mentioned this in my first post.
> 4. Yep, I have the header files included, I'm not sure it would compile otherwise (previously). I would get an error like LoopInfo not declared.
> 
> I'll try your suggestions, thanks again!
> 
> On Thu, Nov 10, 2011 at 9:57 AM, John Criswell <criswell at illinois.edu> wrote:
> 
> On 11/10/11 11:48 AM, Rc   Add Bcc   Edit Subject   Attach a file   Insert: Invitation yan Taylor wrote:
>> 
>> John,
>> 
>>   Thanks, this does not compile though, I get this error:
> 
> First, please CC the llvmdev list.  That way, others having the same question can see the conversation, and others on the list can help correct any errors I make.
> :)
> 
> 
>> 
>> cdfg_pass.cpp:511:11: error: ‘class llvm::Function’ has no member named ‘getDeclaration’
> 
> Sorry.  I believe the method name is Function::isDeclaration().
> 
> BTW, you should double-check my answers (and other people's answers) against the LLVM doxygen documentation.  This is because:
> 
> 1) I often don't take the time to consult the documentation to ensure I have every detail correct.
> 2) The LLVM API is fluid, so some details of it may have changed since I last used a particular feature.
> 
> 
>> 
>> Also, when I try to pass the pointer to getAnalysis I get this error:
>> 
>> cdfg_pass.cpp:512:41: error: no matching function for call to ‘<unnamed>::CDFGPass::getAnalysis(llvm::Function*&)’
> 
> First, double check that it's a Function * and not a Function & that is required.
> 
> Second, what type of pass is your pass?  Is it a ModulePass, a FunctionPass, or some other type of pass?  For a FunctionPass, no argument is necessary.  For a ModulePass, a Function argument is necessary.  For other types of passes, I do not know: you'll either have to wait for someone else to respond or just figure it out using     trial and error.
> 
> Third, are you including the header file that provides the definition of LoopInfo?  If not, that could be a problem.
> 
> -- John T.
> 
> 
>> 
>> Here is the code I'm using:
>> 
>>         Function *F = CGNode->getFunction();
>>         errs()<<"#Get Loop Info\n";
>>         if (!(F->getDeclaration()))
>>                 LoopInfo &LI = getAnalysis<LoopInfo>(F);
>> 
>> 
>> On Thu, Nov 10, 2011 at 9:13 AM, John Criswell <criswell at illinois.edu> wrote:
>> On 11/10/11 11:06 AM, Ryan Taylor wrote:
>>> 
>>> LLVMers,
>>> 
>>>    I am doing a CallGraphPass but would like to get the LoopInfo of the functions inside this pass, is this possible? Currently I have a function inside the CallGraph struct:
>>> 
>>>     void getAnalysisUsage(AnalysisUsage &AU) const {
>>>         AU.addRequired<LoopInfo>();
>>>         AU.addPreserved<LoopInfo>();
>>>     }
>>> 
>>> And later inside the pass I am calling:
>>> 
>>> LoopInfo &LI = getAnalysis<LoopInfo>();
>>> 
>>> I have also tried to pass the Function pointer to getAnalysis but that doesn't work either. With the above code my error is:
>> 
>> 1) You may need to pass a Function pointer or reference if your pass is not a FunctionPass (e.g., if it is a ModulePass).
>> 
>> 2) If you have to specify a Function pointer or reference, you need to make sure that the Function is *not* a declaration:
>> 
>> if (!(F->getDeclaration()))
>>     getAnalysis<LoopInfo>(F);
>> 
>> -- John T.
>> 
>>> 
>>> UNREACHABLE executed!
>>> 0  opt             0x00000000008edc2f
>>> 1  opt             0x00000000008edfda
>>> 2  libpthread.so.0 0x00007f9c8e69bc60
>>> 3  libc.so.6       0x00007f9c8d986d05 gsignal + 53
>>> 4  libc.so.6       0x00007f9c8d98aab6 abort + 390
>>> 5  opt             0x00000000008da974 llvm::llvm_unreachable_internal(char const*, char const*, unsigned int) + 356
>>> 6  opt             0x000000000087e046
>>> 7  opt             0x0000000000882b45 llvm::PMDataManager::add(llvm::Pass*, bool) + 741
>>> 8  opt             0x000000000087f413 llvm::PassManager::add(llvm::Pass*) + 259
>>> 9  opt             0x00000000004ab9be main + 2174
>>> 10 libc.so.6       0x00007f9c8d971eff __libc_start_main + 255
>>> 11 opt             0x000000000049f5f9
>>> Stack dump:
>>> 
>>> 
>>> Any help would be appreciated, thanks!
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> 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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111110/8956f416/attachment.html>


More information about the llvm-dev mailing list