diff options
author | Devang Patel <dpatel@apple.com> | 2011-03-17 21:58:19 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2011-03-17 21:58:19 +0000 |
commit | 8c0b16b0aafeb222320b26b4eff8dc8f27be4efe (patch) | |
tree | 3eb6f7ffd2941c83c9ae4131e10c8c5d08845994 /llvm/lib/Transforms/Utils/Local.cpp | |
parent | 8268ccab6083829d0bba96461cd04358c4d24c33 (diff) | |
download | bcm5719-llvm-8c0b16b0aafeb222320b26b4eff8dc8f27be4efe.tar.gz bcm5719-llvm-8c0b16b0aafeb222320b26b4eff8dc8f27be4efe.zip |
Refactor into a separate utility function.
llvm-svn: 127832
Diffstat (limited to 'llvm/lib/Transforms/Utils/Local.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 32a50b80cd5..ddab6e0e9ef 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -22,6 +22,8 @@ #include "llvm/IntrinsicInst.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallPtrSet.h" +#include "llvm/Analysis/DebugInfo.h" +#include "llvm/Analysis/DIBuilder.h" #include "llvm/Analysis/Dominators.h" #include "llvm/Analysis/ConstantFolding.h" #include "llvm/Analysis/InstructionSimplify.h" @@ -755,3 +757,29 @@ unsigned llvm::getOrEnforceKnownAlignment(Value *V, unsigned PrefAlign, return Align; } +///===---------------------------------------------------------------------===// +/// Dbg Intrinsic utilities +/// + +/// Inserts a llvm.dbg.value instrinsic before the stores to an alloca'd value +/// that has an associated llvm.dbg.decl intrinsic. +bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI, + StoreInst *SI, DIBuilder &Builder) { + DIVariable DIVar(DDI->getVariable()); + if (!DIVar.Verify()) + return false; + + Instruction *DbgVal = + Builder.insertDbgValueIntrinsic(SI->getOperand(0), 0, + DIVar, SI); + + // Propagate any debug metadata from the store onto the dbg.value. + DebugLoc SIDL = SI->getDebugLoc(); + if (!SIDL.isUnknown()) + DbgVal->setDebugLoc(SIDL); + // Otherwise propagate debug metadata from dbg.declare. + else + DbgVal->setDebugLoc(DDI->getDebugLoc()); + return true; +} + |