aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2011-03-24 18:07:13 +0000
committerBill Wendling <isanbard@gmail.com>2011-03-24 18:07:13 +0000
commit334706d7d8f3056b5f8ded003d253bbf5376e1d3 (patch)
tree7ee5ff1f83e4110a231df205699750eb0f80e023
parent05378af04056b33aa6db8e8f12d5abe0028b70f8 (diff)
downloadllvm-334706d7d8f3056b5f8ded003d253bbf5376e1d3.zip
llvm-334706d7d8f3056b5f8ded003d253bbf5376e1d3.tar.gz
llvm-334706d7d8f3056b5f8ded003d253bbf5376e1d3.tar.bz2
--- Merging r128212 into '.':
U lib/Transforms/Scalar/CodeGenPrepare.cpp --- Merging r128217 into '.': G lib/Transforms/Scalar/CodeGenPrepare.cpp llvm-svn: 128223
-rw-r--r--llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp b/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp
index 237b0a7..15d8c20 100644
--- a/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp
+++ b/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp
@@ -602,7 +602,9 @@ bool CodeGenPrepare::DupRetToEnableTailCallOpts(ReturnInst *RI) {
if (&*BI != RI)
return false;
} else {
- if (&*BB->begin() != RI)
+ BasicBlock::iterator BI = BB->begin();
+ while (isa<DbgInfoIntrinsic>(BI)) ++BI;
+ if (&*BI != RI)
return false;
}
@@ -626,10 +628,12 @@ bool CodeGenPrepare::DupRetToEnableTailCallOpts(ReturnInst *RI) {
BasicBlock::InstListType &InstList = (*PI)->getInstList();
BasicBlock::InstListType::reverse_iterator RI = InstList.rbegin();
BasicBlock::InstListType::reverse_iterator RE = InstList.rend();
- if (++RI == RE)
+ do { ++RI; } while (RI != RE && isa<DbgInfoIntrinsic>(&*RI));
+ if (RI == RE)
continue;
+
CallInst *CI = dyn_cast<CallInst>(&*RI);
- if (CI && CI->getType()->isVoidTy() && TLI->mayBeEmittedAsTailCall(CI))
+ if (CI && CI->use_empty() && TLI->mayBeEmittedAsTailCall(CI))
TailCalls.push_back(CI);
}
}