MLIR  16.0.0git
FunctionCallUtils.h
Go to the documentation of this file.
1 //===- FunctionCallUtils.h - Utilities for C function calls -----*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file declares helper functions to call common simple C functions in
10 // LLVMIR (e.g. among others to support printing and debugging).
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef MLIR_DIALECT_LLVMIR_FUNCTIONCALLUTILS_H_
15 #define MLIR_DIALECT_LLVMIR_FUNCTIONCALLUTILS_H_
16 
17 #include "mlir/IR/Operation.h"
18 #include "mlir/Support/LLVM.h"
19 
20 namespace mlir {
21 class Location;
22 class ModuleOp;
23 class OpBuilder;
24 class Operation;
25 class Type;
26 class ValueRange;
27 
28 namespace LLVM {
29 class LLVMFuncOp;
30 
31 /// Helper functions to lookup or create the declaration for commonly used
32 /// external C function calls. Such ops can then be invoked by creating a CallOp
33 /// with the proper arguments via `createLLVMCall`.
34 /// The list of functions provided here must be implemented separately (e.g. as
35 /// part of a support runtime library or as part of the libc).
36 LLVM::LLVMFuncOp lookupOrCreatePrintI64Fn(ModuleOp moduleOp);
37 LLVM::LLVMFuncOp lookupOrCreatePrintU64Fn(ModuleOp moduleOp);
38 LLVM::LLVMFuncOp lookupOrCreatePrintF32Fn(ModuleOp moduleOp);
39 LLVM::LLVMFuncOp lookupOrCreatePrintF64Fn(ModuleOp moduleOp);
40 LLVM::LLVMFuncOp lookupOrCreatePrintOpenFn(ModuleOp moduleOp);
41 LLVM::LLVMFuncOp lookupOrCreatePrintCloseFn(ModuleOp moduleOp);
42 LLVM::LLVMFuncOp lookupOrCreatePrintCommaFn(ModuleOp moduleOp);
43 LLVM::LLVMFuncOp lookupOrCreatePrintNewlineFn(ModuleOp moduleOp);
44 LLVM::LLVMFuncOp lookupOrCreateMallocFn(ModuleOp moduleOp, Type indexType);
45 LLVM::LLVMFuncOp lookupOrCreateAlignedAllocFn(ModuleOp moduleOp,
46  Type indexType);
47 LLVM::LLVMFuncOp lookupOrCreateFreeFn(ModuleOp moduleOp);
48 LLVM::LLVMFuncOp lookupOrCreateGenericAllocFn(ModuleOp moduleOp,
49  Type indexType);
50 LLVM::LLVMFuncOp lookupOrCreateGenericAlignedAllocFn(ModuleOp moduleOp,
51  Type indexType);
52 LLVM::LLVMFuncOp lookupOrCreateGenericFreeFn(ModuleOp moduleOp);
53 LLVM::LLVMFuncOp lookupOrCreateMemRefCopyFn(ModuleOp moduleOp, Type indexType,
54  Type unrankedDescriptorType);
55 
56 /// Create a FuncOp with signature `resultType`(`paramTypes`)` and name `name`.
57 LLVM::LLVMFuncOp lookupOrCreateFn(ModuleOp moduleOp, StringRef name,
58  ArrayRef<Type> paramTypes = {},
59  Type resultType = {});
60 
61 /// Helper wrapper to create a call to `fn` with `args` and `resultTypes`.
62 Operation::result_range createLLVMCall(OpBuilder &b, Location loc,
63  LLVM::LLVMFuncOp fn,
64  ValueRange args = {},
65  ArrayRef<Type> resultTypes = {});
66 
67 } // namespace LLVM
68 } // namespace mlir
69 
70 #endif // MLIR_DIALECT_LLVMIR_FUNCTIONCALLUTILS_H_
Include the generated interface declarations.
LLVM::LLVMFuncOp lookupOrCreatePrintF32Fn(ModuleOp moduleOp)
LLVM::LLVMFuncOp lookupOrCreatePrintU64Fn(ModuleOp moduleOp)
LLVM::LLVMFuncOp lookupOrCreateGenericFreeFn(ModuleOp moduleOp)
An inlay hint that for a type annotation.
LLVM::LLVMFuncOp lookupOrCreatePrintCommaFn(ModuleOp moduleOp)
LLVM::LLVMFuncOp lookupOrCreatePrintI64Fn(ModuleOp moduleOp)
Helper functions to lookup or create the declaration for commonly used external C function calls...
LLVM::LLVMFuncOp lookupOrCreatePrintNewlineFn(ModuleOp moduleOp)
LLVM::LLVMFuncOp lookupOrCreateFn(ModuleOp moduleOp, StringRef name, ArrayRef< Type > paramTypes={}, Type resultType={})
Create a FuncOp with signature resultType(paramTypes)and namename`.
LLVM::LLVMFuncOp lookupOrCreateAlignedAllocFn(ModuleOp moduleOp, Type indexType)
LLVM::LLVMFuncOp lookupOrCreatePrintCloseFn(ModuleOp moduleOp)
LLVM::LLVMFuncOp lookupOrCreateGenericAllocFn(ModuleOp moduleOp, Type indexType)
Operation::result_range createLLVMCall(OpBuilder &b, Location loc, LLVM::LLVMFuncOp fn, ValueRange args={}, ArrayRef< Type > resultTypes={})
Helper wrapper to create a call to fn with args and resultTypes.
LLVM::LLVMFuncOp lookupOrCreateMemRefCopyFn(ModuleOp moduleOp, Type indexType, Type unrankedDescriptorType)
LLVM::LLVMFuncOp lookupOrCreatePrintOpenFn(ModuleOp moduleOp)
LLVM::LLVMFuncOp lookupOrCreateGenericAlignedAllocFn(ModuleOp moduleOp, Type indexType)
LLVM::LLVMFuncOp lookupOrCreateMallocFn(ModuleOp moduleOp, Type indexType)
ResultRange result_range
Support result iteration.
Definition: Operation.h:327
LLVM::LLVMFuncOp lookupOrCreatePrintF64Fn(ModuleOp moduleOp)
LLVM::LLVMFuncOp lookupOrCreateFreeFn(ModuleOp moduleOp)