[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