diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2011-05-27 18:37:52 +0000 | 
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2011-05-27 18:37:52 +0000 | 
| commit | 942e1c10f6a39f4516f3ee670b157cae479397a5 (patch) | |
| tree | e0c31f10fc75412160b3ad7371ef5b56abf74caa /llvm/lib/Transforms | |
| parent | bd04b74bb25c23ff68858517960b6632abf657cd (diff) | |
| download | bcm5719-llvm-942e1c10f6a39f4516f3ee670b157cae479397a5.tar.gz bcm5719-llvm-942e1c10f6a39f4516f3ee670b157cae479397a5.zip | |
Don't sink or hoist debug info instrinsics; it isn't useful.  This also prevents LICM sinking from erasing debug intrinsics which don't dominate any exit block of the loop.
rdar://9143943 .
llvm-svn: 132201
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LICM.cpp | 9 | 
1 files changed, 6 insertions, 3 deletions
| diff --git a/llvm/lib/Transforms/Scalar/LICM.cpp b/llvm/lib/Transforms/Scalar/LICM.cpp index d42d4ff837b..eba77d30903 100644 --- a/llvm/lib/Transforms/Scalar/LICM.cpp +++ b/llvm/lib/Transforms/Scalar/LICM.cpp @@ -372,7 +372,11 @@ bool LICM::canSinkOrHoistInst(Instruction &I) {      return !pointerInvalidatedByLoop(LI->getOperand(0), Size,                                       LI->getMetadata(LLVMContext::MD_tbaa));    } else if (CallInst *CI = dyn_cast<CallInst>(&I)) { -    // Handle obvious cases efficiently. +    // Don't sink or hoist dbg info; it's legal, but not useful. +    if (isa<DbgInfoIntrinsic>(I)) +      return false; + +    // Handle simple cases by querying alias analysis.      AliasAnalysis::ModRefBehavior Behavior = AA->getModRefBehavior(CI);      if (Behavior == AliasAnalysis::DoesNotAccessMemory)        return true; @@ -445,8 +449,7 @@ void LICM::sink(Instruction &I) {    // enough that we handle it as a special (more efficient) case.  It is more    // efficient to handle because there are no PHI nodes that need to be placed.    if (ExitBlocks.size() == 1) { -    if (!isa<DbgInfoIntrinsic>(I) &&  -        !DT->dominates(I.getParent(), ExitBlocks[0])) { +    if (!DT->dominates(I.getParent(), ExitBlocks[0])) {        // Instruction is not used, just delete it.        CurAST->deleteValue(&I);        // If I has users in unreachable blocks, eliminate. | 

