1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //===-- llvm/Support/CodeGen.h - CodeGen Concepts ---------------*- C++ -*-===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- //
- // This file define some types which define code generation concepts. For
- // example, relocation model.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_SUPPORT_CODEGEN_H
- #define LLVM_SUPPORT_CODEGEN_H
- #include "llvm-c/TargetMachine.h"
- #include "llvm/Support/ErrorHandling.h"
- namespace llvm {
- // Relocation model types.
- namespace Reloc {
- enum Model { Default, Static, PIC_, DynamicNoPIC };
- }
- // Code model types.
- namespace CodeModel {
- enum Model { Default, JITDefault, Small, Kernel, Medium, Large };
- }
- namespace PICLevel {
- enum Level { Default=0, Small=1, Large=2 };
- }
- // TLS models.
- namespace TLSModel {
- enum Model {
- GeneralDynamic,
- LocalDynamic,
- InitialExec,
- LocalExec
- };
- }
- // Code generation optimization level.
- namespace CodeGenOpt {
- enum Level {
- None, // -O0
- Less, // -O1
- Default, // -O2, -Os
- Aggressive // -O3
- };
- }
- // Create wrappers for C Binding types (see CBindingWrapping.h).
- inline CodeModel::Model unwrap(LLVMCodeModel Model) {
- switch (Model) {
- case LLVMCodeModelDefault:
- return CodeModel::Default;
- case LLVMCodeModelJITDefault:
- return CodeModel::JITDefault;
- case LLVMCodeModelSmall:
- return CodeModel::Small;
- case LLVMCodeModelKernel:
- return CodeModel::Kernel;
- case LLVMCodeModelMedium:
- return CodeModel::Medium;
- case LLVMCodeModelLarge:
- return CodeModel::Large;
- }
- return CodeModel::Default;
- }
- inline LLVMCodeModel wrap(CodeModel::Model Model) {
- switch (Model) {
- case CodeModel::Default:
- return LLVMCodeModelDefault;
- case CodeModel::JITDefault:
- return LLVMCodeModelJITDefault;
- case CodeModel::Small:
- return LLVMCodeModelSmall;
- case CodeModel::Kernel:
- return LLVMCodeModelKernel;
- case CodeModel::Medium:
- return LLVMCodeModelMedium;
- case CodeModel::Large:
- return LLVMCodeModelLarge;
- }
- llvm_unreachable("Bad CodeModel!");
- }
- } // end llvm namespace
- #endif
|