Look at only the terminators of the basic block. Also, if we're using the new EH
[oota-llvm.git] / lib / CodeGen / DwarfEHPrepare.cpp
index 3aa72ee1960d07612f829dc9cabb2707f10a6488..d2b129a448ee1ae73424ca055c46ee0866b999fa 100644 (file)
@@ -663,14 +663,18 @@ Instruction *DwarfEHPrepare::CreateExceptionValueCall(BasicBlock *BB) {
 /// InsertUnwindResumeCalls - Convert the ResumeInsts that are still present
 /// into calls to the appropriate _Unwind_Resume function.
 bool DwarfEHPrepare::InsertUnwindResumeCalls() {
+  bool UsesNewEH = false;
   SmallVector<ResumeInst*, 16> Resumes;
-  for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I)
-    for (BasicBlock::iterator II = I->begin(), IE = I->end(); II != IE; ++II)
-      if (ResumeInst *RI = dyn_cast<ResumeInst>(II))
-        Resumes.push_back(RI);
+  for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) {
+    TerminatorInst *TI = I->getTerminator();
+    if (ResumeInst *RI = dyn_cast<ResumeInst>(TI))
+      Resumes.push_back(RI);
+    else if (InvokeInst *II = dyn_cast<InvokeInst>(TI))
+      UsesNewEH = II->getUnwindDest()->isLandingPad();
+  }
 
   if (Resumes.empty())
-    return false;
+    return UsesNewEH;
 
   // Find the rewind function if we didn't already.
   if (!RewindFunction) {