diff options
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. | 

