Core.cpp revision f1ac0fd347823c5ab54577702f8eb062bf4ca70b
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}
5708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
571e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size) {
572af7ec975870f92245f1f1484ac80a1e2db6a0afaOwen Anderson  return wrap(ConstantVector::get(
57362e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                            unwrap<Constant>(ScalarConstantVals, Size), Size));
5748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
5764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/*--.. Constant expressions ................................................--*/
5774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
578885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal) {
579885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return (LLVMOpcode)unwrap<ConstantExpr>(ConstantVal)->getOpcode();
580885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
581885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
582ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan SandsLLVMValueRef LLVMAlignOf(LLVMTypeRef Ty) {
583baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAlignOf(unwrap(Ty)));
584ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands}
585ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
5864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMSizeOf(LLVMTypeRef Ty) {
587baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSizeOf(unwrap(Ty)));
5884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
5894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
5904647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal) {
591baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getNeg(
59256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                   unwrap<Constant>(ConstantVal)));
59356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
59456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
59556b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal) {
59656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFNeg(
59756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(ConstantVal)));
5984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
5994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal) {
601baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getNot(
60256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                   unwrap<Constant>(ConstantVal)));
6034647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6044647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6054647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
606baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAdd(
60762e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
6084647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
6094647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6104647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6116e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant,
6126e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                             LLVMValueRef RHSConstant) {
6136e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  return wrap(ConstantExpr::getNSWAdd(
6146e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                      unwrap<Constant>(LHSConstant),
6156e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                      unwrap<Constant>(RHSConstant)));
6166e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
6176e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
61856b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
61956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFAdd(
62056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(LHSConstant),
62156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
62256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
62356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
6244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
625baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSub(
62662e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
6274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
6284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
63056b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
63156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFSub(unwrap<Constant>(LHSConstant),
63256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
63356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
63456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
6354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
636baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getMul(
63762e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
6384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
6394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
64156b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
64256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFMul(
64356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(LHSConstant),
64456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
64556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
64656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
6474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
648baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getUDiv(
64962e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
6504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
6514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
654baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSDiv(
65562e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
6564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
6574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6584647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6596e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant,
6606e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                LLVMValueRef RHSConstant) {
6616e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  return wrap(ConstantExpr::getExactSDiv(
6626e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                         unwrap<Constant>(LHSConstant),
6636e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                         unwrap<Constant>(RHSConstant)));
6646e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
6656e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
6664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
667baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFDiv(
66862e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
6694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
6704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
673baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getURem(
67462e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
6754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
6764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
679baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSRem(
68062e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
6814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
6824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6834647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
685baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFRem(
68662e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
6874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
6884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6904647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
691baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAnd(
69262e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
6934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
6944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
6954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
6964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
697baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getOr(
69862e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                  unwrap<Constant>(LHSConstant),
6994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                  unwrap<Constant>(RHSConstant)));
7004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7024647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
703baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getXor(
70462e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                   unwrap<Constant>(LHSConstant),
7054647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
7064647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7074647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7084647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
7094647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
710baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getICmp(Predicate,
7114647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(LHSConstant),
7124647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7134647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7144647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7154647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
7164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
717baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFCmp(Predicate,
7184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(LHSConstant),
7194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
723baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getShl(
72462e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                  unwrap<Constant>(LHSConstant),
7254647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                  unwrap<Constant>(RHSConstant)));
7264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
729baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getLShr(
73062e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
7314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
735baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAShr(
73662e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(LHSConstant),
7374647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
7384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
7414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                          LLVMValueRef *ConstantIndices, unsigned NumIndices) {
742baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getGetElementPtr(
74362e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                             unwrap<Constant>(ConstantVal),
7444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(ConstantIndices,
7454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                                              NumIndices),
7464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             NumIndices));
7474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7496e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
7506e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  LLVMValueRef *ConstantIndices,
7516e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  unsigned NumIndices) {
7526e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  Constant* Val = unwrap<Constant>(ConstantVal);
7536e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  Constant** Idxs = unwrap<Constant>(ConstantIndices, NumIndices);
7546e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  return wrap(ConstantExpr::getInBoundsGetElementPtr(Val, Idxs, NumIndices));
7556e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
7566e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
7574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
758baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getTrunc(
75962e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                     unwrap<Constant>(ConstantVal),
7604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                     unwrap(ToType)));
7614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
764baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSExt(
76562e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(ConstantVal),
7664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap(ToType)));
7674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
770baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getZExt(
77162e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                    unwrap<Constant>(ConstantVal),
7724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap(ToType)));
7734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
776baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPTrunc(
77762e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                       unwrap<Constant>(ConstantVal),
7784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                       unwrap(ToType)));
7794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
782baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPExtend(
78362e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                        unwrap<Constant>(ConstantVal),
7844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
7854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
788baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getUIToFP(
78962e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                      unwrap<Constant>(ConstantVal),
7904647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
7914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
794baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSIToFP(unwrap<Constant>(ConstantVal),
7954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
7964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
7974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
7984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
799baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPToUI(unwrap<Constant>(ConstantVal),
8004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
8014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8024647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8034647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
804baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPToSI(
80562e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                      unwrap<Constant>(ConstantVal),
8064647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
8074647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8084647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8094647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
810baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getPtrToInt(
81162e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                        unwrap<Constant>(ConstantVal),
8124647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
8134647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8144647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8154647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
816baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getIntToPtr(
81762e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                        unwrap<Constant>(ConstantVal),
8184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
8194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
822baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getBitCast(
82362e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                       unwrap<Constant>(ConstantVal),
8244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                       unwrap(ToType)));
8254647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
82756b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
82856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType) {
82956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getZExtOrBitCast(
83056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap<Constant>(ConstantVal),
83156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap(ToType)));
83256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
83356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
83456b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
83556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType) {
83656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getSExtOrBitCast(
83756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap<Constant>(ConstantVal),
83856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap(ToType)));
83956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
84056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
84156b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
84256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                     LLVMTypeRef ToType) {
84356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getTruncOrBitCast(
84456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                              unwrap<Constant>(ConstantVal),
84556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                              unwrap(ToType)));
84656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
84756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
84856b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
84956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                  LLVMTypeRef ToType) {
85056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getPointerCast(
85156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap<Constant>(ConstantVal),
85256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap(ToType)));
85356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
85456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
85556b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
856d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                              LLVMBool isSigned) {
85756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getIntegerCast(
85856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap<Constant>(ConstantVal),
85956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap(ToType),
86056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           isSigned));
86156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
86256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
86356b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
86456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFPCast(
86556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                      unwrap<Constant>(ConstantVal),
86656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                      unwrap(ToType)));
86756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
86856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
8694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
8704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfTrue,
8714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfFalse) {
872baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSelect(
87362e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                      unwrap<Constant>(ConstantCondition),
8744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap<Constant>(ConstantIfTrue),
8754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap<Constant>(ConstantIfFalse)));
8764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
8794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                     LLVMValueRef IndexConstant) {
880baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getExtractElement(
88162e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                              unwrap<Constant>(VectorConstant),
8824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                              unwrap<Constant>(IndexConstant)));
8834647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
8864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef ElementValueConstant,
8874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef IndexConstant) {
888baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getInsertElement(
88962e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                         unwrap<Constant>(VectorConstant),
8904647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                         unwrap<Constant>(ElementValueConstant),
8914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(IndexConstant)));
8924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
8954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef VectorBConstant,
8964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef MaskConstant) {
897baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getShuffleVector(
89862e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                             unwrap<Constant>(VectorAConstant),
8994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(VectorBConstant),
9004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(MaskConstant)));
9014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
903b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
904b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned NumIdx) {
905baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getExtractValue(
90662e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                            unwrap<Constant>(AggConstant),
907b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                            IdxList, NumIdx));
908b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
909b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
910b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
911b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef ElementValueConstant,
912b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  unsigned *IdxList, unsigned NumIdx) {
913baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getInsertValue(
91462e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson                                         unwrap<Constant>(AggConstant),
915b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                         unwrap<Constant>(ElementValueConstant),
916b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                           IdxList, NumIdx));
917b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
918b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
919d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, const char *AsmString,
920d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                const char *Constraints,
921d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                LLVMBool HasSideEffects,
922d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                LLVMBool IsAlignStack) {
923d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner  return wrap(InlineAsm::get(dyn_cast<FunctionType>(unwrap(Ty)), AsmString,
9248ba2d5befc05ca73d3bac8708819bbbe759e2cf9Dale Johannesen                             Constraints, HasSideEffects, IsAlignStack));
925851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
926851ba39dab544ad986f150aec9573add9d978397Chris Lattner
9278b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on global variables, functions, and aliases (globals) ....--*/
9288b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
929dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global) {
930dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<GlobalValue>(Global)->getParent());
931dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
932dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
933d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsDeclaration(LLVMValueRef Global) {
9348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->isDeclaration();
9358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
9368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
9378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMLinkage LLVMGetLinkage(LLVMValueRef Global) {
9384aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  switch (unwrap<GlobalValue>(Global)->getLinkage()) {
9394aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  default:
9404aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    assert(false && "Unhandled Linkage Type.");
9414aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::ExternalLinkage:
9424aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMExternalLinkage;
9434aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::AvailableExternallyLinkage:
9444aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMAvailableExternallyLinkage;
9454aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkOnceAnyLinkage:
9464aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkOnceAnyLinkage;
9474aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkOnceODRLinkage:
9484aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkOnceODRLinkage;
9494aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::WeakAnyLinkage:
9504aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMWeakAnyLinkage;
9514aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::WeakODRLinkage:
9524aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMWeakODRLinkage;
9534aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::AppendingLinkage:
9544aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMAppendingLinkage;
9554aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::InternalLinkage:
9564aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMInternalLinkage;
9574aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::PrivateLinkage:
9584aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMPrivateLinkage;
9594aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkerPrivateLinkage:
9604aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkerPrivateLinkage;
9614aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::DLLImportLinkage:
9624aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMDLLImportLinkage;
9634aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::DLLExportLinkage:
9644aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMDLLExportLinkage;
9654aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::ExternalWeakLinkage:
9664aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMExternalWeakLinkage;
9674aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::CommonLinkage:
9684aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMCommonLinkage;
9694aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  }
9704aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling
9714aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  // Should never get here.
9724aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  return static_cast<LLVMLinkage>(0);
9738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
9748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
9758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage) {
9764aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  GlobalValue *GV = unwrap<GlobalValue>(Global);
9774aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling
9784aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  switch (Linkage) {
9794aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  default:
9804aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    assert(false && "Unhandled Linkage Type.");
9814aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMExternalLinkage:
9824aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::ExternalLinkage);
9834aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
9844aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMAvailableExternallyLinkage:
9854aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::AvailableExternallyLinkage);
9864aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
9874aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkOnceAnyLinkage:
9884aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkOnceAnyLinkage);
9894aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
9904aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkOnceODRLinkage:
9914aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkOnceODRLinkage);
9924aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
9934aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMWeakAnyLinkage:
9944aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::WeakAnyLinkage);
9954aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
9964aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMWeakODRLinkage:
9974aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::WeakODRLinkage);
9984aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
9994aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMAppendingLinkage:
10004aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::AppendingLinkage);
10014aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10024aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMInternalLinkage:
10034aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::InternalLinkage);
10044aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10054aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMPrivateLinkage:
10064aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::PrivateLinkage);
10074aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10084aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkerPrivateLinkage:
10094aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkerPrivateLinkage);
10104aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10114aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMDLLImportLinkage:
10124aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::DLLImportLinkage);
10134aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10144aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMDLLExportLinkage:
10154aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::DLLExportLinkage);
10164aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10174aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMExternalWeakLinkage:
10184aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::ExternalWeakLinkage);
10194aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10204aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMGhostLinkage:
1021f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin    DEBUG(errs()
1022f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin          << "LLVMSetLinkage(): LLVMGhostLinkage is no longer supported.");
10234aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10244aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMCommonLinkage:
10254aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::CommonLinkage);
10264aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
10274aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  }
10288b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10308b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenconst char *LLVMGetSection(LLVMValueRef Global) {
10318b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->getSection().c_str();
10328b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetSection(LLVMValueRef Global, const char *Section) {
10358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)->setSection(Section);
10368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMVisibility LLVMGetVisibility(LLVMValueRef Global) {
10398b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return static_cast<LLVMVisibility>(
10408b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    unwrap<GlobalValue>(Global)->getVisibility());
10418b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10428b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10438b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz) {
10448b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)
10458b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    ->setVisibility(static_cast<GlobalValue::VisibilityTypes>(Viz));
10468b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10478b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10488b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetAlignment(LLVMValueRef Global) {
10498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->getAlignment();
10508b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10518b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10528b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes) {
10538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)->setAlignment(Bytes);
10548b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10558b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on global variables ......................................--*/
10578b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name) {
1059e9b11b431308f4766b73cda93e38ec930c912122Owen Anderson  return wrap(new GlobalVariable(*unwrap(M), unwrap(Ty), false,
1060e9b11b431308f4766b73cda93e38ec930c912122Owen Anderson                                 GlobalValue::ExternalLinkage, 0, Name));
10618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
10628b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10636d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenLLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name) {
10646d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen  return wrap(unwrap(M)->getNamedGlobal(Name));
10656d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen}
10666d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen
106734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M) {
106834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
106934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = Mod->global_begin();
107034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->global_end())
107134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
107234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
107334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
107434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
107534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M) {
107634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
107734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = Mod->global_end();
107834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->global_begin())
107934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
108034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
108134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
108234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
108334000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar) {
108434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
108534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = GV;
108634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == GV->getParent()->global_end())
108734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
108834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
108934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
109034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
109134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar) {
109234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
109334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = GV;
10944733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == GV->getParent()->global_begin())
109534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
109634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
109734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
109834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
10998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMDeleteGlobal(LLVMValueRef GlobalVar) {
11008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->eraseFromParent();
11018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar) {
1104885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  GlobalVariable* GV = unwrap<GlobalVariable>(GlobalVar);
1105885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  if ( !GV->hasInitializer() )
1106885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner    return 0;
1107885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(GV->getInitializer());
11088b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11098b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11108b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal) {
11118b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)
11128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    ->setInitializer(unwrap<Constant>(ConstantVal));
11138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1115d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar) {
11168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalVariable>(GlobalVar)->isThreadLocal();
11178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1119d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal) {
11208b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->setThreadLocal(IsThreadLocal != 0);
11218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
11228b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1123d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar) {
1124c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen  return unwrap<GlobalVariable>(GlobalVar)->isConstant();
1125c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen}
1126c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen
1127d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant) {
1128c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->setConstant(IsConstant != 0);
1129c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen}
1130c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen
1131851ba39dab544ad986f150aec9573add9d978397Chris Lattner/*--.. Operations on aliases ......................................--*/
1132851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1133851ba39dab544ad986f150aec9573add9d978397Chris LattnerLLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1134851ba39dab544ad986f150aec9573add9d978397Chris Lattner                          const char *Name) {
1135851ba39dab544ad986f150aec9573add9d978397Chris Lattner  return wrap(new GlobalAlias(unwrap(Ty), GlobalValue::ExternalLinkage, Name,
1136851ba39dab544ad986f150aec9573add9d978397Chris Lattner                              unwrap<Constant>(Aliasee), unwrap (M)));
1137851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1138851ba39dab544ad986f150aec9573add9d978397Chris Lattner
113946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Operations on functions .............................................--*/
114046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
114146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
114246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef FunctionTy) {
1143051a950000e21935165db56695e35bade668193bGabor Greif  return wrap(Function::Create(unwrap<FunctionType>(FunctionTy),
1144051a950000e21935165db56695e35bade668193bGabor Greif                               GlobalValue::ExternalLinkage, Name, unwrap(M)));
114546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
114646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
11476d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenLLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name) {
11486d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen  return wrap(unwrap(M)->getFunction(Name));
11496d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen}
11506d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen
115134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M) {
115234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
115334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Mod->begin();
115434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->end())
115534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
115634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
115734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
115834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
115934000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastFunction(LLVMModuleRef M) {
116034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
116134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Mod->end();
116234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->begin())
116334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
116434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
116534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
116634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
116734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn) {
116834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
116934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Func;
117034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Func->getParent()->end())
117134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
117234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
117334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
117434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
117534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn) {
117634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
117734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Func;
11784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->getParent()->begin())
117934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
118034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
118134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
118234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
118346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteFunction(LLVMValueRef Fn) {
118446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap<Function>(Fn)->eraseFromParent();
118546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
118646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
118746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetIntrinsicID(LLVMValueRef Fn) {
118846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (Function *F = dyn_cast<Function>(unwrap(Fn)))
118946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return F->getIntrinsicID();
119046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return 0;
119146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
119246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
119346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetFunctionCallConv(LLVMValueRef Fn) {
119446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return unwrap<Function>(Fn)->getCallingConv();
119546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
119646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
119746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC) {
119865c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel  return unwrap<Function>(Fn)->setCallingConv(
119965c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    static_cast<CallingConv::ID>(CC));
120046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
120146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
12025eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenconst char *LLVMGetGC(LLVMValueRef Fn) {
120380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  Function *F = unwrap<Function>(Fn);
12045eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen  return F->hasGC()? F->getGC() : 0;
120580a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen}
120680a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
12075eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenvoid LLVMSetGC(LLVMValueRef Fn, const char *GC) {
120880a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  Function *F = unwrap<Function>(Fn);
12095eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen  if (GC)
12105eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    F->setGC(GC);
121180a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  else
12125eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    F->clearGC();
121380a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen}
121480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1215e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
1216e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Function *Func = unwrap<Function>(Fn);
1217e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  const AttrListPtr PAL = Func->getAttributes();
1218f1ac0fd347823c5ab54577702f8eb062bf4ca70bKenneth Uildriks  const AttrListPtr PALnew = PAL.addAttr(~0U, PA);
1219e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Func->setAttributes(PALnew);
1220e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands}
1221e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1222e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
1223e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Function *Func = unwrap<Function>(Fn);
1224e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  const AttrListPtr PAL = Func->getAttributes();
1225f1ac0fd347823c5ab54577702f8eb062bf4ca70bKenneth Uildriks  const AttrListPtr PALnew = PAL.removeAttr(~0U, PA);
1226e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Func->setAttributes(PALnew);
1227e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands}
1228e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1229885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn) {
1230885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Function *Func = unwrap<Function>(Fn);
1231885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  const AttrListPtr PAL = Func->getAttributes();
1232885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Attributes attr = PAL.getFnAttributes();
1233885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return (LLVMAttribute)attr;
1234885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
1235885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1236dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/*--.. Operations on parameters ............................................--*/
1237dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1238dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenunsigned LLVMCountParams(LLVMValueRef FnRef) {
1239dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  // This function is strictly redundant to
1240dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  //   LLVMCountParamTypes(LLVMGetElementType(LLVMTypeOf(FnRef)))
12414d515d0b09d43af59cd040bfb8bf1b7a2b992980Dan Gohman  return unwrap<Function>(FnRef)->arg_size();
1242dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1243dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1244dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenvoid LLVMGetParams(LLVMValueRef FnRef, LLVMValueRef *ParamRefs) {
1245dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  Function *Fn = unwrap<Function>(FnRef);
1246dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  for (Function::arg_iterator I = Fn->arg_begin(),
1247dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen                              E = Fn->arg_end(); I != E; I++)
1248dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    *ParamRefs++ = wrap(I);
1249dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1250dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1251dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParam(LLVMValueRef FnRef, unsigned index) {
1252dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  Function::arg_iterator AI = unwrap<Function>(FnRef)->arg_begin();
1253dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  while (index --> 0)
1254dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    AI++;
1255dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(AI);
1256dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1257dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1258dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParamParent(LLVMValueRef V) {
1259dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<Argument>(V)->getParent());
1260dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1261dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
12624733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn) {
12634733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function *Func = unwrap<Function>(Fn);
12644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = Func->arg_begin();
12654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->arg_end())
12664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
12674733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(I);
12684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
12694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12704733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetLastParam(LLVMValueRef Fn) {
12714733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function *Func = unwrap<Function>(Fn);
12724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = Func->arg_end();
12734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->arg_begin())
12744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
12754733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(--I);
12764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
12774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12784733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetNextParam(LLVMValueRef Arg) {
12794733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Argument *A = unwrap<Argument>(Arg);
12804733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = A;
12814733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (++I == A->getParent()->arg_end())
12824733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
12834733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(I);
12844733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
12854733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12864733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg) {
12874733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Argument *A = unwrap<Argument>(Arg);
12884733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = A;
12894733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == A->getParent()->arg_begin())
12904733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen    return 0;
12914733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(--I);
12924733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
12934733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
12940598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA) {
1295e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  unwrap<Argument>(Arg)->addAttr(PA);
1296e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1297e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
12980598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA) {
1299e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  unwrap<Argument>(Arg)->removeAttr(PA);
1300e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1301e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
1302885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetAttribute(LLVMValueRef Arg) {
1303885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Argument *A = unwrap<Argument>(Arg);
1304885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Attributes attr = A->getParent()->getAttributes().getParamAttributes(
1305885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner    A->getArgNo()+1);
1306885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return (LLVMAttribute)attr;
1307885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
1308885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1309885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1310e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksenvoid LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align) {
1311e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  unwrap<Argument>(Arg)->addAttr(
13120598866c052147c31b808391f58434ce3dbfb838Devang Patel          Attribute::constructAlignmentFromInt(align));
1313e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1314e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
131546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Operations on basic blocks ..........................................--*/
131646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1317dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB) {
1318dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(static_cast<Value*>(unwrap(BB)));
131946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
132046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1321d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val) {
132246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return isa<BasicBlock>(unwrap(Val));
132346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
132446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
132546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val) {
132646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap<BasicBlock>(Val));
132746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
132846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
13294733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB) {
13304733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(unwrap(BB)->getParent());
1331dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1332dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
133346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountBasicBlocks(LLVMValueRef FnRef) {
13344d515d0b09d43af59cd040bfb8bf1b7a2b992980Dan Gohman  return unwrap<Function>(FnRef)->size();
133546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
133646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
133746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMGetBasicBlocks(LLVMValueRef FnRef, LLVMBasicBlockRef *BasicBlocksRefs){
133846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Function *Fn = unwrap<Function>(FnRef);
133946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  for (Function::iterator I = Fn->begin(), E = Fn->end(); I != E; I++)
134046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    *BasicBlocksRefs++ = wrap(I);
134146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
134246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
134346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn) {
134446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(&unwrap<Function>(Fn)->getEntryBlock());
134546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
134646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
134734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn) {
134834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
134934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Func->begin();
135034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Func->end())
135134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
135234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
135334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
135434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
135534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn) {
135634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
135734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Func->end();
135834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Func->begin())
135934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
136034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
136134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
136234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
136334000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB) {
136434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
136534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Block;
136634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Block->getParent()->end())
136734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
136834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
136934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
137034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
137134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB) {
137234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
137334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Block;
137434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->getParent()->begin())
137534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
137634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
137734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
137834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
137922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
138022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMValueRef FnRef,
138122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name) {
138222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(BasicBlock::Create(*unwrap(C), Name, unwrap<Function>(FnRef)));
138322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
138422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
138546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef FnRef, const char *Name) {
138622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMAppendBasicBlockInContext(LLVMGetGlobalContext(), FnRef, Name);
138722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
138822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
138922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
139022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMBasicBlockRef BBRef,
139122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name) {
139222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  BasicBlock *BB = unwrap(BBRef);
139322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(BasicBlock::Create(*unwrap(C), Name, BB->getParent(), BB));
139446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
139546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
139622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef BBRef,
139746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                       const char *Name) {
139822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInsertBasicBlockInContext(LLVMGetGlobalContext(), BBRef, Name);
139946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
140046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
140146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteBasicBlock(LLVMBasicBlockRef BBRef) {
140246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(BBRef)->eraseFromParent();
140346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
140446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1405dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/*--.. Operations on instructions ..........................................--*/
1406dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1407dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst) {
1408dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<Instruction>(Inst)->getParent());
1409dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1410dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
141134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB) {
141234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
141334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Block->begin();
141434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->end())
141534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
141634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
141734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
141834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
141934000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB) {
142034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
142134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Block->end();
142234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->begin())
142334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
142434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
142534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
142634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
142734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst) {
142834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *Instr = unwrap<Instruction>(Inst);
142934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Instr;
143034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Instr->getParent()->end())
143134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
143234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
143334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
143434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
143534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst) {
143634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *Instr = unwrap<Instruction>(Inst);
143734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Instr;
143834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Instr->getParent()->begin())
143934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen    return 0;
144034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
144134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
144234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
144346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Call and invoke instructions ........................................--*/
144446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
144546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetInstructionCallConv(LLVMValueRef Instr) {
144646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Value *V = unwrap(Instr);
144746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (CallInst *CI = dyn_cast<CallInst>(V))
144846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return CI->getCallingConv();
144946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  else if (InvokeInst *II = dyn_cast<InvokeInst>(V))
145046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return II->getCallingConv();
1451c23197a26f34f559ea9797de51e187087c039c42Torok Edwin  llvm_unreachable("LLVMGetInstructionCallConv applies only to call and invoke!");
145246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return 0;
145346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
145446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
145546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC) {
145646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Value *V = unwrap(Instr);
145746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (CallInst *CI = dyn_cast<CallInst>(V))
145865c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    return CI->setCallingConv(static_cast<CallingConv::ID>(CC));
145946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  else if (InvokeInst *II = dyn_cast<InvokeInst>(V))
146065c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    return II->setCallingConv(static_cast<CallingConv::ID>(CC));
1461c23197a26f34f559ea9797de51e187087c039c42Torok Edwin  llvm_unreachable("LLVMSetInstructionCallConv applies only to call and invoke!");
146246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
146346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
14640598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index,
14650598866c052147c31b808391f58434ce3dbfb838Devang Patel                           LLVMAttribute PA) {
1466e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
14670598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
14680598866c052147c31b808391f58434ce3dbfb838Devang Patel    Call.getAttributes().addAttr(index, PA));
1469e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1470e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
14710598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
14720598866c052147c31b808391f58434ce3dbfb838Devang Patel                              LLVMAttribute PA) {
1473e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
14740598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
14750598866c052147c31b808391f58434ce3dbfb838Devang Patel    Call.getAttributes().removeAttr(index, PA));
1476e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1477e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
1478e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksenvoid LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
1479e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen                                unsigned align) {
1480e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
14810598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
14820598866c052147c31b808391f58434ce3dbfb838Devang Patel    Call.getAttributes().addAttr(index,
14830598866c052147c31b808391f58434ce3dbfb838Devang Patel        Attribute::constructAlignmentFromInt(align)));
1484e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1485e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
148607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/*--.. Operations on call instructions (only) ..............................--*/
148707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
1488d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsTailCall(LLVMValueRef Call) {
148907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen  return unwrap<CallInst>(Call)->isTailCall();
149007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen}
149107cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
1492d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetTailCall(LLVMValueRef Call, LLVMBool isTailCall) {
149307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen  unwrap<CallInst>(Call)->setTailCall(isTailCall);
149407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen}
149507cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
14962618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/*--.. Operations on phi nodes .............................................--*/
14972618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
14982618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenvoid LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
14992618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     LLVMBasicBlockRef *IncomingBlocks, unsigned Count) {
15002618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  PHINode *PhiVal = unwrap<PHINode>(PhiNode);
15012618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  for (unsigned I = 0; I != Count; ++I)
15022618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen    PhiVal->addIncoming(unwrap(IncomingValues[I]), unwrap(IncomingBlocks[I]));
15032618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
15042618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
15052618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenunsigned LLVMCountIncoming(LLVMValueRef PhiNode) {
15062618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return unwrap<PHINode>(PhiNode)->getNumIncomingValues();
15072618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
15082618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
15092618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index) {
15102618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return wrap(unwrap<PHINode>(PhiNode)->getIncomingValue(Index));
15112618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
15122618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
15132618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index) {
15142618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return wrap(unwrap<PHINode>(PhiNode)->getIncomingBlock(Index));
15152618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
15162618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
151746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
151846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*===-- Instruction builders ----------------------------------------------===*/
151946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
152022c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C) {
152122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(new IRBuilder<>(*unwrap(C)));
152222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
152322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
152416c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMBuilderRef LLVMCreateBuilder(void) {
152522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMCreateBuilderInContext(LLVMGetGlobalContext());
152646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
152746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
152834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksenvoid LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
152934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen                         LLVMValueRef Instr) {
153034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *BB = unwrap(Block);
153134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *I = Instr? unwrap<Instruction>(Instr) : (Instruction*) BB->end();
153234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  unwrap(Builder)->SetInsertPoint(BB, I);
153334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
153434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
153546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr) {
153646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Instruction *I = unwrap<Instruction>(Instr);
153746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(Builder)->SetInsertPoint(I->getParent(), I);
153846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
153946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
154046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block) {
154146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  BasicBlock *BB = unwrap(Block);
154246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(Builder)->SetInsertPoint(BB);
154346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
154446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1545dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder) {
1546dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen   return wrap(unwrap(Builder)->GetInsertBlock());
1547dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1548dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1549851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMClearInsertionPosition(LLVMBuilderRef Builder) {
1550851ba39dab544ad986f150aec9573add9d978397Chris Lattner  unwrap(Builder)->ClearInsertionPoint ();
1551851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1552851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1553851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr) {
1554851ba39dab544ad986f150aec9573add9d978397Chris Lattner  unwrap(Builder)->Insert(unwrap<Instruction>(Instr));
1555851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1556851ba39dab544ad986f150aec9573add9d978397Chris Lattner
15575c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarvoid LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
15585c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                                   const char *Name) {
15595c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar  unwrap(Builder)->Insert(unwrap<Instruction>(Instr), Name);
15605c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar}
15615c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
156246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDisposeBuilder(LLVMBuilderRef Builder) {
156346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  delete unwrap(Builder);
156446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
156546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
156646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Instruction builders ................................................--*/
156746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
156846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef B) {
156946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateRetVoid());
157046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
157146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
157246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRet(LLVMBuilderRef B, LLVMValueRef V) {
157346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateRet(unwrap(V)));
157446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
157546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1576f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef B, LLVMValueRef *RetVals,
1577f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   unsigned N) {
1578f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateAggregateRet(unwrap(RetVals), N));
1579f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1580f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
158146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBr(LLVMBuilderRef B, LLVMBasicBlockRef Dest) {
158246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateBr(unwrap(Dest)));
158346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
158446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
158546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCondBr(LLVMBuilderRef B, LLVMValueRef If,
158646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Else) {
158746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateCondBr(unwrap(If), unwrap(Then), unwrap(Else)));
158846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
158946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
159046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSwitch(LLVMBuilderRef B, LLVMValueRef V,
159146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Else, unsigned NumCases) {
159246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSwitch(unwrap(V), unwrap(Else), NumCases));
159346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
159446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
159546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInvoke(LLVMBuilderRef B, LLVMValueRef Fn,
159646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef *Args, unsigned NumArgs,
159746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
159846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
159946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateInvoke(unwrap(Fn), unwrap(Then), unwrap(Catch),
160046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      unwrap(Args), unwrap(Args) + NumArgs,
160146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      Name));
160246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
160346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
160446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUnwind(LLVMBuilderRef B) {
160546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUnwind());
160646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
160746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
160846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef B) {
160946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUnreachable());
161046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
161146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1612ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksenvoid LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
1613ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen                 LLVMBasicBlockRef Dest) {
1614ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen  unwrap<SwitchInst>(Switch)->addCase(unwrap<ConstantInt>(OnVal), unwrap(Dest));
1615ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen}
1616ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen
161746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Arithmetic ..........................................................--*/
161846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
161946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
162046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
162146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAdd(unwrap(LHS), unwrap(RHS), Name));
162246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
162346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1624f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1625f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1626f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateNSWAdd(unwrap(LHS), unwrap(RHS), Name));
1627f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1628f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1629f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1630f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1631f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFAdd(unwrap(LHS), unwrap(RHS), Name));
1632f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1633f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
163446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
163546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
163646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSub(unwrap(LHS), unwrap(RHS), Name));
163746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
163846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1639f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1640f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1641f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFSub(unwrap(LHS), unwrap(RHS), Name));
1642f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1643f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
164446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
164546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
164646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateMul(unwrap(LHS), unwrap(RHS), Name));
164746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
164846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1649f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
1650f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
1651f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFMul(unwrap(LHS), unwrap(RHS), Name));
1652f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1653f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
165446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
165546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
165646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUDiv(unwrap(LHS), unwrap(RHS), Name));
165746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
165846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
165946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
166046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
166146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSDiv(unwrap(LHS), unwrap(RHS), Name));
166246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
166346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1664f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef B, LLVMValueRef LHS,
1665f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                LLVMValueRef RHS, const char *Name) {
1666f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateExactSDiv(unwrap(LHS), unwrap(RHS), Name));
1667f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1668f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
166946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
167046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
167146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFDiv(unwrap(LHS), unwrap(RHS), Name));
167246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
167346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
167446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildURem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
167546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
167646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateURem(unwrap(LHS), unwrap(RHS), Name));
167746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
167846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
167946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
168046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
168146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSRem(unwrap(LHS), unwrap(RHS), Name));
168246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
168346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
168446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
168546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
168646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFRem(unwrap(LHS), unwrap(RHS), Name));
168746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
168846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
168946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShl(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
169046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
169146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateShl(unwrap(LHS), unwrap(RHS), Name));
169246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
169346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
169446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
169546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
169646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateLShr(unwrap(LHS), unwrap(RHS), Name));
169746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
169846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
169946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
170046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
170146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAShr(unwrap(LHS), unwrap(RHS), Name));
170246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
170346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
170446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAnd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
170546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
170646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAnd(unwrap(LHS), unwrap(RHS), Name));
170746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
170846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
170946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildOr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
171046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         const char *Name) {
171146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateOr(unwrap(LHS), unwrap(RHS), Name));
171246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
171346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
171446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildXor(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
171546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
171646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateXor(unwrap(LHS), unwrap(RHS), Name));
171746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
171846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
171946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
172046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateNeg(unwrap(V), Name));
172146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
172246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1723d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan GohmanLLVMValueRef LLVMBuildFNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
1724d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman  return wrap(unwrap(B)->CreateFNeg(unwrap(V), Name));
1725d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman}
1726d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman
172746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNot(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
172846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateNot(unwrap(V), Name));
172946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
173046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
173146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Memory ..............................................................--*/
173246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
173346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMalloc(LLVMBuilderRef B, LLVMTypeRef Ty,
173446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
17359d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  const Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
17369d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
17379d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
17389d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Instruction* Malloc = CallInst::CreateMalloc(unwrap(B)->GetInsertBlock(),
17399d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               ITy, unwrap(Ty), AllocSize,
17409d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               0, 0, "");
17419d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  return wrap(unwrap(B)->Insert(Malloc, Twine(Name)));
174246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
174346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
174446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef B, LLVMTypeRef Ty,
174546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name) {
17469d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  const Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
17479d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
17489d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
17499d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Instruction* Malloc = CallInst::CreateMalloc(unwrap(B)->GetInsertBlock(),
17509d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               ITy, unwrap(Ty), AllocSize,
17519d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez                                               unwrap(Val), 0, "");
17529d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  return wrap(unwrap(B)->Insert(Malloc, Twine(Name)));
175346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
175446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
175546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAlloca(LLVMBuilderRef B, LLVMTypeRef Ty,
175646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
175746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), 0, Name));
175846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
175946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
176046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef B, LLVMTypeRef Ty,
176146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name) {
176246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), unwrap(Val), Name));
176346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
176446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
176546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFree(LLVMBuilderRef B, LLVMValueRef PointerVal) {
1766046e78ce55a7c3d82b7b6758d2d77f2d99f970bfVictor Hernandez  return wrap(unwrap(B)->Insert(
1767046e78ce55a7c3d82b7b6758d2d77f2d99f970bfVictor Hernandez     CallInst::CreateFree(unwrap(PointerVal), unwrap(B)->GetInsertBlock())));
176846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
176946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
177046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
177146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLoad(LLVMBuilderRef B, LLVMValueRef PointerVal,
177246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
177346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateLoad(unwrap(PointerVal), Name));
177446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
177546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
177646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildStore(LLVMBuilderRef B, LLVMValueRef Val,
177746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMValueRef PointerVal) {
177846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateStore(unwrap(Val), unwrap(PointerVal)));
177946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
178046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
178146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
178246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          LLVMValueRef *Indices, unsigned NumIndices,
178346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
178446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateGEP(unwrap(Pointer), unwrap(Indices),
178546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                   unwrap(Indices) + NumIndices, Name));
178646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
178746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1788f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
1789f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMValueRef *Indices, unsigned NumIndices,
1790f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  const char *Name) {
1791f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateInBoundsGEP(unwrap(Pointer), unwrap(Indices),
1792f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                           unwrap(Indices) + NumIndices, Name));
1793f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1794f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1795f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
1796f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                unsigned Idx, const char *Name) {
1797f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateStructGEP(unwrap(Pointer), Idx, Name));
1798f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1799f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1800f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
1801f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   const char *Name) {
1802f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateGlobalString(Str, Name));
1803f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1804f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1805f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
1806f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                      const char *Name) {
1807f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateGlobalStringPtr(Str, Name));
1808f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1809f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
181046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Casts ...............................................................--*/
181146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
181246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildTrunc(LLVMBuilderRef B, LLVMValueRef Val,
181346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name) {
181446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateTrunc(unwrap(Val), unwrap(DestTy), Name));
181546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
181646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
181746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildZExt(LLVMBuilderRef B, LLVMValueRef Val,
181846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name) {
181946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateZExt(unwrap(Val), unwrap(DestTy), Name));
182046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
182146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
182246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSExt(LLVMBuilderRef B, LLVMValueRef Val,
182346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name) {
182446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSExt(unwrap(Val), unwrap(DestTy), Name));
182546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
182646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
182746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef B, LLVMValueRef Val,
182846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
182946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPToUI(unwrap(Val), unwrap(DestTy), Name));
183046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
183146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
183246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef B, LLVMValueRef Val,
183346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
183446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPToSI(unwrap(Val), unwrap(DestTy), Name));
183546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
183646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
183746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef B, LLVMValueRef Val,
183846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
183946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUIToFP(unwrap(Val), unwrap(DestTy), Name));
184046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
184146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
184246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef B, LLVMValueRef Val,
184346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
184446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSIToFP(unwrap(Val), unwrap(DestTy), Name));
184546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
184646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
184746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef B, LLVMValueRef Val,
184846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name) {
184946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPTrunc(unwrap(Val), unwrap(DestTy), Name));
185046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
185146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
185246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPExt(LLVMBuilderRef B, LLVMValueRef Val,
185346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name) {
185446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPExt(unwrap(Val), unwrap(DestTy), Name));
185546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
185646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
185746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef B, LLVMValueRef Val,
185846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name) {
185946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreatePtrToInt(unwrap(Val), unwrap(DestTy), Name));
186046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
186146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
186246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef B, LLVMValueRef Val,
186346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name) {
186446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateIntToPtr(unwrap(Val), unwrap(DestTy), Name));
186546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
186646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
186746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBitCast(LLVMBuilderRef B, LLVMValueRef Val,
186846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name) {
186946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateBitCast(unwrap(Val), unwrap(DestTy), Name));
187046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
187146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1872f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
1873f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name) {
1874f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateZExtOrBitCast(unwrap(Val), unwrap(DestTy),
1875f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                             Name));
1876f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1877f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1878f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
1879f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name) {
1880f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateSExtOrBitCast(unwrap(Val), unwrap(DestTy),
1881f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                             Name));
1882f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1883f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1884f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
1885f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                     LLVMTypeRef DestTy, const char *Name) {
1886f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateTruncOrBitCast(unwrap(Val), unwrap(DestTy),
1887f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                              Name));
1888f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1889f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1890f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef B, LLVMValueRef Val,
1891f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMTypeRef DestTy, const char *Name) {
1892f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreatePointerCast(unwrap(Val), unwrap(DestTy), Name));
1893f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1894f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1895f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIntCast(LLVMBuilderRef B, LLVMValueRef Val,
1896e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands                              LLVMTypeRef DestTy, const char *Name) {
1897e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands  return wrap(unwrap(B)->CreateIntCast(unwrap(Val), unwrap(DestTy),
1898e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands                                       /*isSigned*/true, Name));
1899f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1900f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1901f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFPCast(LLVMBuilderRef B, LLVMValueRef Val,
1902f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             LLVMTypeRef DestTy, const char *Name) {
1903f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFPCast(unwrap(Val), unwrap(DestTy), Name));
1904f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1905f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
190646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Comparisons .........................................................--*/
190746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
190846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildICmp(LLVMBuilderRef B, LLVMIntPredicate Op,
190946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
191046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
191146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateICmp(static_cast<ICmpInst::Predicate>(Op),
191246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(LHS), unwrap(RHS), Name));
191346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
191446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
191546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFCmp(LLVMBuilderRef B, LLVMRealPredicate Op,
191646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
191746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
191846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFCmp(static_cast<FCmpInst::Predicate>(Op),
191946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(LHS), unwrap(RHS), Name));
192046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
192146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
192246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Miscellaneous instructions ..........................................--*/
192346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
192446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPhi(LLVMBuilderRef B, LLVMTypeRef Ty, const char *Name) {
192546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreatePHI(unwrap(Ty), Name));
192646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
192746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
192846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn,
192946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef *Args, unsigned NumArgs,
193046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
193146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateCall(unwrap(Fn), unwrap(Args),
193246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(Args) + NumArgs, Name));
193346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
193446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
193546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSelect(LLVMBuilderRef B, LLVMValueRef If,
193646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef Then, LLVMValueRef Else,
193746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
193846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSelect(unwrap(If), unwrap(Then), unwrap(Else),
193946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      Name));
194046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
194146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
194246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildVAArg(LLVMBuilderRef B, LLVMValueRef List,
194346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef Ty, const char *Name) {
194446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateVAArg(unwrap(List), unwrap(Ty), Name));
194546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
194646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
194746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef B, LLVMValueRef VecVal,
194846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      LLVMValueRef Index, const char *Name) {
194946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateExtractElement(unwrap(VecVal), unwrap(Index),
195046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                              Name));
195146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
195246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
195346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef B, LLVMValueRef VecVal,
195446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef EltVal, LLVMValueRef Index,
195546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name) {
195646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateInsertElement(unwrap(VecVal), unwrap(EltVal),
195746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                             unwrap(Index), Name));
195846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
195946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
196046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef B, LLVMValueRef V1,
196146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef V2, LLVMValueRef Mask,
196246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name) {
196346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateShuffleVector(unwrap(V1), unwrap(V2),
196446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                             unwrap(Mask), Name));
196546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
19661ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
1967b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef B, LLVMValueRef AggVal,
1968b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned Index, const char *Name) {
1969b593117b44a74c72bc784080bb402576b3181d94Dan Gohman  return wrap(unwrap(B)->CreateExtractValue(unwrap(AggVal), Index, Name));
1970b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
1971b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
1972b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef B, LLVMValueRef AggVal,
1973b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef EltVal, unsigned Index,
1974b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  const char *Name) {
1975b593117b44a74c72bc784080bb402576b3181d94Dan Gohman  return wrap(unwrap(B)->CreateInsertValue(unwrap(AggVal), unwrap(EltVal),
1976b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                           Index, Name));
1977b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
1978b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
1979f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNull(LLVMBuilderRef B, LLVMValueRef Val,
1980f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             const char *Name) {
1981f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateIsNull(unwrap(Val), Name));
1982f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1983f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1984f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef B, LLVMValueRef Val,
1985f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                const char *Name) {
1986f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateIsNotNull(unwrap(Val), Name));
1987f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1988f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
1989f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef B, LLVMValueRef LHS,
1990f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                              LLVMValueRef RHS, const char *Name) {
1991f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreatePtrDiff(unwrap(LHS), unwrap(RHS), Name));
1992f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
1993f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
19941ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
19951ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen/*===-- Module providers --------------------------------------------------===*/
19961ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
19971ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMModuleProviderRef
19981ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMCreateModuleProviderForExistingModule(LLVMModuleRef M) {
1999f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin  return reinterpret_cast<LLVMModuleProviderRef>(M);
20001ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen}
20011ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
20021ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksenvoid LLVMDisposeModuleProvider(LLVMModuleProviderRef MP) {
20031ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen  delete unwrap(MP);
20041ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen}
20051ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2006da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2007da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Memory buffers ----------------------------------------------------===*/
2008da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2009d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithContentsOfFile(
2010d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    const char *Path,
2011d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    LLVMMemoryBufferRef *OutMemBuf,
2012d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    char **OutMessage) {
2013d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner
2014da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  std::string Error;
2015038112a4e0a9afd656f415ab397a230ae5921627Chris Lattner  if (MemoryBuffer *MB = MemoryBuffer::getFile(Path, &Error)) {
2016da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen    *OutMemBuf = wrap(MB);
2017da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen    return 0;
2018da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  }
2019da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2020da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  *OutMessage = strdup(Error.c_str());
2021da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  return 1;
2022da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2023da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2024d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2025d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                         char **OutMessage) {
2026d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar  MemoryBuffer *MB = MemoryBuffer::getSTDIN();
2027d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar  if (!MB->getBufferSize()) {
2028d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar    delete MB;
2029d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar    *OutMessage = strdup("stdin is empty.");
2030d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar    return 1;
2031da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  }
2032d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar
2033d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar  *OutMemBuf = wrap(MB);
2034d65267ee625bb9cf8dc655a0c0409760e2b76c71Daniel Dunbar  return 0;
2035da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2036da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2037da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenvoid LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf) {
2038da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  delete unwrap(MemBuf);
2039da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2040