[mlir] fail gracefull in CallOpSignatureConversion

Previously, the CallOpSignatureConversion pattern would assert if
function signature change affected the number of results. Fail the
pattern instead and let the caller propagate failure.

Fixes #60186.

Reviewed By: mehdi_amini

Differential Revision: https://reviews.llvm.org/D142624
This commit is contained in:
Alex Zinenko 2023-01-26 14:02:34 +00:00
parent f7c1982309
commit 88a3dc0ee8
2 changed files with 18 additions and 0 deletions

View File

@ -29,6 +29,11 @@ struct CallOpSignatureConversion : public OpConversionPattern<CallOp> {
convertedResults)))
return failure();
// If this isn't a one-to-one type mapping, we don't know how to aggregate
// the results.
if (callOp->getNumResults() != convertedResults.size())
return failure();
// Substitute with the new result types from the corresponding FuncType
// conversion.
rewriter.replaceOpWithNewOp<CallOp>(

View File

@ -317,3 +317,16 @@ func.func @typemismatch(%arg: f32) -> i32 {
%0 = "test.passthrough_fold"(%arg) : (f32) -> (i32)
"test.return"(%0) : (i32) -> ()
}
// -----
// expected-remark @below {{applyPartialConversion failed}}
module {
func.func private @callee(%0 : f32) -> f32
func.func @caller( %arg: f32) {
// expected-error @below {{failed to legalize}}
%1 = func.call @callee(%arg) : (f32) -> f32
return
}
}