Line data Source code
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 :
24 : namespace llvm {
25 :
26 8 : inline Optional<CodeModel::Model> unwrap(LLVMCodeModel Model, bool &JIT) {
27 8 : JIT = false;
28 8 : switch (Model) {
29 8 : case LLVMCodeModelJITDefault:
30 8 : JIT = true;
31 : LLVM_FALLTHROUGH;
32 8 : case LLVMCodeModelDefault:
33 : return None;
34 0 : case LLVMCodeModelSmall:
35 : return CodeModel::Small;
36 0 : case LLVMCodeModelKernel:
37 : return CodeModel::Kernel;
38 0 : case LLVMCodeModelMedium:
39 : return CodeModel::Medium;
40 0 : case LLVMCodeModelLarge:
41 : return CodeModel::Large;
42 : }
43 : return CodeModel::Small;
44 : }
45 :
46 : inline 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
|