[LLVMdev] Problem getting LoopInfo inside non-LoopPass

John Criswell criswell at illinois.edu
Thu Nov 10 09:57:20 PST 2011


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>


More information about the llvm-dev mailing list