Look at only the terminators of the basic block. Also, if we're using the new EH

scheme, return 'true' so that it doesn't try to run the old EH scheme's fixup on
the new code.

llvm-svn: 138605
This commit is contained in:
Bill Wendling 2011-08-25 23:48:11 +00:00
parent 45449b1cba
commit 8ac2041a19
1 changed files with 9 additions and 5 deletions

View 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) {