1 //===- LLVM.cpp - C Interface for LLVM dialect ----------------------------===//
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 #include "mlir-c/Dialect/LLVM.h"
10 #include "mlir/CAPI/Registration.h"
11 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
12 #include "mlir/Dialect/LLVMIR/LLVMTypes.h"
13 
14 using namespace mlir;
15 using namespace mlir::LLVM;
16 
17 MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(LLVM, llvm, LLVMDialect)
18 
19 MlirType mlirLLVMPointerTypeGet(MlirType pointee, unsigned addressSpace) {
20   return wrap(LLVMPointerType::get(unwrap(pointee), addressSpace));
21 }
22 
23 MlirType mlirLLVMVoidTypeGet(MlirContext ctx) {
24   return wrap(LLVMVoidType::get(unwrap(ctx)));
25 }
26 
27 MlirType mlirLLVMArrayTypeGet(MlirType elementType, unsigned numElements) {
28   return wrap(LLVMArrayType::get(unwrap(elementType), numElements));
29 }
30 
31 MlirType mlirLLVMFunctionTypeGet(MlirType resultType, intptr_t nArgumentTypes,
32                                  MlirType const *argumentTypes, bool isVarArg) {
33   SmallVector<Type, 2> argumentStorage;
34   return wrap(LLVMFunctionType::get(
35       unwrap(resultType),
36       unwrapList(nArgumentTypes, argumentTypes, argumentStorage), isVarArg));
37 }
38 
39 MlirType mlirLLVMStructTypeLiteralGet(MlirContext ctx, intptr_t nFieldTypes,
40                                       MlirType const *fieldTypes,
41                                       bool isPacked) {
42   SmallVector<Type, 2> fieldStorage;
43   return wrap(LLVMStructType::getLiteral(
44       unwrap(ctx), unwrapList(nFieldTypes, fieldTypes, fieldStorage),
45       isPacked));
46 }
47