summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/DwarfEHPrepare.cpp
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
commit8ac2041a191b9a93b25442cf500f524363ead4a8 (patch)
tree02fcba78a6cca9b96f3f7e58499ff85b704b97a5 /llvm/lib/CodeGen/DwarfEHPrepare.cpp
parent45449b1cba1613d3409a001984c8419a819c0fec (diff)
downloadbcm5719-llvm-8ac2041a191b9a93b25442cf500f524363ead4a8.tar.gz
bcm5719-llvm-8ac2041a191b9a93b25442cf500f524363ead4a8.zip
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
Diffstat (limited to 'llvm/lib/CodeGen/DwarfEHPrepare.cpp')
-rw-r--r--llvm/lib/CodeGen/DwarfEHPrepare.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/DwarfEHPrepare.cpp b/llvm/lib/CodeGen/DwarfEHPrepare.cpp
index 3aa72ee1960..d2b129a448e 100644
--- a/llvm/lib/CodeGen/DwarfEHPrepare.cpp
+++ b/llvm/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) {
OpenPOWER on IntegriCloud