From 8bb5fb06612d82ecee463fce5aa6f9fae826cd71 Mon Sep 17 00:00:00 2001 From: Dinesh Dwivedi Date: Thu, 19 Jun 2014 14:11:53 +0000 Subject: Updated comments as suggested by Rafael. Thanks. llvm-svn: 211268 --- llvm/lib/Transforms/Scalar/JumpThreading.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'llvm/lib/Transforms') diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index e501ff29d03..6e50d3331df 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -158,7 +158,13 @@ bool JumpThreading::runOnFunction(Function &F) { TLI = &getAnalysis(); LVI = &getAnalysis(); - // 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); -- cgit v1.2.3