5
5
#include " llvm/Bitcode/ReaderWriter.h"
6
6
#endif
7
7
8
+ #include " llvm/Config/llvm-config.h"
8
9
#include " llvm/IR/Function.h"
9
10
#include " llvm/IR/GlobalVariable.h"
10
11
#include " llvm/IR/LLVMContext.h"
11
12
#include " llvm/IR/Module.h"
13
+ #include " llvm/IRReader/IRReader.h"
12
14
#include " llvm/Support/CommandLine.h"
15
+ #include " llvm/Support/ErrorOr.h"
16
+ #include " llvm/Support/FileSystem.h"
13
17
#include " llvm/Support/ManagedStatic.h"
14
18
#include " llvm/Support/MemoryBuffer.h"
15
- #include " llvm/Support/FileSystem.h"
16
- #include " llvm/Support/raw_ostream.h"
17
- #include " llvm/Support/ErrorOr.h"
19
+ #include " llvm/Support/SourceMgr.h"
18
20
#include " llvm/Support/ToolOutputFile.h"
19
- #include " llvm/Config/llvm-config .h"
21
+ #include " llvm/Support/raw_ostream .h"
20
22
21
23
#include < system_error>
22
24
23
25
using namespace llvm ;
24
26
27
+ static ExitOnError ExitOnErr;
28
+
25
29
static cl::opt<std::string>
26
30
InputFilename (cl::Positional, cl::desc(" <input bitcode>" ), cl::init(" -" ));
27
31
28
32
static cl::opt<std::string>
29
33
OutputFilename (" o" , cl::desc(" Output filename" ),
30
34
cl::value_desc(" filename" ));
31
35
36
+ static cl::opt<bool > TextualOut (" S" , cl::desc(" Emit LLVM textual assembly" ),
37
+ cl::init(false ));
38
+
32
39
int main (int argc, char **argv) {
33
40
LLVMContext Context;
34
41
llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
@@ -45,17 +52,15 @@ int main(int argc, char **argv) {
45
52
ErrorMessage = ec.message ();
46
53
} else {
47
54
std::unique_ptr<MemoryBuffer> &BufferPtr = BufferOrErr.get ();
48
- ErrorOr<std::unique_ptr<Module>> ModuleOrErr =
55
+ SMDiagnostic Err;
56
+ std::unique_ptr<llvm::Module> MPtr =
49
57
#if HAVE_LLVM > 0x0390
50
- expectedToErrorOrAndEmitErrors (Context,
51
- parseBitcodeFile (BufferPtr.get ()->getMemBufferRef (), Context));
58
+ ExitOnErr (Expected<std::unique_ptr<llvm::Module>>(
59
+ parseIR (BufferPtr.get ()->getMemBufferRef (), Err, Context) ));
52
60
#else
53
- parseBitcodeFile (BufferPtr.get ()->getMemBufferRef (), Context);
61
+ parseIR (BufferPtr.get ()->getMemBufferRef (), Err , Context);
54
62
#endif
55
- if (std::error_code ec = ModuleOrErr.getError ())
56
- ErrorMessage = ec.message ();
57
-
58
- M = ModuleOrErr.get ().release ();
63
+ M = MPtr.release ();
59
64
}
60
65
}
61
66
@@ -105,14 +110,16 @@ int main(int argc, char **argv) {
105
110
exit (1 );
106
111
}
107
112
113
+ if (TextualOut)
114
+ M->print (Out->os (), nullptr , true );
115
+ else
108
116
#if HAVE_LLVM >= 0x0700
109
- WriteBitcodeToFile (*M, Out->os ());
117
+ WriteBitcodeToFile (*M, Out->os ());
110
118
#else
111
- WriteBitcodeToFile (M, Out->os ());
119
+ WriteBitcodeToFile (M, Out->os ());
112
120
#endif
113
121
114
122
// Declare success.
115
123
Out->keep ();
116
124
return 0 ;
117
125
}
118
-
0 commit comments