Index: lib/Transforms/Utils/FlattenCFG.cpp =================================================================== --- lib/Transforms/Utils/FlattenCFG.cpp +++ lib/Transforms/Utils/FlattenCFG.cpp @@ -240,6 +240,8 @@ for (;CurrBlock != FirstCondBlock; CurrBlock = CurrBlock->getSinglePredecessor()) { BranchInst *BI = dyn_cast(CurrBlock->getTerminator()); + if (!BI) + continue; CmpInst *CI = dyn_cast(BI->getCondition()); if (!CI) continue; @@ -267,6 +269,8 @@ // Do the transformation. BasicBlock *CB; BranchInst *PBI = dyn_cast(FirstCondBlock->getTerminator()); + if (!PBI) + return false; bool Iteration = true; IRBuilder<>::InsertPointGuard Guard(Builder); Value *PC = PBI->getCondition(); @@ -435,6 +439,8 @@ FirstEntryBlock->getInstList() .splice(FirstEntryBlock->end(), SecondEntryBlock->getInstList()); BranchInst *PBI = dyn_cast(FirstEntryBlock->getTerminator()); + if (!PBI) + return false; Value *CC = PBI->getCondition(); BasicBlock *SaveInsertBB = Builder.GetInsertBlock(); BasicBlock::iterator SaveInsertPt = Builder.GetInsertPoint();