mirror of
https://github.com/intel/llvm.git
synced 2026-01-25 19:44:38 +08:00
[mlir][EmitC] Fix call ops with zero arguments in func to emitc conversion (#94936)
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user