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 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 60} // end llvm namespace 61 62#endif 63