blob: 422798d220f9e41c687126d385e444763b1016da [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 Andersone792c902009-07-02 17:12:48 +000018#include "llvm/MDNode.h"
Owen Anderson1938fb12009-06-30 23:39:59 +000019#include "llvm/Support/ManagedStatic.h"
Owen Anderson8e66e0b2009-06-30 00:48:55 +000020#include "LLVMContextImpl.h"
21
22using namespace llvm;
23
Owen Anderson1938fb12009-06-30 23:39:59 +000024static ManagedStatic<LLVMContext> GlobalContext;
25
Owen Anderson2a154432009-07-01 23:13:44 +000026LLVMContext& llvm::getGlobalContext() {
Owen Anderson1cf085d2009-07-01 21:22:36 +000027 return *GlobalContext;
Owen Anderson1938fb12009-06-30 23:39:59 +000028}
29
Owen Anderson8e66e0b2009-06-30 00:48:55 +000030LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl()) { }
31LLVMContext::~LLVMContext() { delete pImpl; }
32
Owen Anderson7d128072009-07-01 23:56:45 +000033// Constant accessors
34Constant* LLVMContext::getNullValue(const Type* Ty) {
35 return Constant::getNullValue(Ty);
36}
37
38Constant* LLVMContext::getAllOnesValue(const Type* Ty) {
39 return Constant::getAllOnesValue(Ty);
40}
41
Owen Andersonf85afb22009-07-02 16:51:51 +000042// UndefValue accessors.
43UndefValue* LLVMContext::getUndef(const Type* Ty) {
44 return UndefValue::get(Ty);
45}
46
Owen Anderson8e66e0b2009-06-30 00:48:55 +000047// ConstantInt accessors.
Bill Wendling4534d252009-07-01 22:33:26 +000048ConstantInt* LLVMContext::getConstantIntTrue() {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000049 return ConstantInt::getTrue();
50}
51
Bill Wendling4534d252009-07-01 22:33:26 +000052ConstantInt* LLVMContext::getConstantIntFalse() {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000053 return ConstantInt::getFalse();
54}
55
Owen Anderson39a7aed2009-07-02 23:58:19 +000056Constant* LLVMContext::getConstantInt(const Type* Ty, uint64_t V,
57 bool isSigned) {
58 return ConstantInt::get(Ty, V, isSigned);
59}
60
61
Owen Anderson8e66e0b2009-06-30 00:48:55 +000062ConstantInt* LLVMContext::getConstantInt(const IntegerType* Ty, uint64_t V,
Bill Wendling4534d252009-07-01 22:33:26 +000063 bool isSigned) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000064 return ConstantInt::get(Ty, V, isSigned);
65}
66
67ConstantInt* LLVMContext::getConstantIntSigned(const IntegerType* Ty,
Bill Wendling4534d252009-07-01 22:33:26 +000068 int64_t V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000069 return ConstantInt::getSigned(Ty, V);
70}
71
Bill Wendling4534d252009-07-01 22:33:26 +000072ConstantInt* LLVMContext::getConstantInt(const APInt& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000073 return ConstantInt::get(V);
74}
75
Bill Wendling4534d252009-07-01 22:33:26 +000076Constant* LLVMContext::getConstantInt(const Type* Ty, const APInt& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000077 return ConstantInt::get(Ty, V);
78}
79
Owen Anderson39a7aed2009-07-02 23:58:19 +000080ConstantInt* LLVMContext::getConstantIntAllOnesValue(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000081 return ConstantInt::getAllOnesValue(Ty);
82}
83
84
85// ConstantPointerNull accessors.
Bill Wendling4534d252009-07-01 22:33:26 +000086ConstantPointerNull* LLVMContext::getConstantPointerNull(const PointerType* T) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000087 return ConstantPointerNull::get(T);
88}
89
90
91// ConstantStruct accessors.
92Constant* LLVMContext::getConstantStruct(const StructType* T,
Bill Wendling4534d252009-07-01 22:33:26 +000093 const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000094 return ConstantStruct::get(T, V);
95}
96
97Constant* LLVMContext::getConstantStruct(const std::vector<Constant*>& V,
Bill Wendling4534d252009-07-01 22:33:26 +000098 bool Packed) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +000099 return ConstantStruct::get(V, Packed);
100}
101
102Constant* LLVMContext::getConstantStruct(Constant* const *Vals,
Bill Wendling4534d252009-07-01 22:33:26 +0000103 unsigned NumVals, bool Packed) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000104 return ConstantStruct::get(Vals, NumVals, Packed);
105}
106
107
108// ConstantAggregateZero accessors.
Bill Wendling4534d252009-07-01 22:33:26 +0000109ConstantAggregateZero* LLVMContext::getConstantAggregateZero(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000110 return ConstantAggregateZero::get(Ty);
111}
112
113
114// ConstantArray accessors.
115Constant* LLVMContext::getConstantArray(const ArrayType* T,
Bill Wendling4534d252009-07-01 22:33:26 +0000116 const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000117 return ConstantArray::get(T, V);
118}
119
120Constant* LLVMContext::getConstantArray(const ArrayType* T,
121 Constant* const* Vals,
Bill Wendling4534d252009-07-01 22:33:26 +0000122 unsigned NumVals) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000123 return ConstantArray::get(T, Vals, NumVals);
124}
125
126Constant* LLVMContext::getConstantArray(const std::string& Initializer,
Bill Wendling4534d252009-07-01 22:33:26 +0000127 bool AddNull) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000128 return ConstantArray::get(Initializer, AddNull);
129}
130
131
132// ConstantExpr accessors.
133Constant* LLVMContext::getConstantExpr(unsigned Opcode, Constant* C1,
Bill Wendling4534d252009-07-01 22:33:26 +0000134 Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000135 return ConstantExpr::get(Opcode, C1, C2);
136}
137
Bill Wendling4534d252009-07-01 22:33:26 +0000138Constant* LLVMContext::getConstantExprTrunc(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000139 return ConstantExpr::getTrunc(C, Ty);
140}
141
Bill Wendling4534d252009-07-01 22:33:26 +0000142Constant* LLVMContext::getConstantExprSExt(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000143 return ConstantExpr::getSExt(C, Ty);
144}
145
Bill Wendling4534d252009-07-01 22:33:26 +0000146Constant* LLVMContext::getConstantExprZExt(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000147 return ConstantExpr::getZExt(C, Ty);
148}
149
Bill Wendling4534d252009-07-01 22:33:26 +0000150Constant* LLVMContext::getConstantExprFPTrunc(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000151 return ConstantExpr::getFPTrunc(C, Ty);
152}
153
Bill Wendling4534d252009-07-01 22:33:26 +0000154Constant* LLVMContext::getConstantExprFPExtend(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000155 return ConstantExpr::getFPExtend(C, Ty);
156}
157
Bill Wendling4534d252009-07-01 22:33:26 +0000158Constant* LLVMContext::getConstantExprUIToFP(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000159 return ConstantExpr::getUIToFP(C, Ty);
160}
161
Bill Wendling4534d252009-07-01 22:33:26 +0000162Constant* LLVMContext::getConstantExprSIToFP(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000163 return ConstantExpr::getSIToFP(C, Ty);
164}
165
Bill Wendling4534d252009-07-01 22:33:26 +0000166Constant* LLVMContext::getConstantExprFPToUI(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000167 return ConstantExpr::getFPToUI(C, Ty);
168}
169
Bill Wendling4534d252009-07-01 22:33:26 +0000170Constant* LLVMContext::getConstantExprFPToSI(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000171 return ConstantExpr::getFPToSI(C, Ty);
172}
173
Bill Wendling4534d252009-07-01 22:33:26 +0000174Constant* LLVMContext::getConstantExprPtrToInt(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000175 return ConstantExpr::getPtrToInt(C, Ty);
176}
177
Bill Wendling4534d252009-07-01 22:33:26 +0000178Constant* LLVMContext::getConstantExprIntToPtr(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000179 return ConstantExpr::getIntToPtr(C, Ty);
180}
181
Bill Wendling4534d252009-07-01 22:33:26 +0000182Constant* LLVMContext::getConstantExprBitCast(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000183 return ConstantExpr::getBitCast(C, Ty);
184}
185
186Constant* LLVMContext::getConstantExprCast(unsigned ops, Constant* C,
Bill Wendling4534d252009-07-01 22:33:26 +0000187 const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000188 return ConstantExpr::getCast(ops, C, Ty);
189}
190
191Constant* LLVMContext::getConstantExprZExtOrBitCast(Constant* C,
Bill Wendling4534d252009-07-01 22:33:26 +0000192 const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000193 return ConstantExpr::getZExtOrBitCast(C, Ty);
194}
195
196Constant* LLVMContext::getConstantExprSExtOrBitCast(Constant* C,
Bill Wendling4534d252009-07-01 22:33:26 +0000197 const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000198 return ConstantExpr::getSExtOrBitCast(C, Ty);
199}
200
201Constant* LLVMContext::getConstantExprTruncOrBitCast(Constant* C,
Bill Wendling4534d252009-07-01 22:33:26 +0000202 const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000203 return ConstantExpr::getTruncOrBitCast(C, Ty);
204}
205
Bill Wendling4534d252009-07-01 22:33:26 +0000206Constant* LLVMContext::getConstantExprPointerCast(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000207 return ConstantExpr::getPointerCast(C, Ty);
208}
209
210Constant* LLVMContext::getConstantExprIntegerCast(Constant* C, const Type* Ty,
Bill Wendling4534d252009-07-01 22:33:26 +0000211 bool isSigned) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000212 return ConstantExpr::getIntegerCast(C, Ty, isSigned);
213}
214
Bill Wendling4534d252009-07-01 22:33:26 +0000215Constant* LLVMContext::getConstantExprFPCast(Constant* C, const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000216 return ConstantExpr::getFPCast(C, Ty);
217}
218
219Constant* LLVMContext::getConstantExprSelect(Constant* C, Constant* V1,
Bill Wendling4534d252009-07-01 22:33:26 +0000220 Constant* V2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000221 return ConstantExpr::getSelect(C, V1, V2);
222}
223
Bill Wendling4534d252009-07-01 22:33:26 +0000224Constant* LLVMContext::getConstantExprAlignOf(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000225 return ConstantExpr::getAlignOf(Ty);
226}
227
228Constant* LLVMContext::getConstantExprCompare(unsigned short pred,
Bill Wendling4534d252009-07-01 22:33:26 +0000229 Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000230 return ConstantExpr::getCompare(pred, C1, C2);
231}
232
Bill Wendling4534d252009-07-01 22:33:26 +0000233Constant* LLVMContext::getConstantExprNeg(Constant* C) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000234 return ConstantExpr::getNeg(C);
235}
236
Bill Wendling4534d252009-07-01 22:33:26 +0000237Constant* LLVMContext::getConstantExprFNeg(Constant* C) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000238 return ConstantExpr::getFNeg(C);
239}
240
Bill Wendling4534d252009-07-01 22:33:26 +0000241Constant* LLVMContext::getConstantExprNot(Constant* C) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000242 return ConstantExpr::getNot(C);
243}
244
Bill Wendling4534d252009-07-01 22:33:26 +0000245Constant* LLVMContext::getConstantExprAdd(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000246 return ConstantExpr::getAdd(C1, C2);
247}
248
Bill Wendling4534d252009-07-01 22:33:26 +0000249Constant* LLVMContext::getConstantExprFAdd(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000250 return ConstantExpr::getFAdd(C1, C2);
251}
252
Bill Wendling4534d252009-07-01 22:33:26 +0000253Constant* LLVMContext::getConstantExprSub(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000254 return ConstantExpr::getSub(C1, C2);
255}
256
Bill Wendling4534d252009-07-01 22:33:26 +0000257Constant* LLVMContext::getConstantExprFSub(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000258 return ConstantExpr::getFSub(C1, C2);
259}
260
Bill Wendling4534d252009-07-01 22:33:26 +0000261Constant* LLVMContext::getConstantExprMul(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000262 return ConstantExpr::getMul(C1, C2);
263}
264
Bill Wendling4534d252009-07-01 22:33:26 +0000265Constant* LLVMContext::getConstantExprFMul(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000266 return ConstantExpr::getFMul(C1, C2);
267}
268
Bill Wendling4534d252009-07-01 22:33:26 +0000269Constant* LLVMContext::getConstantExprUDiv(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000270 return ConstantExpr::getUDiv(C1, C2);
271}
272
Bill Wendling4534d252009-07-01 22:33:26 +0000273Constant* LLVMContext::getConstantExprSDiv(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000274 return ConstantExpr::getSDiv(C1, C2);
275}
276
Bill Wendling4534d252009-07-01 22:33:26 +0000277Constant* LLVMContext::getConstantExprFDiv(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000278 return ConstantExpr::getFDiv(C1, C2);
279}
280
Bill Wendling4534d252009-07-01 22:33:26 +0000281Constant* LLVMContext::getConstantExprURem(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000282 return ConstantExpr::getURem(C1, C2);
283}
284
Bill Wendling4534d252009-07-01 22:33:26 +0000285Constant* LLVMContext::getConstantExprSRem(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000286 return ConstantExpr::getSRem(C1, C2);
287}
288
Bill Wendling4534d252009-07-01 22:33:26 +0000289Constant* LLVMContext::getConstantExprFRem(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000290 return ConstantExpr::getFRem(C1, C2);
291}
292
Bill Wendling4534d252009-07-01 22:33:26 +0000293Constant* LLVMContext::getConstantExprAnd(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000294 return ConstantExpr::getAnd(C1, C2);
295}
296
Bill Wendling4534d252009-07-01 22:33:26 +0000297Constant* LLVMContext::getConstantExprOr(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000298 return ConstantExpr::getOr(C1, C2);
299}
300
Bill Wendling4534d252009-07-01 22:33:26 +0000301Constant* LLVMContext::getConstantExprXor(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000302 return ConstantExpr::getXor(C1, C2);
303}
304
305Constant* LLVMContext::getConstantExprICmp(unsigned short pred, Constant* LHS,
Bill Wendling4534d252009-07-01 22:33:26 +0000306 Constant* RHS) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000307 return ConstantExpr::getICmp(pred, LHS, RHS);
308}
309
310Constant* LLVMContext::getConstantExprFCmp(unsigned short pred, Constant* LHS,
Bill Wendling4534d252009-07-01 22:33:26 +0000311 Constant* RHS) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000312 return ConstantExpr::getFCmp(pred, LHS, RHS);
313}
314
Bill Wendling4534d252009-07-01 22:33:26 +0000315Constant* LLVMContext::getConstantExprShl(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000316 return ConstantExpr::getShl(C1, C2);
317}
318
Bill Wendling4534d252009-07-01 22:33:26 +0000319Constant* LLVMContext::getConstantExprLShr(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000320 return ConstantExpr::getLShr(C1, C2);
321}
322
Bill Wendling4534d252009-07-01 22:33:26 +0000323Constant* LLVMContext::getConstantExprAShr(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000324 return ConstantExpr::getAShr(C1, C2);
325}
326
327Constant* LLVMContext::getConstantExprGetElementPtr(Constant* C,
328 Constant* const* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000329 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000330 return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx);
331}
332
333Constant* LLVMContext::getConstantExprGetElementPtr(Constant* C,
334 Value* const* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000335 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000336 return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx);
337}
338
339Constant* LLVMContext::getConstantExprExtractElement(Constant* Vec,
Bill Wendling4534d252009-07-01 22:33:26 +0000340 Constant* Idx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000341 return ConstantExpr::getExtractElement(Vec, Idx);
342}
343
344Constant* LLVMContext::getConstantExprInsertElement(Constant* Vec,
345 Constant* Elt,
Bill Wendling4534d252009-07-01 22:33:26 +0000346 Constant* Idx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000347 return ConstantExpr::getInsertElement(Vec, Elt, Idx);
348}
349
350Constant* LLVMContext::getConstantExprShuffleVector(Constant* V1, Constant* V2,
Bill Wendling4534d252009-07-01 22:33:26 +0000351 Constant* Mask) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000352 return ConstantExpr::getShuffleVector(V1, V2, Mask);
353}
354
355Constant* LLVMContext::getConstantExprExtractValue(Constant* Agg,
356 const unsigned* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000357 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000358 return ConstantExpr::getExtractValue(Agg, IdxList, NumIdx);
359}
360
361Constant* LLVMContext::getConstantExprInsertValue(Constant* Agg, Constant* Val,
362 const unsigned* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000363 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000364 return ConstantExpr::getInsertValue(Agg, Val, IdxList, NumIdx);
365}
366
Owen Andersone70b6372009-07-05 22:41:43 +0000367Constant* LLVMContext::getConstantExprSizeOf(const Type* Ty) {
368 return ConstantExpr::getSizeOf(Ty);
369}
370
Bill Wendling4534d252009-07-01 22:33:26 +0000371Constant* LLVMContext::getZeroValueForNegation(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000372 return ConstantExpr::getZeroValueForNegationExpr(Ty);
373}
374
375
376// ConstantFP accessors.
Bill Wendling4534d252009-07-01 22:33:26 +0000377ConstantFP* LLVMContext::getConstantFP(const APFloat& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000378 return ConstantFP::get(V);
379}
380
Bill Wendling4534d252009-07-01 22:33:26 +0000381Constant* LLVMContext::getConstantFP(const Type* Ty, double V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000382 return ConstantFP::get(Ty, V);
383}
384
Bill Wendling4534d252009-07-01 22:33:26 +0000385ConstantFP* LLVMContext::getConstantFPNegativeZero(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000386 return ConstantFP::getNegativeZero(Ty);
387}
388
389
390// ConstantVector accessors.
391Constant* LLVMContext::getConstantVector(const VectorType* T,
Bill Wendling4534d252009-07-01 22:33:26 +0000392 const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000393 return ConstantVector::get(T, V);
394}
395
Bill Wendling4534d252009-07-01 22:33:26 +0000396Constant* LLVMContext::getConstantVector(const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000397 return ConstantVector::get(V);
398}
399
400Constant* LLVMContext::getConstantVector(Constant* const* Vals,
Bill Wendling4534d252009-07-01 22:33:26 +0000401 unsigned NumVals) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000402 return ConstantVector::get(Vals, NumVals);
403}
404
Owen Anderson340288c2009-07-03 19:42:02 +0000405ConstantVector* LLVMContext::getConstantVectorAllOnesValue(
406 const VectorType* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000407 return ConstantVector::getAllOnesValue(Ty);
408}
Owen Andersona8560212009-06-30 17:50:28 +0000409
Owen Andersone792c902009-07-02 17:12:48 +0000410// MDNode accessors
411MDNode* LLVMContext::getMDNode(Value* const* Vals, unsigned NumVals) {
412 return MDNode::get(Vals, NumVals);
413}
414
Owen Andersonfea7ae82009-07-02 17:19:47 +0000415// MDString accessors
416MDString* LLVMContext::getMDString(const char *StrBegin, const char *StrEnd) {
417 return MDString::get(StrBegin, StrEnd);
418}
419
420MDString* LLVMContext::getMDString(const std::string &Str) {
421 return MDString::get(Str);
422}
423
Owen Andersona8560212009-06-30 17:50:28 +0000424// FunctionType accessors
Owen Andersone70b6372009-07-05 22:41:43 +0000425FunctionType* LLVMContext::getFunctionType(const Type* Result, bool isVarArg) {
426 return FunctionType::get(Result, isVarArg);
427}
428
Owen Andersona8560212009-06-30 17:50:28 +0000429FunctionType* LLVMContext::getFunctionType(const Type* Result,
430 const std::vector<const Type*>& Params,
Bill Wendling4534d252009-07-01 22:33:26 +0000431 bool isVarArg) {
Owen Andersona8560212009-06-30 17:50:28 +0000432 return FunctionType::get(Result, Params, isVarArg);
433}
434
435// IntegerType accessors
Bill Wendling4534d252009-07-01 22:33:26 +0000436const IntegerType* LLVMContext::getIntegerType(unsigned NumBits) {
Owen Andersona8560212009-06-30 17:50:28 +0000437 return IntegerType::get(NumBits);
438}
439
440// OpaqueType accessors
Bill Wendling4534d252009-07-01 22:33:26 +0000441OpaqueType* LLVMContext::getOpaqueType() {
Owen Andersona8560212009-06-30 17:50:28 +0000442 return OpaqueType::get();
443}
444
445// StructType accessors
Owen Anderson7d128072009-07-01 23:56:45 +0000446StructType* LLVMContext::getStructType(bool isPacked) {
447 return StructType::get(isPacked);
448}
449
Owen Andersona8560212009-06-30 17:50:28 +0000450StructType* LLVMContext::getStructType(const std::vector<const Type*>& Params,
Bill Wendling4534d252009-07-01 22:33:26 +0000451 bool isPacked) {
Owen Andersona8560212009-06-30 17:50:28 +0000452 return StructType::get(Params, isPacked);
453}
454
455// ArrayType accessors
456ArrayType* LLVMContext::getArrayType(const Type* ElementType,
Bill Wendling4534d252009-07-01 22:33:26 +0000457 uint64_t NumElements) {
Owen Andersona8560212009-06-30 17:50:28 +0000458 return ArrayType::get(ElementType, NumElements);
459}
460
461// PointerType accessors
462PointerType* LLVMContext::getPointerType(const Type* ElementType,
Bill Wendling4534d252009-07-01 22:33:26 +0000463 unsigned AddressSpace) {
Owen Andersona8560212009-06-30 17:50:28 +0000464 return PointerType::get(ElementType, AddressSpace);
465}
466
Owen Anderson7d128072009-07-01 23:56:45 +0000467PointerType* LLVMContext::getPointerTypeUnqual(const Type* ElementType) {
Owen Andersona8560212009-06-30 17:50:28 +0000468 return PointerType::getUnqual(ElementType);
469}
470
471// VectorType accessors
472VectorType* LLVMContext::getVectorType(const Type* ElementType,
Bill Wendling4534d252009-07-01 22:33:26 +0000473 unsigned NumElements) {
Owen Andersona8560212009-06-30 17:50:28 +0000474 return VectorType::get(ElementType, NumElements);
475}
476
Bill Wendling4534d252009-07-01 22:33:26 +0000477VectorType* LLVMContext::getVectorTypeInteger(const VectorType* VTy) {
Owen Andersona8560212009-06-30 17:50:28 +0000478 return VectorType::getInteger(VTy);
479}
480
Bill Wendling4534d252009-07-01 22:33:26 +0000481VectorType* LLVMContext::getVectorTypeExtendedElement(const VectorType* VTy) {
Owen Andersona8560212009-06-30 17:50:28 +0000482 return VectorType::getExtendedElementVectorType(VTy);
483}
484
Bill Wendling4534d252009-07-01 22:33:26 +0000485VectorType* LLVMContext::getVectorTypeTruncatedElement(const VectorType* VTy) {
Owen Andersona8560212009-06-30 17:50:28 +0000486 return VectorType::getTruncatedElementVectorType(VTy);
487}