TargetMachine.h revision fa74752298602e0b74fb60ce3f0e76d0c461d3d8
1d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/*===-- llvm-c/TargetMachine.h - Target Machine Library C Interface - C++ -*-=*\ 2d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* *| 3d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* The LLVM Compiler Infrastructure *| 4d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* *| 5d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* This file is distributed under the University of Illinois Open Source *| 6d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* License. See LICENSE.TXT for details. *| 7d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* *| 8d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|*===----------------------------------------------------------------------===*| 9d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* *| 10d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* This header declares the C interface to the Target and TargetMachine *| 11d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* classes, which can be used to generate assembly or object files. *| 12d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* *| 13d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* Many exotic languages can interoperate with C code but have a harder time *| 14d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* with C++ due to name mangling. So in addition to C, this interface enables *| 15d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* tools written in such languages. *| 16d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands|* *| 17d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands\*===----------------------------------------------------------------------===*/ 18d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 19d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands#ifndef LLVM_C_TARGETMACHINE_H 20d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands#define LLVM_C_TARGETMACHINE_H 21d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 22d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands#include "llvm-c/Core.h" 23d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm-c/Target.h" 24d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 25d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands#ifdef __cplusplus 26d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandsextern "C" { 27d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands#endif 28c9e180aaea66d0b167580d911772e4a867a5efaeFilip Pizlotypedef struct LLVMOpaqueTargetMachine *LLVMTargetMachineRef; 29d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandstypedef struct LLVMTarget *LLVMTargetRef; 30d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 31d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandstypedef enum { 32d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeGenLevelNone, 33d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeGenLevelLess, 34d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeGenLevelDefault, 35d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeGenLevelAggressive 36d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands} LLVMCodeGenOptLevel; 37d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 38d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandstypedef enum { 39d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMRelocDefault, 40d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMRelocStatic, 41d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMRelocPIC, 42d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMRelocDynamicNoPic 43d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands} LLVMRelocMode; 44d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 45d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandstypedef enum { 46d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeModelDefault, 47d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeModelJITDefault, 48d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeModelSmall, 49d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeModelKernel, 50d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeModelMedium, 51d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCodeModelLarge 52d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands} LLVMCodeModel; 53d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 54d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandstypedef enum { 55d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMAssemblyFile, 56d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMObjectFile 57d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands} LLVMCodeGenFileType; 58d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 59d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns the first llvm::Target in the registered targets list. */ 60f89dacb78244825a5c555be1eb4c18d12365845cAnders WaldenborgLLVMTargetRef LLVMGetFirstTarget(void); 61d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns the next llvm::Target given a previous one (or null if there's none) */ 62d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan SandsLLVMTargetRef LLVMGetNextTarget(LLVMTargetRef T); 63d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 64d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/*===-- Target ------------------------------------------------------------===*/ 651acb2127bad420af19a5929df54a892957ba3c13Peter Zotov/** Finds the target corresponding to the given name and stores it in \p T. 661acb2127bad420af19a5929df54a892957ba3c13Peter Zotov Returns 0 on success. */ 675ea0c20ce7a161d23a9bf8f1beea0ffb6a02898cPeter ZotovLLVMTargetRef LLVMGetTargetFromName(const char *Name); 681acb2127bad420af19a5929df54a892957ba3c13Peter Zotov 691acb2127bad420af19a5929df54a892957ba3c13Peter Zotov/** Finds the target corresponding to the given triple and stores it in \p T. 701acb2127bad420af19a5929df54a892957ba3c13Peter Zotov Returns 0 on success. Optionally returns any error in ErrorMessage. 711acb2127bad420af19a5929df54a892957ba3c13Peter Zotov Use LLVMDisposeMessage to dispose the message. */ 721acb2127bad420af19a5929df54a892957ba3c13Peter ZotovLLVMBool LLVMGetTargetFromTriple(const char* Triple, LLVMTargetRef *T, 731acb2127bad420af19a5929df54a892957ba3c13Peter Zotov char **ErrorMessage); 741acb2127bad420af19a5929df54a892957ba3c13Peter Zotov 75d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns the name of a target. See llvm::Target::getName */ 76d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandsconst char *LLVMGetTargetName(LLVMTargetRef T); 77d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 78d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns the description of a target. See llvm::Target::getDescription */ 79d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandsconst char *LLVMGetTargetDescription(LLVMTargetRef T); 80d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 81d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns if the target has a JIT */ 82d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan SandsLLVMBool LLVMTargetHasJIT(LLVMTargetRef T); 83d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 84d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns if the target has a TargetMachine associated */ 85d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan SandsLLVMBool LLVMTargetHasTargetMachine(LLVMTargetRef T); 86d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 87d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns if the target as an ASM backend (required for emitting output) */ 88d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan SandsLLVMBool LLVMTargetHasAsmBackend(LLVMTargetRef T); 89d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 90d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/*===-- Target Machine ----------------------------------------------------===*/ 91d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Creates a new llvm::TargetMachine. See llvm::Target::createTargetMachine */ 92fa74752298602e0b74fb60ce3f0e76d0c461d3d8Peter ZotovLLVMTargetMachineRef LLVMCreateTargetMachine(LLVMTargetRef T, 93fa74752298602e0b74fb60ce3f0e76d0c461d3d8Peter Zotov const char *Triple, const char *CPU, const char *Features, 94fa74752298602e0b74fb60ce3f0e76d0c461d3d8Peter Zotov LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc, LLVMCodeModel CodeModel); 95d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 96d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Dispose the LLVMTargetMachineRef instance generated by 97d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMCreateTargetMachine. */ 98d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandsvoid LLVMDisposeTargetMachine(LLVMTargetMachineRef T); 99d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 100d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns the Target used in a TargetMachine */ 101d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan SandsLLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T); 102d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 103d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns the triple used creating this target machine. See 104d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands llvm::TargetMachine::getTriple. The result needs to be disposed with 105d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMDisposeMessage. */ 106d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandschar *LLVMGetTargetMachineTriple(LLVMTargetMachineRef T); 107d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 108d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns the cpu used creating this target machine. See 109d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands llvm::TargetMachine::getCPU. The result needs to be disposed with 110d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMDisposeMessage. */ 111d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandschar *LLVMGetTargetMachineCPU(LLVMTargetMachineRef T); 112d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 113d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Returns the feature string used creating this target machine. See 114d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands llvm::TargetMachine::getFeatureString. The result needs to be disposed with 115d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands LLVMDisposeMessage. */ 116d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sandschar *LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T); 117d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 1183574eca1b02600bac4e625297f4ecf745f4c4f32Micah Villmow/** Returns the llvm::DataLayout used for this llvm:TargetMachine. */ 119d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan SandsLLVMTargetDataRef LLVMGetTargetMachineData(LLVMTargetMachineRef T); 120d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 1211acb2127bad420af19a5929df54a892957ba3c13Peter Zotov/** Set the target machine's ASM verbosity. */ 1221acb2127bad420af19a5929df54a892957ba3c13Peter Zotovvoid LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T, 1231acb2127bad420af19a5929df54a892957ba3c13Peter Zotov LLVMBool VerboseAsm); 1241acb2127bad420af19a5929df54a892957ba3c13Peter Zotov 125d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands/** Emits an asm or object file for the given module to the filename. This 126d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands wraps several c++ only classes (among them a file stream). Returns any 127d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands error in ErrorMessage. Use LLVMDisposeMessage to dispose the message. */ 128d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan SandsLLVMBool LLVMTargetMachineEmitToFile(LLVMTargetMachineRef T, LLVMModuleRef M, 129d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands char *Filename, LLVMCodeGenFileType codegen, char **ErrorMessage); 130d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 131ad74f335ef06fa3f6bb64120f8c6bb57a517ee58Tom Stellard/** Compile the LLVM IR stored in \p M and store the result in \p OutMemBuf. */ 132ad74f335ef06fa3f6bb64120f8c6bb57a517ee58Tom StellardLLVMBool LLVMTargetMachineEmitToMemoryBuffer(LLVMTargetMachineRef T, LLVMModuleRef M, 133ad74f335ef06fa3f6bb64120f8c6bb57a517ee58Tom Stellard LLVMCodeGenFileType codegen, char** ErrorMessage, LLVMMemoryBufferRef *OutMemBuf); 1341acb2127bad420af19a5929df54a892957ba3c13Peter Zotov 1351acb2127bad420af19a5929df54a892957ba3c13Peter Zotov/*===-- Triple ------------------------------------------------------------===*/ 1361acb2127bad420af19a5929df54a892957ba3c13Peter Zotov/** Get a triple for the host machine as a string. The result needs to be 1371acb2127bad420af19a5929df54a892957ba3c13Peter Zotov disposed with LLVMDisposeMessage. */ 1381acb2127bad420af19a5929df54a892957ba3c13Peter Zotovchar* LLVMGetDefaultTargetTriple(void); 1391acb2127bad420af19a5929df54a892957ba3c13Peter Zotov 140d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands#ifdef __cplusplus 141d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands} 1429313da5a90838c7242101dae250e86dcfc708e6aEvan Cheng#endif 143d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands 144d6b7b8f49b0554b82165ecef07de7e9c0c5eeb42Duncan Sands#endif 145