[LLVMdev] How to avoid loopverify failures after replacing the backedge with an edge(latchBB to exitBB) in a looppass?

Andrew Trick atrick at apple.com
Wed May 8 09:50:55 PDT 2013


On May 8, 2013, at 5:06 AM, zhiyuan yang <sjtu.yzy at gmail.com> wrote:

> Sorry for forgetting to reply all...
> 
> It works! Thank you very much! 
> 
> But I also wonder how do you know this function will work while there are no documents noticing that. I try learning LLVM by reading its code, but soon feel lost in so many functions. Just like I have many tools, but don't know which to use and what difference it could make. Is there some better ways to learn LLVM?

These kind of API details are best documented in comments attached to public interfaces. In your case, you needed to find a pass doing the same thing, e.g. LoopUnroll, and follow its example.

-Andy

> On Wed, May 8, 2013 at 1:02 PM, Andrew Trick <atrick at apple.com> wrote:
> 
> On May 7, 2013, at 8:26 PM, zhiyuan yang <sjtu.yzy at gmail.com> wrote:
> 
>> Hi,
>> 
>> I am writing a loop pass to replace the backedge with an edge from latch to exit. 
>> Now I just replace the terminator of latch with another BranchInst, and the loop will not be a loop after my pass. However, it turns out a failure of loopverify after executing my pass:
>> 
>> opt: ~/llvm/llvm-trunk/include/llvm/Analysis/LoopInfoImpl.h:297: void llvm::LoopBase<N, M>::verifyLoop() const [with BlockT = llvm::BasicBlock, LoopT = llvm::Loop]: Assertion `HasInsideLoopPreds && "Loop block has no in-loop predecessors!"' failed.
>> 
>> Does this mean I should keep it still a loop after my pass? If so, how could I bypass it?
> 
> You might need to call LPPassManager::deleteLoopFromQueue().
> 
> -Andy
> 
>> -- 
>> Thank you && Best Regards,
>> 
>> Zhiyuan Yang
>> 
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 
> 
> 
> 
> -- 
> Thank you && Best Regards,
> 
> Zhiyuan Yang
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130508/e7def12c/attachment.html>


More information about the llvm-dev mailing list