[Mlir-commits] [mlir] [MLIR][LLVM] Add vararg support in LLVM::LLVMFuncOp (PR #67274)

Oleksandr Alex Zinenko llvmlistbot at llvm.org
Tue Sep 26 07:50:28 PDT 2023


================
@@ -1018,6 +1018,27 @@ static void printStoreType(OpAsmPrinter &printer, Operation *op,
 // CallOp
 //===----------------------------------------------------------------------===//
 
+/// Get the MLIR Op-like result types of a LLVMFunctionType
+static SmallVector<Type, 1> getCallOpResults(LLVMFunctionType calleeType) {
+  SmallVector<Type, 1> results;
+  Type resultType = calleeType.getReturnType();
+  if (!isa<LLVM::LLVMVoidType>(resultType))
+    results.push_back(resultType);
+  return results;
+}
+
+/// Construct a LLVMFunctionType from MLIR results and args
+static LLVMFunctionType getLLVMFuncType(OpBuilder &builder, TypeRange results,
+                                        ValueRange args) {
+  Type resultType;
+  if (results.empty())
+    resultType = LLVMVoidType::get(builder.getContext());
+  else
+    resultType = results.front();
+  return LLVMFunctionType::get(resultType, llvm::to_vector(args.getTypes()),
----------------
ftynse wrote:

Yeah, it can be converted to `TypeRange` but not to `ArrayRef<Type>`. The caller needs to be updated to take `TypeRange` instead, but it's out of scope for this PR.

https://github.com/llvm/llvm-project/pull/67274


More information about the Mlir-commits mailing list