[LLVMdev] Fwd: Problem getting LoopInfo inside non-LoopPass

Ryan Taylor ryta1203 at gmail.com
Thu Nov 10 10:32:09 PST 2011


---------- Forwarded message ----------
From: Ryan Taylor <ryta1203 at gmail.com>
Date: Thu, Nov 10, 2011 at 10:31 AM
Subject: Re: [LLVMdev] Problem getting LoopInfo inside non-LoopPass
To: Devang Patel <dpatel at apple.com>


I need to iterate bottom up on the nodes, but within that I want to break
up BBs within a loop. I could just create a loop pass as another opt and
call that, I just thought it'd be easier to get the loop info inside the
opt I'm already doing.


On Thu, Nov 10, 2011 at 10:25 AM, Devang Patel <dpatel at apple.com> wrote:

> 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 listLLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.eduhttp://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/f5a61ed7/attachment.html>


More information about the llvm-dev mailing list