1616
1717#include " mlir/IR/Operation.h"
1818#include " mlir/Support/LLVM.h"
19- #include < optional>
2019
2120namespace mlir {
2221class Location ;
@@ -29,42 +28,47 @@ class ValueRange;
2928namespace LLVM {
3029class LLVMFuncOp ;
3130
32- // / Helper functions to lookup or create the declaration for commonly used
31+ // / Helper functions to look up or create the declaration for commonly used
3332// / external C function calls. The list of functions provided here must be
3433// / implemented separately (e.g. as part of a support runtime library or as part
3534// / of the libc).
36- LLVM::LLVMFuncOp lookupOrCreatePrintI64Fn (Operation *moduleOp);
37- LLVM::LLVMFuncOp lookupOrCreatePrintU64Fn (Operation *moduleOp);
38- LLVM::LLVMFuncOp lookupOrCreatePrintF16Fn (Operation *moduleOp);
39- LLVM::LLVMFuncOp lookupOrCreatePrintBF16Fn (Operation *moduleOp);
40- LLVM::LLVMFuncOp lookupOrCreatePrintF32Fn (Operation *moduleOp);
41- LLVM::LLVMFuncOp lookupOrCreatePrintF64Fn (Operation *moduleOp);
35+ // / Failure if an unexpected version of function is found.
36+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintI64Fn (Operation *moduleOp);
37+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintU64Fn (Operation *moduleOp);
38+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintF16Fn (Operation *moduleOp);
39+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintBF16Fn (Operation *moduleOp);
40+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintF32Fn (Operation *moduleOp);
41+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintF64Fn (Operation *moduleOp);
4242// / Declares a function to print a C-string.
4343// / If a custom runtime function is defined via `runtimeFunctionName`, it must
4444// / have the signature void(char const*). The default function is `printString`.
45- LLVM::LLVMFuncOp
45+ FailureOr< LLVM::LLVMFuncOp>
4646lookupOrCreatePrintStringFn (Operation *moduleOp,
4747 std::optional<StringRef> runtimeFunctionName = {});
48- LLVM::LLVMFuncOp lookupOrCreatePrintOpenFn (Operation *moduleOp);
49- LLVM::LLVMFuncOp lookupOrCreatePrintCloseFn (Operation *moduleOp);
50- LLVM::LLVMFuncOp lookupOrCreatePrintCommaFn (Operation *moduleOp);
51- LLVM::LLVMFuncOp lookupOrCreatePrintNewlineFn (Operation *moduleOp);
52- LLVM::LLVMFuncOp lookupOrCreateMallocFn (Operation *moduleOp, Type indexType);
53- LLVM::LLVMFuncOp lookupOrCreateAlignedAllocFn (Operation *moduleOp,
54- Type indexType);
55- LLVM::LLVMFuncOp lookupOrCreateFreeFn (Operation *moduleOp);
56- LLVM::LLVMFuncOp lookupOrCreateGenericAllocFn (Operation *moduleOp,
57- Type indexType);
58- LLVM::LLVMFuncOp lookupOrCreateGenericAlignedAllocFn (Operation *moduleOp,
59- Type indexType);
60- LLVM::LLVMFuncOp lookupOrCreateGenericFreeFn (Operation *moduleOp);
61- LLVM::LLVMFuncOp lookupOrCreateMemRefCopyFn (Operation *moduleOp, Type indexType,
62- Type unrankedDescriptorType);
48+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintOpenFn (Operation *moduleOp);
49+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintCloseFn (Operation *moduleOp);
50+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintCommaFn (Operation *moduleOp);
51+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreatePrintNewlineFn (Operation *moduleOp);
52+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreateMallocFn (Operation *moduleOp,
53+ Type indexType);
54+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreateAlignedAllocFn (Operation *moduleOp,
55+ Type indexType);
56+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreateFreeFn (Operation *moduleOp);
57+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreateGenericAllocFn (Operation *moduleOp,
58+ Type indexType);
59+ FailureOr<LLVM::LLVMFuncOp>
60+ lookupOrCreateGenericAlignedAllocFn (Operation *moduleOp, Type indexType);
61+ FailureOr<LLVM::LLVMFuncOp> lookupOrCreateGenericFreeFn (Operation *moduleOp);
62+ FailureOr<LLVM::LLVMFuncOp>
63+ lookupOrCreateMemRefCopyFn (Operation *moduleOp, Type indexType,
64+ Type unrankedDescriptorType);
6365
6466// / Create a FuncOp with signature `resultType`(`paramTypes`)` and name `name`.
65- LLVM::LLVMFuncOp lookupOrCreateFn (Operation *moduleOp, StringRef name,
66- ArrayRef<Type> paramTypes = {},
67- Type resultType = {}, bool isVarArg = false );
67+ // / Return a failure if the FuncOp found has unexpected signature.
68+ FailureOr<LLVM::LLVMFuncOp>
69+ lookupOrCreateFn (Operation *moduleOp, StringRef name,
70+ ArrayRef<Type> paramTypes = {}, Type resultType = {},
71+ bool isVarArg = false , bool isReserved = false );
6872
6973} // namespace LLVM
7074} // namespace mlir
0 commit comments