[LLVMdev] Problem getting LoopInfo inside non-LoopPass

Ryan Taylor ryta1203 at gmail.com
Thu Nov 10 10:03:41 PST 2011


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>


More information about the llvm-dev mailing list