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 inline 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 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 63