mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-22 12:08:33 +00:00
d04a8d4b33
Sooooo many of these had incorrect or strange main module includes. I have manually inspected all of these, and fixed the main module include to be the nearest plausible thing I could find. If you own or care about any of these source files, I encourage you to take some time and check that these edits were sensible. I can't have broken anything (I strictly added headers, and reordered them, never removed), but they may not be the headers you'd really like to identify as containing the API being implemented. Many forward declarations and missing includes were added to a header files to allow them to parse cleanly when included first. The main module rule does in fact have its merits. =] git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169131 91177308-0d34-0410-b5e6-96231b3b80d8
144 lines
5.3 KiB
C++
144 lines
5.3 KiB
C++
/*===-- llvm-c/TargetMachine.h - Target Machine Library C Interface - C++ -*-=*\
|
|
|* *|
|
|
|* The LLVM Compiler Infrastructure *|
|
|
|* *|
|
|
|* This file is distributed under the University of Illinois Open Source *|
|
|
|* License. See LICENSE.TXT for details. *|
|
|
|* *|
|
|
|*===----------------------------------------------------------------------===*|
|
|
|* *|
|
|
|* This header declares the C interface to the Target and TargetMachine *|
|
|
|* classes, which can be used to generate assembly or object files. *|
|
|
|* *|
|
|
|* Many exotic languages can interoperate with C code but have a harder time *|
|
|
|* with C++ due to name mangling. So in addition to C, this interface enables *|
|
|
|* tools written in such languages. *|
|
|
|* *|
|
|
\*===----------------------------------------------------------------------===*/
|
|
|
|
#ifndef LLVM_C_TARGETMACHINE_H
|
|
#define LLVM_C_TARGETMACHINE_H
|
|
|
|
#include "llvm-c/Core.h"
|
|
#include "llvm-c/Target.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
typedef struct LLVMTargetMachine *LLVMTargetMachineRef;
|
|
typedef struct LLVMTarget *LLVMTargetRef;
|
|
|
|
typedef enum {
|
|
LLVMCodeGenLevelNone,
|
|
LLVMCodeGenLevelLess,
|
|
LLVMCodeGenLevelDefault,
|
|
LLVMCodeGenLevelAggressive
|
|
} LLVMCodeGenOptLevel;
|
|
|
|
typedef enum {
|
|
LLVMRelocDefault,
|
|
LLVMRelocStatic,
|
|
LLVMRelocPIC,
|
|
LLVMRelocDynamicNoPic
|
|
} LLVMRelocMode;
|
|
|
|
typedef enum {
|
|
LLVMCodeModelDefault,
|
|
LLVMCodeModelJITDefault,
|
|
LLVMCodeModelSmall,
|
|
LLVMCodeModelKernel,
|
|
LLVMCodeModelMedium,
|
|
LLVMCodeModelLarge
|
|
} LLVMCodeModel;
|
|
|
|
typedef enum {
|
|
LLVMAssemblyFile,
|
|
LLVMObjectFile
|
|
} LLVMCodeGenFileType;
|
|
|
|
/** Returns the first llvm::Target in the registered targets list. */
|
|
LLVMTargetRef LLVMGetFirstTarget();
|
|
/** Returns the next llvm::Target given a previous one (or null if there's none) */
|
|
LLVMTargetRef LLVMGetNextTarget(LLVMTargetRef T);
|
|
|
|
/*===-- Target ------------------------------------------------------------===*/
|
|
/** Returns the name of a target. See llvm::Target::getName */
|
|
const char *LLVMGetTargetName(LLVMTargetRef T);
|
|
|
|
/** Returns the description of a target. See llvm::Target::getDescription */
|
|
const char *LLVMGetTargetDescription(LLVMTargetRef T);
|
|
|
|
/** Returns if the target has a JIT */
|
|
LLVMBool LLVMTargetHasJIT(LLVMTargetRef T);
|
|
|
|
/** Returns if the target has a TargetMachine associated */
|
|
LLVMBool LLVMTargetHasTargetMachine(LLVMTargetRef T);
|
|
|
|
/** Returns if the target as an ASM backend (required for emitting output) */
|
|
LLVMBool LLVMTargetHasAsmBackend(LLVMTargetRef T);
|
|
|
|
/*===-- Target Machine ----------------------------------------------------===*/
|
|
/** Creates a new llvm::TargetMachine. See llvm::Target::createTargetMachine */
|
|
LLVMTargetMachineRef LLVMCreateTargetMachine(LLVMTargetRef T, char *Triple,
|
|
char *CPU, char *Features, LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc,
|
|
LLVMCodeModel CodeModel);
|
|
|
|
/** Dispose the LLVMTargetMachineRef instance generated by
|
|
LLVMCreateTargetMachine. */
|
|
void LLVMDisposeTargetMachine(LLVMTargetMachineRef T);
|
|
|
|
/** Returns the Target used in a TargetMachine */
|
|
LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T);
|
|
|
|
/** Returns the triple used creating this target machine. See
|
|
llvm::TargetMachine::getTriple. The result needs to be disposed with
|
|
LLVMDisposeMessage. */
|
|
char *LLVMGetTargetMachineTriple(LLVMTargetMachineRef T);
|
|
|
|
/** Returns the cpu used creating this target machine. See
|
|
llvm::TargetMachine::getCPU. The result needs to be disposed with
|
|
LLVMDisposeMessage. */
|
|
char *LLVMGetTargetMachineCPU(LLVMTargetMachineRef T);
|
|
|
|
/** Returns the feature string used creating this target machine. See
|
|
llvm::TargetMachine::getFeatureString. The result needs to be disposed with
|
|
LLVMDisposeMessage. */
|
|
char *LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T);
|
|
|
|
/** Returns the llvm::DataLayout used for this llvm:TargetMachine. */
|
|
LLVMTargetDataRef LLVMGetTargetMachineData(LLVMTargetMachineRef T);
|
|
|
|
/** Emits an asm or object file for the given module to the filename. This
|
|
wraps several c++ only classes (among them a file stream). Returns any
|
|
error in ErrorMessage. Use LLVMDisposeMessage to dispose the message. */
|
|
LLVMBool LLVMTargetMachineEmitToFile(LLVMTargetMachineRef T, LLVMModuleRef M,
|
|
char *Filename, LLVMCodeGenFileType codegen, char **ErrorMessage);
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
|
|
namespace llvm {
|
|
class TargetMachine;
|
|
class Target;
|
|
|
|
inline TargetMachine *unwrap(LLVMTargetMachineRef P) {
|
|
return reinterpret_cast<TargetMachine*>(P);
|
|
}
|
|
inline Target *unwrap(LLVMTargetRef P) {
|
|
return reinterpret_cast<Target*>(P);
|
|
}
|
|
inline LLVMTargetMachineRef wrap(const TargetMachine *P) {
|
|
return reinterpret_cast<LLVMTargetMachineRef>(
|
|
const_cast<TargetMachine*>(P));
|
|
}
|
|
inline LLVMTargetRef wrap(const Target * P) {
|
|
return reinterpret_cast<LLVMTargetRef>(const_cast<Target*>(P));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#endif
|