blob: a995463570535d04ccb0c378639c076760b88c73 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- llvm/Target/CodeGenCWrappers.h - CodeGen C Wrappers ------*- C++ -*-===//
2//
Andrew Walbran16937d02019-10-22 13:54:20 +01003// 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
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01006//
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
23namespace llvm {
24
25inline 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;
Andrew Scull0372a572018-11-16 15:47:06 +000033 case LLVMCodeModelTiny:
34 return CodeModel::Tiny;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010035 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
47inline LLVMCodeModel wrap(CodeModel::Model Model) {
48 switch (Model) {
Andrew Scull0372a572018-11-16 15:47:06 +000049 case CodeModel::Tiny:
50 return LLVMCodeModelTiny;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010051 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