From 3a56d146413ee344b10bbcb2b7d8dffaadc9fade Mon Sep 17 00:00:00 2001 From: Dale Johannesen Date: Fri, 6 Mar 2009 21:08:33 +0000 Subject: [PATCH] Fix another case where debug info interferes with an optimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66288 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/SimplifyCFG.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp index 7c71f46290b..10b3104d6b6 100644 --- a/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/lib/Transforms/Utils/SimplifyCFG.cpp @@ -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(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(IP)) + IP++; + if (IP != BasicBlock::iterator(I)) return false; break; + } case Instruction::Add: case Instruction::Sub: case Instruction::And: