aboutsummaryrefslogtreecommitdiffstats
path: root/tools/opt
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-05-06 02:42:03 +0000
committerChris Lattner <sabre@nondot.org>2007-05-06 02:42:03 +0000
commitb330e38f4ab1096403ade60028456cae9d0c67f3 (patch)
tree2d4632f44b95ede55bc9afe29315ee19662507f8 /tools/opt
parentf9f2e831709f05c0cacd643a908ba2862cb09a32 (diff)
downloadexternal_llvm-b330e38f4ab1096403ade60028456cae9d0c67f3.zip
external_llvm-b330e38f4ab1096403ade60028456cae9d0c67f3.tar.gz
external_llvm-b330e38f4ab1096403ade60028456cae9d0c67f3.tar.bz2
if -bitcode is specified, read and write a bitcode file instead of a bytecode file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36830 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/opt')
-rw-r--r--tools/opt/Makefile2
-rw-r--r--tools/opt/opt.cpp34
2 files changed, 31 insertions, 5 deletions
diff --git a/tools/opt/Makefile b/tools/opt/Makefile
index 0ea3a7f..76cb5b1 100644
--- a/tools/opt/Makefile
+++ b/tools/opt/Makefile
@@ -10,6 +10,6 @@ LEVEL = ../..
TOOLNAME = opt
REQUIRES_EH := 1
-LINK_COMPONENTS := bcreader bcwriter instrumentation scalaropts ipo
+LINK_COMPONENTS := bcreader bcwriter bitreader bitwriter instrumentation scalaropts ipo
include $(LEVEL)/Makefile.common
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index e29e9f6..6c77085 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -16,6 +16,7 @@
#include "llvm/PassManager.h"
#include "llvm/Bytecode/Reader.h"
#include "llvm/Bytecode/WriteBytecodePass.h"
+#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/Assembly/PrintModulePass.h"
#include "llvm/Analysis/Verifier.h"
#include "llvm/Analysis/LoopPass.h"
@@ -24,6 +25,7 @@
#include "llvm/Support/PassNameParser.h"
#include "llvm/System/Signals.h"
#include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/PluginLoader.h"
#include "llvm/Support/Streams.h"
#include "llvm/Support/SystemUtils.h"
@@ -35,6 +37,8 @@
#include <algorithm>
using namespace llvm;
+static cl::opt<bool> Bitcode("bitcode");
+
// The OptimizationList is automatically populated with registered Passes by the
// PassNameParser.
//
@@ -262,8 +266,26 @@ int main(int argc, char **argv) {
std::string ErrorMessage;
// Load the input module...
- std::auto_ptr<Module> M(ParseBytecodeFile(InputFilename,
- Compressor::decompressToNewBuffer, &ErrorMessage));
+ std::auto_ptr<Module> M;
+ if (Bitcode) {
+ MemoryBuffer *Buffer;
+ if (InputFilename == "-") {
+ Buffer = MemoryBuffer::getSTDIN();
+ } else {
+ Buffer = MemoryBuffer::getFile(&InputFilename[0], InputFilename.size());
+ }
+
+ if (Buffer == 0)
+ ErrorMessage = "Error reading file '" + InputFilename + "'";
+ else
+ M.reset(ParseBitcodeFile(Buffer, &ErrorMessage));
+
+ delete Buffer;
+ } else {
+ M.reset(ParseBytecodeFile(InputFilename,
+ Compressor::decompressToNewBuffer,
+ &ErrorMessage));
+ }
if (M.get() == 0) {
cerr << argv[0] << ": ";
if (ErrorMessage.size())
@@ -355,8 +377,12 @@ int main(int argc, char **argv) {
// Write bytecode out to disk or cout as the last step...
OStream L(*Out);
- if (!NoOutput && !AnalyzeOnly)
- Passes.add(new WriteBytecodePass(&L, false, !NoCompress));
+ if (!NoOutput && !AnalyzeOnly) {
+ if (Bitcode)
+ Passes.add(CreateBitcodeWriterPass(*Out));
+ else
+ Passes.add(new WriteBytecodePass(&L, false, !NoCompress));
+ }
// Now that we have all of the passes ready, run them.
Passes.run(*M.get());