1 //===- llvm/Target/CodeGenCWrappers.h - CodeGen C Wrappers ------*- 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 defines C bindings wrappers for enums in llvm/Support/CodeGen.h
10 // that need them.  The wrappers are separated to avoid adding an indirect
11 // dependency on llvm/Config/Targets.def to CodeGen.h.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_TARGET_CODEGENCWRAPPERS_H
16 #define LLVM_TARGET_CODEGENCWRAPPERS_H
17 
18 #include "llvm-c/TargetMachine.h"
19 #include "llvm/ADT/Optional.h"
20 #include "llvm/Support/CodeGen.h"
21 #include "llvm/Support/ErrorHandling.h"
22 
23 namespace llvm {
24 
unwrap(LLVMCodeModel Model,bool & JIT)25 inline Optional<CodeModel::Model> unwrap(LLVMCodeModel Model, bool &JIT) {
26   JIT = false;
27   switch (Model) {
28   case LLVMCodeModelJITDefault:
29     JIT = true;
30     LLVM_FALLTHROUGH;
31   case LLVMCodeModelDefault:
32     return None;
33   case LLVMCodeModelTiny:
34     return CodeModel::Tiny;
35   case LLVMCodeModelSmall:
36     return CodeModel::Small;
37   case LLVMCodeModelKernel:
38     return CodeModel::Kernel;
39   case LLVMCodeModelMedium:
40     return CodeModel::Medium;
41   case LLVMCodeModelLarge:
42     return CodeModel::Large;
43   }
44   return CodeModel::Small;
45 }
46 
wrap(CodeModel::Model Model)47 inline LLVMCodeModel wrap(CodeModel::Model Model) {
48   switch (Model) {
49   case CodeModel::Tiny:
50     return LLVMCodeModelTiny;
51   case CodeModel::Small:
52     return LLVMCodeModelSmall;
53   case CodeModel::Kernel:
54     return LLVMCodeModelKernel;
55   case CodeModel::Medium:
56     return LLVMCodeModelMedium;
57   case CodeModel::Large:
58     return LLVMCodeModelLarge;
59   }
60   llvm_unreachable("Bad CodeModel!");
61 }
62 } // namespace llvm
63 
64 #endif
65