diff --git a/docs/videos.org b/docs/videos.org index 6fe079c..6ce4dc9 100644 --- a/docs/videos.org +++ b/docs/videos.org @@ -496,6 +496,8 @@ Source code -> IR X -> IR Y -> IR Z -> ... -> Target Code * Episode 11 - Lowering SLIR ** Overview +- What is a Pass? +- Pass Manager ** Dialect lowering *** Why? *** Transforming a dialect to another dialect or LLVM IR @@ -506,4 +508,3 @@ This framework allows for transforming a set of illegal operations to a set of l *** Rewrite Patterns *** Type Converter ** Full vs Partial Conversion -** Dealing with Pass failures diff --git a/src/libserene/passes/slir_lowering.cpp b/src/libserene/passes/slir_lowering.cpp index 7a11613..91660f7 100644 --- a/src/libserene/passes/slir_lowering.cpp +++ b/src/libserene/passes/slir_lowering.cpp @@ -18,6 +18,7 @@ #include "serene/passes.h" #include "serene/slir/dialect.h" +#include "serene/utils.h" #include #include @@ -52,12 +53,7 @@ ValueOpLowering::matchAndRewrite(serene::slir::ValueOp op, // TODO: use a mechanism to generate unique names auto fn = rewriter.create(loc, "randomname", func_type); - if (!fn) { - op.emitOpError("Value Rewrite fn is null"); - return mlir::failure(); - } - - auto entryBlock = fn.addEntryBlock(); + auto *entryBlock = fn.addEntryBlock(); rewriter.setInsertionPointToStart(entryBlock); // Since we only support i64 at the moment we use ConstantIntOp @@ -66,12 +62,7 @@ ValueOpLowering::matchAndRewrite(serene::slir::ValueOp op, rewriter.getI64Type()) .getResult(); - mlir::ReturnOp returnOp = rewriter.create(loc, retVal); - - if (!returnOp) { - op.emitError("Value Rewrite returnOp is null"); - return mlir::failure(); - } + UNUSED(rewriter.create(loc, retVal)); fn.setPrivate(); @@ -113,14 +104,10 @@ FnOpLowering::matchAndRewrite(serene::slir::FnOp op, auto func_type = rewriter.getFunctionType(arg_types, rewriter.getI64Type()); auto fn = rewriter.create(loc, name, func_type); - if (!fn) { - op.emitError("Value Rewrite fn is null"); - return mlir::failure(); - } - auto *entryBlock = fn.addEntryBlock(); rewriter.setInsertionPointToStart(entryBlock); + auto retVal = rewriter .create(loc, (int64_t)3, rewriter.getI64Type()) diff --git a/src/libserene/passes/to_llvm_dialect.cpp b/src/libserene/passes/to_llvm_dialect.cpp index b6cf1af..3d65db5 100644 --- a/src/libserene/passes/to_llvm_dialect.cpp +++ b/src/libserene/passes/to_llvm_dialect.cpp @@ -74,8 +74,9 @@ void SLIRToLLVMDialect::runOnOperation() { // We want to completely lower to LLVM, so we use a `FullConversion`. This // ensures that only legal operations will remain after the conversion. auto module = getOperation(); - if (failed(applyFullConversion(module, target, std::move(patterns)))) + if (failed(applyFullConversion(module, target, std::move(patterns)))) { signalPassFailure(); + } }; std::unique_ptr createSLIRLowerToLLVMDialectPass() {