From 5f34259609f604bfcd5cbf324a32d265e6a5d347 Mon Sep 17 00:00:00 2001 From: Alex Zinenko Date: Mon, 27 Mar 2023 14:53:11 +0000 Subject: [PATCH] [mlir] FuncToLLVM: fail gracefully in bare pointer multi-result covnersion When type conversion fails, return pattern failure instead of crashing. Closes #61717. --- mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp | 3 +++ mlir/test/Conversion/FuncToLLVM/func-memref-return.mlir | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp index bbfb628..7200b2b 100644 --- a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp +++ b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp @@ -675,6 +675,9 @@ struct ReturnOpLowering : public ConvertOpToLLVMPattern { // returning. auto packedType = getTypeConverter()->packFunctionResults(op.getOperandTypes()); + if (!packedType) { + return rewriter.notifyMatchFailure(op, "could not convert result types"); + } Value packed = rewriter.create(loc, packedType); for (auto [idx, operand] : llvm::enumerate(updatedOperands)) { diff --git a/mlir/test/Conversion/FuncToLLVM/func-memref-return.mlir b/mlir/test/Conversion/FuncToLLVM/func-memref-return.mlir index e8f73a3..8663ce8 100644 --- a/mlir/test/Conversion/FuncToLLVM/func-memref-return.mlir +++ b/mlir/test/Conversion/FuncToLLVM/func-memref-return.mlir @@ -95,3 +95,11 @@ func.func @check_return(%in : memref) -> memref { // BAREPTR: llvm.return {{.*}} : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> return %in : memref } + +// ----- + +// BAREPTR-LABEL: func @unconvertible_multiresult +// BAREPTR-SAME: %{{.*}}: memref, %{{.*}}: memref) -> (memref, memref) +func.func @unconvertible_multiresult(%arg0: memref , %arg1: memref) -> (memref, memref) { + return %arg0, %arg1 : memref, memref +} -- 2.7.4