aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2011-08-25 23:48:11 +0000
committerBill Wendling <isanbard@gmail.com>2011-08-25 23:48:11 +0000
commit09908c4b4a0b25eab4cb496d95d9dcc93f2214f2 (patch)
tree77564f056eed877a8f7c9f92b0ced5707292f004
parentc82a61c6c611857e47c3d6c6dbd069c27cd6d0f2 (diff)
downloadexternal_llvm-09908c4b4a0b25eab4cb496d95d9dcc93f2214f2.zip
external_llvm-09908c4b4a0b25eab4cb496d95d9dcc93f2214f2.tar.gz
external_llvm-09908c4b4a0b25eab4cb496d95d9dcc93f2214f2.tar.bz2
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138605 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/DwarfEHPrepare.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/CodeGen/DwarfEHPrepare.cpp b/lib/CodeGen/DwarfEHPrepare.cpp
index 3aa72ee..d2b129a 100644
--- a/lib/CodeGen/DwarfEHPrepare.cpp
+++ b/lib/CodeGen/DwarfEHPrepare.cpp
@@ -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) {