Core.cpp revision 19f047f5f6c44d1cd5681f9314b3ff5e7bae122d
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//
108b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen// This file implements the C bindings for libLLVMCore.a, which implements
118b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen// the LLVM intermediate representation.
128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//===----------------------------------------------------------------------===//
148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm-c/Core.h"
168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm/Bitcode/ReaderWriter.h"
178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm/Constants.h"
188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm/DerivedTypes.h"
198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm/GlobalVariable.h"
20851ba39dab544ad986f150aec9573add9d978397Chris Lattner#include "llvm/GlobalAlias.h"
218b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson#include "llvm/LLVMContext.h"
2246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen#include "llvm/TypeSymbolTable.h"
23851ba39dab544ad986f150aec9573add9d978397Chris Lattner#include "llvm/InlineAsm.h"
242a9c671a51126def8020870103316e6aedc73edfGordon Henriksen#include "llvm/IntrinsicInst.h"
25e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen#include "llvm/Support/CallSite.h"
26f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin#include "llvm/Support/Debug.h"
27c25e7581b9b8088910da31702d4ca21c4734c6d7Torok Edwin#include "llvm/Support/ErrorHandling.h"
28f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin#include "llvm/Support/MemoryBuffer.h"
29f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin#include "llvm/Support/raw_ostream.h"
308b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include <cassert>
31da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen#include <cstdlib>
32ae9f3a3b7c915f725aef5a7250e88eaeddda03c6Anton Korobeynikov#include <cstring>
338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenusing namespace llvm;
358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
37da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Error handling ----------------------------------------------------===*/
38da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
39da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenvoid LLVMDisposeMessage(char *Message) {
40da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  free(Message);
41da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
42da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
43da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
448b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson/*===-- Operations on contexts --------------------------------------------===*/
458b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
468b477ed579794ba6d76915d56b3f448a7dd20120Owen AndersonLLVMContextRef LLVMContextCreate() {
478b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson  return wrap(new LLVMContext());
488b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson}
498b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
50c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen AndersonLLVMContextRef LLVMGetGlobalContext() {
51c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson  return wrap(&getGlobalContext());
52c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson}
53c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson
548b477ed579794ba6d76915d56b3f448a7dd20120Owen Andersonvoid LLVMContextDispose(LLVMContextRef C) {
558b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson  delete unwrap(C);
568b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson}
578b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
588b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
598b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- Operations on modules ---------------------------------------------===*/
608b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
61c8897d9c2f9fcee6061a2c2d380028269026a836Owen AndersonLLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID) {
62c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson  return wrap(new Module(ModuleID, getGlobalContext()));
63c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson}
64c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson
65c8897d9c2f9fcee6061a2c2d380028269026a836Owen AndersonLLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
66c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson                                                LLVMContextRef C) {
6731895e73591d3c9ceae731a1274c8f56194b9616Owen Anderson  return wrap(new Module(ModuleID, *unwrap(C)));
688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMDisposeModule(LLVMModuleRef M) {
718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  delete unwrap(M);
728b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
74a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/*--.. Data layout .........................................................--*/
75a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenconst char * LLVMGetDataLayout(LLVMModuleRef M) {
76a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  return unwrap(M)->getDataLayout().c_str();
77a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
78a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
79a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenvoid LLVMSetDataLayout(LLVMModuleRef M, const char *Triple) {
80a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  unwrap(M)->setDataLayout(Triple);
81a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
82a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
83a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/*--.. Target triple .......................................................--*/
84a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenconst char * LLVMGetTarget(LLVMModuleRef M) {
85a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  return unwrap(M)->getTargetTriple().c_str();
86a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
87a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
88a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenvoid LLVMSetTarget(LLVMModuleRef M, const char *Triple) {
89a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  unwrap(M)->setTargetTriple(Triple);
90a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
91a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
92a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/*--.. Type names ..........................................................--*/
93d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty) {
948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap(M)->addTypeName(Name, unwrap(Ty));
958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
9746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteTypeName(LLVMModuleRef M, const char *Name) {
9846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  TypeSymbolTable &TST = unwrap(M)->getTypeSymbolTable();
998113c6739e854d94910491965d83797487bc8a54Daniel Dunbar
1008113c6739e854d94910491965d83797487bc8a54Daniel Dunbar  TypeSymbolTable::iterator I = TST.find(Name);
1018113c6739e854d94910491965d83797487bc8a54Daniel Dunbar  if (I != TST.end())
1028113c6739e854d94910491965d83797487bc8a54Daniel Dunbar    TST.remove(I);
10346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
10446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
105e4840bc611f8260065d3879a412ea3b501550995Chris LattnerLLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name) {
1068113c6739e854d94910491965d83797487bc8a54Daniel Dunbar  return wrap(unwrap(M)->getTypeByName(Name));
107e4840bc611f8260065d3879a412ea3b501550995Chris Lattner}
108e4840bc611f8260065d3879a412ea3b501550995Chris Lattner
109af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksenvoid LLVMDumpModule(LLVMModuleRef M) {
110af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen  unwrap(M)->dump();
111af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen}
112af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen
1138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- Operations on types -----------------------------------------------===*/
1158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on all types (mostly) ....................................--*/
1178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty) {
1190df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  switch (unwrap(Ty)->getTypeID()) {
120efd280b4caf261b95551a317bb398a90d2e90011Daniel Dunbar  default:
121efd280b4caf261b95551a317bb398a90d2e90011Daniel Dunbar    assert(false && "Unhandled TypeID.");
1220df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::VoidTyID:
1230df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMVoidTypeKind;
1240df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::FloatTyID:
1250df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMFloatTypeKind;
1260df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::DoubleTyID:
1270df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMDoubleTypeKind;
1280df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::X86_FP80TyID:
1290df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMX86_FP80TypeKind;
1300df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::FP128TyID:
1310df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMFP128TypeKind;
1320df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::PPC_FP128TyID:
1330df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMPPC_FP128TypeKind;
1340df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::LabelTyID:
1350df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMLabelTypeKind;
1360df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::MetadataTyID:
1370df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMMetadataTypeKind;
1380df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::IntegerTyID:
1390df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMIntegerTypeKind;
1400df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::FunctionTyID:
1410df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMFunctionTypeKind;
1420df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::StructTyID:
1430df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMStructTypeKind;
144fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner  case Type::UnionTyID:
145fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner    return LLVMUnionTypeKind;
1460df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::ArrayTyID:
1470df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMArrayTypeKind;
1480df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::PointerTyID:
1490df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMPointerTypeKind;
1500df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::OpaqueTyID:
1510df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMOpaqueTypeKind;
1520df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::VectorTyID:
1530df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMVectorTypeKind;
1540df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  }
1558b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
1568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
15722c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty) {
15822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(&unwrap(Ty)->getContext());
15922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
16022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
1618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on integer types .........................................--*/
1628b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
16322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C)  {
16422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt1Ty(*unwrap(C));
16522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
16622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C)  {
16722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt8Ty(*unwrap(C));
16822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
16922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C) {
17022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt16Ty(*unwrap(C));
17122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
17222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C) {
17322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt32Ty(*unwrap(C));
17422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
17522c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C) {
17622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt64Ty(*unwrap(C));
17722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
17822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits) {
17922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(IntegerType::get(*unwrap(C), NumBits));
18022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
18122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
1821d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt1Type(void)  {
18322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt1TypeInContext(LLVMGetGlobalContext());
1841d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
1851d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt8Type(void)  {
18622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt8TypeInContext(LLVMGetGlobalContext());
1871d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
1881d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt16Type(void) {
18922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt16TypeInContext(LLVMGetGlobalContext());
1901d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
1911d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt32Type(void) {
19222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt32TypeInContext(LLVMGetGlobalContext());
1931d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
1941d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt64Type(void) {
19522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt64TypeInContext(LLVMGetGlobalContext());
1961d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
19781a788176ecf158432af2b208b0a85321e5ec74aGordon HenriksenLLVMTypeRef LLVMIntType(unsigned NumBits) {
19822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMIntTypeInContext(LLVMGetGlobalContext(), NumBits);
1998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
20146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy) {
2028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<IntegerType>(IntegerTy)->getBitWidth();
2038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on real types ............................................--*/
2068b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
20722c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C) {
20822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getFloatTy(*unwrap(C));
20922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
21022c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C) {
21122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getDoubleTy(*unwrap(C));
21222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
21322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C) {
21422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getX86_FP80Ty(*unwrap(C));
21522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
21622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C) {
21722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getFP128Ty(*unwrap(C));
21822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
21922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C) {
22022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getPPC_FP128Ty(*unwrap(C));
22122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
22222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
2231d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMFloatType(void) {
22422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMFloatTypeInContext(LLVMGetGlobalContext());
2251d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2261d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMDoubleType(void) {
22722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMDoubleTypeInContext(LLVMGetGlobalContext());
2281d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2291d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMX86FP80Type(void) {
23022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMX86FP80TypeInContext(LLVMGetGlobalContext());
2311d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2321d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMFP128Type(void) {
23322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMFP128TypeInContext(LLVMGetGlobalContext());
2341d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2351d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMPPCFP128Type(void) {
23622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMPPCFP128TypeInContext(LLVMGetGlobalContext());
2371d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
2388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2398b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on function types ........................................--*/
2408b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
24181a788176ecf158432af2b208b0a85321e5ec74aGordon HenriksenLLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
24281a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen                             LLVMTypeRef *ParamTypes, unsigned ParamCount,
243d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool IsVarArg) {
2448b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  std::vector<const Type*> Tys;
2458b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  for (LLVMTypeRef *I = ParamTypes, *E = ParamTypes + ParamCount; I != E; ++I)
2468b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    Tys.push_back(unwrap(*I));
2478b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
248debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(FunctionType::get(unwrap(ReturnType), Tys, IsVarArg != 0));
2498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2508b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
251d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy) {
2528b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<FunctionType>(FunctionTy)->isVarArg();
2538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2548b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
25546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy) {
2568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return wrap(unwrap<FunctionType>(FunctionTy)->getReturnType());
2578b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
25946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy) {
2608b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<FunctionType>(FunctionTy)->getNumParams();
2618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2628b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
26346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest) {
2648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  FunctionType *Ty = unwrap<FunctionType>(FunctionTy);
2658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  for (FunctionType::param_iterator I = Ty->param_begin(),
2668b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                                    E = Ty->param_end(); I != E; ++I)
2678b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    *Dest++ = wrap(*I);
2688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on struct types ..........................................--*/
2718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
27222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
273d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                           unsigned ElementCount, LLVMBool Packed) {
2748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  std::vector<const Type*> Tys;
2758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  for (LLVMTypeRef *I = ElementTypes,
2768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                   *E = ElementTypes + ElementCount; I != E; ++I)
2778b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    Tys.push_back(unwrap(*I));
2788b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
27922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(StructType::get(*unwrap(C), Tys, Packed != 0));
2808b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2818b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
28222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes,
283d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                           unsigned ElementCount, LLVMBool Packed) {
28422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMStructTypeInContext(LLVMGetGlobalContext(), ElementTypes,
28522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                 ElementCount, Packed);
28622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
28722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
28822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
28946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy) {
2908b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<StructType>(StructTy)->getNumElements();
2918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2938b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest) {
2948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  StructType *Ty = unwrap<StructType>(StructTy);
2958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  for (FunctionType::param_iterator I = Ty->element_begin(),
2968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                                    E = Ty->element_end(); I != E; ++I)
2978b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    *Dest++ = wrap(*I);
2988b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
300d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy) {
3018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<StructType>(StructTy)->isPacked();
3028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
304fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner/*--.. Operations on union types ..........................................--*/
305fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner
306fdfeb6976f07ad10d809b922ed7376ba2a3539beChris LattnerLLVMTypeRef LLVMUnionTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
307fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner                                   unsigned ElementCount) {
308fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner  SmallVector<const Type*, 8> Tys;
309fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner  for (LLVMTypeRef *I = ElementTypes,
310fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner                   *E = ElementTypes + ElementCount; I != E; ++I)
311fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner    Tys.push_back(unwrap(*I));
312fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner
313fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner  return wrap(UnionType::get(&Tys[0], Tys.size()));
314fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner}
315fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner
316fdfeb6976f07ad10d809b922ed7376ba2a3539beChris LattnerLLVMTypeRef LLVMUnionType(LLVMTypeRef *ElementTypes,
317fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner                           unsigned ElementCount, int Packed) {
318fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner  return LLVMUnionTypeInContext(LLVMGetGlobalContext(), ElementTypes,
319fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner                                ElementCount);
320fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner}
321fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner
322fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattnerunsigned LLVMCountUnionElementTypes(LLVMTypeRef UnionTy) {
323fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner  return unwrap<UnionType>(UnionTy)->getNumElements();
324fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner}
325fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner
326fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattnervoid LLVMGetUnionElementTypes(LLVMTypeRef UnionTy, LLVMTypeRef *Dest) {
327fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner  UnionType *Ty = unwrap<UnionType>(UnionTy);
328fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner  for (FunctionType::param_iterator I = Ty->element_begin(),
329fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner                                    E = Ty->element_end(); I != E; ++I)
330fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner    *Dest++ = wrap(*I);
331fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner}
332fdfeb6976f07ad10d809b922ed7376ba2a3539beChris Lattner
3338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on array, pointer, and vector types (sequence types) .....--*/
3348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
33557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenLLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount) {
336debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(ArrayType::get(unwrap(ElementType), ElementCount));
3378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
33957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenLLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace) {
340debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(PointerType::get(unwrap(ElementType), AddressSpace));
3418b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3428b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
34357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenLLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount) {
344debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(VectorType::get(unwrap(ElementType), ElementCount));
3458b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3468b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
3478b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty) {
3488b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return wrap(unwrap<SequentialType>(Ty)->getElementType());
3498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3508b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
3518b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy) {
3528b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<ArrayType>(ArrayTy)->getNumElements();
3538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3548b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
35557cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenunsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy) {
35657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen  return unwrap<PointerType>(PointerTy)->getAddressSpace();
35757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen}
35857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
3598b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetVectorSize(LLVMTypeRef VectorTy) {
3608b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<VectorType>(VectorTy)->getNumElements();
3618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3628b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
3638b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on other types ...........................................--*/
3648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
36522c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C)  {
36622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(Type::getVoidTy(*unwrap(C)));
36722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
36822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C) {
36922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(Type::getLabelTy(*unwrap(C)));
37022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
37122c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMOpaqueTypeInContext(LLVMContextRef C) {
37222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(OpaqueType::get(*unwrap(C)));
37322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
37422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
3751d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMVoidType(void)  {
37622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMVoidTypeInContext(LLVMGetGlobalContext());
3771d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
3781d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMLabelType(void) {
37922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMLabelTypeInContext(LLVMGetGlobalContext());
3801d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
38116c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMOpaqueType(void) {
38222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMOpaqueTypeInContext(LLVMGetGlobalContext());
3838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3848b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
385dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/*--.. Operations on type handles ..........................................--*/
3861cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen
3871cf08fddc7413076dedad58dbb8d8d67e69a490fGordon HenriksenLLVMTypeHandleRef LLVMCreateTypeHandle(LLVMTypeRef PotentiallyAbstractTy) {
3881cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen  return wrap(new PATypeHolder(unwrap(PotentiallyAbstractTy)));
3891cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen}
3901cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen
3911cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenvoid LLVMDisposeTypeHandle(LLVMTypeHandleRef TypeHandle) {
3921cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen  delete unwrap(TypeHandle);
3931cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen}
3941cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen
3951cf08fddc7413076dedad58dbb8d8d67e69a490fGordon HenriksenLLVMTypeRef LLVMResolveTypeHandle(LLVMTypeHandleRef TypeHandle) {
3961cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen  return wrap(unwrap(TypeHandle)->get());
3971cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen}
3981cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen
3991cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksenvoid LLVMRefineType(LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy) {
4001cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen  unwrap<DerivedType>(AbstractTy)->refineAbstractTypeTo(unwrap(ConcreteTy));
4011cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen}
4021cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen
4038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- Operations on values ----------------------------------------------===*/
4058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4068b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on all values ............................................--*/
4078b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
40846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMTypeRef LLVMTypeOf(LLVMValueRef Val) {
4098b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return wrap(unwrap(Val)->getType());
4108b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4118b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenconst char *LLVMGetValueName(LLVMValueRef Val) {
41393b67e40de356569493c285b86b138a3f11b5035Daniel Dunbar  return unwrap(Val)->getName().data();
4148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetValueName(LLVMValueRef Val, const char *Name) {
4178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap(Val)->setName(Name);
4188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
42088cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksenvoid LLVMDumpValue(LLVMValueRef Val) {
42188cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen  unwrap(Val)->dump();
42288cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen}
42388cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen
424885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnervoid LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal) {
425885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  unwrap(OldVal)->replaceAllUsesWith(unwrap(NewVal));
426885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
4272a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
4282a9c671a51126def8020870103316e6aedc73edfGordon Henriksen/*--.. Conversion functions ................................................--*/
4292a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
4302a9c671a51126def8020870103316e6aedc73edfGordon Henriksen#define LLVM_DEFINE_VALUE_CAST(name)                                       \
4312a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  LLVMValueRef LLVMIsA##name(LLVMValueRef Val) {                           \
4322a9c671a51126def8020870103316e6aedc73edfGordon Henriksen    return wrap(static_cast<Value*>(dyn_cast_or_null<name>(unwrap(Val)))); \
4332a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  }
4342a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
4352a9c671a51126def8020870103316e6aedc73edfGordon HenriksenLLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DEFINE_VALUE_CAST)
4362a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
437885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner/*--.. Operations on Uses ..................................................--*/
438885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMUseIteratorRef LLVMGetFirstUse(LLVMValueRef Val) {
439885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Value *V = unwrap(Val);
440885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Value::use_iterator I = V->use_begin();
441885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  if (I == V->use_end())
442885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner    return 0;
443885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(&(I.getUse()));
444885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
445885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
446885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMUseIteratorRef LLVMGetNextUse(LLVMUseIteratorRef UR) {
447885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(unwrap(UR)->getNext());
448885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
449885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
450885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMValueRef LLVMGetUser(LLVMUseIteratorRef UR) {
451885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(unwrap(UR)->getUser());
452885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
453885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
454885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMValueRef LLVMGetUsedValue(LLVMUseIteratorRef UR) {
455885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(unwrap(UR)->get());
456885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
457885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
458885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner/*--.. Operations on Users .................................................--*/
459885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index) {
460885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(unwrap<User>(Val)->getOperand(Index));
461885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
4622a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
4638b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on constants of any type .................................--*/
4648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
465e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstNull(LLVMTypeRef Ty) {
466a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson  return wrap(Constant::getNullValue(unwrap(Ty)));
4678b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
469e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty) {
470a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson  return wrap(Constant::getAllOnesValue(unwrap(Ty)));
4718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4728b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMGetUndef(LLVMTypeRef Ty) {
4749e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson  return wrap(UndefValue::get(unwrap(Ty)));
4758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
477d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsConstant(LLVMValueRef Ty) {
478344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen  return isa<Constant>(unwrap(Ty));
479344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen}
480344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen
481d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsNull(LLVMValueRef Val) {
4828b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  if (Constant *C = dyn_cast<Constant>(unwrap(Val)))
4838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    return C->isNullValue();
4848b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return false;
4858b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4868b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
487d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsUndef(LLVMValueRef Val) {
488344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen  return isa<UndefValue>(unwrap(Val));
489344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen}
490344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen
491e4840bc611f8260065d3879a412ea3b501550995Chris LattnerLLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty) {
49262e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson  return
4939e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson      wrap(ConstantPointerNull::get(unwrap<PointerType>(Ty)));
494e4840bc611f8260065d3879a412ea3b501550995Chris Lattner}
495e4840bc611f8260065d3879a412ea3b501550995Chris Lattner
4968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on scalar constants ......................................--*/
4978b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
498e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
499d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                          LLVMBool SignExtend) {
500eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson  return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), N, SignExtend != 0));
5018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
503e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char Str[],
504e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                  uint8_t Radix) {
505e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str),
506e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                               Radix));
507e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar}
508e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar
509e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char Str[],
510e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                         unsigned SLen, uint8_t Radix) {
511e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str, SLen),
512e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                               Radix));
513e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen}
514e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen
515e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N) {
516e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantFP::get(unwrap(RealTy), N));
517e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen}
518e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen
519e62a8a353c3b21b551c00b9025800d3352e5349eGordon HenriksenLLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text) {
520e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Text)));
521e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar}
522e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar
523e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char Str[],
524e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                          unsigned SLen) {
525e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Str, SLen)));
5268b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5278b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
528885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnerunsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal) {
529885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return unwrap<ConstantInt>(ConstantVal)->getZExtValue();
530885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
531885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
532885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnerlong long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal) {
533885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return unwrap<ConstantInt>(ConstantVal)->getSExtValue();
534885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
535885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
5368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on composite constants ...................................--*/
5378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
53822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
539d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                      unsigned Length,
540d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                      LLVMBool DontNullTerminate) {
5418b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  /* Inverted the sense of AddNull because ', 0)' is a
5428b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen     better mnemonic for null termination than ', 1)'. */
54322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(ConstantArray::get(*unwrap(C), std::string(Str, Length),
5448b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                                 DontNullTerminate == 0));
5458b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
54622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
54722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                      LLVMValueRef *ConstantVals,
548d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                      unsigned Count, LLVMBool Packed) {
54922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(ConstantStruct::get(*unwrap(C),
55022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                  unwrap<Constant>(ConstantVals, Count),
55122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                  Count, Packed != 0));
55222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
5538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
55422c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMValueRef LLVMConstString(const char *Str, unsigned Length,
555d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool DontNullTerminate) {
55622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMConstStringInContext(LLVMGetGlobalContext(), Str, Length,
55722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                  DontNullTerminate);
55822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
559e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
560e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                            LLVMValueRef *ConstantVals, unsigned Length) {
561debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(ConstantArray::get(ArrayType::get(unwrap(ElementTy), Length),
5628b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                                 unwrap<Constant>(ConstantVals, Length),
5638b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                                 Length));
5648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
565e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
566d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool Packed) {
56722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMConstStructInContext(LLVMGetGlobalContext(), ConstantVals, Count,
56822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                  Packed);
5698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
570e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size) {
571af7ec975870f92245f1f1484ac80a1e2db6a0afaOwen Anderson  return wrap(ConstantVector::get(
57262e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                            unwrap<Constant>(ScalarConstantVals, Size), Size));
5738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5741940dd10dd6b79e3332f384756c268b85d0ad400Erick TryzelaarLLVMValueRef LLVMConstUnion(LLVMTypeRef Ty, LLVMValueRef Val) {
5751940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar  return wrap(ConstantUnion::get(unwrap<UnionType>(Ty), unwrap<Constant>(Val)));
5761940dd10dd6b79e3332f384756c268b85d0ad400Erick Tryzelaar}
5774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
5784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/*--.. Constant expressions ................................................--*/
5794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
580885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal) {
581885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return (LLVMOpcode)unwrap<ConstantExpr>(ConstantVal)->getOpcode();
582885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
583885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
584ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan SandsLLVMValueRef LLVMAlignOf(LLVMTypeRef Ty) {
585baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAlignOf(unwrap(Ty)));
586ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands}
587ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
5884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMSizeOf(LLVMTypeRef Ty) {
589baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSizeOf(unwrap(Ty)));
5904647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
5914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
5924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal) {
593baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getNeg(
59456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                   unwrap<Constant>(ConstantVal)));
59556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
59656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
59719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal) {
59819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(ConstantExpr::getNSWNeg(
59919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(ConstantVal)));
60019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
60119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
60219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal) {
60319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(ConstantExpr::getNUWNeg(
60419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(ConstantVal)));
60519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
60619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
60719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
60856b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal) {
60956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFNeg(
61056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(ConstantVal)));
6114647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6124647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6134647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal) {
614baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getNot(
61556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                   unwrap<Constant>(ConstantVal)));
6164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6174647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
619baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAdd(
62062e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
6214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
6224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6246e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant,
6256e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                             LLVMValueRef RHSConstant) {
6266e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  return wrap(ConstantExpr::getNSWAdd(
6276e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                      unwrap<Constant>(LHSConstant),
6286e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                      unwrap<Constant>(RHSConstant)));
6296e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
6306e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
63119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant,
63219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
63319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(ConstantExpr::getNUWAdd(
63419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(LHSConstant),
63519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
63619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
63719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
63856b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
63956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFAdd(
64056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(LHSConstant),
64156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
64256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
64356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
6444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
645baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSub(
64662e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
6474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
6484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
65019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant,
65119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
65219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(ConstantExpr::getNSWSub(
65319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(LHSConstant),
65419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
65519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
65619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
65719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant,
65819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
65919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(ConstantExpr::getNUWSub(
66019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(LHSConstant),
66119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
66219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
66319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
66456b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
66556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFSub(unwrap<Constant>(LHSConstant),
66656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
66756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
66856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
6694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
670baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getMul(
67162e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
6724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
6734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
67519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant,
67619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
67719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(ConstantExpr::getNSWMul(
67819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(LHSConstant),
67919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
68019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
68119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
68219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant,
68319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
68419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(ConstantExpr::getNUWMul(
68519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(LHSConstant),
68619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
68719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
68819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
68956b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
69056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFMul(
69156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(LHSConstant),
69256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
69356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
69456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
6954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
696baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getUDiv(
69762e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
6984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
6994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
702baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSDiv(
70362e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
7044647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7054647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7064647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7076e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant,
7086e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                LLVMValueRef RHSConstant) {
7096e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  return wrap(ConstantExpr::getExactSDiv(
7106e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                         unwrap<Constant>(LHSConstant),
7116e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                         unwrap<Constant>(RHSConstant)));
7126e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
7136e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
7144647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
715baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFDiv(
71662e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
7174647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
721baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getURem(
72262e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
7234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7254647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
727baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSRem(
72862e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
7294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7304647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
733baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFRem(
73462e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
7354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7364647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7374647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
739baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAnd(
74062e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
7414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
7424647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
745baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getOr(
74662e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                  unwrap<Constant>(LHSConstant),
7474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                  unwrap<Constant>(RHSConstant)));
7484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
751baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getXor(
75262e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
7534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
7544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
7574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
758baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getICmp(Predicate,
7594647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(LHSConstant),
7604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
7644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
765baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFCmp(Predicate,
7664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(LHSConstant),
7674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
771baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getShl(
77262e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                  unwrap<Constant>(LHSConstant),
7734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                  unwrap<Constant>(RHSConstant)));
7744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
777baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getLShr(
77862e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
7794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
783baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAShr(
78462e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
7854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
7894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                          LLVMValueRef *ConstantIndices, unsigned NumIndices) {
790baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getGetElementPtr(
79162e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                             unwrap<Constant>(ConstantVal),
7924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(ConstantIndices,
7934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                                              NumIndices),
7944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             NumIndices));
7954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7976e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
7986e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  LLVMValueRef *ConstantIndices,
7996e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  unsigned NumIndices) {
8006e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  Constant* Val = unwrap<Constant>(ConstantVal);
8016e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  Constant** Idxs = unwrap<Constant>(ConstantIndices, NumIndices);
8026e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  return wrap(ConstantExpr::getInBoundsGetElementPtr(Val, Idxs, NumIndices));
8036e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
8046e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
8054647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
806baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getTrunc(
80762e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                     unwrap<Constant>(ConstantVal),
8084647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                     unwrap(ToType)));
8094647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8104647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8114647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
812baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSExt(
81362e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(ConstantVal),
8144647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap(ToType)));
8154647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8174647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
818baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getZExt(
81962e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(ConstantVal),
8204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap(ToType)));
8214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
824baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPTrunc(
82562e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                       unwrap<Constant>(ConstantVal),
8264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                       unwrap(ToType)));
8274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
830baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPExtend(
83162e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                        unwrap<Constant>(ConstantVal),
8324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
8334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
836baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getUIToFP(
83762e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                      unwrap<Constant>(ConstantVal),
8384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
8394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
842baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSIToFP(unwrap<Constant>(ConstantVal),
8434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
8444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
847baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPToUI(unwrap<Constant>(ConstantVal),
8484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
8494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
852baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPToSI(
85362e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                      unwrap<Constant>(ConstantVal),
8544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
8554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
858baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getPtrToInt(
85962e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                        unwrap<Constant>(ConstantVal),
8604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
8614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
864baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getIntToPtr(
86562e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                        unwrap<Constant>(ConstantVal),
8664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
8674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
870baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getBitCast(
87162e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                       unwrap<Constant>(ConstantVal),
8724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                       unwrap(ToType)));
8734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
87556b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
87656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType) {
87756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getZExtOrBitCast(
87856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap<Constant>(ConstantVal),
87956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap(ToType)));
88056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
88156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
88256b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
88356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType) {
88456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getSExtOrBitCast(
88556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap<Constant>(ConstantVal),
88656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap(ToType)));
88756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
88856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
88956b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
89056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                     LLVMTypeRef ToType) {
89156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getTruncOrBitCast(
89256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                              unwrap<Constant>(ConstantVal),
89356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                              unwrap(ToType)));
89456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
89556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
89656b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
89756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                  LLVMTypeRef ToType) {
89856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getPointerCast(
89956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap<Constant>(ConstantVal),
90056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap(ToType)));
90156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
90256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
90356b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
904d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                              LLVMBool isSigned) {
90556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getIntegerCast(
90656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap<Constant>(ConstantVal),
90756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap(ToType),
90856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           isSigned));
90956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
91056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
91156b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
91256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFPCast(
91356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                      unwrap<Constant>(ConstantVal),
91456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                      unwrap(ToType)));
91556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
91656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
9174647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
9184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfTrue,
9194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfFalse) {
920baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSelect(
92162e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                      unwrap<Constant>(ConstantCondition),
9224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap<Constant>(ConstantIfTrue),
9234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap<Constant>(ConstantIfFalse)));
9244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9254647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
9274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                     LLVMValueRef IndexConstant) {
928baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getExtractElement(
92962e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                              unwrap<Constant>(VectorConstant),
9304647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                              unwrap<Constant>(IndexConstant)));
9314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
9344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef ElementValueConstant,
9354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef IndexConstant) {
936baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getInsertElement(
93762e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                         unwrap<Constant>(VectorConstant),
9384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                         unwrap<Constant>(ElementValueConstant),
9394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(IndexConstant)));
9404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9424647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
9434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef VectorBConstant,
9444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef MaskConstant) {
945baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getShuffleVector(
94662e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                             unwrap<Constant>(VectorAConstant),
9474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(VectorBConstant),
9484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(MaskConstant)));
9494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9508b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
951b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
952b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned NumIdx) {
953baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getExtractValue(
95462e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                            unwrap<Constant>(AggConstant),
955b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                            IdxList, NumIdx));
956b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
957b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
958b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
959b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef ElementValueConstant,
960b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  unsigned *IdxList, unsigned NumIdx) {
961baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getInsertValue(
96262e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                         unwrap<Constant>(AggConstant),
963b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                         unwrap<Constant>(ElementValueConstant),
964b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                           IdxList, NumIdx));
965b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
966b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
967d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, const char *AsmString,
968d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                const char *Constraints,
969d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                LLVMBool HasSideEffects,
970d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                LLVMBool IsAlignStack) {
971d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner  return wrap(InlineAsm::get(dyn_cast<FunctionType>(unwrap(Ty)), AsmString,
9728ba2d5befc05ca73d3bac8708819bbbe759e2cf9Dale Johannesen                             Constraints, HasSideEffects, IsAlignStack));
973851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
974851ba39dab544ad986f150aec9573add9d978397Chris Lattner
9758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on global variables, functions, and aliases (globals) ....--*/
9768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
977dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global) {
978dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<GlobalValue>(Global)->getParent());
979dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
980dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
981d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsDeclaration(LLVMValueRef Global) {
9828b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->isDeclaration();
9838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
9848b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
9858b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMLinkage LLVMGetLinkage(LLVMValueRef Global) {
9864aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  switch (unwrap<GlobalValue>(Global)->getLinkage()) {
9874aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  default:
9884aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    assert(false && "Unhandled Linkage Type.");
9894aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::ExternalLinkage:
9904aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMExternalLinkage;
9914aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::AvailableExternallyLinkage:
9924aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMAvailableExternallyLinkage;
9934aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkOnceAnyLinkage:
9944aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkOnceAnyLinkage;
9954aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkOnceODRLinkage:
9964aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkOnceODRLinkage;
9974aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::WeakAnyLinkage:
9984aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMWeakAnyLinkage;
9994aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::WeakODRLinkage:
10004aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMWeakODRLinkage;
10014aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::AppendingLinkage:
10024aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMAppendingLinkage;
10034aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::InternalLinkage:
10044aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMInternalLinkage;
10054aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::PrivateLinkage:
10064aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMPrivateLinkage;
10074aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkerPrivateLinkage:
10084aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkerPrivateLinkage;
10094aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::DLLImportLinkage:
10104aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMDLLImportLinkage;
10114aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::DLLExportLinkage:
10124aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMDLLExportLinkage;
10134aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::ExternalWeakLinkage:
10144aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMExternalWeakLinkage;
10154aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::CommonLinkage:
10164aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMCommonLinkage;
10174aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  }
10184aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling
10194aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  // Should never get here.
10204aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  return static_cast<LLVMLinkage>(0);
10218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10228b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10238b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage) {
10244aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  GlobalValue *GV = unwrap<GlobalValue>(Global);
10254aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling
10264aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  switch (Linkage) {
10274aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  default:
10284aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    assert(false && "Unhandled Linkage Type.");
10294aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMExternalLinkage:
10304aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::ExternalLinkage);
10314aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10324aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMAvailableExternallyLinkage:
10334aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::AvailableExternallyLinkage);
10344aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10354aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkOnceAnyLinkage:
10364aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkOnceAnyLinkage);
10374aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10384aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkOnceODRLinkage:
10394aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkOnceODRLinkage);
10404aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10414aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMWeakAnyLinkage:
10424aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::WeakAnyLinkage);
10434aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10444aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMWeakODRLinkage:
10454aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::WeakODRLinkage);
10464aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10474aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMAppendingLinkage:
10484aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::AppendingLinkage);
10494aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10504aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMInternalLinkage:
10514aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::InternalLinkage);
10524aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10534aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMPrivateLinkage:
10544aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::PrivateLinkage);
10554aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10564aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkerPrivateLinkage:
10574aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkerPrivateLinkage);
10584aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10594aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMDLLImportLinkage:
10604aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::DLLImportLinkage);
10614aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10624aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMDLLExportLinkage:
10634aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::DLLExportLinkage);
10644aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10654aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMExternalWeakLinkage:
10664aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::ExternalWeakLinkage);
10674aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10684aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMGhostLinkage:
1069f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin    DEBUG(errs()
1070f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin          << "LLVMSetLinkage(): LLVMGhostLinkage is no longer supported.");
10714aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10724aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMCommonLinkage:
10734aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::CommonLinkage);
10744aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10754aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  }
10768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10778b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10788b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenconst char *LLVMGetSection(LLVMValueRef Global) {
10798b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->getSection().c_str();
10808b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10818b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10828b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetSection(LLVMValueRef Global, const char *Section) {
10838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)->setSection(Section);
10848b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10858b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10868b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMVisibility LLVMGetVisibility(LLVMValueRef Global) {
10878b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return static_cast<LLVMVisibility>(
10888b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    unwrap<GlobalValue>(Global)->getVisibility());
10898b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10908b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz) {
10928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)
10938b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    ->setVisibility(static_cast<GlobalValue::VisibilityTypes>(Viz));
10948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetAlignment(LLVMValueRef Global) {
10978b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->getAlignment();
10988b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes) {
11018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)->setAlignment(Bytes);
11028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on global variables ......................................--*/
11058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11068b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name) {
1107e9b11b431308f4766b73cda93e38ec930c912122Owen Anderson  return wrap(new GlobalVariable(*unwrap(M), unwrap(Ty), false,
1108e9b11b431308f4766b73cda93e38ec930c912122Owen Anderson                                 GlobalValue::ExternalLinkage, 0, Name));
11098b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11108b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11116d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenLLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name) {
11126d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen  return wrap(unwrap(M)->getNamedGlobal(Name));
11136d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen}
11146d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen
111534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M) {
111634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
111734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = Mod->global_begin();
111834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->global_end())
111934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
112034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
112134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
112234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
112334000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M) {
112434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
112534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = Mod->global_end();
112634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->global_begin())
112734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
112834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
112934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
113034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
113134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar) {
113234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
113334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = GV;
113434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == GV->getParent()->global_end())
113534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
113634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
113734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
113834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
113934000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar) {
114034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
114134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = GV;
11424733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == GV->getParent()->global_begin())
114334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
114434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
114534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
114634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
11478b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMDeleteGlobal(LLVMValueRef GlobalVar) {
11488b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->eraseFromParent();
11498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11508b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11518b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar) {
1152885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  GlobalVariable* GV = unwrap<GlobalVariable>(GlobalVar);
1153885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  if ( !GV->hasInitializer() )
1154885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner    return 0;
1155885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(GV->getInitializer());
11568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11578b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal) {
11598b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)
11608b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    ->setInitializer(unwrap<Constant>(ConstantVal));
11618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11628b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1163d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar) {
11648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalVariable>(GlobalVar)->isThreadLocal();
11658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11668b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1167d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal) {
11688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->setThreadLocal(IsThreadLocal != 0);
11698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1171d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar) {
1172c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen  return unwrap<GlobalVariable>(GlobalVar)->isConstant();
1173c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen}
1174c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen
1175d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant) {
1176c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->setConstant(IsConstant != 0);
1177c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen}
1178c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen
1179851ba39dab544ad986f150aec9573add9d978397Chris Lattner/*--.. Operations on aliases ......................................--*/
1180851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1181851ba39dab544ad986f150aec9573add9d978397Chris LattnerLLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1182851ba39dab544ad986f150aec9573add9d978397Chris Lattner                          const char *Name) {
1183851ba39dab544ad986f150aec9573add9d978397Chris Lattner  return wrap(new GlobalAlias(unwrap(Ty), GlobalValue::ExternalLinkage, Name,
1184851ba39dab544ad986f150aec9573add9d978397Chris Lattner                              unwrap<Constant>(Aliasee), unwrap (M)));
1185851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1186851ba39dab544ad986f150aec9573add9d978397Chris Lattner
118746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Operations on functions .............................................--*/
118846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
118946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
119046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef FunctionTy) {
1191051a950000e21935165db56695e35bade668193bGabor Greif  return wrap(Function::Create(unwrap<FunctionType>(FunctionTy),
1192051a950000e21935165db56695e35bade668193bGabor Greif                               GlobalValue::ExternalLinkage, Name, unwrap(M)));
119346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
119446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
11956d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenLLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name) {
11966d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen  return wrap(unwrap(M)->getFunction(Name));
11976d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen}
11986d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen
119934000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M) {
120034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
120134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Mod->begin();
120234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->end())
120334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
120434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
120534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
120634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
120734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastFunction(LLVMModuleRef M) {
120834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
120934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Mod->end();
121034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->begin())
121134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
121234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
121334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
121434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
121534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn) {
121634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
121734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Func;
121834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Func->getParent()->end())
121934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
122034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
122134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
122234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
122334000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn) {
122434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
122534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Func;
12264733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->getParent()->begin())
122734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
122834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
122934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
123034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
123146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteFunction(LLVMValueRef Fn) {
123246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap<Function>(Fn)->eraseFromParent();
123346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
123446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
123546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetIntrinsicID(LLVMValueRef Fn) {
123646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (Function *F = dyn_cast<Function>(unwrap(Fn)))
123746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return F->getIntrinsicID();
123846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return 0;
123946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
124046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
124146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetFunctionCallConv(LLVMValueRef Fn) {
124246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return unwrap<Function>(Fn)->getCallingConv();
124346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
124446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
124546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC) {
124665c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel  return unwrap<Function>(Fn)->setCallingConv(
124765c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    static_cast<CallingConv::ID>(CC));
124846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
124946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
12505eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenconst char *LLVMGetGC(LLVMValueRef Fn) {
125180a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  Function *F = unwrap<Function>(Fn);
12525eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen  return F->hasGC()? F->getGC() : 0;
125380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen}
125480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
12555eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenvoid LLVMSetGC(LLVMValueRef Fn, const char *GC) {
125680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  Function *F = unwrap<Function>(Fn);
12575eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen  if (GC)
12585eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    F->setGC(GC);
125980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  else
12605eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    F->clearGC();
126180a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen}
126280a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1263e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
1264e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Function *Func = unwrap<Function>(Fn);
1265e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  const AttrListPtr PAL = Func->getAttributes();
1266f1ac0fd347823c5ab54577702f8eb062bf4ca70bKenneth Uildriks  const AttrListPtr PALnew = PAL.addAttr(~0U, PA);
1267e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Func->setAttributes(PALnew);
1268e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands}
1269e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1270e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
1271e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Function *Func = unwrap<Function>(Fn);
1272e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  const AttrListPtr PAL = Func->getAttributes();
1273f1ac0fd347823c5ab54577702f8eb062bf4ca70bKenneth Uildriks  const AttrListPtr PALnew = PAL.removeAttr(~0U, PA);
1274e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Func->setAttributes(PALnew);
1275e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands}
1276e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1277885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn) {
1278885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Function *Func = unwrap<Function>(Fn);
1279885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  const AttrListPtr PAL = Func->getAttributes();
1280885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Attributes attr = PAL.getFnAttributes();
1281885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return (LLVMAttribute)attr;
1282885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
1283885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1284dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/*--.. Operations on parameters ............................................--*/
1285dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1286dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenunsigned LLVMCountParams(LLVMValueRef FnRef) {
1287dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  // This function is strictly redundant to
1288dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  //   LLVMCountParamTypes(LLVMGetElementType(LLVMTypeOf(FnRef)))
12894d515d0b09d43af59cd040bfb8bf1b7a2b992980Dan Gohman  return unwrap<Function>(FnRef)->arg_size();
1290dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1291dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1292dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenvoid LLVMGetParams(LLVMValueRef FnRef, LLVMValueRef *ParamRefs) {
1293dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  Function *Fn = unwrap<Function>(FnRef);
1294dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  for (Function::arg_iterator I = Fn->arg_begin(),
1295dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen                              E = Fn->arg_end(); I != E; I++)
1296dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    *ParamRefs++ = wrap(I);
1297dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1298dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1299dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParam(LLVMValueRef FnRef, unsigned index) {
1300dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  Function::arg_iterator AI = unwrap<Function>(FnRef)->arg_begin();
1301dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  while (index --> 0)
1302dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    AI++;
1303dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(AI);
1304dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1305dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1306dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParamParent(LLVMValueRef V) {
1307dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<Argument>(V)->getParent());
1308dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1309dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
13104733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn) {
13114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function *Func = unwrap<Function>(Fn);
13124733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = Func->arg_begin();
13134733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->arg_end())
13144733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
13154733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(I);
13164733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
13174733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13184733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetLastParam(LLVMValueRef Fn) {
13194733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function *Func = unwrap<Function>(Fn);
13204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = Func->arg_end();
13214733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->arg_begin())
13224733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
13234733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(--I);
13244733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
13254733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13264733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetNextParam(LLVMValueRef Arg) {
13274733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Argument *A = unwrap<Argument>(Arg);
13284733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = A;
13294733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (++I == A->getParent()->arg_end())
13304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
13314733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(I);
13324733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
13334733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13344733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg) {
13354733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Argument *A = unwrap<Argument>(Arg);
13364733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = A;
13374733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == A->getParent()->arg_begin())
13384733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
13394733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(--I);
13404733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
13414733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
13420598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA) {
1343e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  unwrap<Argument>(Arg)->addAttr(PA);
1344e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1345e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
13460598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA) {
1347e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  unwrap<Argument>(Arg)->removeAttr(PA);
1348e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1349e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
1350885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetAttribute(LLVMValueRef Arg) {
1351885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Argument *A = unwrap<Argument>(Arg);
1352885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Attributes attr = A->getParent()->getAttributes().getParamAttributes(
1353885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner    A->getArgNo()+1);
1354885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return (LLVMAttribute)attr;
1355885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
1356885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1357885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1358e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksenvoid LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align) {
1359e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  unwrap<Argument>(Arg)->addAttr(
13600598866c052147c31b808391f58434ce3dbfb838Devang Patel          Attribute::constructAlignmentFromInt(align));
1361e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1362e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
136346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Operations on basic blocks ..........................................--*/
136446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1365dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB) {
1366dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(static_cast<Value*>(unwrap(BB)));
136746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
136846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1369d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val) {
137046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return isa<BasicBlock>(unwrap(Val));
137146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
137246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
137346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val) {
137446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap<BasicBlock>(Val));
137546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
137646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
13774733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB) {
13784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(unwrap(BB)->getParent());
1379dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1380dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
138146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountBasicBlocks(LLVMValueRef FnRef) {
13824d515d0b09d43af59cd040bfb8bf1b7a2b992980Dan Gohman  return unwrap<Function>(FnRef)->size();
138346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
138446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
138546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMGetBasicBlocks(LLVMValueRef FnRef, LLVMBasicBlockRef *BasicBlocksRefs){
138646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Function *Fn = unwrap<Function>(FnRef);
138746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  for (Function::iterator I = Fn->begin(), E = Fn->end(); I != E; I++)
138846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    *BasicBlocksRefs++ = wrap(I);
138946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
139046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
139146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn) {
139246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(&unwrap<Function>(Fn)->getEntryBlock());
139346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
139446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
139534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn) {
139634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
139734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Func->begin();
139834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Func->end())
139934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
140034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
140134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
140234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
140334000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn) {
140434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
140534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Func->end();
140634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Func->begin())
140734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
140834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
140934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
141034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
141134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB) {
141234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
141334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Block;
141434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Block->getParent()->end())
141534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
141634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
141734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
141834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
141934000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB) {
142034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
142134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Block;
142234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->getParent()->begin())
142334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
142434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
142534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
142634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
142722c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
142822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMValueRef FnRef,
142922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name) {
143022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(BasicBlock::Create(*unwrap(C), Name, unwrap<Function>(FnRef)));
143122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
143222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
143346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef FnRef, const char *Name) {
143422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMAppendBasicBlockInContext(LLVMGetGlobalContext(), FnRef, Name);
143522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
143622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
143722c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
143822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMBasicBlockRef BBRef,
143922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name) {
144022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  BasicBlock *BB = unwrap(BBRef);
144122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(BasicBlock::Create(*unwrap(C), Name, BB->getParent(), BB));
144246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
144346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
144422c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef BBRef,
144546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                       const char *Name) {
144622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInsertBasicBlockInContext(LLVMGetGlobalContext(), BBRef, Name);
144746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
144846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
144946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteBasicBlock(LLVMBasicBlockRef BBRef) {
145046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(BBRef)->eraseFromParent();
145146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
145246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1453dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/*--.. Operations on instructions ..........................................--*/
1454dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1455dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst) {
1456dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<Instruction>(Inst)->getParent());
1457dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1458dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
145934000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB) {
146034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
146134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Block->begin();
146234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->end())
146334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
146434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
146534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
146634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
146734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB) {
146834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
146934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Block->end();
147034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->begin())
147134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
147234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
147334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
147434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
147534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst) {
147634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *Instr = unwrap<Instruction>(Inst);
147734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Instr;
147834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Instr->getParent()->end())
147934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
148034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
148134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
148234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
148334000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst) {
148434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *Instr = unwrap<Instruction>(Inst);
148534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Instr;
148634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Instr->getParent()->begin())
148734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
148834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
148934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
149034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
149146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Call and invoke instructions ........................................--*/
149246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
149346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetInstructionCallConv(LLVMValueRef Instr) {
149446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Value *V = unwrap(Instr);
149546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (CallInst *CI = dyn_cast<CallInst>(V))
149646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return CI->getCallingConv();
149746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  else if (InvokeInst *II = dyn_cast<InvokeInst>(V))
149846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return II->getCallingConv();
1499c23197a26f34f559ea9797de51e187087c039c42Torok Edwin  llvm_unreachable("LLVMGetInstructionCallConv applies only to call and invoke!");
150046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return 0;
150146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
150246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
150346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC) {
150446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Value *V = unwrap(Instr);
150546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (CallInst *CI = dyn_cast<CallInst>(V))
150665c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    return CI->setCallingConv(static_cast<CallingConv::ID>(CC));
150746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  else if (InvokeInst *II = dyn_cast<InvokeInst>(V))
150865c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    return II->setCallingConv(static_cast<CallingConv::ID>(CC));
1509c23197a26f34f559ea9797de51e187087c039c42Torok Edwin  llvm_unreachable("LLVMSetInstructionCallConv applies only to call and invoke!");
151046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
151146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
15120598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index,
15130598866c052147c31b808391f58434ce3dbfb838Devang Patel                           LLVMAttribute PA) {
1514e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
15150598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
15160598866c052147c31b808391f58434ce3dbfb838Devang Patel    Call.getAttributes().addAttr(index, PA));
1517e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1518e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
15190598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
15200598866c052147c31b808391f58434ce3dbfb838Devang Patel                              LLVMAttribute PA) {
1521e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
15220598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
15230598866c052147c31b808391f58434ce3dbfb838Devang Patel    Call.getAttributes().removeAttr(index, PA));
1524e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1525e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
1526e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksenvoid LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
1527e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen                                unsigned align) {
1528e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
15290598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
15300598866c052147c31b808391f58434ce3dbfb838Devang Patel    Call.getAttributes().addAttr(index,
15310598866c052147c31b808391f58434ce3dbfb838Devang Patel        Attribute::constructAlignmentFromInt(align)));
1532e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1533e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
153407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/*--.. Operations on call instructions (only) ..............................--*/
153507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
1536d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsTailCall(LLVMValueRef Call) {
153707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen  return unwrap<CallInst>(Call)->isTailCall();
153807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen}
153907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
1540d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetTailCall(LLVMValueRef Call, LLVMBool isTailCall) {
154107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen  unwrap<CallInst>(Call)->setTailCall(isTailCall);
154207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen}
154307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
15442618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/*--.. Operations on phi nodes .............................................--*/
15452618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
15462618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenvoid LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
15472618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     LLVMBasicBlockRef *IncomingBlocks, unsigned Count) {
15482618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  PHINode *PhiVal = unwrap<PHINode>(PhiNode);
15492618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  for (unsigned I = 0; I != Count; ++I)
15502618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen    PhiVal->addIncoming(unwrap(IncomingValues[I]), unwrap(IncomingBlocks[I]));
15512618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
15522618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
15532618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenunsigned LLVMCountIncoming(LLVMValueRef PhiNode) {
15542618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return unwrap<PHINode>(PhiNode)->getNumIncomingValues();
15552618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
15562618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
15572618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index) {
15582618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return wrap(unwrap<PHINode>(PhiNode)->getIncomingValue(Index));
15592618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
15602618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
15612618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index) {
15622618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return wrap(unwrap<PHINode>(PhiNode)->getIncomingBlock(Index));
15632618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
15642618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
156546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
156646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*===-- Instruction builders ----------------------------------------------===*/
156746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
156822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C) {
156922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(new IRBuilder<>(*unwrap(C)));
157022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
157122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
157216c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMBuilderRef LLVMCreateBuilder(void) {
157322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMCreateBuilderInContext(LLVMGetGlobalContext());
157446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
157546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
157634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksenvoid LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
157734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen                         LLVMValueRef Instr) {
157834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *BB = unwrap(Block);
157934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *I = Instr? unwrap<Instruction>(Instr) : (Instruction*) BB->end();
158034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  unwrap(Builder)->SetInsertPoint(BB, I);
158134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
158234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
158346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr) {
158446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Instruction *I = unwrap<Instruction>(Instr);
158546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(Builder)->SetInsertPoint(I->getParent(), I);
158646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
158746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
158846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block) {
158946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  BasicBlock *BB = unwrap(Block);
159046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(Builder)->SetInsertPoint(BB);
159146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
159246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1593dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder) {
1594dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen   return wrap(unwrap(Builder)->GetInsertBlock());
1595dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1596dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1597851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMClearInsertionPosition(LLVMBuilderRef Builder) {
1598851ba39dab544ad986f150aec9573add9d978397Chris Lattner  unwrap(Builder)->ClearInsertionPoint ();
1599851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1600851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1601851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr) {
1602851ba39dab544ad986f150aec9573add9d978397Chris Lattner  unwrap(Builder)->Insert(unwrap<Instruction>(Instr));
1603851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1604851ba39dab544ad986f150aec9573add9d978397Chris Lattner
16055c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarvoid LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
16065c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                                   const char *Name) {
16075c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar  unwrap(Builder)->Insert(unwrap<Instruction>(Instr), Name);
16085c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar}
16095c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
161046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDisposeBuilder(LLVMBuilderRef Builder) {
161146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  delete unwrap(Builder);
161246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
161346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
161446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Instruction builders ................................................--*/
161546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
161646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef B) {
161746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateRetVoid());
161846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
161946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
162046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRet(LLVMBuilderRef B, LLVMValueRef V) {
162146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateRet(unwrap(V)));
162246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
162346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1624f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef B, LLVMValueRef *RetVals,
1625f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   unsigned N) {
1626f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateAggregateRet(unwrap(RetVals), N));
1627f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1628f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
162946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBr(LLVMBuilderRef B, LLVMBasicBlockRef Dest) {
163046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateBr(unwrap(Dest)));
163146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
163246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
163346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCondBr(LLVMBuilderRef B, LLVMValueRef If,
163446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Else) {
163546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateCondBr(unwrap(If), unwrap(Then), unwrap(Else)));
163646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
163746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
163846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSwitch(LLVMBuilderRef B, LLVMValueRef V,
163946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Else, unsigned NumCases) {
164046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSwitch(unwrap(V), unwrap(Else), NumCases));
164146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
164246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
164346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInvoke(LLVMBuilderRef B, LLVMValueRef Fn,
164446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef *Args, unsigned NumArgs,
164546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
164646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
164746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateInvoke(unwrap(Fn), unwrap(Then), unwrap(Catch),
164846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      unwrap(Args), unwrap(Args) + NumArgs,
164946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      Name));
165046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
165146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
165246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUnwind(LLVMBuilderRef B) {
165346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUnwind());
165446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
165546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
165646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef B) {
165746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUnreachable());
165846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
165946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1660ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksenvoid LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
1661ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen                 LLVMBasicBlockRef Dest) {
1662ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen  unwrap<SwitchInst>(Switch)->addCase(unwrap<ConstantInt>(OnVal), unwrap(Dest));
1663ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen}
1664ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen
166546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Arithmetic ..........................................................--*/
166646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
166746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
166846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
166946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAdd(unwrap(LHS), unwrap(RHS), Name));
167046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
167146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1672f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1673f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1674f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateNSWAdd(unwrap(LHS), unwrap(RHS), Name));
1675f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1676f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
167719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
167819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
167919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWAdd(unwrap(LHS), unwrap(RHS), Name));
168019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
168119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1682f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1683f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1684f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFAdd(unwrap(LHS), unwrap(RHS), Name));
1685f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1686f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
168746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
168846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
168946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSub(unwrap(LHS), unwrap(RHS), Name));
169046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
169146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
169219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
169319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
169419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNSWSub(unwrap(LHS), unwrap(RHS), Name));
169519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
169619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
169719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
169819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
169919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWSub(unwrap(LHS), unwrap(RHS), Name));
170019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
170119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1702f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1703f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1704f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFSub(unwrap(LHS), unwrap(RHS), Name));
1705f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1706f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
170746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
170846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
170946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateMul(unwrap(LHS), unwrap(RHS), Name));
171046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
171146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
171219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
171319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
171419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNSWMul(unwrap(LHS), unwrap(RHS), Name));
171519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
171619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
171719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
171819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
171919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWMul(unwrap(LHS), unwrap(RHS), Name));
172019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
172119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1722f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1723f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1724f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFMul(unwrap(LHS), unwrap(RHS), Name));
1725f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1726f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
172746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
172846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
172946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUDiv(unwrap(LHS), unwrap(RHS), Name));
173046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
173146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
173246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
173346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
173446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSDiv(unwrap(LHS), unwrap(RHS), Name));
173546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
173646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1737f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef B, LLVMValueRef LHS,
1738f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                LLVMValueRef RHS, const char *Name) {
1739f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateExactSDiv(unwrap(LHS), unwrap(RHS), Name));
1740f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1741f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
174246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
174346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
174446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFDiv(unwrap(LHS), unwrap(RHS), Name));
174546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
174646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
174746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildURem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
174846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
174946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateURem(unwrap(LHS), unwrap(RHS), Name));
175046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
175146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
175246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
175346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
175446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSRem(unwrap(LHS), unwrap(RHS), Name));
175546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
175646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
175746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
175846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
175946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFRem(unwrap(LHS), unwrap(RHS), Name));
176046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
176146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
176246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShl(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
176346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
176446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateShl(unwrap(LHS), unwrap(RHS), Name));
176546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
176646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
176746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
176846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
176946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateLShr(unwrap(LHS), unwrap(RHS), Name));
177046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
177146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
177246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
177346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
177446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAShr(unwrap(LHS), unwrap(RHS), Name));
177546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
177646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
177746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAnd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
177846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
177946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAnd(unwrap(LHS), unwrap(RHS), Name));
178046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
178146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
178246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildOr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
178346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         const char *Name) {
178446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateOr(unwrap(LHS), unwrap(RHS), Name));
178546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
178646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
178746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildXor(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
178846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
178946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateXor(unwrap(LHS), unwrap(RHS), Name));
179046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
179146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1792abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick TryzelaarLLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
1793abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                            LLVMValueRef LHS, LLVMValueRef RHS,
1794abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                            const char *Name) {
1795abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar  return wrap(unwrap(B)->CreateBinOp(Instruction::BinaryOps(Op), unwrap(LHS),
1796abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                                     unwrap(RHS), Name));
1797abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar}
1798abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar
179946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
180046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateNeg(unwrap(V), Name));
180146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
180246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
180319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
180419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name) {
180519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNSWNeg(unwrap(V), Name));
180619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
180719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
180819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
180919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name) {
181019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWNeg(unwrap(V), Name));
181119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
181219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
1813d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan GohmanLLVMValueRef LLVMBuildFNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
1814d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman  return wrap(unwrap(B)->CreateFNeg(unwrap(V), Name));
1815d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman}
1816d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman
181746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNot(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
181846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateNot(unwrap(V), Name));
181946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
182046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
182146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Memory ..............................................................--*/
182246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
182346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMalloc(LLVMBuilderRef B, LLVMTypeRef Ty,
182446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
18259d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  const Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
18269d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
18279d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
18289d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Instruction* Malloc = CallInst::CreateMalloc(unwrap(B)->GetInsertBlock(),
18299d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               ITy, unwrap(Ty), AllocSize,
18309d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               0, 0, "");
18319d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  return wrap(unwrap(B)->Insert(Malloc, Twine(Name)));
183246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
183346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
183446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef B, LLVMTypeRef Ty,
183546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name) {
18369d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  const Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
18379d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
18389d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
18399d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Instruction* Malloc = CallInst::CreateMalloc(unwrap(B)->GetInsertBlock(),
18409d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               ITy, unwrap(Ty), AllocSize,
18419d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               unwrap(Val), 0, "");
18429d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  return wrap(unwrap(B)->Insert(Malloc, Twine(Name)));
184346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
184446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
184546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAlloca(LLVMBuilderRef B, LLVMTypeRef Ty,
184646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
184746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), 0, Name));
184846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
184946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
185046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef B, LLVMTypeRef Ty,
185146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name) {
185246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), unwrap(Val), Name));
185346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
185446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
185546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFree(LLVMBuilderRef B, LLVMValueRef PointerVal) {
1856046e78ce55a7c3d82b7b6758d2d77f2d99f970bfVictor Hernandez  return wrap(unwrap(B)->Insert(
1857046e78ce55a7c3d82b7b6758d2d77f2d99f970bfVictor Hernandez     CallInst::CreateFree(unwrap(PointerVal), unwrap(B)->GetInsertBlock())));
185846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
185946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
186046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
186146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLoad(LLVMBuilderRef B, LLVMValueRef PointerVal,
186246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
186346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateLoad(unwrap(PointerVal), Name));
186446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
186546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
186646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildStore(LLVMBuilderRef B, LLVMValueRef Val,
186746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMValueRef PointerVal) {
186846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateStore(unwrap(Val), unwrap(PointerVal)));
186946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
187046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
187146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
187246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          LLVMValueRef *Indices, unsigned NumIndices,
187346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
187446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateGEP(unwrap(Pointer), unwrap(Indices),
187546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                   unwrap(Indices) + NumIndices, Name));
187646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
187746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1878f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
1879f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMValueRef *Indices, unsigned NumIndices,
1880f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  const char *Name) {
1881f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateInBoundsGEP(unwrap(Pointer), unwrap(Indices),
1882f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                           unwrap(Indices) + NumIndices, Name));
1883f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1884f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1885f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
1886f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                unsigned Idx, const char *Name) {
1887f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateStructGEP(unwrap(Pointer), Idx, Name));
1888f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1889f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1890f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
1891f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   const char *Name) {
1892f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateGlobalString(Str, Name));
1893f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1894f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1895f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
1896f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                      const char *Name) {
1897f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateGlobalStringPtr(Str, Name));
1898f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1899f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
190046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Casts ...............................................................--*/
190146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
190246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildTrunc(LLVMBuilderRef B, LLVMValueRef Val,
190346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name) {
190446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateTrunc(unwrap(Val), unwrap(DestTy), Name));
190546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
190646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
190746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildZExt(LLVMBuilderRef B, LLVMValueRef Val,
190846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name) {
190946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateZExt(unwrap(Val), unwrap(DestTy), Name));
191046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
191146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
191246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSExt(LLVMBuilderRef B, LLVMValueRef Val,
191346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name) {
191446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSExt(unwrap(Val), unwrap(DestTy), Name));
191546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
191646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
191746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef B, LLVMValueRef Val,
191846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
191946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPToUI(unwrap(Val), unwrap(DestTy), Name));
192046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
192146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
192246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef B, LLVMValueRef Val,
192346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
192446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPToSI(unwrap(Val), unwrap(DestTy), Name));
192546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
192646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
192746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef B, LLVMValueRef Val,
192846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
192946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUIToFP(unwrap(Val), unwrap(DestTy), Name));
193046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
193146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
193246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef B, LLVMValueRef Val,
193346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
193446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSIToFP(unwrap(Val), unwrap(DestTy), Name));
193546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
193646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
193746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef B, LLVMValueRef Val,
193846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name) {
193946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPTrunc(unwrap(Val), unwrap(DestTy), Name));
194046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
194146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
194246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPExt(LLVMBuilderRef B, LLVMValueRef Val,
194346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name) {
194446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPExt(unwrap(Val), unwrap(DestTy), Name));
194546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
194646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
194746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef B, LLVMValueRef Val,
194846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name) {
194946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreatePtrToInt(unwrap(Val), unwrap(DestTy), Name));
195046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
195146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
195246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef B, LLVMValueRef Val,
195346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name) {
195446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateIntToPtr(unwrap(Val), unwrap(DestTy), Name));
195546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
195646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
195746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBitCast(LLVMBuilderRef B, LLVMValueRef Val,
195846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name) {
195946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateBitCast(unwrap(Val), unwrap(DestTy), Name));
196046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
196146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1962f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
1963f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name) {
1964f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateZExtOrBitCast(unwrap(Val), unwrap(DestTy),
1965f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                             Name));
1966f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1967f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1968f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
1969f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name) {
1970f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateSExtOrBitCast(unwrap(Val), unwrap(DestTy),
1971f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                             Name));
1972f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1973f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1974f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
1975f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                     LLVMTypeRef DestTy, const char *Name) {
1976f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateTruncOrBitCast(unwrap(Val), unwrap(DestTy),
1977f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                              Name));
1978f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1979f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1980abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick TryzelaarLLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
1981abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                           LLVMTypeRef DestTy, const char *Name) {
1982abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar  return wrap(unwrap(B)->CreateCast(Instruction::CastOps(Op), unwrap(Val),
1983abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                                    unwrap(DestTy), Name));
1984abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar}
1985abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar
1986f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef B, LLVMValueRef Val,
1987f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMTypeRef DestTy, const char *Name) {
1988f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreatePointerCast(unwrap(Val), unwrap(DestTy), Name));
1989f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1990f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1991f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIntCast(LLVMBuilderRef B, LLVMValueRef Val,
1992e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands                              LLVMTypeRef DestTy, const char *Name) {
1993e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands  return wrap(unwrap(B)->CreateIntCast(unwrap(Val), unwrap(DestTy),
1994e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands                                       /*isSigned*/true, Name));
1995f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1996f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1997f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFPCast(LLVMBuilderRef B, LLVMValueRef Val,
1998f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             LLVMTypeRef DestTy, const char *Name) {
1999f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFPCast(unwrap(Val), unwrap(DestTy), Name));
2000f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2001f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
200246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Comparisons .........................................................--*/
200346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
200446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildICmp(LLVMBuilderRef B, LLVMIntPredicate Op,
200546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
200646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
200746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateICmp(static_cast<ICmpInst::Predicate>(Op),
200846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(LHS), unwrap(RHS), Name));
200946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
201046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
201146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFCmp(LLVMBuilderRef B, LLVMRealPredicate Op,
201246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
201346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
201446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFCmp(static_cast<FCmpInst::Predicate>(Op),
201546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(LHS), unwrap(RHS), Name));
201646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
201746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
201846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Miscellaneous instructions ..........................................--*/
201946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
202046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPhi(LLVMBuilderRef B, LLVMTypeRef Ty, const char *Name) {
202146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreatePHI(unwrap(Ty), Name));
202246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
202346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
202446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn,
202546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef *Args, unsigned NumArgs,
202646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
202746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateCall(unwrap(Fn), unwrap(Args),
202846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(Args) + NumArgs, Name));
202946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
203046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
203146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSelect(LLVMBuilderRef B, LLVMValueRef If,
203246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef Then, LLVMValueRef Else,
203346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
203446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSelect(unwrap(If), unwrap(Then), unwrap(Else),
203546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      Name));
203646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
203746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
203846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildVAArg(LLVMBuilderRef B, LLVMValueRef List,
203946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef Ty, const char *Name) {
204046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateVAArg(unwrap(List), unwrap(Ty), Name));
204146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
204246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
204346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef B, LLVMValueRef VecVal,
204446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      LLVMValueRef Index, const char *Name) {
204546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateExtractElement(unwrap(VecVal), unwrap(Index),
204646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                              Name));
204746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
204846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
204946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef B, LLVMValueRef VecVal,
205046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef EltVal, LLVMValueRef Index,
205146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name) {
205246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateInsertElement(unwrap(VecVal), unwrap(EltVal),
205346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                             unwrap(Index), Name));
205446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
205546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
205646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef B, LLVMValueRef V1,
205746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef V2, LLVMValueRef Mask,
205846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name) {
205946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateShuffleVector(unwrap(V1), unwrap(V2),
206046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                             unwrap(Mask), Name));
206146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
20621ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2063b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef B, LLVMValueRef AggVal,
2064b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned Index, const char *Name) {
2065b593117b44a74c72bc784080bb402576b3181d94Dan Gohman  return wrap(unwrap(B)->CreateExtractValue(unwrap(AggVal), Index, Name));
2066b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
2067b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
2068b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef B, LLVMValueRef AggVal,
2069b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef EltVal, unsigned Index,
2070b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  const char *Name) {
2071b593117b44a74c72bc784080bb402576b3181d94Dan Gohman  return wrap(unwrap(B)->CreateInsertValue(unwrap(AggVal), unwrap(EltVal),
2072b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                           Index, Name));
2073b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
2074b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
2075f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNull(LLVMBuilderRef B, LLVMValueRef Val,
2076f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             const char *Name) {
2077f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateIsNull(unwrap(Val), Name));
2078f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2079f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2080f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef B, LLVMValueRef Val,
2081f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                const char *Name) {
2082f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateIsNotNull(unwrap(Val), Name));
2083f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2084f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2085f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef B, LLVMValueRef LHS,
2086f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                              LLVMValueRef RHS, const char *Name) {
2087f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreatePtrDiff(unwrap(LHS), unwrap(RHS), Name));
2088f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2089f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
20901ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
20911ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen/*===-- Module providers --------------------------------------------------===*/
20921ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
20931ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMModuleProviderRef
20941ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMCreateModuleProviderForExistingModule(LLVMModuleRef M) {
2095f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin  return reinterpret_cast<LLVMModuleProviderRef>(M);
20961ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen}
20971ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
20981ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksenvoid LLVMDisposeModuleProvider(LLVMModuleProviderRef MP) {
20991ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen  delete unwrap(MP);
21001ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen}
21011ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2102da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2103da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Memory buffers ----------------------------------------------------===*/
2104da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2105d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithContentsOfFile(
2106d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    const char *Path,
2107d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    LLVMMemoryBufferRef *OutMemBuf,
2108d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    char **OutMessage) {
2109d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner
2110da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  std::string Error;
2111038112a4e0a9afd656f415ab397a230ae5921627Chris Lattner  if (MemoryBuffer *MB = MemoryBuffer::getFile(Path, &Error)) {
2112da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen    *OutMemBuf = wrap(MB);
2113da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen    return 0;
2114da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  }
2115da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2116da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  *OutMessage = strdup(Error.c_str());
2117da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  return 1;
2118da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2119da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2120d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2121d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                         char **OutMessage) {
2122d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar  MemoryBuffer *MB = MemoryBuffer::getSTDIN();
2123d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar  if (!MB->getBufferSize()) {
2124d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar    delete MB;
2125d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar    *OutMessage = strdup("stdin is empty.");
2126d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar    return 1;
2127da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  }
2128d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar
2129d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar  *OutMemBuf = wrap(MB);
2130d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar  return 0;
2131da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2132da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2133da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenvoid LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf) {
2134da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  delete unwrap(MemBuf);
2135da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2136