blob: e30ad3f900461fdb1b7bcd63ecde3f70e333b218 [file] [log] [blame]
Owen Anderson8e66e0b2009-06-30 00:48:55 +00001//===-- LLVMContext.cpp - Implement LLVMContext -----------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
Owen Anderson36f62e52009-06-30 17:06:46 +00009//
10// This file implements LLVMContext, as a wrapper around the opaque
11// class LLVMContextImpl.
12//
13//===----------------------------------------------------------------------===//
Owen Anderson8e66e0b2009-06-30 00:48:55 +000014
15#include "llvm/LLVMContext.h"
16#include "llvm/Constants.h"
Owen Andersona8560212009-06-30 17:50:28 +000017#include "llvm/DerivedTypes.h"
Owen Anderson1938fb12009-06-30 23:39:59 +000018#include "llvm/Support/ManagedStatic.h"
Owen Anderson8e66e0b2009-06-30 00:48:55 +000019#include "LLVMContextImpl.h"
20
21using namespace llvm;
22
Owen Anderson1938fb12009-06-30 23:39:59 +000023static ManagedStatic<LLVMContext> GlobalContext;
24
Owen Anderson2a154432009-07-01 23:13:44 +000025LLVMContext& llvm::getGlobalContext() {
Owen Anderson1cf085d2009-07-01 21:22:36 +000026 return *GlobalContext;
Owen Anderson1938fb12009-06-30 23:39:59 +000027}
28
Owen Anderson8e66e0b2009-06-30 00:48:55 +000029LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl()) { }
30LLVMContext::~LLVMContext() { delete pImpl; }
31
Owen Anderson7d128072009-07-01 23:56:45 +000032// Constant accessors
33Constant* LLVMContext::getNullValue(const Type* Ty) {
34 return Constant::getNullValue(Ty);
35}
36
37Constant* LLVMContext::getAllOnesValue(const Type* Ty) {
38 return Constant::getAllOnesValue(Ty);
39}
40
Owen Anderson8e66e0b2009-06-30 00:48:55 +000041// ConstantInt accessors.
Bill Wendling4534d252009-07-01 22:33:26 +000042ConstantInt* LLVMContext::getConstantIntTrue() {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000043 return ConstantInt::getTrue();
44}
45
Bill Wendling4534d252009-07-01 22:33:26 +000046ConstantInt* LLVMContext::getConstantIntFalse() {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000047 return ConstantInt::getFalse();
48}
49
50ConstantInt* LLVMContext::getConstantInt(const IntegerType* Ty, uint64_t V,
Bill Wendling4534d252009-07-01 22:33:26 +000051 bool isSigned) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000052 return ConstantInt::get(Ty, V, isSigned);
53}
54
55ConstantInt* LLVMContext::getConstantIntSigned(const IntegerType* Ty,
Bill Wendling4534d252009-07-01 22:33:26 +000056 int64_t V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000057 return ConstantInt::getSigned(Ty, V);
58}
59
Bill Wendling4534d252009-07-01 22:33:26 +000060ConstantInt* LLVMContext::getConstantInt(const APInt& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000061 return ConstantInt::get(V);
62}
63
Bill Wendling4534d252009-07-01 22:33:26 +000064Constant* LLVMContext::getConstantInt(const Type* Ty, const APInt& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000065 return ConstantInt::get(Ty, V);
66}
67
Bill Wendling4534d252009-07-01 22:33:26 +000068ConstantInt* LLVMContext::getAllOnesConstantInt(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000069 return ConstantInt::getAllOnesValue(Ty);
70}
71
72
73// ConstantPointerNull accessors.
Bill Wendling4534d252009-07-01 22:33:26 +000074ConstantPointerNull* LLVMContext::getConstantPointerNull(const PointerType* T) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000075 return ConstantPointerNull::get(T);
76}
77
78
79// ConstantStruct accessors.
80Constant* LLVMContext::getConstantStruct(const StructType* T,
Bill Wendling4534d252009-07-01 22:33:26 +000081 const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000082 return ConstantStruct::get(T, V);
83}
84
85Constant* LLVMContext::getConstantStruct(const std::vector<Constant*>& V,
Bill Wendling4534d252009-07-01 22:33:26 +000086 bool Packed) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000087 return ConstantStruct::get(V, Packed);
88}
89
90Constant* LLVMContext::getConstantStruct(Constant* const *Vals,
Bill Wendling4534d252009-07-01 22:33:26 +000091 unsigned NumVals, bool Packed) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000092 return ConstantStruct::get(Vals, NumVals, Packed);
93}
94
95
96// ConstantAggregateZero accessors.
Bill Wendling4534d252009-07-01 22:33:26 +000097ConstantAggregateZero* LLVMContext::getConstantAggregateZero(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000098 return ConstantAggregateZero::get(Ty);
99}
100
101
102// ConstantArray accessors.
103Constant* LLVMContext::getConstantArray(const ArrayType* T,
Bill Wendling4534d252009-07-01 22:33:26 +0000104 const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000105 return ConstantArray::get(T, V);
106}
107
108Constant* LLVMContext::getConstantArray(const ArrayType* T,
109 Constant* const* Vals,
Bill Wendling4534d252009-07-01 22:33:26 +0000110 unsigned NumVals) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000111 return ConstantArray::get(T, Vals, NumVals);
112}
113
114Constant* LLVMContext::getConstantArray(const std::string& Initializer,
Bill Wendling4534d252009-07-01 22:33:26 +0000115 bool AddNull) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000116 return ConstantArray::get(Initializer, AddNull);
117}
118
119
120// ConstantExpr accessors.
121Constant* LLVMContext::getConstantExpr(unsigned Opcode, Constant* C1,
Bill Wendling4534d252009-07-01 22:33:26 +0000122 Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000123 return ConstantExpr::get(Opcode, C1, C2);
124}
125
Bill Wendling4534d252009-07-01 22:33:26 +0000126Constant* LLVMContext::getConstantExprTrunc(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000127 return ConstantExpr::getTrunc(C, Ty);
128}
129
Bill Wendling4534d252009-07-01 22:33:26 +0000130Constant* LLVMContext::getConstantExprSExt(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000131 return ConstantExpr::getSExt(C, Ty);
132}
133
Bill Wendling4534d252009-07-01 22:33:26 +0000134Constant* LLVMContext::getConstantExprZExt(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000135 return ConstantExpr::getZExt(C, Ty);
136}
137
Bill Wendling4534d252009-07-01 22:33:26 +0000138Constant* LLVMContext::getConstantExprFPTrunc(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000139 return ConstantExpr::getFPTrunc(C, Ty);
140}
141
Bill Wendling4534d252009-07-01 22:33:26 +0000142Constant* LLVMContext::getConstantExprFPExtend(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000143 return ConstantExpr::getFPExtend(C, Ty);
144}
145
Bill Wendling4534d252009-07-01 22:33:26 +0000146Constant* LLVMContext::getConstantExprUIToFP(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000147 return ConstantExpr::getUIToFP(C, Ty);
148}
149
Bill Wendling4534d252009-07-01 22:33:26 +0000150Constant* LLVMContext::getConstantExprSIToFP(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000151 return ConstantExpr::getSIToFP(C, Ty);
152}
153
Bill Wendling4534d252009-07-01 22:33:26 +0000154Constant* LLVMContext::getConstantExprFPToUI(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000155 return ConstantExpr::getFPToUI(C, Ty);
156}
157
Bill Wendling4534d252009-07-01 22:33:26 +0000158Constant* LLVMContext::getConstantExprFPToSI(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000159 return ConstantExpr::getFPToSI(C, Ty);
160}
161
Bill Wendling4534d252009-07-01 22:33:26 +0000162Constant* LLVMContext::getConstantExprPtrToInt(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000163 return ConstantExpr::getPtrToInt(C, Ty);
164}
165
Bill Wendling4534d252009-07-01 22:33:26 +0000166Constant* LLVMContext::getConstantExprIntToPtr(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000167 return ConstantExpr::getIntToPtr(C, Ty);
168}
169
Bill Wendling4534d252009-07-01 22:33:26 +0000170Constant* LLVMContext::getConstantExprBitCast(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000171 return ConstantExpr::getBitCast(C, Ty);
172}
173
174Constant* LLVMContext::getConstantExprCast(unsigned ops, Constant* C,
Bill Wendling4534d252009-07-01 22:33:26 +0000175 const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000176 return ConstantExpr::getCast(ops, C, Ty);
177}
178
179Constant* LLVMContext::getConstantExprZExtOrBitCast(Constant* C,
Bill Wendling4534d252009-07-01 22:33:26 +0000180 const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000181 return ConstantExpr::getZExtOrBitCast(C, Ty);
182}
183
184Constant* LLVMContext::getConstantExprSExtOrBitCast(Constant* C,
Bill Wendling4534d252009-07-01 22:33:26 +0000185 const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000186 return ConstantExpr::getSExtOrBitCast(C, Ty);
187}
188
189Constant* LLVMContext::getConstantExprTruncOrBitCast(Constant* C,
Bill Wendling4534d252009-07-01 22:33:26 +0000190 const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000191 return ConstantExpr::getTruncOrBitCast(C, Ty);
192}
193
Bill Wendling4534d252009-07-01 22:33:26 +0000194Constant* LLVMContext::getConstantExprPointerCast(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000195 return ConstantExpr::getPointerCast(C, Ty);
196}
197
198Constant* LLVMContext::getConstantExprIntegerCast(Constant* C, const Type* Ty,
Bill Wendling4534d252009-07-01 22:33:26 +0000199 bool isSigned) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000200 return ConstantExpr::getIntegerCast(C, Ty, isSigned);
201}
202
Bill Wendling4534d252009-07-01 22:33:26 +0000203Constant* LLVMContext::getConstantExprFPCast(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000204 return ConstantExpr::getFPCast(C, Ty);
205}
206
207Constant* LLVMContext::getConstantExprSelect(Constant* C, Constant* V1,
Bill Wendling4534d252009-07-01 22:33:26 +0000208 Constant* V2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000209 return ConstantExpr::getSelect(C, V1, V2);
210}
211
Bill Wendling4534d252009-07-01 22:33:26 +0000212Constant* LLVMContext::getConstantExprAlignOf(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000213 return ConstantExpr::getAlignOf(Ty);
214}
215
216Constant* LLVMContext::getConstantExprCompare(unsigned short pred,
Bill Wendling4534d252009-07-01 22:33:26 +0000217 Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000218 return ConstantExpr::getCompare(pred, C1, C2);
219}
220
Bill Wendling4534d252009-07-01 22:33:26 +0000221Constant* LLVMContext::getConstantExprNeg(Constant* C) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000222 return ConstantExpr::getNeg(C);
223}
224
Bill Wendling4534d252009-07-01 22:33:26 +0000225Constant* LLVMContext::getConstantExprFNeg(Constant* C) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000226 return ConstantExpr::getFNeg(C);
227}
228
Bill Wendling4534d252009-07-01 22:33:26 +0000229Constant* LLVMContext::getConstantExprNot(Constant* C) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000230 return ConstantExpr::getNot(C);
231}
232
Bill Wendling4534d252009-07-01 22:33:26 +0000233Constant* LLVMContext::getConstantExprAdd(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000234 return ConstantExpr::getAdd(C1, C2);
235}
236
Bill Wendling4534d252009-07-01 22:33:26 +0000237Constant* LLVMContext::getConstantExprFAdd(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000238 return ConstantExpr::getFAdd(C1, C2);
239}
240
Bill Wendling4534d252009-07-01 22:33:26 +0000241Constant* LLVMContext::getConstantExprSub(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000242 return ConstantExpr::getSub(C1, C2);
243}
244
Bill Wendling4534d252009-07-01 22:33:26 +0000245Constant* LLVMContext::getConstantExprFSub(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000246 return ConstantExpr::getFSub(C1, C2);
247}
248
Bill Wendling4534d252009-07-01 22:33:26 +0000249Constant* LLVMContext::getConstantExprMul(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000250 return ConstantExpr::getMul(C1, C2);
251}
252
Bill Wendling4534d252009-07-01 22:33:26 +0000253Constant* LLVMContext::getConstantExprFMul(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000254 return ConstantExpr::getFMul(C1, C2);
255}
256
Bill Wendling4534d252009-07-01 22:33:26 +0000257Constant* LLVMContext::getConstantExprUDiv(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000258 return ConstantExpr::getUDiv(C1, C2);
259}
260
Bill Wendling4534d252009-07-01 22:33:26 +0000261Constant* LLVMContext::getConstantExprSDiv(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000262 return ConstantExpr::getSDiv(C1, C2);
263}
264
Bill Wendling4534d252009-07-01 22:33:26 +0000265Constant* LLVMContext::getConstantExprFDiv(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000266 return ConstantExpr::getFDiv(C1, C2);
267}
268
Bill Wendling4534d252009-07-01 22:33:26 +0000269Constant* LLVMContext::getConstantExprURem(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000270 return ConstantExpr::getURem(C1, C2);
271}
272
Bill Wendling4534d252009-07-01 22:33:26 +0000273Constant* LLVMContext::getConstantExprSRem(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000274 return ConstantExpr::getSRem(C1, C2);
275}
276
Bill Wendling4534d252009-07-01 22:33:26 +0000277Constant* LLVMContext::getConstantExprFRem(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000278 return ConstantExpr::getFRem(C1, C2);
279}
280
Bill Wendling4534d252009-07-01 22:33:26 +0000281Constant* LLVMContext::getConstantExprAnd(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000282 return ConstantExpr::getAnd(C1, C2);
283}
284
Bill Wendling4534d252009-07-01 22:33:26 +0000285Constant* LLVMContext::getConstantExprOr(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000286 return ConstantExpr::getOr(C1, C2);
287}
288
Bill Wendling4534d252009-07-01 22:33:26 +0000289Constant* LLVMContext::getConstantExprXor(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000290 return ConstantExpr::getXor(C1, C2);
291}
292
293Constant* LLVMContext::getConstantExprICmp(unsigned short pred, Constant* LHS,
Bill Wendling4534d252009-07-01 22:33:26 +0000294 Constant* RHS) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000295 return ConstantExpr::getICmp(pred, LHS, RHS);
296}
297
298Constant* LLVMContext::getConstantExprFCmp(unsigned short pred, Constant* LHS,
Bill Wendling4534d252009-07-01 22:33:26 +0000299 Constant* RHS) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000300 return ConstantExpr::getFCmp(pred, LHS, RHS);
301}
302
303Constant* LLVMContext::getConstantExprVICmp(unsigned short pred, Constant* LHS,
Bill Wendling4534d252009-07-01 22:33:26 +0000304 Constant* RHS) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000305 return ConstantExpr::getVICmp(pred, LHS, RHS);
306}
307
308Constant* LLVMContext::getConstantExprVFCmp(unsigned short pred, Constant* LHS,
Bill Wendling4534d252009-07-01 22:33:26 +0000309 Constant* RHS) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000310 return ConstantExpr::getVFCmp(pred, LHS, RHS);
311}
312
Bill Wendling4534d252009-07-01 22:33:26 +0000313Constant* LLVMContext::getConstantExprShl(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000314 return ConstantExpr::getShl(C1, C2);
315}
316
Bill Wendling4534d252009-07-01 22:33:26 +0000317Constant* LLVMContext::getConstantExprLShr(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000318 return ConstantExpr::getLShr(C1, C2);
319}
320
Bill Wendling4534d252009-07-01 22:33:26 +0000321Constant* LLVMContext::getConstantExprAShr(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000322 return ConstantExpr::getAShr(C1, C2);
323}
324
325Constant* LLVMContext::getConstantExprGetElementPtr(Constant* C,
326 Constant* const* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000327 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000328 return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx);
329}
330
331Constant* LLVMContext::getConstantExprGetElementPtr(Constant* C,
332 Value* const* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000333 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000334 return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx);
335}
336
337Constant* LLVMContext::getConstantExprExtractElement(Constant* Vec,
Bill Wendling4534d252009-07-01 22:33:26 +0000338 Constant* Idx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000339 return ConstantExpr::getExtractElement(Vec, Idx);
340}
341
342Constant* LLVMContext::getConstantExprInsertElement(Constant* Vec,
343 Constant* Elt,
Bill Wendling4534d252009-07-01 22:33:26 +0000344 Constant* Idx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000345 return ConstantExpr::getInsertElement(Vec, Elt, Idx);
346}
347
348Constant* LLVMContext::getConstantExprShuffleVector(Constant* V1, Constant* V2,
Bill Wendling4534d252009-07-01 22:33:26 +0000349 Constant* Mask) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000350 return ConstantExpr::getShuffleVector(V1, V2, Mask);
351}
352
353Constant* LLVMContext::getConstantExprExtractValue(Constant* Agg,
354 const unsigned* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000355 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000356 return ConstantExpr::getExtractValue(Agg, IdxList, NumIdx);
357}
358
359Constant* LLVMContext::getConstantExprInsertValue(Constant* Agg, Constant* Val,
360 const unsigned* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000361 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000362 return ConstantExpr::getInsertValue(Agg, Val, IdxList, NumIdx);
363}
364
Bill Wendling4534d252009-07-01 22:33:26 +0000365Constant* LLVMContext::getZeroValueForNegation(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000366 return ConstantExpr::getZeroValueForNegationExpr(Ty);
367}
368
369
370// ConstantFP accessors.
Bill Wendling4534d252009-07-01 22:33:26 +0000371ConstantFP* LLVMContext::getConstantFP(const APFloat& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000372 return ConstantFP::get(V);
373}
374
Bill Wendling4534d252009-07-01 22:33:26 +0000375Constant* LLVMContext::getConstantFP(const Type* Ty, double V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000376 return ConstantFP::get(Ty, V);
377}
378
Bill Wendling4534d252009-07-01 22:33:26 +0000379ConstantFP* LLVMContext::getConstantFPNegativeZero(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000380 return ConstantFP::getNegativeZero(Ty);
381}
382
383
384// ConstantVector accessors.
385Constant* LLVMContext::getConstantVector(const VectorType* T,
Bill Wendling4534d252009-07-01 22:33:26 +0000386 const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000387 return ConstantVector::get(T, V);
388}
389
Bill Wendling4534d252009-07-01 22:33:26 +0000390Constant* LLVMContext::getConstantVector(const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000391 return ConstantVector::get(V);
392}
393
394Constant* LLVMContext::getConstantVector(Constant* const* Vals,
Bill Wendling4534d252009-07-01 22:33:26 +0000395 unsigned NumVals) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000396 return ConstantVector::get(Vals, NumVals);
397}
398
Bill Wendling4534d252009-07-01 22:33:26 +0000399ConstantVector* LLVMContext::getConstantVectorAllOnes(const VectorType* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000400 return ConstantVector::getAllOnesValue(Ty);
401}
Owen Andersona8560212009-06-30 17:50:28 +0000402
403// FunctionType accessors
404FunctionType* LLVMContext::getFunctionType(const Type* Result,
405 const std::vector<const Type*>& Params,
Bill Wendling4534d252009-07-01 22:33:26 +0000406 bool isVarArg) {
Owen Andersona8560212009-06-30 17:50:28 +0000407 return FunctionType::get(Result, Params, isVarArg);
408}
409
410// IntegerType accessors
Bill Wendling4534d252009-07-01 22:33:26 +0000411const IntegerType* LLVMContext::getIntegerType(unsigned NumBits) {
Owen Andersona8560212009-06-30 17:50:28 +0000412 return IntegerType::get(NumBits);
413}
414
415// OpaqueType accessors
Bill Wendling4534d252009-07-01 22:33:26 +0000416OpaqueType* LLVMContext::getOpaqueType() {
Owen Andersona8560212009-06-30 17:50:28 +0000417 return OpaqueType::get();
418}
419
420// StructType accessors
Owen Anderson7d128072009-07-01 23:56:45 +0000421StructType* LLVMContext::getStructType(bool isPacked) {
422 return StructType::get(isPacked);
423}
424
Owen Andersona8560212009-06-30 17:50:28 +0000425StructType* LLVMContext::getStructType(const std::vector<const Type*>& Params,
Bill Wendling4534d252009-07-01 22:33:26 +0000426 bool isPacked) {
Owen Andersona8560212009-06-30 17:50:28 +0000427 return StructType::get(Params, isPacked);
428}
429
430// ArrayType accessors
431ArrayType* LLVMContext::getArrayType(const Type* ElementType,
Bill Wendling4534d252009-07-01 22:33:26 +0000432 uint64_t NumElements) {
Owen Andersona8560212009-06-30 17:50:28 +0000433 return ArrayType::get(ElementType, NumElements);
434}
435
436// PointerType accessors
437PointerType* LLVMContext::getPointerType(const Type* ElementType,
Bill Wendling4534d252009-07-01 22:33:26 +0000438 unsigned AddressSpace) {
Owen Andersona8560212009-06-30 17:50:28 +0000439 return PointerType::get(ElementType, AddressSpace);
440}
441
Owen Anderson7d128072009-07-01 23:56:45 +0000442PointerType* LLVMContext::getPointerTypeUnqual(const Type* ElementType) {
Owen Andersona8560212009-06-30 17:50:28 +0000443 return PointerType::getUnqual(ElementType);
444}
445
446// VectorType accessors
447VectorType* LLVMContext::getVectorType(const Type* ElementType,
Bill Wendling4534d252009-07-01 22:33:26 +0000448 unsigned NumElements) {
Owen Andersona8560212009-06-30 17:50:28 +0000449 return VectorType::get(ElementType, NumElements);
450}
451
Bill Wendling4534d252009-07-01 22:33:26 +0000452VectorType* LLVMContext::getVectorTypeInteger(const VectorType* VTy) {
Owen Andersona8560212009-06-30 17:50:28 +0000453 return VectorType::getInteger(VTy);
454}
455
Bill Wendling4534d252009-07-01 22:33:26 +0000456VectorType* LLVMContext::getVectorTypeExtendedElement(const VectorType* VTy) {
Owen Andersona8560212009-06-30 17:50:28 +0000457 return VectorType::getExtendedElementVectorType(VTy);
458}
459
Bill Wendling4534d252009-07-01 22:33:26 +0000460VectorType* LLVMContext::getVectorTypeTruncatedElement(const VectorType* VTy) {
Owen Andersona8560212009-06-30 17:50:28 +0000461 return VectorType::getTruncatedElementVectorType(VTy);
462}