Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
/*===-- llvm-c/TargetMachine.h - Target Machine Library C Interface - C++ -*-=*\
2
|*                                                                            *|
3
|* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
4
|* Exceptions.                                                                *|
5
|* See https://llvm.org/LICENSE.txt for license information.                  *|
6
|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
7
|*                                                                            *|
8
|*===----------------------------------------------------------------------===*|
9
|*                                                                            *|
10
|* This header declares the C interface to the Target and TargetMachine       *|
11
|* classes, which can be used to generate assembly or object files.           *|
12
|*                                                                            *|
13
|* Many exotic languages can interoperate with C code but have a harder time  *|
14
|* with C++ due to name mangling. So in addition to C, this interface enables *|
15
|* tools written in such languages.                                           *|
16
|*                                                                            *|
17
\*===----------------------------------------------------------------------===*/
18
 
19
#ifndef LLVM_C_TARGETMACHINE_H
20
#define LLVM_C_TARGETMACHINE_H
21
 
22
#include "llvm-c/ExternC.h"
23
#include "llvm-c/Target.h"
24
#include "llvm-c/Types.h"
25
 
26
LLVM_C_EXTERN_C_BEGIN
27
 
28
/**
29
 * @addtogroup LLVMCTarget
30
 *
31
 * @{
32
 */
33
 
34
typedef struct LLVMOpaqueTargetMachine *LLVMTargetMachineRef;
35
typedef struct LLVMTarget *LLVMTargetRef;
36
 
37
typedef enum {
38
    LLVMCodeGenLevelNone,
39
    LLVMCodeGenLevelLess,
40
    LLVMCodeGenLevelDefault,
41
    LLVMCodeGenLevelAggressive
42
} LLVMCodeGenOptLevel;
43
 
44
typedef enum {
45
    LLVMRelocDefault,
46
    LLVMRelocStatic,
47
    LLVMRelocPIC,
48
    LLVMRelocDynamicNoPic,
49
    LLVMRelocROPI,
50
    LLVMRelocRWPI,
51
    LLVMRelocROPI_RWPI
52
} LLVMRelocMode;
53
 
54
typedef enum {
55
    LLVMCodeModelDefault,
56
    LLVMCodeModelJITDefault,
57
    LLVMCodeModelTiny,
58
    LLVMCodeModelSmall,
59
    LLVMCodeModelKernel,
60
    LLVMCodeModelMedium,
61
    LLVMCodeModelLarge
62
} LLVMCodeModel;
63
 
64
typedef enum {
65
    LLVMAssemblyFile,
66
    LLVMObjectFile
67
} LLVMCodeGenFileType;
68
 
69
/** Returns the first llvm::Target in the registered targets list. */
70
LLVMTargetRef LLVMGetFirstTarget(void);
71
/** Returns the next llvm::Target given a previous one (or null if there's none) */
72
LLVMTargetRef LLVMGetNextTarget(LLVMTargetRef T);
73
 
74
/*===-- Target ------------------------------------------------------------===*/
75
/** Finds the target corresponding to the given name and stores it in \p T.
76
  Returns 0 on success. */
77
LLVMTargetRef LLVMGetTargetFromName(const char *Name);
78
 
79
/** Finds the target corresponding to the given triple and stores it in \p T.
80
  Returns 0 on success. Optionally returns any error in ErrorMessage.
81
  Use LLVMDisposeMessage to dispose the message. */
82
LLVMBool LLVMGetTargetFromTriple(const char* Triple, LLVMTargetRef *T,
83
                                 char **ErrorMessage);
84
 
85
/** Returns the name of a target. See llvm::Target::getName */
86
const char *LLVMGetTargetName(LLVMTargetRef T);
87
 
88
/** Returns the description  of a target. See llvm::Target::getDescription */
89
const char *LLVMGetTargetDescription(LLVMTargetRef T);
90
 
91
/** Returns if the target has a JIT */
92
LLVMBool LLVMTargetHasJIT(LLVMTargetRef T);
93
 
94
/** Returns if the target has a TargetMachine associated */
95
LLVMBool LLVMTargetHasTargetMachine(LLVMTargetRef T);
96
 
97
/** Returns if the target as an ASM backend (required for emitting output) */
98
LLVMBool LLVMTargetHasAsmBackend(LLVMTargetRef T);
99
 
100
/*===-- Target Machine ----------------------------------------------------===*/
101
/** Creates a new llvm::TargetMachine. See llvm::Target::createTargetMachine */
102
LLVMTargetMachineRef LLVMCreateTargetMachine(LLVMTargetRef T,
103
  const char *Triple, const char *CPU, const char *Features,
104
  LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc, LLVMCodeModel CodeModel);
105
 
106
/** Dispose the LLVMTargetMachineRef instance generated by
107
  LLVMCreateTargetMachine. */
108
void LLVMDisposeTargetMachine(LLVMTargetMachineRef T);
109
 
110
/** Returns the Target used in a TargetMachine */
111
LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T);
112
 
113
/** Returns the triple used creating this target machine. See
114
  llvm::TargetMachine::getTriple. The result needs to be disposed with
115
  LLVMDisposeMessage. */
116
char *LLVMGetTargetMachineTriple(LLVMTargetMachineRef T);
117
 
118
/** Returns the cpu used creating this target machine. See
119
  llvm::TargetMachine::getCPU. The result needs to be disposed with
120
  LLVMDisposeMessage. */
121
char *LLVMGetTargetMachineCPU(LLVMTargetMachineRef T);
122
 
123
/** Returns the feature string used creating this target machine. See
124
  llvm::TargetMachine::getFeatureString. The result needs to be disposed with
125
  LLVMDisposeMessage. */
126
char *LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T);
127
 
128
/** Create a DataLayout based on the targetMachine. */
129
LLVMTargetDataRef LLVMCreateTargetDataLayout(LLVMTargetMachineRef T);
130
 
131
/** Set the target machine's ASM verbosity. */
132
void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T,
133
                                      LLVMBool VerboseAsm);
134
 
135
/** Emits an asm or object file for the given module to the filename. This
136
  wraps several c++ only classes (among them a file stream). Returns any
137
  error in ErrorMessage. Use LLVMDisposeMessage to dispose the message. */
138
LLVMBool LLVMTargetMachineEmitToFile(LLVMTargetMachineRef T, LLVMModuleRef M,
139
                                     const char *Filename,
140
                                     LLVMCodeGenFileType codegen,
141
                                     char **ErrorMessage);
142
 
143
/** Compile the LLVM IR stored in \p M and store the result in \p OutMemBuf. */
144
LLVMBool LLVMTargetMachineEmitToMemoryBuffer(LLVMTargetMachineRef T, LLVMModuleRef M,
145
  LLVMCodeGenFileType codegen, char** ErrorMessage, LLVMMemoryBufferRef *OutMemBuf);
146
 
147
/*===-- Triple ------------------------------------------------------------===*/
148
/** Get a triple for the host machine as a string. The result needs to be
149
  disposed with LLVMDisposeMessage. */
150
char* LLVMGetDefaultTargetTriple(void);
151
 
152
/** Normalize a target triple. The result needs to be disposed with
153
  LLVMDisposeMessage. */
154
char* LLVMNormalizeTargetTriple(const char* triple);
155
 
156
/** Get the host CPU as a string. The result needs to be disposed with
157
  LLVMDisposeMessage. */
158
char* LLVMGetHostCPUName(void);
159
 
160
/** Get the host CPU's features as a string. The result needs to be disposed
161
  with LLVMDisposeMessage. */
162
char* LLVMGetHostCPUFeatures(void);
163
 
164
/** Adds the target-specific analysis passes to the pass manager. */
165
void LLVMAddAnalysisPasses(LLVMTargetMachineRef T, LLVMPassManagerRef PM);
166
 
167
/**
168
 * @}
169
 */
170
 
171
LLVM_C_EXTERN_C_END
172
 
173
#endif