summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/Assembler/comment.ll20
-rw-r--r--tools/llvm-dis/llvm-dis.cpp32
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();