blob: fe2cb7bf196fee1ae489dd0b39b393544f7a6011 [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
315Constant* LLVMContext::getConstantExprVICmp(unsigned short pred, Constant* LHS,
Bill Wendling4534d252009-07-01 22:33:26 +0000316 Constant* RHS) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000317 return ConstantExpr::getVICmp(pred, LHS, RHS);
318}
319
320Constant* LLVMContext::getConstantExprVFCmp(unsigned short pred, Constant* LHS,
Bill Wendling4534d252009-07-01 22:33:26 +0000321 Constant* RHS) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000322 return ConstantExpr::getVFCmp(pred, LHS, RHS);
323}
324
Bill Wendling4534d252009-07-01 22:33:26 +0000325Constant* LLVMContext::getConstantExprShl(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000326 return ConstantExpr::getShl(C1, C2);
327}
328
Bill Wendling4534d252009-07-01 22:33:26 +0000329Constant* LLVMContext::getConstantExprLShr(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000330 return ConstantExpr::getLShr(C1, C2);
331}
332
Bill Wendling4534d252009-07-01 22:33:26 +0000333Constant* LLVMContext::getConstantExprAShr(Constant* C1, Constant* C2) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000334 return ConstantExpr::getAShr(C1, C2);
335}
336
337Constant* LLVMContext::getConstantExprGetElementPtr(Constant* C,
338 Constant* const* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000339 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000340 return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx);
341}
342
343Constant* LLVMContext::getConstantExprGetElementPtr(Constant* C,
344 Value* const* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000345 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000346 return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx);
347}
348
349Constant* LLVMContext::getConstantExprExtractElement(Constant* Vec,
Bill Wendling4534d252009-07-01 22:33:26 +0000350 Constant* Idx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000351 return ConstantExpr::getExtractElement(Vec, Idx);
352}
353
354Constant* LLVMContext::getConstantExprInsertElement(Constant* Vec,
355 Constant* Elt,
Bill Wendling4534d252009-07-01 22:33:26 +0000356 Constant* Idx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000357 return ConstantExpr::getInsertElement(Vec, Elt, Idx);
358}
359
360Constant* LLVMContext::getConstantExprShuffleVector(Constant* V1, Constant* V2,
Bill Wendling4534d252009-07-01 22:33:26 +0000361 Constant* Mask) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000362 return ConstantExpr::getShuffleVector(V1, V2, Mask);
363}
364
365Constant* LLVMContext::getConstantExprExtractValue(Constant* Agg,
366 const unsigned* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000367 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000368 return ConstantExpr::getExtractValue(Agg, IdxList, NumIdx);
369}
370
371Constant* LLVMContext::getConstantExprInsertValue(Constant* Agg, Constant* Val,
372 const unsigned* IdxList,
Bill Wendling4534d252009-07-01 22:33:26 +0000373 unsigned NumIdx) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000374 return ConstantExpr::getInsertValue(Agg, Val, IdxList, NumIdx);
375}
376
Bill Wendling4534d252009-07-01 22:33:26 +0000377Constant* LLVMContext::getZeroValueForNegation(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000378 return ConstantExpr::getZeroValueForNegationExpr(Ty);
379}
380
381
382// ConstantFP accessors.
Bill Wendling4534d252009-07-01 22:33:26 +0000383ConstantFP* LLVMContext::getConstantFP(const APFloat& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000384 return ConstantFP::get(V);
385}
386
Bill Wendling4534d252009-07-01 22:33:26 +0000387Constant* LLVMContext::getConstantFP(const Type* Ty, double V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000388 return ConstantFP::get(Ty, V);
389}
390
Bill Wendling4534d252009-07-01 22:33:26 +0000391ConstantFP* LLVMContext::getConstantFPNegativeZero(const Type* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000392 return ConstantFP::getNegativeZero(Ty);
393}
394
395
396// ConstantVector accessors.
397Constant* LLVMContext::getConstantVector(const VectorType* T,
Bill Wendling4534d252009-07-01 22:33:26 +0000398 const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000399 return ConstantVector::get(T, V);
400}
401
Bill Wendling4534d252009-07-01 22:33:26 +0000402Constant* LLVMContext::getConstantVector(const std::vector<Constant*>& V) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000403 return ConstantVector::get(V);
404}
405
406Constant* LLVMContext::getConstantVector(Constant* const* Vals,
Bill Wendling4534d252009-07-01 22:33:26 +0000407 unsigned NumVals) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000408 return ConstantVector::get(Vals, NumVals);
409}
410
Owen Anderson340288c2009-07-03 19:42:02 +0000411ConstantVector* LLVMContext::getConstantVectorAllOnesValue(
412 const VectorType* Ty) {
Owen Anderson8e66e0b2009-06-30 00:48:55 +0000413 return ConstantVector::getAllOnesValue(Ty);
414}
Owen Andersona8560212009-06-30 17:50:28 +0000415
Owen Andersone792c902009-07-02 17:12:48 +0000416// MDNode accessors
417MDNode* LLVMContext::getMDNode(Value* const* Vals, unsigned NumVals) {
418 return MDNode::get(Vals, NumVals);
419}
420
Owen Andersonfea7ae82009-07-02 17:19:47 +0000421// MDString accessors
422MDString* LLVMContext::getMDString(const char *StrBegin, const char *StrEnd) {
423 return MDString::get(StrBegin, StrEnd);
424}
425
426MDString* LLVMContext::getMDString(const std::string &Str) {
427 return MDString::get(Str);
428}
429
Owen Andersona8560212009-06-30 17:50:28 +0000430// FunctionType accessors
431FunctionType* LLVMContext::getFunctionType(const Type* Result,
432 const std::vector<const Type*>& Params,
Bill Wendling4534d252009-07-01 22:33:26 +0000433 bool isVarArg) {
Owen Andersona8560212009-06-30 17:50:28 +0000434 return FunctionType::get(Result, Params, isVarArg);
435}
436
437// IntegerType accessors
Bill Wendling4534d252009-07-01 22:33:26 +0000438const IntegerType* LLVMContext::getIntegerType(unsigned NumBits) {
Owen Andersona8560212009-06-30 17:50:28 +0000439 return IntegerType::get(NumBits);
440}
441
442// OpaqueType accessors
Bill Wendling4534d252009-07-01 22:33:26 +0000443OpaqueType* LLVMContext::getOpaqueType() {
Owen Andersona8560212009-06-30 17:50:28 +0000444 return OpaqueType::get();
445}
446
447// StructType accessors
Owen Anderson7d128072009-07-01 23:56:45 +0000448StructType* LLVMContext::getStructType(bool isPacked) {
449 return StructType::get(isPacked);
450}
451
Owen Andersona8560212009-06-30 17:50:28 +0000452StructType* LLVMContext::getStructType(const std::vector<const Type*>& Params,
Bill Wendling4534d252009-07-01 22:33:26 +0000453 bool isPacked) {
Owen Andersona8560212009-06-30 17:50:28 +0000454 return StructType::get(Params, isPacked);
455}
456
457// ArrayType accessors
458ArrayType* LLVMContext::getArrayType(const Type* ElementType,
Bill Wendling4534d252009-07-01 22:33:26 +0000459 uint64_t NumElements) {
Owen Andersona8560212009-06-30 17:50:28 +0000460 return ArrayType::get(ElementType, NumElements);
461}
462
463// PointerType accessors
464PointerType* LLVMContext::getPointerType(const Type* ElementType,
Bill Wendling4534d252009-07-01 22:33:26 +0000465 unsigned AddressSpace) {
Owen Andersona8560212009-06-30 17:50:28 +0000466 return PointerType::get(ElementType, AddressSpace);
467}
468
Owen Anderson7d128072009-07-01 23:56:45 +0000469PointerType* LLVMContext::getPointerTypeUnqual(const Type* ElementType) {
Owen Andersona8560212009-06-30 17:50:28 +0000470 return PointerType::getUnqual(ElementType);
471}
472
473// VectorType accessors
474VectorType* LLVMContext::getVectorType(const Type* ElementType,
Bill Wendling4534d252009-07-01 22:33:26 +0000475 unsigned NumElements) {
Owen Andersona8560212009-06-30 17:50:28 +0000476 return VectorType::get(ElementType, NumElements);
477}
478
Bill Wendling4534d252009-07-01 22:33:26 +0000479VectorType* LLVMContext::getVectorTypeInteger(const VectorType* VTy) {
Owen Andersona8560212009-06-30 17:50:28 +0000480 return VectorType::getInteger(VTy);
481}
482
Bill Wendling4534d252009-07-01 22:33:26 +0000483VectorType* LLVMContext::getVectorTypeExtendedElement(const VectorType* VTy) {
Owen Andersona8560212009-06-30 17:50:28 +0000484 return VectorType::getExtendedElementVectorType(VTy);
485}
486
Bill Wendling4534d252009-07-01 22:33:26 +0000487VectorType* LLVMContext::getVectorTypeTruncatedElement(const VectorType* VTy) {
Owen Andersona8560212009-06-30 17:50:28 +0000488 return VectorType::getTruncatedElementVectorType(VTy);
489}