Home | History | Annotate | Download | only in Support
      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