From 788adcbbae87366b770809ee1a4750b733c82e4f Mon Sep 17 00:00:00 2001 From: Andi Drebes Date: Thu, 20 May 2021 16:51:05 +0200 Subject: [PATCH] feat(compiler): Let zamacompiler parse an MLIR source file and dump the in-memory representation --- compiler/src/main.cpp | 61 ++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 42 deletions(-) diff --git a/compiler/src/main.cpp b/compiler/src/main.cpp index 66121817b..a9cebca23 100644 --- a/compiler/src/main.cpp +++ b/compiler/src/main.cpp @@ -1,54 +1,31 @@ -#include -#include +#include + +#include +#include -#include "llvm/Support/SourceMgr.h" #include "zamalang/Dialect/HLFHE/IR/HLFHEDialect.h" -#include "zamalang/Dialect/HLFHE/IR/HLFHEOps.h" #include "zamalang/Dialect/HLFHE/IR/HLFHETypes.h" -mlir::FuncOp buildFunction(mlir::OpBuilder &builder) { - mlir::FunctionType func_type = builder.getFunctionType({ mlir::zamalang::HLFHE::EncryptedIntegerType::get(builder.getContext(), 32) }, llvm::None); - - mlir::FuncOp funcOp = - mlir::FuncOp::create(builder.getUnknownLoc(), "hlfhe", func_type); - - mlir::FuncOp function(funcOp); - mlir::Block &entryBlock = *function.addEntryBlock(); - builder.setInsertionPointToStart(&entryBlock); - - mlir::Value v1 = builder.create( - builder.getUnknownLoc(), - llvm::APFloat(llvm::APFloat::IEEEsingle(), "1.0"), - builder.getF32Type()); - - // TODO: create v2 as EncryptedInteger and add it with v1 - - // mlir::Value v2 = - // builder.create( - // builder.getUnknownLoc()); - - mlir::Value c1 = builder.create( - builder.getUnknownLoc(), v1, v1); - - builder.create(builder.getUnknownLoc()); - - return funcOp; -} - int main(int argc, char **argv) { - mlir::MLIRContext context; + mlir::MLIRContext context; - // Load our Dialect in this MLIR Context. - context.getOrLoadDialect(); - context.getOrLoadDialect(); + // Load our Dialect in this MLIR Context. + context.getOrLoadDialect(); + context.getOrLoadDialect(); - mlir::OpBuilder builder(&context); + if(argc != 2) { + std::cerr << "Usage: " << argv[0] << " filename" << std::endl; + return 1; + } - mlir::ModuleOp module = mlir::ModuleOp::create(builder.getUnknownLoc()); + auto module = mlir::parseSourceFile(argv[1], &context); - module.push_back(buildFunction(builder)); + if (!module) { + std::cerr << "Could not parse module" << std::endl; + return 1; + } - module.dump(); + module->dump(); - return 0; + return 0; }