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>
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 list >>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>> http://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/8956f416/attachment.html>
Ryan Taylor
2011-Nov-10 18:32 UTC
[LLVMdev] Fwd: Problem getting LoopInfo inside non-LoopPass
---------- 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>
Ryan, [ Please continue the discussion on mailing for the benefit of everyone. ] On Nov 10, 2011, at 10:31 AM, Ryan Taylor wrote:> 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.It is better and easier to write a separate pass. - Devang
LLVMers, So, I'm trying to write a pass that changes the names of the basic blocks through the use of Value, so: Value *V = *BasicBlockPtr; const Twine Tname("new_name"); V->setName(Tname); But when I run the opt and look at the IR output nothing is changed? Not sure what I'm doing wrong. Thanks. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111116/ef17f943/attachment.html>
Apparently Analagous Threads
- [LLVMdev] Fwd: 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
- [LLVMdev] Fwd: Problem getting LoopInfo inside non-LoopPass