-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cpp
63 lines (46 loc) · 1.83 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "Dialects/MRB/MRB.h"
#include "Conversions/BytecodeToMrb.h"
#include "Conversions/LLVMBitcode.h"
#include "Conversions/MrbToLLVM.h"
#include <llvm/Bitcode/BitcodeWriter.h>
#include <llvm/Support/CommandLine.h>
#include <llvm/Support/ManagedStatic.h>
#include <mlir/Dialect/StandardOps/IR/Ops.h>
#include <mlir/IR/Builders.h>
#include <mlir/IR/BuiltinOps.h>
#include <mlir/IR/Dialect.h>
#include <mlir/IR/MLIRContext.h>
llvm::cl::OptionCategory FireStormCategory("mlir-tutorial");
llvm::cl::opt<std::string> Input(llvm::cl::Positional, llvm::cl::Required,
llvm::cl::desc("Input file"), llvm::cl::cat(FireStormCategory));
llvm::cl::opt<std::string> Output("output", llvm::cl::desc("Output object file"),
llvm::cl::cat(FireStormCategory));
void saveBitcode(std::unique_ptr<llvm::Module> &module) {
std::error_code error;
llvm::raw_fd_ostream stream(Output.getValue(), error);
if (error) {
llvm::errs() << "Cannot create output file: " << Output.getValue() << ": " << error.message()
<< "\n";
abort();
}
llvm::WriteBitcodeToFile(*module, stream);
}
int main(int argc, char **argv) {
llvm::llvm_shutdown_obj shutdownGuard;
llvm::cl::HideUnrelatedOptions(FireStormCategory);
llvm::cl::ParseCommandLineOptions(argc, argv);
mlir::DialectRegistry registry;
registry.insert<mlir::StandardOpsDialect>();
registry.insert<mrb::MrbDialect>();
mlir::MLIRContext context(registry);
context.loadAllAvailableDialects();
auto module = bytecodeToMrb(context, Input.getValue());
module.print(llvm::errs());
mrbToLLVM(context, module);
module.print(llvm::errs());
llvm::LLVMContext llvmContext;
auto bitcode = covertToBitcode(context, llvmContext, module);
bitcode->print(llvm::errs(), nullptr);
saveBitcode(bitcode);
return 0;
}