mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-28 06:24:57 +00:00
Add utility routines to remove dead debug info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59011 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
28
include/llvm/Transforms/Utils/DbgInfoUtils.h
Normal file
28
include/llvm/Transforms/Utils/DbgInfoUtils.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
//===-- Transform/Utils/DbgInfoUtils.h - DbgInfo Utils ----------*- C++ -*-===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is distributed under the University of Illinois Open Source
|
||||||
|
// License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// Utility functions to manipulate debugging information.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef LLVM_TRANSFORMS_UTILS_DBGINFO_H
|
||||||
|
#define LLVM_TRANSFORMS_UTILS_DBGINFO_H
|
||||||
|
namespace llvm {
|
||||||
|
class BasicBlock;
|
||||||
|
class Function;
|
||||||
|
|
||||||
|
/// RemoveDeadDbgIntrinsics - Remove dead dbg intrinsics from this
|
||||||
|
/// basic block.
|
||||||
|
void RemoveDeadDbgIntrinsics(BasicBlock &BB);
|
||||||
|
|
||||||
|
/// RemoveDeadDbgIntrinsics - Remove dead dbg intrinsics from this function.
|
||||||
|
void RemoveDeadDbgIntrinsics(Function &F);
|
||||||
|
|
||||||
|
} // End llvm namespace
|
||||||
|
#endif
|
60
lib/Transforms/Utils/DbgInfoUtils.cpp
Normal file
60
lib/Transforms/Utils/DbgInfoUtils.cpp
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
//===-- DbgInfoUtils.cpp - DbgInfo Utilities -------------------------------==//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is distributed under the University of Illinois Open Source
|
||||||
|
// License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// Utility functions to manipulate debugging information.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "llvm/Transforms/Utils/DbgInfoUtils.h"
|
||||||
|
#include "llvm/IntrinsicInst.h"
|
||||||
|
|
||||||
|
using namespace llvm;
|
||||||
|
|
||||||
|
/// RemoveDeadDbgIntrinsics - Remove dead dbg intrinsics from this
|
||||||
|
/// basic block.
|
||||||
|
void llvm::RemoveDeadDbgIntrinsics(BasicBlock &BB) {
|
||||||
|
BasicBlock::iterator BI = BB.begin(), BE = BB.end();
|
||||||
|
if (BI == BE) return;
|
||||||
|
|
||||||
|
Instruction *Prev = BI; ++BI;
|
||||||
|
while (BI != BE) {
|
||||||
|
Instruction *Next = BI; ++BI;
|
||||||
|
DbgInfoIntrinsic *DBI_Prev = dyn_cast<DbgInfoIntrinsic>(Prev);
|
||||||
|
if (!DBI_Prev) {
|
||||||
|
Prev = Next;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there are two consecutive llvm.dbg.stoppoint calls then
|
||||||
|
// it is likely that the optimizer deleted code in between these
|
||||||
|
// two intrinsics.
|
||||||
|
DbgInfoIntrinsic *DBI_Next = dyn_cast<DbgInfoIntrinsic>(Next);
|
||||||
|
if (DBI_Next
|
||||||
|
&& DBI_Prev->getIntrinsicID() == llvm::Intrinsic::dbg_stoppoint
|
||||||
|
&& DBI_Next->getIntrinsicID() == llvm::Intrinsic::dbg_stoppoint)
|
||||||
|
Prev->eraseFromParent();
|
||||||
|
|
||||||
|
// If a llvm.dbg.stoppoint is placed just before an unconditional
|
||||||
|
// branch then remove the llvm.dbg.stoppoint intrinsic.
|
||||||
|
else if (BranchInst *UC = dyn_cast<BranchInst>(Next)) {
|
||||||
|
if (UC->isUnconditional()
|
||||||
|
&& DBI_Prev->getIntrinsicID() == llvm::Intrinsic::dbg_stoppoint)
|
||||||
|
Prev->eraseFromParent();
|
||||||
|
}
|
||||||
|
|
||||||
|
Prev = Next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// RemoveDeadDbgIntrinsics - Remove dead dbg intrinsics from this function.
|
||||||
|
void llvm::RemoveDeadDbgIntrinsics(Function &F) {
|
||||||
|
for (Function::iterator FI = F.begin(), FE = F.end();
|
||||||
|
FI != FE; ++FI)
|
||||||
|
RemoveDeadDbgIntrinsics(*FI);
|
||||||
|
}
|
Reference in New Issue
Block a user