blob: e9a990569d3657a9f9729ad40c079758603f6ca7 [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;
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} // namespace llvm
60
61#endif