]> granicus.if.org Git - llvm/commitdiff
Skip loop header while we can when computing loop safety info
authorXin Tong <trent.xin.tong@gmail.com>
Wed, 18 Jan 2017 00:15:11 +0000 (00:15 +0000)
committerXin Tong <trent.xin.tong@gmail.com>
Wed, 18 Jan 2017 00:15:11 +0000 (00:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292310 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LICM.cpp

index baa2594c755026b8e4493779d81f6fb97957f148..be576404addfea9b6dd2fc0bb4831f5d86d427d1 100644 (file)
@@ -461,7 +461,10 @@ void llvm::computeLoopSafetyInfo(LoopSafetyInfo *SafetyInfo, Loop *CurLoop) {
 
   SafetyInfo->MayThrow = SafetyInfo->HeaderMayThrow;
   // Iterate over loop instructions and compute safety info.
-  for (Loop::block_iterator BB = CurLoop->block_begin(),
+  // Skip header as it has been computed and stored in HeaderMayThrow.
+  // The first block in loopinfo.Blocks is guaranteed to be the header.
+  assert(Header == *CurLoop->getBlocks().begin() && "First block must be header");
+  for (Loop::block_iterator BB = std::next(CurLoop->block_begin()),
                             BBE = CurLoop->block_end();
        (BB != BBE) && !SafetyInfo->MayThrow; ++BB)
     for (BasicBlock::iterator I = (*BB)->begin(), E = (*BB)->end();