aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Transforms
diff options
context:
space:
mode:
authorCameron Zwarich <zwarich@apple.com>2011-03-24 16:34:59 +0000
committerCameron Zwarich <zwarich@apple.com>2011-03-24 16:34:59 +0000
commit903548420016325db6d22328687f78cd4180facb (patch)
treedf78307840ee333d2528092ef8a52573931ec0f5 /lib/Transforms
parent0d4b81519dc3f02bbebb4ecad86bfb590c4d1898 (diff)
downloadexternal_llvm-903548420016325db6d22328687f78cd4180facb.zip
external_llvm-903548420016325db6d22328687f78cd4180facb.tar.gz
external_llvm-903548420016325db6d22328687f78cd4180facb.tar.bz2
Debug intrinsics must be skipped at the beginning and ends of blocks, lest they
affect the generated code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128217 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Scalar/CodeGenPrepare.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/CodeGenPrepare.cpp b/lib/Transforms/Scalar/CodeGenPrepare.cpp
index 337a4d3..2f7ccea 100644
--- a/lib/Transforms/Scalar/CodeGenPrepare.cpp
+++ b/lib/Transforms/Scalar/CodeGenPrepare.cpp
@@ -617,7 +617,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;
}
@@ -641,8 +643,10 @@ 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->use_empty() && TLI->mayBeEmittedAsTailCall(CI))
TailCalls.push_back(CI);