Initial revision


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvm-dis/Makefile b/tools/llvm-dis/Makefile
new file mode 100644
index 0000000..fc77cdd
--- /dev/null
+++ b/tools/llvm-dis/Makefile
@@ -0,0 +1,10 @@
+LEVEL = ../..
+include $(LEVEL)/Makefile.common
+
+all:: dis
+clean ::
+	rm -f dis
+
+dis : $(ObjectsG)
+	$(LinkG) -o $@ $(ObjectsG) -lvmcore -lasmwriter -lanalysis \
+				               -lbcreader
diff --git a/tools/llvm-dis/dis.cpp b/tools/llvm-dis/dis.cpp
new file mode 100644
index 0000000..3f45ee3
--- /dev/null
+++ b/tools/llvm-dis/dis.cpp
@@ -0,0 +1,64 @@
+//===------------------------------------------------------------------------===
+// LLVM 'DIS' UTILITY 
+//
+// This utility may be invoked in the following manner:
+//  dis --help     - Output information about command line switches
+//  dis [options]      - Read LLVM bytecode from stdin, write assembly to stdout
+//  dis [options] x.bc - Read LLVM bytecode from the x.bc file, write assembly
+//                       to the x.ll file.
+//
+//===------------------------------------------------------------------------===
+
+#include <iostream.h>
+#include <fstream.h>
+#include "llvm/Module.h"
+#include "llvm/Assembly/Writer.h"
+#include "llvm/Bytecode/Reader.h"
+#include "llvm/Tools/CommandLine.h"
+
+int main(int argc, char **argv) {
+  ToolCommandLine Opts(argc, argv, false);
+
+  // We only support the options that the system parser does... if it left any
+  // then we don't know what to do.
+  //
+  if (argc > 1) {
+    for (int i = 1; i < argc; i++) {
+      if (string(argv[i]) != string("--help"))
+	cerr << argv[0] << ": argument not recognized: '" << argv[i] << "'!\n";
+    }
+    
+    cerr << argv[0] << " usage:\n"
+	 << "  " << argv[0] << " --help  - Print this usage information\n" 
+	 << "  " << argv[0] << " x.bc    - Parse <x.bc> file and output "
+	 << "assembly to x.ll\n"
+	 << "  " << argv[0] << "         - Parse stdin and write to stdout.\n";
+    return 1;
+  }
+  
+  ostream *Out = &cout;  // Default to printing to stdout...
+
+  Module *C = ParseBytecodeFile(Opts.getInputFilename());
+  if (C == 0) {
+    cerr << "bytecode didn't read correctly.\n";
+    return 1;
+  }
+  
+  if (Opts.getOutputFilename() != "-") {
+    Out = new ofstream(Opts.getOutputFilename().c_str(), 
+                       (Opts.getForce() ? 0 : ios::noreplace)|ios::out);
+    if (!Out->good()) {
+      cerr << "Error opening " << Opts.getOutputFilename() 
+           << ": sending to stdout instead!\n";
+      Out = &cout;
+      }
+  }
+    
+  // All that dis does is write the assembly out to a file... which is exactly
+  // what the writer library is supposed to do...
+  (*Out) << C;
+  delete C;
+
+  if (Out != &cout) delete Out;
+  return 0;
+}
diff --git a/tools/llvm-dis/llvm-dis.cpp b/tools/llvm-dis/llvm-dis.cpp
new file mode 100644
index 0000000..3f45ee3
--- /dev/null
+++ b/tools/llvm-dis/llvm-dis.cpp
@@ -0,0 +1,64 @@
+//===------------------------------------------------------------------------===
+// LLVM 'DIS' UTILITY 
+//
+// This utility may be invoked in the following manner:
+//  dis --help     - Output information about command line switches
+//  dis [options]      - Read LLVM bytecode from stdin, write assembly to stdout
+//  dis [options] x.bc - Read LLVM bytecode from the x.bc file, write assembly
+//                       to the x.ll file.
+//
+//===------------------------------------------------------------------------===
+
+#include <iostream.h>
+#include <fstream.h>
+#include "llvm/Module.h"
+#include "llvm/Assembly/Writer.h"
+#include "llvm/Bytecode/Reader.h"
+#include "llvm/Tools/CommandLine.h"
+
+int main(int argc, char **argv) {
+  ToolCommandLine Opts(argc, argv, false);
+
+  // We only support the options that the system parser does... if it left any
+  // then we don't know what to do.
+  //
+  if (argc > 1) {
+    for (int i = 1; i < argc; i++) {
+      if (string(argv[i]) != string("--help"))
+	cerr << argv[0] << ": argument not recognized: '" << argv[i] << "'!\n";
+    }
+    
+    cerr << argv[0] << " usage:\n"
+	 << "  " << argv[0] << " --help  - Print this usage information\n" 
+	 << "  " << argv[0] << " x.bc    - Parse <x.bc> file and output "
+	 << "assembly to x.ll\n"
+	 << "  " << argv[0] << "         - Parse stdin and write to stdout.\n";
+    return 1;
+  }
+  
+  ostream *Out = &cout;  // Default to printing to stdout...
+
+  Module *C = ParseBytecodeFile(Opts.getInputFilename());
+  if (C == 0) {
+    cerr << "bytecode didn't read correctly.\n";
+    return 1;
+  }
+  
+  if (Opts.getOutputFilename() != "-") {
+    Out = new ofstream(Opts.getOutputFilename().c_str(), 
+                       (Opts.getForce() ? 0 : ios::noreplace)|ios::out);
+    if (!Out->good()) {
+      cerr << "Error opening " << Opts.getOutputFilename() 
+           << ": sending to stdout instead!\n";
+      Out = &cout;
+      }
+  }
+    
+  // All that dis does is write the assembly out to a file... which is exactly
+  // what the writer library is supposed to do...
+  (*Out) << C;
+  delete C;
+
+  if (Out != &cout) delete Out;
+  return 0;
+}