John Criswell
2011-Nov-10 17:57 UTC
[LLVMdev] Problem getting LoopInfo inside non-LoopPass
On 11/10/11 11:48 AM, Ryan 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 > <mailto: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 <mailto: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/f8794d40/attachment.html>
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 listLLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.eduhttp://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>> >>> >>> >> >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111110/96d5930c/attachment.html>
Seemingly Similar Threads
- [LLVMdev] Problem getting LoopInfo inside non-LoopPass
- [LLVMdev] Problem getting LoopInfo inside non-LoopPass
- [LLVMdev] Problem getting LoopInfo inside non-LoopPass
- [LLVMdev] Fwd: Problem getting LoopInfo inside non-LoopPass
- [LLVMdev] Fwd: Problem getting LoopInfo inside non-LoopPass