xref: /llvm-project/mlir/include/mlir/Target/LLVMIR/TypeFromLLVM.h (revision 929189a4995ece3162adced7a7d9be8e17dc4079)
1 //===- TypeFromLLVM.h - Translate types from LLVM to MLIR --*- 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 the type translation function going from MLIR LLVM dialect
10 // to LLVM IR and back.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef MLIR_TARGET_LLVMIR_TYPEFROMLLVM_H
15 #define MLIR_TARGET_LLVMIR_TYPEFROMLLVM_H
16 
17 #include <memory>
18 
19 namespace llvm {
20 class DataLayout;
21 class LLVMContext;
22 class Type;
23 } // namespace llvm
24 
25 namespace mlir {
26 
27 class Type;
28 class MLIRContext;
29 
30 namespace LLVM {
31 
32 namespace detail {
33 class TypeFromLLVMIRTranslatorImpl;
34 } // namespace detail
35 
36 /// Utility class to translate LLVM IR types to the MLIR LLVM dialect. Stores
37 /// the translation state, in particular any identified structure types that are
38 /// reused across translations.
39 class TypeFromLLVMIRTranslator {
40 public:
41   TypeFromLLVMIRTranslator(MLIRContext &context);
42   ~TypeFromLLVMIRTranslator();
43 
44   /// Translates the given LLVM IR type to the MLIR LLVM dialect.
45   Type translateType(llvm::Type *type);
46 
47 private:
48   /// Private implementation.
49   std::unique_ptr<detail::TypeFromLLVMIRTranslatorImpl> impl;
50 };
51 
52 } // namespace LLVM
53 } // namespace mlir
54 
55 #endif // MLIR_TARGET_LLVMIR_TYPEFROMLLVM_H
56