http://llvm.org/bugs/show_bug.cgi?id=10515

           Summary: LoopPasses incorrectly update LoopInfo after removing
                    a backedge.
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: ASSIGNED
          Severity: normal
          Priority: P
         Component: Loop Optimizer
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]


Created an attachment (id=6952)
 --> (http://llvm.org/bugs/attachment.cgi?id=6952)
Unit test

I have been able expose the problem with a simple unit test (attached) by
running opt < skiplevelexit.ll -loop-unroll.

Assertion failed: (HasInsideLoopSuccs && "Loop block has no in-loop
successors!"), function verifyLoop, file
/Volumes/Storage/llvm/include/llvm/Analysis/LoopInfo.h, line 458.

I am currently implementing a a general algorithm that can rediscover
the containing loop for each block in the original loop assuming that
the rest of the loop tree is consistent. The fix involves

- post order iteration over the blocks in the original loop only, not
  including subloops
- deriving a block's containing loop from its successors' containing
  loops: it is the deepest loop that contains any successor
- handling nested subloops as a single unit: essentially, a
  preheader's loop is the deepest loop that contains a subloop exit.
- incrementally processing blocks until all predecessors are available
  to handle nested irreducible control flow (without irreducible flow,
  a single postorder traversal is sufficient).

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to