1 //===- llvm/Target/CodeGenCWrappers.h - CodeGen C Wrappers ------*- C++ -*-===// 2 // 3 // 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 6 // 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 23 namespace llvm { 24 unwrap(LLVMCodeModel Model,bool & JIT)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; 33 case LLVMCodeModelTiny: 34 return CodeModel::Tiny; 35 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 wrap(CodeModel::Model Model)47inline LLVMCodeModel wrap(CodeModel::Model Model) { 48 switch (Model) { 49 case CodeModel::Tiny: 50 return LLVMCodeModelTiny; 51 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 65