OSDN Git Service

Updated comments as suggested by Rafael. Thanks.
authorDinesh Dwivedi <dinesh.d@samsung.com>
Thu, 19 Jun 2014 14:11:53 +0000 (14:11 +0000)
committerDinesh Dwivedi <dinesh.d@samsung.com>
Thu, 19 Jun 2014 14:11:53 +0000 (14:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211268 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/JumpThreading.cpp

index e501ff2..6e50d33 100644 (file)
@@ -158,7 +158,13 @@ bool JumpThreading::runOnFunction(Function &F) {
   TLI = &getAnalysis<TargetLibraryInfo>();
   LVI = &getAnalysis<LazyValueInfo>();
 
-  // Remove unreachable blocks from function as they may result in infinite loop.
+  // Remove unreachable blocks from function as they may result in infinite
+  // loop. We do threading if we found something profitable. Jump threading a
+  // branch can create other opportunities. If these opportunities form a cycle
+  // i.e. if any jump treading is undoing previous threading in the path, then
+  // we will loop forever. We take care of this issue by not jump threading for
+  // back edges. This works for normal cases but not for unreachable blocks as
+  // they may have cycle with no back edge.
   removeUnreachableBlocks(F);
 
   FindLoopHeaders(F);