Fix the memory leak on pass failure in the namespace generate function
This commit is contained in:
parent
10015683f5
commit
54d85eac94
|
@ -112,6 +112,7 @@ MaybeModuleOp Namespace::generate() {
|
||||||
if (mlir::failed(runPasses(module))) {
|
if (mlir::failed(runPasses(module))) {
|
||||||
// TODO: Report a proper error
|
// TODO: Report a proper error
|
||||||
module.emitError("Failure in passes!");
|
module.emitError("Failure in passes!");
|
||||||
|
module.erase();
|
||||||
return llvm::None;
|
return llvm::None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,12 +55,12 @@ ValueOpLowering::matchAndRewrite(serene::slir::ValueOp op,
|
||||||
auto func_type = rewriter.getFunctionType(arg_types, rewriter.getI64Type());
|
auto func_type = rewriter.getFunctionType(arg_types, rewriter.getI64Type());
|
||||||
auto fn = rewriter.create<mlir::FuncOp>(loc, "randomname", func_type);
|
auto fn = rewriter.create<mlir::FuncOp>(loc, "randomname", func_type);
|
||||||
if (!fn) {
|
if (!fn) {
|
||||||
llvm::outs() << "Value Rewrite fn is null\n";
|
op.emitOpError("Value Rewrite fn is null");
|
||||||
return mlir::failure();
|
return mlir::failure();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &entryBlock = *fn.addEntryBlock();
|
auto entryBlock = fn.addEntryBlock();
|
||||||
rewriter.setInsertionPointToStart(&entryBlock);
|
rewriter.setInsertionPointToStart(entryBlock);
|
||||||
auto retVal = rewriter
|
auto retVal = rewriter
|
||||||
.create<mlir::ConstantIntOp>(loc, (int64_t)value,
|
.create<mlir::ConstantIntOp>(loc, (int64_t)value,
|
||||||
rewriter.getI64Type())
|
rewriter.getI64Type())
|
||||||
|
@ -69,7 +69,7 @@ ValueOpLowering::matchAndRewrite(serene::slir::ValueOp op,
|
||||||
mlir::ReturnOp returnOp = rewriter.create<mlir::ReturnOp>(loc, retVal);
|
mlir::ReturnOp returnOp = rewriter.create<mlir::ReturnOp>(loc, retVal);
|
||||||
|
|
||||||
if (!returnOp) {
|
if (!returnOp) {
|
||||||
llvm::outs() << "Value Rewrite returnOp is null\n";
|
op.emitError("Value Rewrite returnOp is null");
|
||||||
return mlir::failure();
|
return mlir::failure();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,13 +123,7 @@ FnOpLowering::matchAndRewrite(serene::slir::FnOp op,
|
||||||
.create<mlir::ConstantIntOp>(loc, (int64_t)3, rewriter.getI64Type())
|
.create<mlir::ConstantIntOp>(loc, (int64_t)3, rewriter.getI64Type())
|
||||||
.getResult();
|
.getResult();
|
||||||
|
|
||||||
mlir::ReturnOp returnOp = rewriter.create<mlir::ReturnOp>(loc, retVal);
|
rewriter.create<mlir::ReturnOp>(loc, retVal);
|
||||||
|
|
||||||
if (!returnOp) {
|
|
||||||
op.emitError("Value Rewrite returnOp is null");
|
|
||||||
rewriter.eraseOp(fn);
|
|
||||||
return mlir::failure();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isPublic) {
|
if (!isPublic) {
|
||||||
fn.setPrivate();
|
fn.setPrivate();
|
||||||
|
@ -188,8 +182,9 @@ void SLIRToMLIRPass::runOnModule() {
|
||||||
// With the target and rewrite patterns defined, we can now attempt the
|
// With the target and rewrite patterns defined, we can now attempt the
|
||||||
// conversion. The conversion will signal failure if any of our `illegal`
|
// conversion. The conversion will signal failure if any of our `illegal`
|
||||||
// operations were not converted successfully.
|
// operations were not converted successfully.
|
||||||
if (failed(applyPartialConversion(module, target, std::move(patterns))))
|
if (failed(applyPartialConversion(module, target, std::move(patterns)))) {
|
||||||
signalPassFailure();
|
signalPassFailure();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<mlir::Pass> createSLIRLowerToMLIRPass() {
|
std::unique_ptr<mlir::Pass> createSLIRLowerToMLIRPass() {
|
||||||
|
|
|
@ -75,7 +75,7 @@ void SLIRToLLVMDialect::runOnOperation() {
|
||||||
|
|
||||||
// mlir::populateAffineToStdConversionPatterns(patterns);
|
// mlir::populateAffineToStdConversionPatterns(patterns);
|
||||||
// populateLoopToStdConversionPatterns(patterns);
|
// populateLoopToStdConversionPatterns(patterns);
|
||||||
// populateStdToLLVMConversionPatterns(typeConverter, patterns);
|
populateStdToLLVMConversionPatterns(typeConverter, patterns);
|
||||||
|
|
||||||
// patterns.add<PrintOpLowering>(&getContext());
|
// patterns.add<PrintOpLowering>(&getContext());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue