Fix another case where debug info interferes with
authorDale Johannesen <dalej@apple.com>
Fri, 6 Mar 2009 21:08:33 +0000 (21:08 +0000)
committerDale Johannesen <dalej@apple.com>
Fri, 6 Mar 2009 21:08:33 +0000 (21:08 +0000)
an optimization.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66288 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/SimplifyCFG.cpp

index 7c71f46290bbeb8e97c0ca287a4f43622382119b..10b3104d6b61c1ab8f79ac0a23a1c5c01c0dc61c 100644 (file)
@@ -385,7 +385,7 @@ static bool DominatesMergePoint(Value *V, BasicBlock *BB,
       // only uses stuff defined outside of the condition.  If so, hoist it out.
       switch (I->getOpcode()) {
       default: return false;  // Cannot hoist this out safely.
-      case Instruction::Load:
+      case Instruction::Load: {
         // We can hoist loads that are non-volatile and obviously cannot trap.
         if (cast<LoadInst>(I)->isVolatile())
           return false;
@@ -397,9 +397,13 @@ static bool DominatesMergePoint(Value *V, BasicBlock *BB,
         // Finally, we have to check to make sure there are no instructions
         // before the load in its basic block, as we are going to hoist the loop
         // out to its predecessor.
-        if (PBB->begin() != BasicBlock::iterator(I))
+        BasicBlock::iterator IP = PBB->begin();
+        while (isa<DbgInfoIntrinsic>(IP))
+          IP++;
+        if (IP != BasicBlock::iterator(I))
           return false;
         break;
+      }
       case Instruction::Add:
       case Instruction::Sub:
       case Instruction::And: