[mlir-cpu-runner] Check entry function is void
authorCullen Rhodes <cullen.rhodes@arm.com>
Mon, 3 Jul 2023 14:33:13 +0000 (14:33 +0000)
committerCullen Rhodes <cullen.rhodes@arm.com>
Tue, 4 Jul 2023 07:25:16 +0000 (07:25 +0000)
Currently crashes if function isn't void when specifiying
'-entry-point-result=void'.

Reviewed By: jpienaar

Differential Revision: https://reviews.llvm.org/D154352

mlir/lib/ExecutionEngine/JitRunner.cpp
mlir/test/mlir-cpu-runner/verify-entry-point-result.mlir [new file with mode: 0644]

index 7a02ecb..4fbd124 100644 (file)
@@ -224,6 +224,12 @@ static Error compileAndExecuteVoidFunction(
       SymbolTable::lookupSymbolIn(module, entryPoint));
   if (!mainFunction || mainFunction.empty())
     return makeStringError("entry point not found");
+
+  auto resultType = dyn_cast<LLVM::LLVMVoidType>(
+      mainFunction.getFunctionType().getReturnType());
+  if (!resultType)
+    return makeStringError("expected void function");
+
   void *empty = nullptr;
   return compileAndExecute(options, module, entryPoint, std::move(config),
                            &empty, std::move(tm));
diff --git a/mlir/test/mlir-cpu-runner/verify-entry-point-result.mlir b/mlir/test/mlir-cpu-runner/verify-entry-point-result.mlir
new file mode 100644 (file)
index 0000000..02db28a
--- /dev/null
@@ -0,0 +1,7 @@
+// RUN: not mlir-cpu-runner %s -e entry -entry-point-result=void 2>&1 | FileCheck %s
+
+// CHECK: Error: expected void function
+llvm.func @entry() -> (i32) {
+  %0 = llvm.mlir.constant(0 : index) : i32
+  llvm.return %0 : i32
+}