diff options
author | Devang Patel <dpatel@apple.com> | 2011-03-11 18:07:33 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2011-03-11 18:07:33 +0000 |
commit | 982efb5c89ec3fa5ed8f152ce13719737591cf9c (patch) | |
tree | 8d9013865cc5de8583444b2b26cce848fc240d08 /llvm/tools/llvm-dis/llvm-dis.cpp | |
parent | f541bfd7d42b185f857bd8de48e5ce7120831ff7 (diff) | |
download | bcm5719-llvm-982efb5c89ec3fa5ed8f152ce13719737591cf9c.tar.gz bcm5719-llvm-982efb5c89ec3fa5ed8f152ce13719737591cf9c.zip |
While printing annotations, print line number and variable name if debug info is present.
llvm-svn: 127470
Diffstat (limited to 'llvm/tools/llvm-dis/llvm-dis.cpp')
-rw-r--r-- | llvm/tools/llvm-dis/llvm-dis.cpp | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/llvm/tools/llvm-dis/llvm-dis.cpp b/llvm/tools/llvm-dis/llvm-dis.cpp index b4977ced5bd..d1ac9de3071 100644 --- a/llvm/tools/llvm-dis/llvm-dis.cpp +++ b/llvm/tools/llvm-dis/llvm-dis.cpp @@ -19,7 +19,9 @@ #include "llvm/LLVMContext.h" #include "llvm/Module.h" #include "llvm/Type.h" +#include "llvm/IntrinsicInst.h" #include "llvm/Bitcode/ReaderWriter.h" +#include "llvm/Analysis/DebugInfo.h" #include "llvm/Assembly/AssemblyAnnotationWriter.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/FormattedStream.h" @@ -50,6 +52,16 @@ ShowAnnotations("show-annotations", namespace { +static void printDebugLoc(const DebugLoc &DL, formatted_raw_ostream &OS) { + OS << DL.getLine() << ":" << DL.getCol(); + if (MDNode *N = DL.getInlinedAt(getGlobalContext())) { + DebugLoc IDL = DebugLoc::getFromDILocation(N); + if (!IDL.isUnknown()) { + OS << "@"; + printDebugLoc(IDL,OS); + } + } +} class CommentWriter : public AssemblyAnnotationWriter { public: void emitFunctionAnnot(const Function *F, @@ -58,10 +70,43 @@ public: OS << '\n'; } void printInfoComment(const Value &V, formatted_raw_ostream &OS) { - if (V.getType()->isVoidTy()) return; - - OS.PadToColumn(50); - OS << "; [#uses=" << V.getNumUses() << ']'; // Output # uses + bool Padded = false; + if (!V.getType()->isVoidTy()) { + OS.PadToColumn(50); + Padded = true; + OS << "; [#uses=" << V.getNumUses() << ']'; // Output # uses + } + if (const Instruction *I = dyn_cast<Instruction>(&V)) { + const DebugLoc &DL = I->getDebugLoc(); + if (!DL.isUnknown()) { + if (!Padded) { + OS.PadToColumn(50); + Padded = true; + OS << ";"; + } + OS << " [debug line = "; + printDebugLoc(DL,OS); + OS << "]"; + } + if (const DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(I)) { + DIVariable Var(DDI->getVariable()); + if (!Padded) { + OS.PadToColumn(50); + Padded = true; + OS << ";"; + } + OS << " [debug variable = " << Var.getName() << "]"; + } + else if (const DbgValueInst *DVI = dyn_cast<DbgValueInst>(I)) { + DIVariable Var(DVI->getVariable()); + if (!Padded) { + OS.PadToColumn(50); + Padded = true; + OS << ";"; + } + OS << " [debug variable = " << Var.getName() << "]"; + } + } } }; |