1//===- llvm/Support/CodeGenCWrappers.h - CodeGen C Wrappers -----*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines C bindings wrappers for enums in llvm/Support/CodeGen.h
11// that need them.  The wrappers are separated to avoid adding an indirect
12// dependency on llvm/Config/Targets.def to CodeGen.h.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_SUPPORT_CODEGENCWRAPPERS_H
17#define LLVM_SUPPORT_CODEGENCWRAPPERS_H
18
19#include "llvm-c/TargetMachine.h"
20#include "llvm/ADT/Optional.h"
21#include "llvm/Support/CodeGen.h"
22#include "llvm/Support/ErrorHandling.h"
23
24namespace llvm {
25
26inline Optional<CodeModel::Model> unwrap(LLVMCodeModel Model, bool &JIT) {
27  JIT = false;
28  switch (Model) {
29  case LLVMCodeModelJITDefault:
30    JIT = true;
31    LLVM_FALLTHROUGH;
32  case LLVMCodeModelDefault:
33    return None;
34  case LLVMCodeModelSmall:
35    return CodeModel::Small;
36  case LLVMCodeModelKernel:
37    return CodeModel::Kernel;
38  case LLVMCodeModelMedium:
39    return CodeModel::Medium;
40  case LLVMCodeModelLarge:
41    return CodeModel::Large;
42  }
43  return CodeModel::Small;
44}
45
46inline LLVMCodeModel wrap(CodeModel::Model Model) {
47  switch (Model) {
48  case CodeModel::Small:
49    return LLVMCodeModelSmall;
50  case CodeModel::Kernel:
51    return LLVMCodeModelKernel;
52  case CodeModel::Medium:
53    return LLVMCodeModelMedium;
54  case CodeModel::Large:
55    return LLVMCodeModelLarge;
56  }
57  llvm_unreachable("Bad CodeModel!");
58}
59
60} // end llvm namespace
61
62#endif
63