17801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng//===-- llvm/Support/CodeGen.h - CodeGen Concepts ---------------*- C++ -*-===// 27801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// 37801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// The LLVM Compiler Infrastructure 47801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// 57801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// This file is distributed under the University of Illinois Open Source 67801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// License. See LICENSE.TXT for details. 77801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// 87801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng//===----------------------------------------------------------------------===// 97801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// 107801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// This file define some types which define code generation concepts. For 117801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// example, relocation model. 127801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng// 137801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng//===----------------------------------------------------------------------===// 147801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng 157801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng#ifndef LLVM_SUPPORT_CODEGEN_H 167801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng#define LLVM_SUPPORT_CODEGEN_H 177801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng 180e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo#include "llvm-c/TargetMachine.h" 190e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo#include "llvm/Support/ErrorHandling.h" 200e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo 217801136b95d1fbe515b9655b73ada39b05a33559Evan Chengnamespace llvm { 227801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng 237801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng // Relocation model types. 247801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng namespace Reloc { 257801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng enum Model { Default, Static, PIC_, DynamicNoPIC }; 267801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng } 277801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng 287801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng // Code model types. 297801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng namespace CodeModel { 307801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng enum Model { Default, JITDefault, Small, Kernel, Medium, Large }; 317801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng } 327801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng 3334797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth // TLS models. 3434797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth namespace TLSModel { 3534797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth enum Model { 3634797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth GeneralDynamic, 3734797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth LocalDynamic, 3834797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth InitialExec, 3934797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth LocalExec 4034797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth }; 4134797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth } 4234797136cb9fa9f450c0e1c47983482083979dd4Chandler Carruth 43b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng // Code generation optimization level. 44b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng namespace CodeGenOpt { 45b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng enum Level { 46b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng None, // -O0 47b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng Less, // -O1 48b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng Default, // -O2, -Os 49b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng Aggressive // -O3 50b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng }; 51b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng } 52b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16Evan Cheng 530e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo // Create wrappers for C Binding types (see CBindingWrapping.h). 540e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo inline CodeModel::Model unwrap(LLVMCodeModel Model) { 550e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo switch (Model) { 560e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case LLVMCodeModelDefault: 570e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return CodeModel::Default; 580e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case LLVMCodeModelJITDefault: 590e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return CodeModel::JITDefault; 600e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case LLVMCodeModelSmall: 610e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return CodeModel::Small; 620e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case LLVMCodeModelKernel: 630e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return CodeModel::Kernel; 640e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case LLVMCodeModelMedium: 650e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return CodeModel::Medium; 660e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case LLVMCodeModelLarge: 670e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return CodeModel::Large; 680e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo } 690e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return CodeModel::Default; 700e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo } 710e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo 720e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo inline LLVMCodeModel wrap(CodeModel::Model Model) { 730e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo switch (Model) { 740e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case CodeModel::Default: 750e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return LLVMCodeModelDefault; 760e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case CodeModel::JITDefault: 770e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return LLVMCodeModelJITDefault; 780e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case CodeModel::Small: 790e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return LLVMCodeModelSmall; 800e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case CodeModel::Kernel: 810e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return LLVMCodeModelKernel; 820e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case CodeModel::Medium: 830e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return LLVMCodeModelMedium; 840e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo case CodeModel::Large: 850e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo return LLVMCodeModelLarge; 860e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo } 870e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo llvm_unreachable("Bad CodeModel!"); 880e1327e4aa1426aaa3f99a2cbfcb1f2b575791adFilip Pizlo } 897801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng} // end llvm namespace 907801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng 917801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng#endif 92