diff options
author | Chris Lattner <sabre@nondot.org> | 2010-09-02 23:21:44 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-09-02 23:21:44 +0000 |
commit | 6cd71f0c4026217a501e09dcc2198c6c7a462e44 (patch) | |
tree | 213a2dee6b0232e2e32c66d129733deeeacc149f | |
parent | 1dbb3879e81c414733ee38ef6a5e657d7ed47e68 (diff) | |
download | llvm-6cd71f0c4026217a501e09dcc2198c6c7a462e44.tar.gz llvm-6cd71f0c4026217a501e09dcc2198c6c7a462e44.tar.bz2 llvm-6cd71f0c4026217a501e09dcc2198c6c7a462e44.tar.xz |
add a new "llvm-dis -show-annotations" option, which causes it to print
#uses comments, with a testcase.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112906 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/Assembler/comment.ll | 20 | ||||
-rw-r--r-- | tools/llvm-dis/llvm-dis.cpp | 32 |
2 files changed, 51 insertions, 1 deletions
diff --git a/test/Assembler/comment.ll b/test/Assembler/comment.ll new file mode 100644 index 0000000000..fe23d26fbe --- /dev/null +++ b/test/Assembler/comment.ll @@ -0,0 +1,20 @@ +; RUN: llvm-as < %s | llvm-dis -show-annotations | FileCheck -check-prefix=ANNOT %s +; RUN: llvm-as < %s | llvm-dis | FileCheck -check-prefix=BARE %s + +; The bare version of this file should not have any #uses lines. +; BARE: @B = +; BARE-NOT: #uses +; BARE: } + +@B = external global i32 +; ANNOT: @B = external global i32 ; [#uses=0] + +define <4 x i1> @foo(<4 x float> %a, <4 x float> %b) nounwind { +entry: + %cmp = fcmp olt <4 x float> %a, %b ; [#uses=1] + ret <4 x i1> %cmp +} + +; ANNOT: %cmp = fcmp olt <4 x float> %a, %b ; [#uses=1] + + diff --git a/tools/llvm-dis/llvm-dis.cpp b/tools/llvm-dis/llvm-dis.cpp index 9d36f1055c..9d2d31da16 100644 --- a/tools/llvm-dis/llvm-dis.cpp +++ b/tools/llvm-dis/llvm-dis.cpp @@ -18,8 +18,11 @@ #include "llvm/LLVMContext.h" #include "llvm/Module.h" +#include "llvm/Type.h" #include "llvm/Bitcode/ReaderWriter.h" +#include "llvm/Assembly/AssemblyAnnotationWriter.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/FormattedStream.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/PrettyStackTrace.h" @@ -40,6 +43,29 @@ Force("f", cl::desc("Enable binary output on terminals")); static cl::opt<bool> DontPrint("disable-output", cl::desc("Don't output the .ll file"), cl::Hidden); +static cl::opt<bool> +ShowAnnotations("show-annotations", + cl::desc("Add informational comments to the .ll file")); + +namespace { + +class CommentWriter : public AssemblyAnnotationWriter { +public: + void emitFunctionAnnot(const Function *F, + formatted_raw_ostream &OS) { + OS << "; [#uses=" << F->getNumUses() << ']'; // Output # uses + 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 + } +}; + +} // end anon namespace + int main(int argc, char **argv) { // Print a stack trace if we signal out. sys::PrintStackTraceOnErrorSignal(); @@ -96,9 +122,13 @@ int main(int argc, char **argv) { return 1; } + OwningPtr<AssemblyAnnotationWriter> Annotator; + if (ShowAnnotations) + Annotator.reset(new CommentWriter()); + // All that llvm-dis does is write the assembly to a file. if (!DontPrint) - Out->os() << *M; + M->print(Out->os(), Annotator.get()); // Declare success. Out->keep(); |