18b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//===-- Core.cpp ----------------------------------------------------------===//
28b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
38b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//                     The LLVM Compiler Infrastructure
48b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
78b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
88b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//===----------------------------------------------------------------------===//
98b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
10b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson// This file implements the common infrastructure (including the C bindings)
11b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson// for libLLVMCore.a, which implements the LLVM intermediate representation.
128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//===----------------------------------------------------------------------===//
148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm-c/Core.h"
16164b86b4399559e45fab7846f1e3e09119cab4e2Kostya Serebryany#include "llvm/Attributes.h"
178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm/Bitcode/ReaderWriter.h"
188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm/Constants.h"
198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm/DerivedTypes.h"
208b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm/GlobalVariable.h"
21851ba39dab544ad986f150aec9573add9d978397Chris Lattner#include "llvm/GlobalAlias.h"
228b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson#include "llvm/LLVMContext.h"
23851ba39dab544ad986f150aec9573add9d978397Chris Lattner#include "llvm/InlineAsm.h"
242a9c671a51126def8020870103316e6aedc73edfGordon Henriksen#include "llvm/IntrinsicInst.h"
2511112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman#include "llvm/PassManager.h"
26e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen#include "llvm/Support/CallSite.h"
27f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin#include "llvm/Support/Debug.h"
28c25e7581b9b8088910da31702d4ca21c4734c6d7Torok Edwin#include "llvm/Support/ErrorHandling.h"
29f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin#include "llvm/Support/MemoryBuffer.h"
30f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin#include "llvm/Support/raw_ostream.h"
31333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer#include "llvm/Support/system_error.h"
328b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include <cassert>
33da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen#include <cstdlib>
34ae9f3a3b7c915f725aef5a7250e88eaeddda03c6Anton Korobeynikov#include <cstring>
358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenusing namespace llvm;
378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
38b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Andersonvoid llvm::initializeCore(PassRegistry &Registry) {
39b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson  initializeDominatorTreePass(Registry);
40b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson  initializePrintModulePassPass(Registry);
41b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson  initializePrintFunctionPassPass(Registry);
42b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson  initializeVerifierPass(Registry);
43b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson  initializePreVerifierPass(Registry);
44b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson}
45b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson
46b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Andersonvoid LLVMInitializeCore(LLVMPassRegistryRef R) {
47b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson  initializeCore(*unwrap(R));
48b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson}
498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
50da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Error handling ----------------------------------------------------===*/
51da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
52da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenvoid LLVMDisposeMessage(char *Message) {
53da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  free(Message);
54da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
55da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
56da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
578b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson/*===-- Operations on contexts --------------------------------------------===*/
588b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
598b477ed579794ba6d76915d56b3f448a7dd20120Owen AndersonLLVMContextRef LLVMContextCreate() {
608b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson  return wrap(new LLVMContext());
618b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson}
628b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
63c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen AndersonLLVMContextRef LLVMGetGlobalContext() {
64c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson  return wrap(&getGlobalContext());
65c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson}
66c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson
678b477ed579794ba6d76915d56b3f448a7dd20120Owen Andersonvoid LLVMContextDispose(LLVMContextRef C) {
688b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson  delete unwrap(C);
698b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson}
708b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
7146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarunsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
7246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                  unsigned SLen) {
7346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return unwrap(C)->getMDKindID(StringRef(Name, SLen));
7446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
7546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
7646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarunsigned LLVMGetMDKindID(const char* Name, unsigned SLen) {
7746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return LLVMGetMDKindIDInContext(LLVMGetGlobalContext(), Name, SLen);
7846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
7946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
808b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
818b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- Operations on modules ---------------------------------------------===*/
828b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
83c8897d9c2f9fcee6061a2c2d380028269026a836Owen AndersonLLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID) {
84c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson  return wrap(new Module(ModuleID, getGlobalContext()));
85c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson}
86c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson
87c8897d9c2f9fcee6061a2c2d380028269026a836Owen AndersonLLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
88c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson                                                LLVMContextRef C) {
8931895e73591d3c9ceae731a1274c8f56194b9616Owen Anderson  return wrap(new Module(ModuleID, *unwrap(C)));
908b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMDisposeModule(LLVMModuleRef M) {
938b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  delete unwrap(M);
948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
96a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/*--.. Data layout .........................................................--*/
97a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenconst char * LLVMGetDataLayout(LLVMModuleRef M) {
98a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  return unwrap(M)->getDataLayout().c_str();
99a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
100a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
101a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenvoid LLVMSetDataLayout(LLVMModuleRef M, const char *Triple) {
102a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  unwrap(M)->setDataLayout(Triple);
103a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
104a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
105a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/*--.. Target triple .......................................................--*/
106a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenconst char * LLVMGetTarget(LLVMModuleRef M) {
107a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  return unwrap(M)->getTargetTriple().c_str();
108a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
109a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
110a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenvoid LLVMSetTarget(LLVMModuleRef M, const char *Triple) {
111a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  unwrap(M)->setTargetTriple(Triple);
112a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
113a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
114af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksenvoid LLVMDumpModule(LLVMModuleRef M) {
115af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen  unwrap(M)->dump();
116af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen}
117af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen
1185c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans WennborgLLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
1195c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg                               char **ErrorMessage) {
1205c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  std::string error;
1215c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  raw_fd_ostream dest(Filename, error);
1225c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  if (!error.empty()) {
1235c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg    *ErrorMessage = strdup(error.c_str());
1245c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg    return true;
1255c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  }
1265c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg
1275c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  unwrap(M)->print(dest, NULL);
1285c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg
1295c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  if (!error.empty()) {
1305c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg    *ErrorMessage = strdup(error.c_str());
1315c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg    return true;
1325c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  }
1335c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  dest.flush();
1345c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  return false;
1355c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg}
1365c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg
1370941534c712d77243d9dda5e8c1d927563b4edffChris Lattner/*--.. Operations on inline assembler ......................................--*/
1380941534c712d77243d9dda5e8c1d927563b4edffChris Lattnervoid LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm) {
1390941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  unwrap(M)->setModuleInlineAsm(StringRef(Asm));
1400941534c712d77243d9dda5e8c1d927563b4edffChris Lattner}
1410941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
1428b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
143a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner/*--.. Operations on module contexts ......................................--*/
144a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris LattnerLLVMContextRef LLVMGetModuleContext(LLVMModuleRef M) {
145a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner  return wrap(&unwrap(M)->getContext());
146a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner}
147a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner
148a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner
1498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- Operations on types -----------------------------------------------===*/
1508b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1518b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on all types (mostly) ....................................--*/
1528b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty) {
1540df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  switch (unwrap(Ty)->getTypeID()) {
15550bee42b54cd9aec5f49566307df2b0cf23afcf6Craig Topper  default: llvm_unreachable("Unhandled TypeID.");
1560df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::VoidTyID:
1570df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMVoidTypeKind;
158ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman  case Type::HalfTyID:
159ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman    return LLVMHalfTypeKind;
1600df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::FloatTyID:
1610df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMFloatTypeKind;
1620df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::DoubleTyID:
1630df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMDoubleTypeKind;
1640df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::X86_FP80TyID:
1650df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMX86_FP80TypeKind;
1660df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::FP128TyID:
1670df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMFP128TypeKind;
1680df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::PPC_FP128TyID:
1690df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMPPC_FP128TypeKind;
1700df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::LabelTyID:
1710df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMLabelTypeKind;
1720df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::MetadataTyID:
1730df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMMetadataTypeKind;
1740df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::IntegerTyID:
1750df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMIntegerTypeKind;
1760df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::FunctionTyID:
1770df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMFunctionTypeKind;
1780df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::StructTyID:
1790df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMStructTypeKind;
1800df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::ArrayTyID:
1810df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMArrayTypeKind;
1820df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::PointerTyID:
1830df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMPointerTypeKind;
1840df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::VectorTyID:
1850df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMVectorTypeKind;
186bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen  case Type::X86_MMXTyID:
187bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen    return LLVMX86_MMXTypeKind;
1880df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  }
1898b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
1908b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
191ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok EdwinLLVMBool LLVMTypeIsSized(LLVMTypeRef Ty)
192ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin{
193ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin    return unwrap(Ty)->isSized();
194ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin}
195ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin
19622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty) {
19722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(&unwrap(Ty)->getContext());
19822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
19922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
2008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on integer types .........................................--*/
2018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
20222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C)  {
20322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt1Ty(*unwrap(C));
20422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
20522c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C)  {
20622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt8Ty(*unwrap(C));
20722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
20822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C) {
20922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt16Ty(*unwrap(C));
21022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
21122c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C) {
21222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt32Ty(*unwrap(C));
21322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
21422c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C) {
21522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt64Ty(*unwrap(C));
21622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
21722c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits) {
21822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(IntegerType::get(*unwrap(C), NumBits));
21922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
22022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
2211d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt1Type(void)  {
22222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt1TypeInContext(LLVMGetGlobalContext());
2231d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2241d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt8Type(void)  {
22522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt8TypeInContext(LLVMGetGlobalContext());
2261d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2271d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt16Type(void) {
22822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt16TypeInContext(LLVMGetGlobalContext());
2291d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2301d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt32Type(void) {
23122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt32TypeInContext(LLVMGetGlobalContext());
2321d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2331d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt64Type(void) {
23422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt64TypeInContext(LLVMGetGlobalContext());
2351d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
23681a788176ecf158432af2b208b0a85321e5ec74aGordon HenriksenLLVMTypeRef LLVMIntType(unsigned NumBits) {
23722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMIntTypeInContext(LLVMGetGlobalContext(), NumBits);
2388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2398b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
24046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy) {
2418b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<IntegerType>(IntegerTy)->getBitWidth();
2428b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2438b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2448b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on real types ............................................--*/
2458b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
246ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan GohmanLLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C) {
247ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman  return (LLVMTypeRef) Type::getHalfTy(*unwrap(C));
248ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman}
24922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C) {
25022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getFloatTy(*unwrap(C));
25122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
25222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C) {
25322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getDoubleTy(*unwrap(C));
25422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
25522c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C) {
25622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getX86_FP80Ty(*unwrap(C));
25722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
25822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C) {
25922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getFP128Ty(*unwrap(C));
26022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
26122c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C) {
26222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getPPC_FP128Ty(*unwrap(C));
26322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
264bb811a244567aa8a1522203f15588f4d001b7353Dale JohannesenLLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C) {
265bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen  return (LLVMTypeRef) Type::getX86_MMXTy(*unwrap(C));
266bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen}
26722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
268ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan GohmanLLVMTypeRef LLVMHalfType(void) {
269ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman  return LLVMHalfTypeInContext(LLVMGetGlobalContext());
270ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman}
2711d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMFloatType(void) {
27222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMFloatTypeInContext(LLVMGetGlobalContext());
2731d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2741d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMDoubleType(void) {
27522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMDoubleTypeInContext(LLVMGetGlobalContext());
2761d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2771d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMX86FP80Type(void) {
27822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMX86FP80TypeInContext(LLVMGetGlobalContext());
2791d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2801d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMFP128Type(void) {
28122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMFP128TypeInContext(LLVMGetGlobalContext());
2821d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2831d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMPPCFP128Type(void) {
28422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMPPCFP128TypeInContext(LLVMGetGlobalContext());
2851d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
286bb811a244567aa8a1522203f15588f4d001b7353Dale JohannesenLLVMTypeRef LLVMX86MMXType(void) {
287bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen  return LLVMX86MMXTypeInContext(LLVMGetGlobalContext());
288bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen}
2898b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2908b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on function types ........................................--*/
2918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
29281a788176ecf158432af2b208b0a85321e5ec74aGordon HenriksenLLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
29381a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen                             LLVMTypeRef *ParamTypes, unsigned ParamCount,
294d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool IsVarArg) {
295d155945f15f73eb5619756d94e69b5bc5319d89aFrits van Bommel  ArrayRef<Type*> Tys(unwrap(ParamTypes), ParamCount);
296debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(FunctionType::get(unwrap(ReturnType), Tys, IsVarArg != 0));
2978b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2988b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
299d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy) {
3008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<FunctionType>(FunctionTy)->isVarArg();
3018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
30346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy) {
3048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return wrap(unwrap<FunctionType>(FunctionTy)->getReturnType());
3058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3068b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
30746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy) {
3088b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<FunctionType>(FunctionTy)->getNumParams();
3098b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3108b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
31146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest) {
3128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  FunctionType *Ty = unwrap<FunctionType>(FunctionTy);
3138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  for (FunctionType::param_iterator I = Ty->param_begin(),
3148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                                    E = Ty->param_end(); I != E; ++I)
3158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    *Dest++ = wrap(*I);
3168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
3188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on struct types ..........................................--*/
3198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
32022c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
321d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                           unsigned ElementCount, LLVMBool Packed) {
322d155945f15f73eb5619756d94e69b5bc5319d89aFrits van Bommel  ArrayRef<Type*> Tys(unwrap(ElementTypes), ElementCount);
32322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(StructType::get(*unwrap(C), Tys, Packed != 0));
3248b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3258b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
32622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes,
327d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                           unsigned ElementCount, LLVMBool Packed) {
32822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMStructTypeInContext(LLVMGetGlobalContext(), ElementTypes,
32922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                 ElementCount, Packed);
33022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
33122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
332d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris LattnerLLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name)
333d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner{
334c4d0e9fbddfe6b0ee5d5d7ef8eb1b341a8a242cfChris Lattner  return wrap(StructType::create(*unwrap(C), Name));
335d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner}
336d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner
337c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwinconst char *LLVMGetStructName(LLVMTypeRef Ty)
338c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin{
33931116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  StructType *Type = unwrap<StructType>(Ty);
34031116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (!Type->hasName())
34131116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    return 0;
34231116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  return Type->getName().data();
343c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin}
344c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin
345d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattnervoid LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
346d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner                       unsigned ElementCount, LLVMBool Packed) {
347d155945f15f73eb5619756d94e69b5bc5319d89aFrits van Bommel  ArrayRef<Type*> Tys(unwrap(ElementTypes), ElementCount);
348d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner  unwrap<StructType>(StructTy)->setBody(Tys, Packed != 0);
349d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner}
35022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
35146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy) {
3528b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<StructType>(StructTy)->getNumElements();
3538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3548b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
3558b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest) {
3568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  StructType *Ty = unwrap<StructType>(StructTy);
3578c6d1962107504e92a7413cbacc6afd5cc82cdc3Nick Lewycky  for (StructType::element_iterator I = Ty->element_begin(),
3588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                                    E = Ty->element_end(); I != E; ++I)
3598b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    *Dest++ = wrap(*I);
3608b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
362d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy) {
3638b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<StructType>(StructTy)->isPacked();
3648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
36661afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris LattnerLLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy) {
36761afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner  return unwrap<StructType>(StructTy)->isOpaque();
36861afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner}
36961afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner
37061afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris LattnerLLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name) {
37161afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner  return wrap(unwrap(M)->getTypeByName(Name));
37261afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner}
37361afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner
3748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on array, pointer, and vector types (sequence types) .....--*/
3758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
37657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenLLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount) {
377debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(ArrayType::get(unwrap(ElementType), ElementCount));
3788b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3798b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
38057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenLLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace) {
381debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(PointerType::get(unwrap(ElementType), AddressSpace));
3828b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
38457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenLLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount) {
385debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(VectorType::get(unwrap(ElementType), ElementCount));
3868b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3878b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
3888b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty) {
3898b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return wrap(unwrap<SequentialType>(Ty)->getElementType());
3908b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
3928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy) {
3938b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<ArrayType>(ArrayTy)->getNumElements();
3948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
39657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenunsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy) {
39757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen  return unwrap<PointerType>(PointerTy)->getAddressSpace();
39857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen}
39957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
4008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetVectorSize(LLVMTypeRef VectorTy) {
4018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<VectorType>(VectorTy)->getNumElements();
4028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on other types ...........................................--*/
4058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
40622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C)  {
40722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(Type::getVoidTy(*unwrap(C)));
40822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
40922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C) {
41022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(Type::getLabelTy(*unwrap(C)));
41122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
41222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
4131d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMVoidType(void)  {
41422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMVoidTypeInContext(LLVMGetGlobalContext());
4151d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
4161d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMLabelType(void) {
41722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMLabelTypeInContext(LLVMGetGlobalContext());
4181d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
4198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4208b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- Operations on values ----------------------------------------------===*/
4218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4228b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on all values ............................................--*/
4238b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
42446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMTypeRef LLVMTypeOf(LLVMValueRef Val) {
4258b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return wrap(unwrap(Val)->getType());
4268b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4278b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4288b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenconst char *LLVMGetValueName(LLVMValueRef Val) {
42993b67e40de356569493c285b86b138a3f11b5035Daniel Dunbar  return unwrap(Val)->getName().data();
4308b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4318b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4328b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetValueName(LLVMValueRef Val, const char *Name) {
4338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap(Val)->setName(Name);
4348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
43688cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksenvoid LLVMDumpValue(LLVMValueRef Val) {
43788cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen  unwrap(Val)->dump();
43888cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen}
43988cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen
440885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnervoid LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal) {
441885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  unwrap(OldVal)->replaceAllUsesWith(unwrap(NewVal));
442885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
4432a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
44446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarint LLVMHasMetadata(LLVMValueRef Inst) {
44546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return unwrap<Instruction>(Inst)->hasMetadata();
44646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
44746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
44846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMGetMetadata(LLVMValueRef Inst, unsigned KindID) {
44946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return wrap(unwrap<Instruction>(Inst)->getMetadata(KindID));
45046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
45146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
45246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarvoid LLVMSetMetadata(LLVMValueRef Inst, unsigned KindID, LLVMValueRef MD) {
45346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  unwrap<Instruction>(Inst)->setMetadata(KindID, MD? unwrap<MDNode>(MD) : NULL);
45446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
45546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
4562a9c671a51126def8020870103316e6aedc73edfGordon Henriksen/*--.. Conversion functions ................................................--*/
4572a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
4582a9c671a51126def8020870103316e6aedc73edfGordon Henriksen#define LLVM_DEFINE_VALUE_CAST(name)                                       \
4592a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  LLVMValueRef LLVMIsA##name(LLVMValueRef Val) {                           \
4602a9c671a51126def8020870103316e6aedc73edfGordon Henriksen    return wrap(static_cast<Value*>(dyn_cast_or_null<name>(unwrap(Val)))); \
4612a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  }
4622a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
4632a9c671a51126def8020870103316e6aedc73edfGordon HenriksenLLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DEFINE_VALUE_CAST)
4642a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
465885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner/*--.. Operations on Uses ..................................................--*/
46624b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMUseRef LLVMGetFirstUse(LLVMValueRef Val) {
467885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Value *V = unwrap(Val);
468885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Value::use_iterator I = V->use_begin();
469885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  if (I == V->use_end())
470885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner    return 0;
471885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(&(I.getUse()));
472885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
473885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
47424b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMUseRef LLVMGetNextUse(LLVMUseRef U) {
47524b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar  Use *Next = unwrap(U)->getNext();
47624b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar  if (Next)
47724b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar    return wrap(Next);
47824b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar  return 0;
479885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
480885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
48124b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMValueRef LLVMGetUser(LLVMUseRef U) {
48224b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar  return wrap(unwrap(U)->getUser());
483885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
484885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
48524b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMValueRef LLVMGetUsedValue(LLVMUseRef U) {
48624b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar  return wrap(unwrap(U)->get());
487885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
488885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
489885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner/*--.. Operations on Users .................................................--*/
490885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index) {
4914f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  Value *V = unwrap(Val);
4924f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  if (MDNode *MD = dyn_cast<MDNode>(V))
4934f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin      return wrap(MD->getOperand(Index));
4944f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  return wrap(cast<User>(V)->getOperand(Index));
495885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
4962a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
497f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarvoid LLVMSetOperand(LLVMValueRef Val, unsigned Index, LLVMValueRef Op) {
498f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar  unwrap<User>(Val)->setOperand(Index, unwrap(Op));
499f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar}
500f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar
501f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarint LLVMGetNumOperands(LLVMValueRef Val) {
5024f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  Value *V = unwrap(Val);
5034f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  if (MDNode *MD = dyn_cast<MDNode>(V))
5044f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin      return MD->getNumOperands();
5054f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  return cast<User>(V)->getNumOperands();
506f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar}
507f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar
5088b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on constants of any type .................................--*/
5098b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
510e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstNull(LLVMTypeRef Ty) {
511a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson  return wrap(Constant::getNullValue(unwrap(Ty)));
5128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
514e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty) {
515a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson  return wrap(Constant::getAllOnesValue(unwrap(Ty)));
5168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
5188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMGetUndef(LLVMTypeRef Ty) {
5199e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson  return wrap(UndefValue::get(unwrap(Ty)));
5208b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
522d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsConstant(LLVMValueRef Ty) {
523344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen  return isa<Constant>(unwrap(Ty));
524344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen}
525344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen
526d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsNull(LLVMValueRef Val) {
5278b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  if (Constant *C = dyn_cast<Constant>(unwrap(Val)))
5288b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    return C->isNullValue();
5298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return false;
5308b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5318b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
532d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsUndef(LLVMValueRef Val) {
533344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen  return isa<UndefValue>(unwrap(Val));
534344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen}
535344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen
536e4840bc611f8260065d3879a412ea3b501550995Chris LattnerLLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty) {
53762e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson  return
5389e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson      wrap(ConstantPointerNull::get(unwrap<PointerType>(Ty)));
539e4840bc611f8260065d3879a412ea3b501550995Chris Lattner}
540e4840bc611f8260065d3879a412ea3b501550995Chris Lattner
54146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--.. Operations on metadata nodes ........................................--*/
54246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
54346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
54446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                   unsigned SLen) {
54546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return wrap(MDString::get(*unwrap(C), StringRef(Str, SLen)));
54646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
54746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
54846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMMDString(const char *Str, unsigned SLen) {
54946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return LLVMMDStringInContext(LLVMGetGlobalContext(), Str, SLen);
55046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
55146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
55246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
55346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                 unsigned Count) {
554ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad  return wrap(MDNode::get(*unwrap(C),
55539b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                          makeArrayRef(unwrap<Value>(Vals, Count), Count)));
55646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
55746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
55846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count) {
55946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return LLVMMDNodeInContext(LLVMGetGlobalContext(), Vals, Count);
56046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
56146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
5624f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinconst char *LLVMGetMDString(LLVMValueRef V, unsigned* Len) {
56331116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (const MDString *S = dyn_cast<MDString>(unwrap(V))) {
56431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    *Len = S->getString().size();
56531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    return S->getString().data();
56631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  }
56731116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  *Len = 0;
56831116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  return 0;
5694f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin}
5704f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin
5714f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinunsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name)
5724f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin{
57331116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (NamedMDNode *N = unwrap(M)->getNamedMetadata(name)) {
57431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    return N->getNumOperands();
57531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  }
57631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  return 0;
5774f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin}
5784f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin
5794f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinvoid LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest)
5804f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin{
58131116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  NamedMDNode *N = unwrap(M)->getNamedMetadata(name);
58231116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (!N)
58331116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    return;
58431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  for (unsigned i=0;i<N->getNumOperands();i++)
58531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    Dest[i] = wrap(N->getOperand(i));
5864f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin}
5874f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin
58845ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patelvoid LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
58945ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel                                 LLVMValueRef Val)
59045ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel{
59145ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel  NamedMDNode *N = unwrap(M)->getOrInsertNamedMetadata(name);
59245ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel  if (!N)
59345ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel    return;
59445ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel  MDNode *Op = Val ? unwrap<MDNode>(Val) : NULL;
59545ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel  if (Op)
59645ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel    N->addOperand(Op);
59745ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel}
59845ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel
5998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on scalar constants ......................................--*/
6008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
601e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
602d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                          LLVMBool SignExtend) {
603eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson  return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), N, SignExtend != 0));
6048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
6058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
6065400570097a25f05694d451afed7f949281b789eChris LattnerLLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
6075400570097a25f05694d451afed7f949281b789eChris Lattner                                              unsigned NumWords,
6085400570097a25f05694d451afed7f949281b789eChris Lattner                                              const uint64_t Words[]) {
6095400570097a25f05694d451afed7f949281b789eChris Lattner    IntegerType *Ty = unwrap<IntegerType>(IntTy);
6105400570097a25f05694d451afed7f949281b789eChris Lattner    return wrap(ConstantInt::get(Ty->getContext(),
6113ba292dbc2acee2d1052fb7ffe332e2164147b47Jeffrey Yasskin                                 APInt(Ty->getBitWidth(),
6123ba292dbc2acee2d1052fb7ffe332e2164147b47Jeffrey Yasskin                                       makeArrayRef(Words, NumWords))));
6135400570097a25f05694d451afed7f949281b789eChris Lattner}
6145400570097a25f05694d451afed7f949281b789eChris Lattner
615e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char Str[],
616e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                  uint8_t Radix) {
617e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str),
618e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                               Radix));
619e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar}
620e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar
621e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char Str[],
622e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                         unsigned SLen, uint8_t Radix) {
623e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str, SLen),
624e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                               Radix));
625e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen}
626e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen
627e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N) {
628e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantFP::get(unwrap(RealTy), N));
629e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen}
630e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen
631e62a8a353c3b21b551c00b9025800d3352e5349eGordon HenriksenLLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text) {
632e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Text)));
633e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar}
634e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar
635e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char Str[],
636e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                          unsigned SLen) {
637e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Str, SLen)));
6388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
6398b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
640885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnerunsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal) {
641885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return unwrap<ConstantInt>(ConstantVal)->getZExtValue();
642885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
643885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
644885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnerlong long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal) {
645885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return unwrap<ConstantInt>(ConstantVal)->getSExtValue();
646885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
647885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
6488b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on composite constants ...................................--*/
6498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
65022c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
651d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                      unsigned Length,
652d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                      LLVMBool DontNullTerminate) {
6538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  /* Inverted the sense of AddNull because ', 0)' is a
6548b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen     better mnemonic for null termination than ', 1)'. */
65518c7f80b3e83ab584bd8572695a3cde8bafd9d3cChris Lattner  return wrap(ConstantDataArray::getString(*unwrap(C), StringRef(Str, Length),
65618c7f80b3e83ab584bd8572695a3cde8bafd9d3cChris Lattner                                           DontNullTerminate == 0));
6578b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
65822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
65922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                      LLVMValueRef *ConstantVals,
660d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                      unsigned Count, LLVMBool Packed) {
661b065b06c12dba6001b8140df2744d0c856ef6ea1Chris Lattner  Constant **Elements = unwrap<Constant>(ConstantVals, Count);
66239b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel  return wrap(ConstantStruct::getAnon(*unwrap(C), makeArrayRef(Elements, Count),
663b065b06c12dba6001b8140df2744d0c856ef6ea1Chris Lattner                                      Packed != 0));
66422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
6658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
66622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMValueRef LLVMConstString(const char *Str, unsigned Length,
667d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool DontNullTerminate) {
66822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMConstStringInContext(LLVMGetGlobalContext(), Str, Length,
66922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                  DontNullTerminate);
67022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
671e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
672e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                            LLVMValueRef *ConstantVals, unsigned Length) {
673267010864e139781ef5949939e081c41f954de0aJay Foad  ArrayRef<Constant*> V(unwrap<Constant>(ConstantVals, Length), Length);
674267010864e139781ef5949939e081c41f954de0aJay Foad  return wrap(ConstantArray::get(ArrayType::get(unwrap(ElementTy), Length), V));
6758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
676e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
677d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool Packed) {
67822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMConstStructInContext(LLVMGetGlobalContext(), ConstantVals, Count,
67922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                  Packed);
6808b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
68164090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola
68264090bd2d468ec70b9644bdf492684dd278de8a7Rafael EspindolaLLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
68364090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola                                  LLVMValueRef *ConstantVals,
68464090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola                                  unsigned Count) {
68564090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola  Constant **Elements = unwrap<Constant>(ConstantVals, Count);
686db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  StructType *Ty = cast<StructType>(unwrap(StructTy));
68764090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola
68839b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel  return wrap(ConstantStruct::get(Ty, makeArrayRef(Elements, Count)));
68964090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola}
69064090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola
691e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size) {
69239b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel  return wrap(ConstantVector::get(makeArrayRef(
6932ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner                            unwrap<Constant>(ScalarConstantVals, Size), Size)));
6948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
6954df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin
6964df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin/*-- Opcode mapping */
6974df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin
6984df1557f4073cd91893a186acfee96bee64b28ccTorok Edwinstatic LLVMOpcode map_to_llvmopcode(int opcode)
6994df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin{
7004df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin    switch (opcode) {
70150bee42b54cd9aec5f49566307df2b0cf23afcf6Craig Topper      default: llvm_unreachable("Unhandled Opcode.");
7024df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#define HANDLE_INST(num, opc, clas) case num: return LLVM##opc;
7034df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#include "llvm/Instruction.def"
7044df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#undef HANDLE_INST
7054df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin    }
7064df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin}
7074df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin
7084df1557f4073cd91893a186acfee96bee64b28ccTorok Edwinstatic int map_from_llvmopcode(LLVMOpcode code)
7094df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin{
7104df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin    switch (code) {
7114df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#define HANDLE_INST(num, opc, clas) case LLVM##opc: return num;
7124df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#include "llvm/Instruction.def"
7134df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#undef HANDLE_INST
7144df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin    }
7152dd674fdce68f8fd59d78a3bbab2cf5b8d220290David Blaikie    llvm_unreachable("Unhandled Opcode.");
7164df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin}
7174df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin
7184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/*--.. Constant expressions ................................................--*/
7194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
720885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal) {
7214df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin  return map_to_llvmopcode(unwrap<ConstantExpr>(ConstantVal)->getOpcode());
722885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
723885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
724ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan SandsLLVMValueRef LLVMAlignOf(LLVMTypeRef Ty) {
725baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAlignOf(unwrap(Ty)));
726ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands}
727ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
7284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMSizeOf(LLVMTypeRef Ty) {
729baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSizeOf(unwrap(Ty)));
7304647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal) {
7332ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNeg(unwrap<Constant>(ConstantVal)));
73456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
73556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
73619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal) {
7372ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNSWNeg(unwrap<Constant>(ConstantVal)));
73819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
73919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
74019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal) {
7412ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNUWNeg(unwrap<Constant>(ConstantVal)));
74219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
74319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
74419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
74556b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal) {
7462ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFNeg(unwrap<Constant>(ConstantVal)));
7474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal) {
7502ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNot(unwrap<Constant>(ConstantVal)));
7514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
7542ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getAdd(unwrap<Constant>(LHSConstant),
7554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
7564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7586e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant,
7596e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                             LLVMValueRef RHSConstant) {
7602ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNSWAdd(unwrap<Constant>(LHSConstant),
7616e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                      unwrap<Constant>(RHSConstant)));
7626e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
7636e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
76419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant,
76519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
7662ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNUWAdd(unwrap<Constant>(LHSConstant),
76719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
76819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
76919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
77056b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
7712ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFAdd(unwrap<Constant>(LHSConstant),
77256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
77356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
77456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
7754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
7762ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSub(unwrap<Constant>(LHSConstant),
7774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
7784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
78019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant,
78119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
7822ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNSWSub(unwrap<Constant>(LHSConstant),
78319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
78419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
78519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
78619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant,
78719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
7882ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNUWSub(unwrap<Constant>(LHSConstant),
78919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
79019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
79119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
79256b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
79356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFSub(unwrap<Constant>(LHSConstant),
79456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
79556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
79656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
7974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
7982ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getMul(unwrap<Constant>(LHSConstant),
7994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
8004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
80219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant,
80319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
8042ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNSWMul(unwrap<Constant>(LHSConstant),
80519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
80619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
80719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
80819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant,
80919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
8102ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNUWMul(unwrap<Constant>(LHSConstant),
81119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
81219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
81319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
81456b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8152ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFMul(unwrap<Constant>(LHSConstant),
81656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
81756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
81856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
8194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8202ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getUDiv(unwrap<Constant>(LHSConstant),
8214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8252ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSDiv(unwrap<Constant>(LHSConstant),
8264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8296e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant,
8306e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                LLVMValueRef RHSConstant) {
8312ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getExactSDiv(unwrap<Constant>(LHSConstant),
8326e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                         unwrap<Constant>(RHSConstant)));
8336e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
8346e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
8354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8362ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFDiv(unwrap<Constant>(LHSConstant),
8374647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8412ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getURem(unwrap<Constant>(LHSConstant),
8424647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8462ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSRem(unwrap<Constant>(LHSConstant),
8474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8512ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFRem(unwrap<Constant>(LHSConstant),
8524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8562ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getAnd(unwrap<Constant>(LHSConstant),
8574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
8584647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8594647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8612ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getOr(unwrap<Constant>(LHSConstant),
8624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                  unwrap<Constant>(RHSConstant)));
8634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8662ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getXor(unwrap<Constant>(LHSConstant),
8674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
8684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
8714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
872baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getICmp(Predicate,
8734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(LHSConstant),
8744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
8784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
879baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFCmp(Predicate,
8804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(LHSConstant),
8814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8834647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8852ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getShl(unwrap<Constant>(LHSConstant),
8862ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner                                   unwrap<Constant>(RHSConstant)));
8874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8902ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getLShr(unwrap<Constant>(LHSConstant),
8914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8952ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getAShr(unwrap<Constant>(LHSConstant),
8964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
8974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
9004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                          LLVMValueRef *ConstantIndices, unsigned NumIndices) {
901dab3d29605a5c83db41b28176273ef55961120c1Jay Foad  ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices),
902dab3d29605a5c83db41b28176273ef55961120c1Jay Foad                               NumIndices);
9032ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getGetElementPtr(unwrap<Constant>(ConstantVal),
904dab3d29605a5c83db41b28176273ef55961120c1Jay Foad                                             IdxList));
9054647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9064647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9076e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
9086e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  LLVMValueRef *ConstantIndices,
9096e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  unsigned NumIndices) {
9106e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  Constant* Val = unwrap<Constant>(ConstantVal);
911dab3d29605a5c83db41b28176273ef55961120c1Jay Foad  ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices),
912dab3d29605a5c83db41b28176273ef55961120c1Jay Foad                               NumIndices);
913dab3d29605a5c83db41b28176273ef55961120c1Jay Foad  return wrap(ConstantExpr::getInBoundsGetElementPtr(Val, IdxList));
9146e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
9156e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
9164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9172ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getTrunc(unwrap<Constant>(ConstantVal),
9184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                     unwrap(ToType)));
9194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9222ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSExt(unwrap<Constant>(ConstantVal),
9234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap(ToType)));
9244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9254647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9272ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getZExt(unwrap<Constant>(ConstantVal),
9284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap(ToType)));
9294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9304647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9322ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFPTrunc(unwrap<Constant>(ConstantVal),
9334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                       unwrap(ToType)));
9344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9364647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9372ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFPExtend(unwrap<Constant>(ConstantVal),
9384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
9394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9422ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getUIToFP(unwrap<Constant>(ConstantVal),
9434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
9444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
947baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSIToFP(unwrap<Constant>(ConstantVal),
9484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
9494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
952baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPToUI(unwrap<Constant>(ConstantVal),
9534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
9544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9572ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFPToSI(unwrap<Constant>(ConstantVal),
9584647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
9594647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9622ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getPtrToInt(unwrap<Constant>(ConstantVal),
9634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
9644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9672ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getIntToPtr(unwrap<Constant>(ConstantVal),
9684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
9694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
9722ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getBitCast(unwrap<Constant>(ConstantVal),
9734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                       unwrap(ToType)));
9744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
97656b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
97756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType) {
9782ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getZExtOrBitCast(unwrap<Constant>(ConstantVal),
97956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap(ToType)));
98056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
98156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
98256b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
98356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType) {
9842ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSExtOrBitCast(unwrap<Constant>(ConstantVal),
98556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap(ToType)));
98656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
98756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
98856b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
98956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                     LLVMTypeRef ToType) {
9902ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getTruncOrBitCast(unwrap<Constant>(ConstantVal),
99156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                              unwrap(ToType)));
99256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
99356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
99456b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
99556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                  LLVMTypeRef ToType) {
9962ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getPointerCast(unwrap<Constant>(ConstantVal),
99756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap(ToType)));
99856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
99956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
100056b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
1001d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                              LLVMBool isSigned) {
10022ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getIntegerCast(unwrap<Constant>(ConstantVal),
10032ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner                                           unwrap(ToType), isSigned));
100456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
100556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
100656b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10072ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFPCast(unwrap<Constant>(ConstantVal),
100856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                      unwrap(ToType)));
100956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
101056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
10114647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
10124647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfTrue,
10134647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfFalse) {
10142ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSelect(unwrap<Constant>(ConstantCondition),
10154647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap<Constant>(ConstantIfTrue),
10164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap<Constant>(ConstantIfFalse)));
10174647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
10204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                     LLVMValueRef IndexConstant) {
10212ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getExtractElement(unwrap<Constant>(VectorConstant),
10224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                              unwrap<Constant>(IndexConstant)));
10234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10254647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
10264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef ElementValueConstant,
10274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef IndexConstant) {
10282ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getInsertElement(unwrap<Constant>(VectorConstant),
10294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                         unwrap<Constant>(ElementValueConstant),
10304647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(IndexConstant)));
10314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
10344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef VectorBConstant,
10354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef MaskConstant) {
10362ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getShuffleVector(unwrap<Constant>(VectorAConstant),
10374647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(VectorBConstant),
10384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(MaskConstant)));
10394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10408b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1041b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1042b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned NumIdx) {
10432ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getExtractValue(unwrap<Constant>(AggConstant),
104439b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                                            makeArrayRef(IdxList, NumIdx)));
1045b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
1046b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
1047b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1048b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef ElementValueConstant,
1049b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  unsigned *IdxList, unsigned NumIdx) {
10502ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getInsertValue(unwrap<Constant>(AggConstant),
1051b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                         unwrap<Constant>(ElementValueConstant),
105239b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                                           makeArrayRef(IdxList, NumIdx)));
1053b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
1054b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
1055d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, const char *AsmString,
1056d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                const char *Constraints,
1057d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                LLVMBool HasSideEffects,
1058d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                LLVMBool IsAlignStack) {
1059d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner  return wrap(InlineAsm::get(dyn_cast<FunctionType>(unwrap(Ty)), AsmString,
10608ba2d5befc05ca73d3bac8708819bbbe759e2cf9Dale Johannesen                             Constraints, HasSideEffects, IsAlignStack));
1061851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1062851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1063c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarLLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB) {
1064c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar  return wrap(BlockAddress::get(unwrap<Function>(F), unwrap(BB)));
1065c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar}
1066c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
10678b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on global variables, functions, and aliases (globals) ....--*/
10688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1069dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global) {
1070dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<GlobalValue>(Global)->getParent());
1071dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1072dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1073d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsDeclaration(LLVMValueRef Global) {
10748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->isDeclaration();
10758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10778b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMLinkage LLVMGetLinkage(LLVMValueRef Global) {
10784aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  switch (unwrap<GlobalValue>(Global)->getLinkage()) {
10794aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::ExternalLinkage:
10804aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMExternalLinkage;
10814aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::AvailableExternallyLinkage:
10824aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMAvailableExternallyLinkage;
10834aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkOnceAnyLinkage:
10844aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkOnceAnyLinkage;
10854aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkOnceODRLinkage:
10864aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkOnceODRLinkage;
108732811bef956e0fae4329e6515420d85f7e510660Bill Wendling  case GlobalValue::LinkOnceODRAutoHideLinkage:
108832811bef956e0fae4329e6515420d85f7e510660Bill Wendling    return LLVMLinkOnceODRAutoHideLinkage;
10894aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::WeakAnyLinkage:
10904aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMWeakAnyLinkage;
10914aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::WeakODRLinkage:
10924aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMWeakODRLinkage;
10934aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::AppendingLinkage:
10944aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMAppendingLinkage;
10954aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::InternalLinkage:
10964aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMInternalLinkage;
10974aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::PrivateLinkage:
10984aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMPrivateLinkage;
10994aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkerPrivateLinkage:
11004aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkerPrivateLinkage;
11015e721d768254a920b78b9129d79a84c0163cb3f4Bill Wendling  case GlobalValue::LinkerPrivateWeakLinkage:
11025e721d768254a920b78b9129d79a84c0163cb3f4Bill Wendling    return LLVMLinkerPrivateWeakLinkage;
11034aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::DLLImportLinkage:
11044aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMDLLImportLinkage;
11054aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::DLLExportLinkage:
11064aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMDLLExportLinkage;
11074aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::ExternalWeakLinkage:
11084aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMExternalWeakLinkage;
11094aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::CommonLinkage:
11104aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMCommonLinkage;
11114aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  }
11124aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling
111358bd1510a4fea29b1ea57d6a6c4038eeea0264a2David Blaikie  llvm_unreachable("Invalid GlobalValue linkage!");
11148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage) {
11174aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  GlobalValue *GV = unwrap<GlobalValue>(Global);
11184aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling
11194aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  switch (Linkage) {
11204aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMExternalLinkage:
11214aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::ExternalLinkage);
11224aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11234aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMAvailableExternallyLinkage:
11244aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::AvailableExternallyLinkage);
11254aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11264aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkOnceAnyLinkage:
11274aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkOnceAnyLinkage);
11284aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11294aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkOnceODRLinkage:
11304aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkOnceODRLinkage);
11314aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
113232811bef956e0fae4329e6515420d85f7e510660Bill Wendling  case LLVMLinkOnceODRAutoHideLinkage:
113332811bef956e0fae4329e6515420d85f7e510660Bill Wendling    GV->setLinkage(GlobalValue::LinkOnceODRAutoHideLinkage);
113432811bef956e0fae4329e6515420d85f7e510660Bill Wendling    break;
11354aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMWeakAnyLinkage:
11364aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::WeakAnyLinkage);
11374aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11384aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMWeakODRLinkage:
11394aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::WeakODRLinkage);
11404aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11414aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMAppendingLinkage:
11424aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::AppendingLinkage);
11434aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11444aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMInternalLinkage:
11454aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::InternalLinkage);
11464aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11474aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMPrivateLinkage:
11484aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::PrivateLinkage);
11494aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11504aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkerPrivateLinkage:
11514aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkerPrivateLinkage);
11524aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11535e721d768254a920b78b9129d79a84c0163cb3f4Bill Wendling  case LLVMLinkerPrivateWeakLinkage:
11545e721d768254a920b78b9129d79a84c0163cb3f4Bill Wendling    GV->setLinkage(GlobalValue::LinkerPrivateWeakLinkage);
11555e721d768254a920b78b9129d79a84c0163cb3f4Bill Wendling    break;
11564aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMDLLImportLinkage:
11574aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::DLLImportLinkage);
11584aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11594aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMDLLExportLinkage:
11604aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::DLLExportLinkage);
11614aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11624aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMExternalWeakLinkage:
11634aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::ExternalWeakLinkage);
11644aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11654aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMGhostLinkage:
1166f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin    DEBUG(errs()
1167f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin          << "LLVMSetLinkage(): LLVMGhostLinkage is no longer supported.");
11684aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11694aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMCommonLinkage:
11704aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::CommonLinkage);
11714aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
11724aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  }
11738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenconst char *LLVMGetSection(LLVMValueRef Global) {
11768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->getSection().c_str();
11778b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11788b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11798b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetSection(LLVMValueRef Global, const char *Section) {
11808b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)->setSection(Section);
11818b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11828b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMVisibility LLVMGetVisibility(LLVMValueRef Global) {
11848b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return static_cast<LLVMVisibility>(
11858b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    unwrap<GlobalValue>(Global)->getVisibility());
11868b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11878b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11888b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz) {
11898b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)
11908b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    ->setVisibility(static_cast<GlobalValue::VisibilityTypes>(Viz));
11918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11938b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetAlignment(LLVMValueRef Global) {
11948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->getAlignment();
11958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11978b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes) {
11988b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)->setAlignment(Bytes);
11998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
12018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on global variables ......................................--*/
12028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
12038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name) {
1204e9b11b431308f4766b73cda93e38ec930c912122Owen Anderson  return wrap(new GlobalVariable(*unwrap(M), unwrap(Ty), false,
1205e9b11b431308f4766b73cda93e38ec930c912122Owen Anderson                                 GlobalValue::ExternalLinkage, 0, Name));
12068b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12078b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
12088e130b1d0d53346e05d0a1161a52c6d62de163c4Erick TryzelaarLLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
12098e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                         const char *Name,
12108e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                         unsigned AddressSpace) {
12118e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar  return wrap(new GlobalVariable(*unwrap(M), unwrap(Ty), false,
12126d52102b92aea76b677004a9e72dd84d2e50e163Duncan Sands                                 GlobalValue::ExternalLinkage, 0, Name, 0,
1213ce718ff9f42c7da092eaa01dd0242e8d5ba84713Hans Wennborg                                 GlobalVariable::NotThreadLocal, AddressSpace));
12148e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar}
12158e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar
12166d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenLLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name) {
12176d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen  return wrap(unwrap(M)->getNamedGlobal(Name));
12186d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen}
12196d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen
122034000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M) {
122134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
122234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = Mod->global_begin();
122334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->global_end())
122434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
122534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
122634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
122734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
122834000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M) {
122934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
123034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = Mod->global_end();
123134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->global_begin())
123234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
123334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
123434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
123534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
123634000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar) {
123734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
123834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = GV;
123934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == GV->getParent()->global_end())
124034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
124134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
124234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
124334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
124434000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar) {
124534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
124634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = GV;
12474733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == GV->getParent()->global_begin())
124834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
124934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
125034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
125134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
12528b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMDeleteGlobal(LLVMValueRef GlobalVar) {
12538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->eraseFromParent();
12548b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12558b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
12568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar) {
1257885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  GlobalVariable* GV = unwrap<GlobalVariable>(GlobalVar);
1258885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  if ( !GV->hasInitializer() )
1259885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner    return 0;
1260885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(GV->getInitializer());
12618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12628b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
12638b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal) {
12648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)
12658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    ->setInitializer(unwrap<Constant>(ConstantVal));
12668b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12678b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1268d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar) {
12698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalVariable>(GlobalVar)->isThreadLocal();
12708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1272d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal) {
12738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->setThreadLocal(IsThreadLocal != 0);
12748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1276d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar) {
1277c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen  return unwrap<GlobalVariable>(GlobalVar)->isConstant();
1278c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen}
1279c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen
1280d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant) {
1281c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->setConstant(IsConstant != 0);
1282c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen}
1283c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen
1284851ba39dab544ad986f150aec9573add9d978397Chris Lattner/*--.. Operations on aliases ......................................--*/
1285851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1286851ba39dab544ad986f150aec9573add9d978397Chris LattnerLLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1287851ba39dab544ad986f150aec9573add9d978397Chris Lattner                          const char *Name) {
1288851ba39dab544ad986f150aec9573add9d978397Chris Lattner  return wrap(new GlobalAlias(unwrap(Ty), GlobalValue::ExternalLinkage, Name,
1289851ba39dab544ad986f150aec9573add9d978397Chris Lattner                              unwrap<Constant>(Aliasee), unwrap (M)));
1290851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1291851ba39dab544ad986f150aec9573add9d978397Chris Lattner
129246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Operations on functions .............................................--*/
129346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
129446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
129546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef FunctionTy) {
1296051a950000e21935165db56695e35bade668193bGabor Greif  return wrap(Function::Create(unwrap<FunctionType>(FunctionTy),
1297051a950000e21935165db56695e35bade668193bGabor Greif                               GlobalValue::ExternalLinkage, Name, unwrap(M)));
129846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
129946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
13006d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenLLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name) {
13016d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen  return wrap(unwrap(M)->getFunction(Name));
13026d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen}
13036d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen
130434000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M) {
130534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
130634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Mod->begin();
130734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->end())
130834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
130934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
131034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
131134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
131234000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastFunction(LLVMModuleRef M) {
131334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
131434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Mod->end();
131534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->begin())
131634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
131734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
131834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
131934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
132034000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn) {
132134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
132234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Func;
132334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Func->getParent()->end())
132434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
132534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
132634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
132734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
132834000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn) {
132934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
133034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Func;
13314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->getParent()->begin())
133234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
133334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
133434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
133534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
133646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteFunction(LLVMValueRef Fn) {
133746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap<Function>(Fn)->eraseFromParent();
133846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
133946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
134046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetIntrinsicID(LLVMValueRef Fn) {
134146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (Function *F = dyn_cast<Function>(unwrap(Fn)))
134246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return F->getIntrinsicID();
134346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return 0;
134446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
134546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
134646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetFunctionCallConv(LLVMValueRef Fn) {
134746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return unwrap<Function>(Fn)->getCallingConv();
134846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
134946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
135046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC) {
135165c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel  return unwrap<Function>(Fn)->setCallingConv(
135265c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    static_cast<CallingConv::ID>(CC));
135346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
135446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
13555eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenconst char *LLVMGetGC(LLVMValueRef Fn) {
135680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  Function *F = unwrap<Function>(Fn);
13575eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen  return F->hasGC()? F->getGC() : 0;
135880a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen}
135980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
13605eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenvoid LLVMSetGC(LLVMValueRef Fn, const char *GC) {
136180a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  Function *F = unwrap<Function>(Fn);
13625eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen  if (GC)
13635eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    F->setGC(GC);
136480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  else
13655eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    F->clearGC();
136680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen}
136780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1368e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
1369e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Function *Func = unwrap<Function>(Fn);
1370e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  const AttrListPtr PAL = Func->getAttributes();
1371164b86b4399559e45fab7846f1e3e09119cab4e2Kostya Serebryany  const AttrListPtr PALnew = PAL.addAttr(~0U, Attributes(PA));
1372e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Func->setAttributes(PALnew);
1373e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands}
1374e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1375e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
1376e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Function *Func = unwrap<Function>(Fn);
1377e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  const AttrListPtr PAL = Func->getAttributes();
1378164b86b4399559e45fab7846f1e3e09119cab4e2Kostya Serebryany  const AttrListPtr PALnew = PAL.removeAttr(~0U, Attributes(PA));
1379e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Func->setAttributes(PALnew);
1380e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands}
1381e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1382885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn) {
1383885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Function *Func = unwrap<Function>(Fn);
1384885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  const AttrListPtr PAL = Func->getAttributes();
1385885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Attributes attr = PAL.getFnAttributes();
1386164b86b4399559e45fab7846f1e3e09119cab4e2Kostya Serebryany  return (LLVMAttribute)attr.Raw();
1387885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
1388885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1389dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/*--.. Operations on parameters ............................................--*/
1390dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1391dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenunsigned LLVMCountParams(LLVMValueRef FnRef) {
1392dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  // This function is strictly redundant to
1393dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  //   LLVMCountParamTypes(LLVMGetElementType(LLVMTypeOf(FnRef)))
13944d515d0b09d43af59cd040bfb8bf1b7a2b992980Dan Gohman  return unwrap<Function>(FnRef)->arg_size();
1395dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1396dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1397dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenvoid LLVMGetParams(LLVMValueRef FnRef, LLVMValueRef *ParamRefs) {
1398dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  Function *Fn = unwrap<Function>(FnRef);
1399dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  for (Function::arg_iterator I = Fn->arg_begin(),
1400dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen                              E = Fn->arg_end(); I != E; I++)
1401dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    *ParamRefs++ = wrap(I);
1402dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1403dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1404dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParam(LLVMValueRef FnRef, unsigned index) {
1405dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  Function::arg_iterator AI = unwrap<Function>(FnRef)->arg_begin();
1406dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  while (index --> 0)
1407dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    AI++;
1408dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(AI);
1409dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1410dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1411dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParamParent(LLVMValueRef V) {
1412dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<Argument>(V)->getParent());
1413dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1414dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14154733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn) {
14164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function *Func = unwrap<Function>(Fn);
14174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = Func->arg_begin();
14184733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->arg_end())
14194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
14204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(I);
14214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
14224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14234733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetLastParam(LLVMValueRef Fn) {
14244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function *Func = unwrap<Function>(Fn);
14254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = Func->arg_end();
14264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->arg_begin())
14274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
14284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(--I);
14294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
14304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14314733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetNextParam(LLVMValueRef Arg) {
14324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Argument *A = unwrap<Argument>(Arg);
14334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = A;
14344733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (++I == A->getParent()->arg_end())
14354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
14364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(I);
14374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
14384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14394733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg) {
14404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Argument *A = unwrap<Argument>(Arg);
14414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = A;
14424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == A->getParent()->arg_begin())
14434733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
14444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(--I);
14454733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
14464733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
14470598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA) {
1448164b86b4399559e45fab7846f1e3e09119cab4e2Kostya Serebryany  unwrap<Argument>(Arg)->addAttr(Attributes(PA));
1449e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1450e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
14510598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA) {
1452164b86b4399559e45fab7846f1e3e09119cab4e2Kostya Serebryany  unwrap<Argument>(Arg)->removeAttr(Attributes(PA));
1453e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1454e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
1455885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetAttribute(LLVMValueRef Arg) {
1456885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Argument *A = unwrap<Argument>(Arg);
1457885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Attributes attr = A->getParent()->getAttributes().getParamAttributes(
1458885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner    A->getArgNo()+1);
1459164b86b4399559e45fab7846f1e3e09119cab4e2Kostya Serebryany  return (LLVMAttribute)attr.Raw();
1460885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
1461885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1462885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1463e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksenvoid LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align) {
1464e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  unwrap<Argument>(Arg)->addAttr(
14650598866c052147c31b808391f58434ce3dbfb838Devang Patel          Attribute::constructAlignmentFromInt(align));
1466e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1467e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
146846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Operations on basic blocks ..........................................--*/
146946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1470dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB) {
1471dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(static_cast<Value*>(unwrap(BB)));
147246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
147346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1474d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val) {
147546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return isa<BasicBlock>(unwrap(Val));
147646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
147746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
147846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val) {
147946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap<BasicBlock>(Val));
148046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
148146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
14824733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB) {
14834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(unwrap(BB)->getParent());
1484dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1485dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
14867ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate BegemanLLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB) {
14877ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman  return wrap(unwrap(BB)->getTerminator());
14887ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman}
14897ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
149046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountBasicBlocks(LLVMValueRef FnRef) {
14914d515d0b09d43af59cd040bfb8bf1b7a2b992980Dan Gohman  return unwrap<Function>(FnRef)->size();
149246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
149346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
149446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMGetBasicBlocks(LLVMValueRef FnRef, LLVMBasicBlockRef *BasicBlocksRefs){
149546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Function *Fn = unwrap<Function>(FnRef);
149646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  for (Function::iterator I = Fn->begin(), E = Fn->end(); I != E; I++)
149746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    *BasicBlocksRefs++ = wrap(I);
149846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
149946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
150046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn) {
150146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(&unwrap<Function>(Fn)->getEntryBlock());
150246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
150346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
150434000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn) {
150534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
150634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Func->begin();
150734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Func->end())
150834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
150934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
151034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
151134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
151234000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn) {
151334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
151434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Func->end();
151534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Func->begin())
151634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
151734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
151834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
151934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
152034000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB) {
152134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
152234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Block;
152334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Block->getParent()->end())
152434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
152534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
152634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
152734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
152834000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB) {
152934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
153034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Block;
153134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->getParent()->begin())
153234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
153334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
153434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
153534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
153622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
153722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMValueRef FnRef,
153822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name) {
153922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(BasicBlock::Create(*unwrap(C), Name, unwrap<Function>(FnRef)));
154022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
154122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
154246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef FnRef, const char *Name) {
154322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMAppendBasicBlockInContext(LLVMGetGlobalContext(), FnRef, Name);
154422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
154522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
154622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
154722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMBasicBlockRef BBRef,
154822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name) {
154922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  BasicBlock *BB = unwrap(BBRef);
155022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(BasicBlock::Create(*unwrap(C), Name, BB->getParent(), BB));
155146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
155246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
155322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef BBRef,
155446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                       const char *Name) {
155522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInsertBasicBlockInContext(LLVMGetGlobalContext(), BBRef, Name);
155646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
155746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
155846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteBasicBlock(LLVMBasicBlockRef BBRef) {
155946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(BBRef)->eraseFromParent();
156046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
156146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
15627ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begemanvoid LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BBRef) {
15637ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman  unwrap(BBRef)->removeFromParent();
15647ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman}
15657ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
1566837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sandsvoid LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos) {
1567837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands  unwrap(BB)->moveBefore(unwrap(MovePos));
1568837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands}
1569837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands
1570837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sandsvoid LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos) {
1571837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands  unwrap(BB)->moveAfter(unwrap(MovePos));
1572837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands}
1573837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands
1574dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/*--.. Operations on instructions ..........................................--*/
1575dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1576dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst) {
1577dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<Instruction>(Inst)->getParent());
1578dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1579dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
158034000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB) {
158134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
158234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Block->begin();
158334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->end())
158434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
158534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
158634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
158734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
158834000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB) {
158934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
159034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Block->end();
159134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->begin())
159234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
159334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
159434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
159534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
159634000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst) {
159734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *Instr = unwrap<Instruction>(Inst);
159834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Instr;
159934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Instr->getParent()->end())
160034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
160134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
160234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
160334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
160434000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst) {
160534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *Instr = unwrap<Instruction>(Inst);
160634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Instr;
160734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Instr->getParent()->begin())
160834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
160934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
161034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
161134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
16120e6a24d92ab4661bb39f838ac390ccb17f649cb5Devang Patelvoid LLVMInstructionEraseFromParent(LLVMValueRef Inst) {
16130e6a24d92ab4661bb39f838ac390ccb17f649cb5Devang Patel  unwrap<Instruction>(Inst)->eraseFromParent();
16140e6a24d92ab4661bb39f838ac390ccb17f649cb5Devang Patel}
16150e6a24d92ab4661bb39f838ac390ccb17f649cb5Devang Patel
16164917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok EdwinLLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst) {
161731116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (ICmpInst *I = dyn_cast<ICmpInst>(unwrap(Inst)))
161831116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    return (LLVMIntPredicate)I->getPredicate();
161931116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(unwrap(Inst)))
162031116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    if (CE->getOpcode() == Instruction::ICmp)
162131116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin      return (LLVMIntPredicate)CE->getPredicate();
162231116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  return (LLVMIntPredicate)0;
16234917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin}
16244917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin
16256563c879964c3bcf5c77d40da8d4c807adf605aaTorok EdwinLLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst) {
16266563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  if (Instruction *C = dyn_cast<Instruction>(unwrap(Inst)))
16276563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin    return map_to_llvmopcode(C->getOpcode());
16286563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  return (LLVMOpcode)0;
16296563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin}
16306563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin
163146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Call and invoke instructions ........................................--*/
163246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
163346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetInstructionCallConv(LLVMValueRef Instr) {
163446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Value *V = unwrap(Instr);
163546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (CallInst *CI = dyn_cast<CallInst>(V))
163646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return CI->getCallingConv();
16374d6ccb5f68cd7c6418a209f1fa4dbade569e4493David Blaikie  if (InvokeInst *II = dyn_cast<InvokeInst>(V))
163846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return II->getCallingConv();
1639c23197a26f34f559ea9797de51e187087c039c42Torok Edwin  llvm_unreachable("LLVMGetInstructionCallConv applies only to call and invoke!");
164046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
164146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
164246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC) {
164346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Value *V = unwrap(Instr);
164446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (CallInst *CI = dyn_cast<CallInst>(V))
164565c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    return CI->setCallingConv(static_cast<CallingConv::ID>(CC));
164646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  else if (InvokeInst *II = dyn_cast<InvokeInst>(V))
164765c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    return II->setCallingConv(static_cast<CallingConv::ID>(CC));
1648c23197a26f34f559ea9797de51e187087c039c42Torok Edwin  llvm_unreachable("LLVMSetInstructionCallConv applies only to call and invoke!");
164946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
165046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
16510598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index,
16520598866c052147c31b808391f58434ce3dbfb838Devang Patel                           LLVMAttribute PA) {
1653e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
16540598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
1655164b86b4399559e45fab7846f1e3e09119cab4e2Kostya Serebryany    Call.getAttributes().addAttr(index, Attributes(PA)));
1656e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1657e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
16580598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
16590598866c052147c31b808391f58434ce3dbfb838Devang Patel                              LLVMAttribute PA) {
1660e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
16610598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
1662164b86b4399559e45fab7846f1e3e09119cab4e2Kostya Serebryany    Call.getAttributes().removeAttr(index, Attributes(PA)));
1663e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1664e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
1665e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksenvoid LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
1666e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen                                unsigned align) {
1667e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
16680598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
16690598866c052147c31b808391f58434ce3dbfb838Devang Patel    Call.getAttributes().addAttr(index,
16700598866c052147c31b808391f58434ce3dbfb838Devang Patel        Attribute::constructAlignmentFromInt(align)));
1671e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1672e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
167307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/*--.. Operations on call instructions (only) ..............................--*/
167407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
1675d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsTailCall(LLVMValueRef Call) {
167607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen  return unwrap<CallInst>(Call)->isTailCall();
167707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen}
167807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
1679d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetTailCall(LLVMValueRef Call, LLVMBool isTailCall) {
168007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen  unwrap<CallInst>(Call)->setTailCall(isTailCall);
168107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen}
168207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
16837ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman/*--.. Operations on switch instructions (only) ............................--*/
16847ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
16857ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate BegemanLLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef Switch) {
16867ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman  return wrap(unwrap<SwitchInst>(Switch)->getDefaultDest());
16877ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman}
16887ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
16892618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/*--.. Operations on phi nodes .............................................--*/
16902618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
16912618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenvoid LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
16922618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     LLVMBasicBlockRef *IncomingBlocks, unsigned Count) {
16932618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  PHINode *PhiVal = unwrap<PHINode>(PhiNode);
16942618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  for (unsigned I = 0; I != Count; ++I)
16952618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen    PhiVal->addIncoming(unwrap(IncomingValues[I]), unwrap(IncomingBlocks[I]));
16962618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
16972618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
16982618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenunsigned LLVMCountIncoming(LLVMValueRef PhiNode) {
16992618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return unwrap<PHINode>(PhiNode)->getNumIncomingValues();
17002618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
17012618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
17022618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index) {
17032618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return wrap(unwrap<PHINode>(PhiNode)->getIncomingValue(Index));
17042618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
17052618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
17062618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index) {
17072618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return wrap(unwrap<PHINode>(PhiNode)->getIncomingBlock(Index));
17082618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
17092618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
171046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
171146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*===-- Instruction builders ----------------------------------------------===*/
171246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
171322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C) {
171422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(new IRBuilder<>(*unwrap(C)));
171522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
171622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
171716c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMBuilderRef LLVMCreateBuilder(void) {
171822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMCreateBuilderInContext(LLVMGetGlobalContext());
171946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
172046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
172134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksenvoid LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
172234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen                         LLVMValueRef Instr) {
172334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *BB = unwrap(Block);
172434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *I = Instr? unwrap<Instruction>(Instr) : (Instruction*) BB->end();
172534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  unwrap(Builder)->SetInsertPoint(BB, I);
172634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
172734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
172846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr) {
172946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Instruction *I = unwrap<Instruction>(Instr);
173046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(Builder)->SetInsertPoint(I->getParent(), I);
173146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
173246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
173346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block) {
173446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  BasicBlock *BB = unwrap(Block);
173546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(Builder)->SetInsertPoint(BB);
173646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
173746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1738dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder) {
1739dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen   return wrap(unwrap(Builder)->GetInsertBlock());
1740dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1741dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1742851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMClearInsertionPosition(LLVMBuilderRef Builder) {
1743a41b9153c3e568c874eb777d2b295659a9aca10aChris Lattner  unwrap(Builder)->ClearInsertionPoint();
1744851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1745851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1746851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr) {
1747851ba39dab544ad986f150aec9573add9d978397Chris Lattner  unwrap(Builder)->Insert(unwrap<Instruction>(Instr));
1748851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1749851ba39dab544ad986f150aec9573add9d978397Chris Lattner
17505c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarvoid LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
17515c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                                   const char *Name) {
17525c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar  unwrap(Builder)->Insert(unwrap<Instruction>(Instr), Name);
17535c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar}
17545c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
175546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDisposeBuilder(LLVMBuilderRef Builder) {
175646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  delete unwrap(Builder);
175746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
175846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
175946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--.. Metadata builders ...................................................--*/
176046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
176146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarvoid LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L) {
1762a41b9153c3e568c874eb777d2b295659a9aca10aChris Lattner  MDNode *Loc = L ? unwrap<MDNode>(L) : NULL;
176384e679beea11ac55ed7871eec4deaccdf393de3eChris Lattner  unwrap(Builder)->SetCurrentDebugLocation(DebugLoc::getFromDILocation(Loc));
176446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
176546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
176646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder) {
1767a41b9153c3e568c874eb777d2b295659a9aca10aChris Lattner  return wrap(unwrap(Builder)->getCurrentDebugLocation()
1768a41b9153c3e568c874eb777d2b295659a9aca10aChris Lattner              .getAsMDNode(unwrap(Builder)->getContext()));
176946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
177046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
177146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarvoid LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst) {
177246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  unwrap(Builder)->SetInstDebugLocation(unwrap<Instruction>(Inst));
177346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
177446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
177546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
177646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Instruction builders ................................................--*/
177746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
177846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef B) {
177946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateRetVoid());
178046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
178146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
178246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRet(LLVMBuilderRef B, LLVMValueRef V) {
178346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateRet(unwrap(V)));
178446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
178546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1786f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef B, LLVMValueRef *RetVals,
1787f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   unsigned N) {
1788f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateAggregateRet(unwrap(RetVals), N));
1789f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1790f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
179146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBr(LLVMBuilderRef B, LLVMBasicBlockRef Dest) {
179246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateBr(unwrap(Dest)));
179346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
179446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
179546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCondBr(LLVMBuilderRef B, LLVMValueRef If,
179646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Else) {
179746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateCondBr(unwrap(If), unwrap(Then), unwrap(Else)));
179846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
179946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
180046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSwitch(LLVMBuilderRef B, LLVMValueRef V,
180146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Else, unsigned NumCases) {
180246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSwitch(unwrap(V), unwrap(Else), NumCases));
180346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
180446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1805c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarLLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
1806c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar                                 unsigned NumDests) {
1807c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar  return wrap(unwrap(B)->CreateIndirectBr(unwrap(Addr), NumDests));
1808c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar}
1809c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
181046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInvoke(LLVMBuilderRef B, LLVMValueRef Fn,
181146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef *Args, unsigned NumArgs,
181246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
181346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
181446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateInvoke(unwrap(Fn), unwrap(Then), unwrap(Catch),
181539b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                                      makeArrayRef(unwrap(Args), NumArgs),
181646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      Name));
181746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
181846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1819e6e8826870bee3facb04f950f0bd725f8a88623dBill WendlingLLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
1820e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling                                 LLVMValueRef PersFn, unsigned NumClauses,
1821e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling                                 const char *Name) {
1822e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling  return wrap(unwrap(B)->CreateLandingPad(unwrap(Ty),
1823e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling                                          cast<Function>(unwrap(PersFn)),
1824e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling                                          NumClauses, Name));
1825e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling}
1826e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling
1827dccc03b2423fe65efb5963ae816b99c24fc53374Bill WendlingLLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn) {
1828dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling  return wrap(unwrap(B)->CreateResume(unwrap(Exn)));
1829dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling}
1830dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling
183146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef B) {
183246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUnreachable());
183346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
183446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1835ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksenvoid LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
1836ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen                 LLVMBasicBlockRef Dest) {
1837ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen  unwrap<SwitchInst>(Switch)->addCase(unwrap<ConstantInt>(OnVal), unwrap(Dest));
1838ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen}
1839ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen
1840c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarvoid LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest) {
1841c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar  unwrap<IndirectBrInst>(IndirectBr)->addDestination(unwrap(Dest));
1842c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar}
1843c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
1844e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendlingvoid LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal) {
1845e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling  unwrap<LandingPadInst>(LandingPad)->
1846e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling    addClause(cast<Constant>(unwrap(ClauseVal)));
1847e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling}
1848e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling
1849e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendlingvoid LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val) {
1850e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling  unwrap<LandingPadInst>(LandingPad)->setCleanup(Val);
1851e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling}
1852e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling
185346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Arithmetic ..........................................................--*/
185446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
185546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
185646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
185746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAdd(unwrap(LHS), unwrap(RHS), Name));
185846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
185946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1860f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1861f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1862f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateNSWAdd(unwrap(LHS), unwrap(RHS), Name));
1863f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1864f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
186519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
186619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
186719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWAdd(unwrap(LHS), unwrap(RHS), Name));
186819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
186919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1870f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1871f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1872f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFAdd(unwrap(LHS), unwrap(RHS), Name));
1873f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1874f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
187546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
187646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
187746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSub(unwrap(LHS), unwrap(RHS), Name));
187846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
187946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
188019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
188119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
188219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNSWSub(unwrap(LHS), unwrap(RHS), Name));
188319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
188419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
188519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
188619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
188719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWSub(unwrap(LHS), unwrap(RHS), Name));
188819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
188919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1890f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1891f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1892f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFSub(unwrap(LHS), unwrap(RHS), Name));
1893f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1894f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
189546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
189646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
189746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateMul(unwrap(LHS), unwrap(RHS), Name));
189846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
189946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
190019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
190119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
190219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNSWMul(unwrap(LHS), unwrap(RHS), Name));
190319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
190419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
190519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
190619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
190719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWMul(unwrap(LHS), unwrap(RHS), Name));
190819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
190919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1910f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1911f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1912f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFMul(unwrap(LHS), unwrap(RHS), Name));
1913f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1914f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
191546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
191646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
191746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUDiv(unwrap(LHS), unwrap(RHS), Name));
191846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
191946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
192046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
192146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
192246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSDiv(unwrap(LHS), unwrap(RHS), Name));
192346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
192446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1925f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef B, LLVMValueRef LHS,
1926f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                LLVMValueRef RHS, const char *Name) {
1927f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateExactSDiv(unwrap(LHS), unwrap(RHS), Name));
1928f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1929f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
193046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
193146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
193246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFDiv(unwrap(LHS), unwrap(RHS), Name));
193346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
193446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
193546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildURem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
193646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
193746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateURem(unwrap(LHS), unwrap(RHS), Name));
193846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
193946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
194046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
194146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
194246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSRem(unwrap(LHS), unwrap(RHS), Name));
194346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
194446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
194546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
194646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
194746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFRem(unwrap(LHS), unwrap(RHS), Name));
194846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
194946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
195046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShl(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
195146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
195246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateShl(unwrap(LHS), unwrap(RHS), Name));
195346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
195446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
195546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
195646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
195746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateLShr(unwrap(LHS), unwrap(RHS), Name));
195846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
195946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
196046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
196146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
196246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAShr(unwrap(LHS), unwrap(RHS), Name));
196346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
196446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
196546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAnd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
196646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
196746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAnd(unwrap(LHS), unwrap(RHS), Name));
196846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
196946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
197046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildOr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
197146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         const char *Name) {
197246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateOr(unwrap(LHS), unwrap(RHS), Name));
197346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
197446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
197546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildXor(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
197646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
197746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateXor(unwrap(LHS), unwrap(RHS), Name));
197846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
197946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1980abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick TryzelaarLLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
1981abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                            LLVMValueRef LHS, LLVMValueRef RHS,
1982abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                            const char *Name) {
19834df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin  return wrap(unwrap(B)->CreateBinOp(Instruction::BinaryOps(map_from_llvmopcode(Op)), unwrap(LHS),
1984abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                                     unwrap(RHS), Name));
1985abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar}
1986abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar
198746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
198846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateNeg(unwrap(V), Name));
198946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
199046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
199119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
199219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name) {
199319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNSWNeg(unwrap(V), Name));
199419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
199519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
199619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
199719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name) {
199819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWNeg(unwrap(V), Name));
199919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
200019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
2001d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan GohmanLLVMValueRef LLVMBuildFNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
2002d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman  return wrap(unwrap(B)->CreateFNeg(unwrap(V), Name));
2003d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman}
2004d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman
200546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNot(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
200646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateNot(unwrap(V), Name));
200746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
200846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
200946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Memory ..............................................................--*/
201046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
201146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMalloc(LLVMBuilderRef B, LLVMTypeRef Ty,
201246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
2013db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
20149d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
20159d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
20169d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Instruction* Malloc = CallInst::CreateMalloc(unwrap(B)->GetInsertBlock(),
20179d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               ITy, unwrap(Ty), AllocSize,
20189d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               0, 0, "");
20199d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  return wrap(unwrap(B)->Insert(Malloc, Twine(Name)));
202046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
202146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
202246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef B, LLVMTypeRef Ty,
202346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name) {
2024db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
20259d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
20269d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
20279d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Instruction* Malloc = CallInst::CreateMalloc(unwrap(B)->GetInsertBlock(),
20289d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               ITy, unwrap(Ty), AllocSize,
20299d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               unwrap(Val), 0, "");
20309d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  return wrap(unwrap(B)->Insert(Malloc, Twine(Name)));
203146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
203246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
203346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAlloca(LLVMBuilderRef B, LLVMTypeRef Ty,
203446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
203546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), 0, Name));
203646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
203746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
203846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef B, LLVMTypeRef Ty,
203946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name) {
204046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), unwrap(Val), Name));
204146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
204246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
204346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFree(LLVMBuilderRef B, LLVMValueRef PointerVal) {
2044046e78ce55a7c3d82b7b6758d2d77f2d99f970bfVictor Hernandez  return wrap(unwrap(B)->Insert(
2045046e78ce55a7c3d82b7b6758d2d77f2d99f970bfVictor Hernandez     CallInst::CreateFree(unwrap(PointerVal), unwrap(B)->GetInsertBlock())));
204646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
204746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
204846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
204946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLoad(LLVMBuilderRef B, LLVMValueRef PointerVal,
205046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
205146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateLoad(unwrap(PointerVal), Name));
205246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
205346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
205446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildStore(LLVMBuilderRef B, LLVMValueRef Val,
205546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMValueRef PointerVal) {
205646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateStore(unwrap(Val), unwrap(PointerVal)));
205746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
205846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
205946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
206046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          LLVMValueRef *Indices, unsigned NumIndices,
206146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
20620a2a60ace9b79164b71794ce7ff981171c61e442Jay Foad  ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
20630a2a60ace9b79164b71794ce7ff981171c61e442Jay Foad  return wrap(unwrap(B)->CreateGEP(unwrap(Pointer), IdxList, Name));
206446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
206546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2066f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2067f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMValueRef *Indices, unsigned NumIndices,
2068f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  const char *Name) {
20690a2a60ace9b79164b71794ce7ff981171c61e442Jay Foad  ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
20700a2a60ace9b79164b71794ce7ff981171c61e442Jay Foad  return wrap(unwrap(B)->CreateInBoundsGEP(unwrap(Pointer), IdxList, Name));
2071f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2072f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2073f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2074f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                unsigned Idx, const char *Name) {
2075f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateStructGEP(unwrap(Pointer), Idx, Name));
2076f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2077f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2078f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2079f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   const char *Name) {
2080f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateGlobalString(Str, Name));
2081f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2082f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2083f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2084f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                      const char *Name) {
2085f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateGlobalStringPtr(Str, Name));
2086f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2087f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2088eabe3ad57d824c2b07016352fd97ce85777b6f9dChris LattnerLLVMBool LLVMGetVolatile(LLVMValueRef MemAccessInst) {
2089eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  Value *P = unwrap<Value>(MemAccessInst);
2090eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  if (LoadInst *LI = dyn_cast<LoadInst>(P))
2091eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner    return LI->isVolatile();
2092eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  return cast<StoreInst>(P)->isVolatile();
2093eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner}
2094eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner
2095eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattnervoid LLVMSetVolatile(LLVMValueRef MemAccessInst, LLVMBool isVolatile) {
2096eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  Value *P = unwrap<Value>(MemAccessInst);
2097eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  if (LoadInst *LI = dyn_cast<LoadInst>(P))
2098eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner    return LI->setVolatile(isVolatile);
2099eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  return cast<StoreInst>(P)->setVolatile(isVolatile);
2100eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner}
2101eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner
210246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Casts ...............................................................--*/
210346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
210446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildTrunc(LLVMBuilderRef B, LLVMValueRef Val,
210546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name) {
210646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateTrunc(unwrap(Val), unwrap(DestTy), Name));
210746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
210846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
210946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildZExt(LLVMBuilderRef B, LLVMValueRef Val,
211046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name) {
211146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateZExt(unwrap(Val), unwrap(DestTy), Name));
211246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
211346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
211446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSExt(LLVMBuilderRef B, LLVMValueRef Val,
211546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name) {
211646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSExt(unwrap(Val), unwrap(DestTy), Name));
211746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
211846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
211946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef B, LLVMValueRef Val,
212046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
212146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPToUI(unwrap(Val), unwrap(DestTy), Name));
212246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
212346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
212446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef B, LLVMValueRef Val,
212546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
212646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPToSI(unwrap(Val), unwrap(DestTy), Name));
212746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
212846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
212946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef B, LLVMValueRef Val,
213046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
213146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUIToFP(unwrap(Val), unwrap(DestTy), Name));
213246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
213346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
213446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef B, LLVMValueRef Val,
213546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
213646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSIToFP(unwrap(Val), unwrap(DestTy), Name));
213746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
213846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
213946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef B, LLVMValueRef Val,
214046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name) {
214146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPTrunc(unwrap(Val), unwrap(DestTy), Name));
214246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
214346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
214446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPExt(LLVMBuilderRef B, LLVMValueRef Val,
214546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name) {
214646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPExt(unwrap(Val), unwrap(DestTy), Name));
214746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
214846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
214946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef B, LLVMValueRef Val,
215046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name) {
215146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreatePtrToInt(unwrap(Val), unwrap(DestTy), Name));
215246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
215346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
215446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef B, LLVMValueRef Val,
215546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name) {
215646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateIntToPtr(unwrap(Val), unwrap(DestTy), Name));
215746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
215846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
215946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBitCast(LLVMBuilderRef B, LLVMValueRef Val,
216046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name) {
216146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateBitCast(unwrap(Val), unwrap(DestTy), Name));
216246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
216346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2164f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
2165f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name) {
2166f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateZExtOrBitCast(unwrap(Val), unwrap(DestTy),
2167f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                             Name));
2168f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2169f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2170f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
2171f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name) {
2172f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateSExtOrBitCast(unwrap(Val), unwrap(DestTy),
2173f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                             Name));
2174f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2175f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2176f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
2177f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                     LLVMTypeRef DestTy, const char *Name) {
2178f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateTruncOrBitCast(unwrap(Val), unwrap(DestTy),
2179f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                              Name));
2180f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2181f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2182abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick TryzelaarLLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2183abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                           LLVMTypeRef DestTy, const char *Name) {
21844df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin  return wrap(unwrap(B)->CreateCast(Instruction::CastOps(map_from_llvmopcode(Op)), unwrap(Val),
2185abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                                    unwrap(DestTy), Name));
2186abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar}
2187abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar
2188f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef B, LLVMValueRef Val,
2189f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMTypeRef DestTy, const char *Name) {
2190f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreatePointerCast(unwrap(Val), unwrap(DestTy), Name));
2191f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2192f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2193f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIntCast(LLVMBuilderRef B, LLVMValueRef Val,
2194e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands                              LLVMTypeRef DestTy, const char *Name) {
2195e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands  return wrap(unwrap(B)->CreateIntCast(unwrap(Val), unwrap(DestTy),
2196e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands                                       /*isSigned*/true, Name));
2197f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2198f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2199f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFPCast(LLVMBuilderRef B, LLVMValueRef Val,
2200f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             LLVMTypeRef DestTy, const char *Name) {
2201f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFPCast(unwrap(Val), unwrap(DestTy), Name));
2202f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2203f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
220446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Comparisons .........................................................--*/
220546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
220646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildICmp(LLVMBuilderRef B, LLVMIntPredicate Op,
220746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
220846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
220946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateICmp(static_cast<ICmpInst::Predicate>(Op),
221046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(LHS), unwrap(RHS), Name));
221146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
221246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
221346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFCmp(LLVMBuilderRef B, LLVMRealPredicate Op,
221446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
221546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
221646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFCmp(static_cast<FCmpInst::Predicate>(Op),
221746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(LHS), unwrap(RHS), Name));
221846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
221946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
222046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Miscellaneous instructions ..........................................--*/
222146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
222246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPhi(LLVMBuilderRef B, LLVMTypeRef Ty, const char *Name) {
22233ecfc861b4365f341c5c969b40e1afccde676e6fJay Foad  return wrap(unwrap(B)->CreatePHI(unwrap(Ty), 0, Name));
222446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
222546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
222646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn,
222746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef *Args, unsigned NumArgs,
222846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
2229a3efbb15ddd5aa9006564cd79086723640084878Jay Foad  return wrap(unwrap(B)->CreateCall(unwrap(Fn),
223039b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                                    makeArrayRef(unwrap(Args), NumArgs),
2231a3efbb15ddd5aa9006564cd79086723640084878Jay Foad                                    Name));
223246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
223346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
223446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSelect(LLVMBuilderRef B, LLVMValueRef If,
223546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef Then, LLVMValueRef Else,
223646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
223746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSelect(unwrap(If), unwrap(Then), unwrap(Else),
223846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      Name));
223946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
224046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
224146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildVAArg(LLVMBuilderRef B, LLVMValueRef List,
224246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef Ty, const char *Name) {
224346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateVAArg(unwrap(List), unwrap(Ty), Name));
224446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
224546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
224646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef B, LLVMValueRef VecVal,
224746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      LLVMValueRef Index, const char *Name) {
224846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateExtractElement(unwrap(VecVal), unwrap(Index),
224946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                              Name));
225046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
225146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
225246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef B, LLVMValueRef VecVal,
225346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef EltVal, LLVMValueRef Index,
225446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name) {
225546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateInsertElement(unwrap(VecVal), unwrap(EltVal),
225646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                             unwrap(Index), Name));
225746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
225846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
225946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef B, LLVMValueRef V1,
226046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef V2, LLVMValueRef Mask,
226146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name) {
226246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateShuffleVector(unwrap(V1), unwrap(V2),
226346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                             unwrap(Mask), Name));
226446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
22651ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2266b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef B, LLVMValueRef AggVal,
2267b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned Index, const char *Name) {
2268b593117b44a74c72bc784080bb402576b3181d94Dan Gohman  return wrap(unwrap(B)->CreateExtractValue(unwrap(AggVal), Index, Name));
2269b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
2270b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
2271b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef B, LLVMValueRef AggVal,
2272b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef EltVal, unsigned Index,
2273b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  const char *Name) {
2274b593117b44a74c72bc784080bb402576b3181d94Dan Gohman  return wrap(unwrap(B)->CreateInsertValue(unwrap(AggVal), unwrap(EltVal),
2275b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                           Index, Name));
2276b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
2277b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
2278f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNull(LLVMBuilderRef B, LLVMValueRef Val,
2279f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             const char *Name) {
2280f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateIsNull(unwrap(Val), Name));
2281f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2282f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2283f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef B, LLVMValueRef Val,
2284f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                const char *Name) {
2285f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateIsNotNull(unwrap(Val), Name));
2286f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2287f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2288f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef B, LLVMValueRef LHS,
2289f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                              LLVMValueRef RHS, const char *Name) {
2290f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreatePtrDiff(unwrap(LHS), unwrap(RHS), Name));
2291f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2292f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
22931ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
22941ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen/*===-- Module providers --------------------------------------------------===*/
22951ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
22961ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMModuleProviderRef
22971ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMCreateModuleProviderForExistingModule(LLVMModuleRef M) {
2298f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin  return reinterpret_cast<LLVMModuleProviderRef>(M);
22991ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen}
23001ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
23011ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksenvoid LLVMDisposeModuleProvider(LLVMModuleProviderRef MP) {
23021ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen  delete unwrap(MP);
23031ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen}
23041ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2305da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2306da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Memory buffers ----------------------------------------------------===*/
2307da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2308d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithContentsOfFile(
2309d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    const char *Path,
2310d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    LLVMMemoryBufferRef *OutMemBuf,
2311d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    char **OutMessage) {
2312d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner
23133ff9563c3e391954b2e224afcf8b2b0fcc3888aaMichael J. Spencer  OwningPtr<MemoryBuffer> MB;
2314333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer  error_code ec;
23153ff9563c3e391954b2e224afcf8b2b0fcc3888aaMichael J. Spencer  if (!(ec = MemoryBuffer::getFile(Path, MB))) {
23163ff9563c3e391954b2e224afcf8b2b0fcc3888aaMichael J. Spencer    *OutMemBuf = wrap(MB.take());
2317da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen    return 0;
2318da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  }
2319333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer
2320333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer  *OutMessage = strdup(ec.message().c_str());
2321da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  return 1;
2322da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2323da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2324d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2325d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                         char **OutMessage) {
23263ff9563c3e391954b2e224afcf8b2b0fcc3888aaMichael J. Spencer  OwningPtr<MemoryBuffer> MB;
2327333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer  error_code ec;
23283ff9563c3e391954b2e224afcf8b2b0fcc3888aaMichael J. Spencer  if (!(ec = MemoryBuffer::getSTDIN(MB))) {
23293ff9563c3e391954b2e224afcf8b2b0fcc3888aaMichael J. Spencer    *OutMemBuf = wrap(MB.take());
233030377e780918aacda1befa47054c61b0155c194cDan Gohman    return 0;
2331da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  }
2332d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar
2333333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer  *OutMessage = strdup(ec.message().c_str());
233430377e780918aacda1befa47054c61b0155c194cDan Gohman  return 1;
2335da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2336da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2337da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenvoid LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf) {
2338da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  delete unwrap(MemBuf);
2339da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
234011112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
23411a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson/*===-- Pass Registry -----------------------------------------------------===*/
23421a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson
23431a3d23362168ae6d8e07efd547a92cc36738a789Owen AndersonLLVMPassRegistryRef LLVMGetGlobalPassRegistry(void) {
23441a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  return wrap(PassRegistry::getPassRegistry());
23451a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson}
234611112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
234711112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman/*===-- Pass Manager ------------------------------------------------------===*/
234811112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
234911112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMPassManagerRef LLVMCreatePassManager() {
235011112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return wrap(new PassManager());
235111112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
235211112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
235311112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M) {
235411112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return wrap(new FunctionPassManager(unwrap(M)));
235511112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
235611112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
235711112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef P) {
235811112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return LLVMCreateFunctionPassManagerForModule(
235911112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman                                            reinterpret_cast<LLVMModuleRef>(P));
236011112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
236111112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
236211112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M) {
236311112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return unwrap<PassManager>(PM)->run(*unwrap(M));
236411112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
236511112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
236611112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM) {
236711112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return unwrap<FunctionPassManager>(FPM)->doInitialization();
236811112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
236911112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
237011112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F) {
237111112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return unwrap<FunctionPassManager>(FPM)->run(*unwrap<Function>(F));
237211112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
237311112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
237411112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM) {
237511112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return unwrap<FunctionPassManager>(FPM)->doFinalization();
237611112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
237711112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
237811112e0d7b1fb2741ed65a5085037918d1425916Dan Gohmanvoid LLVMDisposePassManager(LLVMPassManagerRef PM) {
237911112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  delete unwrap(PM);
238011112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
2381