blob: 3ad77c5d5e000e919f0fbc5be083ea987f831111 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- llvm/Target/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_TARGET_CODEGENCWRAPPERS_H
17#define LLVM_TARGET_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;
Andrew Scull0372a572018-11-16 15:47:06 +000034 case LLVMCodeModelTiny:
35 return CodeModel::Tiny;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010036 case LLVMCodeModelSmall:
37 return CodeModel::Small;
38 case LLVMCodeModelKernel:
39 return CodeModel::Kernel;
40 case LLVMCodeModelMedium:
41 return CodeModel::Medium;
42 case LLVMCodeModelLarge:
43 return CodeModel::Large;
44 }
45 return CodeModel::Small;
46}
47
48inline LLVMCodeModel wrap(CodeModel::Model Model) {
49 switch (Model) {
Andrew Scull0372a572018-11-16 15:47:06 +000050 case CodeModel::Tiny:
51 return LLVMCodeModelTiny;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010052 case CodeModel::Small:
53 return LLVMCodeModelSmall;
54 case CodeModel::Kernel:
55 return LLVMCodeModelKernel;
56 case CodeModel::Medium:
57 return LLVMCodeModelMedium;
58 case CodeModel::Large:
59 return LLVMCodeModelLarge;
60 }
61 llvm_unreachable("Bad CodeModel!");
62}
63} // namespace llvm
64
65#endif