[mlir][EmitC] Fix call ops with zero arguments in func to emitc conversion (#94936)

This commit is contained in:
Simon Camphausen
2024-06-10 13:40:24 +02:00
committed by GitHub
parent bddd8eae17
commit 346bd91792
2 changed files with 20 additions and 5 deletions

View File

@@ -31,15 +31,14 @@ public:
LogicalResult
matchAndRewrite(func::CallOp callOp, OpAdaptor adaptor,
ConversionPatternRewriter &rewriter) const override {
// Multiple results func was not converted to `emitc.func`.
// Multiple results func cannot be converted to `emitc.func`.
if (callOp.getNumResults() > 1)
return rewriter.notifyMatchFailure(
callOp, "only functions with zero or one result can be converted");
rewriter.replaceOpWithNewOp<emitc::CallOp>(
callOp,
callOp.getNumResults() ? callOp.getResult(0).getType() : nullptr,
adaptor.getOperands(), callOp->getAttrs());
rewriter.replaceOpWithNewOp<emitc::CallOp>(callOp, callOp.getResultTypes(),
adaptor.getOperands(),
callOp->getAttrs());
return success();
}

View File

@@ -58,3 +58,19 @@ func.func @call(%arg0: i32) -> i32 {
// CHECK-LABEL: emitc.func private @return_i32(i32) -> i32 attributes {specifiers = ["extern"]}
func.func private @return_i32(%arg0: i32) -> i32
// -----
// CHECK-LABEL: emitc.func private @return_void() attributes {specifiers = ["static"]}
// CHECK-NEXT: emitc.return
func.func private @return_void() {
return
}
// CHECK-LABEL: emitc.func @call()
// CHECK-NEXT: emitc.call @return_void() : () -> ()
// CHECK-NEXT: emitc.return
func.func @call() {
call @return_void() : () -> ()
return
}