18b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//===-- Core.cpp ----------------------------------------------------------===//
28b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
38b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//                     The LLVM Compiler Infrastructure
48b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
78b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
88b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//===----------------------------------------------------------------------===//
98b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
10b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson// This file implements the common infrastructure (including the C bindings)
11b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson// for libLLVMCore.a, which implements the LLVM intermediate representation.
128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//
138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen//===----------------------------------------------------------------------===//
148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm-c/Core.h"
168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "llvm/Bitcode/ReaderWriter.h"
170b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Attributes.h"
1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/CallSite.h"
190b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Constants.h"
20cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "llvm/IR/DerivedTypes.h"
21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/IR/DiagnosticInfo.h"
22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/IR/DiagnosticPrinter.h"
230b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/GlobalAlias.h"
240b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/GlobalVariable.h"
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/IRBuilder.h"
260b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/InlineAsm.h"
270b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/IntrinsicInst.h"
280b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/LLVMContext.h"
2940be1e85665d10f5444186f0e7106e368dd735b8Filip Pizlo#include "llvm/IR/Module.h"
3011112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman#include "llvm/PassManager.h"
31f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin#include "llvm/Support/Debug.h"
32c25e7581b9b8088910da31702d4ca21c4734c6d7Torok Edwin#include "llvm/Support/ErrorHandling.h"
33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/Support/FileSystem.h"
34906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands#include "llvm/Support/ManagedStatic.h"
35f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin#include "llvm/Support/MemoryBuffer.h"
3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Support/Threading.h"
37f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin#include "llvm/Support/raw_ostream.h"
388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include <cassert>
39da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen#include <cstdlib>
40ae9f3a3b7c915f725aef5a7250e88eaeddda03c6Anton Korobeynikov#include <cstring>
41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include <system_error>
428b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
438b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenusing namespace llvm;
448b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define DEBUG_TYPE "ir"
46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
47b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Andersonvoid llvm::initializeCore(PassRegistry &Registry) {
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  initializeDominatorTreeWrapperPassPass(Registry);
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  initializePrintModulePassWrapperPass(Registry);
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  initializePrintFunctionPassWrapperPass(Registry);
5168b2faf6be3a08064687a67a19efee0a713435deSergei Larin  initializePrintBasicBlockPassPass(Registry);
5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  initializeVerifierLegacyPassPass(Registry);
53b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson}
54b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson
55b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Andersonvoid LLVMInitializeCore(LLVMPassRegistryRef R) {
56b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson  initializeCore(*unwrap(R));
57b8a1ccfc4b2eb84cc59465e2109019c9f85c9114Owen Anderson}
588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
59906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sandsvoid LLVMShutdown() {
60906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands  llvm_shutdown();
61906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands}
62906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
63da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Error handling ----------------------------------------------------===*/
64da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
656cfed36338d7728076ddbc1331908b887a4302d3Filip Pizlochar *LLVMCreateMessage(const char *Message) {
666cfed36338d7728076ddbc1331908b887a4302d3Filip Pizlo  return strdup(Message);
676cfed36338d7728076ddbc1331908b887a4302d3Filip Pizlo}
686cfed36338d7728076ddbc1331908b887a4302d3Filip Pizlo
69da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenvoid LLVMDisposeMessage(char *Message) {
70da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  free(Message);
71da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
72da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
73da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
748b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson/*===-- Operations on contexts --------------------------------------------===*/
758b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
768b477ed579794ba6d76915d56b3f448a7dd20120Owen AndersonLLVMContextRef LLVMContextCreate() {
778b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson  return wrap(new LLVMContext());
788b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson}
798b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
80c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen AndersonLLVMContextRef LLVMGetGlobalContext() {
81c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson  return wrap(&getGlobalContext());
82c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson}
83c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson
84dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesvoid LLVMContextSetDiagnosticHandler(LLVMContextRef C,
85dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                     LLVMDiagnosticHandler Handler,
86dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                     void *DiagnosticContext) {
87dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  unwrap(C)->setDiagnosticHandler(
88dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      LLVM_EXTENSION reinterpret_cast<LLVMContext::DiagnosticHandlerTy>(Handler),
89dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      DiagnosticContext);
90dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
91dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
92dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesvoid LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
93dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                 void *OpaqueHandle) {
94dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  auto YieldCallback =
95dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    LLVM_EXTENSION reinterpret_cast<LLVMContext::YieldCallbackTy>(Callback);
96dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  unwrap(C)->setYieldCallback(YieldCallback, OpaqueHandle);
97dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
98dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
998b477ed579794ba6d76915d56b3f448a7dd20120Owen Andersonvoid LLVMContextDispose(LLVMContextRef C) {
1008b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson  delete unwrap(C);
1018b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson}
1028b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
10346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarunsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
10446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                  unsigned SLen) {
10546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return unwrap(C)->getMDKindID(StringRef(Name, SLen));
10646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
10746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
10846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarunsigned LLVMGetMDKindID(const char* Name, unsigned SLen) {
10946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return LLVMGetMDKindIDInContext(LLVMGetGlobalContext(), Name, SLen);
11046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
11146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
112dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hineschar *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI) {
113dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  std::string MsgStorage;
114dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  raw_string_ostream Stream(MsgStorage);
115dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  DiagnosticPrinterRawOStream DP(Stream);
116dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
117dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  unwrap(DI)->print(DP);
118dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Stream.flush();
119dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
120dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  return LLVMCreateMessage(MsgStorage.c_str());
121dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
122dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
123dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesLLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI){
124dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    LLVMDiagnosticSeverity severity;
125dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
126dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    switch(unwrap(DI)->getSeverity()) {
127dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    default:
128dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      severity = LLVMDSError;
129dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      break;
130dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    case DS_Warning:
131dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      severity = LLVMDSWarning;
132dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      break;
133dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    case DS_Remark:
134dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      severity = LLVMDSRemark;
135dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      break;
136dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    case DS_Note:
137dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      severity = LLVMDSNote;
138dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      break;
139dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    }
140dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
141dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return severity;
142dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}
143dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
144dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
145dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
1468b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
1478b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- Operations on modules ---------------------------------------------===*/
1488b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
149c8897d9c2f9fcee6061a2c2d380028269026a836Owen AndersonLLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID) {
150c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson  return wrap(new Module(ModuleID, getGlobalContext()));
151c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson}
152c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson
1532cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew TrickLLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
154c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson                                                LLVMContextRef C) {
15531895e73591d3c9ceae731a1274c8f56194b9616Owen Anderson  return wrap(new Module(ModuleID, *unwrap(C)));
1568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
1578b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMDisposeModule(LLVMModuleRef M) {
1598b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  delete unwrap(M);
1608b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
1618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
162a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/*--.. Data layout .........................................................--*/
163a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenconst char * LLVMGetDataLayout(LLVMModuleRef M) {
16436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  return unwrap(M)->getDataLayoutStr().c_str();
165a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
166a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
167a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenvoid LLVMSetDataLayout(LLVMModuleRef M, const char *Triple) {
168a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  unwrap(M)->setDataLayout(Triple);
169a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
170a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
171a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen/*--.. Target triple .......................................................--*/
172a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenconst char * LLVMGetTarget(LLVMModuleRef M) {
173a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  return unwrap(M)->getTargetTriple().c_str();
174a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
175a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
176a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenvoid LLVMSetTarget(LLVMModuleRef M, const char *Triple) {
177a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen  unwrap(M)->setTargetTriple(Triple);
178a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen}
179a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
180af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksenvoid LLVMDumpModule(LLVMModuleRef M) {
181af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen  unwrap(M)->dump();
182af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen}
183af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen
1845c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans WennborgLLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
1855c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg                               char **ErrorMessage) {
1865c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  std::string error;
18736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  raw_fd_ostream dest(Filename, error, sys::fs::F_Text);
1885c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  if (!error.empty()) {
1895c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg    *ErrorMessage = strdup(error.c_str());
1905c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg    return true;
1915c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  }
1925c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg
193dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  unwrap(M)->print(dest, nullptr);
1945c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg
1955c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  if (!error.empty()) {
1965c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg    *ErrorMessage = strdup(error.c_str());
1975c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg    return true;
1985c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  }
1995c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  dest.flush();
2005c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg  return false;
2015c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg}
2025c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg
2032906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborgchar *LLVMPrintModuleToString(LLVMModuleRef M) {
2042906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg  std::string buf;
2052906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg  raw_string_ostream os(buf);
2062906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg
207dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  unwrap(M)->print(os, nullptr);
2082906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg  os.flush();
2092906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg
2102906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg  return strdup(buf.c_str());
2112906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg}
2122906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg
2130941534c712d77243d9dda5e8c1d927563b4edffChris Lattner/*--.. Operations on inline assembler ......................................--*/
2140941534c712d77243d9dda5e8c1d927563b4edffChris Lattnervoid LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm) {
2150941534c712d77243d9dda5e8c1d927563b4edffChris Lattner  unwrap(M)->setModuleInlineAsm(StringRef(Asm));
2160941534c712d77243d9dda5e8c1d927563b4edffChris Lattner}
2170941534c712d77243d9dda5e8c1d927563b4edffChris Lattner
2188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
219a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner/*--.. Operations on module contexts ......................................--*/
220a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris LattnerLLVMContextRef LLVMGetModuleContext(LLVMModuleRef M) {
221a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner  return wrap(&unwrap(M)->getContext());
222a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner}
223a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner
224a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner
2258b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- Operations on types -----------------------------------------------===*/
2268b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2278b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on all types (mostly) ....................................--*/
2288b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty) {
2300df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  switch (unwrap(Ty)->getTypeID()) {
2310df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::VoidTyID:
2320df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMVoidTypeKind;
233ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman  case Type::HalfTyID:
234ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman    return LLVMHalfTypeKind;
2350df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::FloatTyID:
2360df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMFloatTypeKind;
2370df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::DoubleTyID:
2380df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMDoubleTypeKind;
2390df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::X86_FP80TyID:
2400df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMX86_FP80TypeKind;
2410df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::FP128TyID:
2420df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMFP128TypeKind;
2430df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::PPC_FP128TyID:
2440df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMPPC_FP128TypeKind;
2450df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::LabelTyID:
2460df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMLabelTypeKind;
2470df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::MetadataTyID:
2480df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMMetadataTypeKind;
2490df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::IntegerTyID:
2500df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMIntegerTypeKind;
2510df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::FunctionTyID:
2520df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMFunctionTypeKind;
2530df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::StructTyID:
2540df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMStructTypeKind;
2550df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::ArrayTyID:
2560df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMArrayTypeKind;
2570df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::PointerTyID:
2580df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMPointerTypeKind;
2590df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  case Type::VectorTyID:
2600df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner    return LLVMVectorTypeKind;
261bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen  case Type::X86_MMXTyID:
262bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen    return LLVMX86_MMXTypeKind;
2630df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  }
26436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  llvm_unreachable("Unhandled TypeID.");
2658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
2668b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
267ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok EdwinLLVMBool LLVMTypeIsSized(LLVMTypeRef Ty)
268ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin{
269ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin    return unwrap(Ty)->isSized();
270ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin}
271ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok Edwin
27222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty) {
27322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(&unwrap(Ty)->getContext());
27422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
27522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
27675a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborgvoid LLVMDumpType(LLVMTypeRef Ty) {
27775a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborg  return unwrap(Ty)->dump();
27875a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborg}
27975a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborg
28018b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborgchar *LLVMPrintTypeToString(LLVMTypeRef Ty) {
28118b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg  std::string buf;
28218b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg  raw_string_ostream os(buf);
28318b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg
284cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  if (unwrap(Ty))
285cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    unwrap(Ty)->print(os);
286cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  else
287cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    os << "Printing <null> Type";
288cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines
28918b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg  os.flush();
29018b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg
29118b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg  return strdup(buf.c_str());
29218b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg}
29318b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg
2948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on integer types .........................................--*/
2958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
29622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C)  {
29722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt1Ty(*unwrap(C));
29822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
29922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C)  {
30022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt8Ty(*unwrap(C));
30122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
30222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C) {
30322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt16Ty(*unwrap(C));
30422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
30522c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C) {
30622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt32Ty(*unwrap(C));
30722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
30822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C) {
30922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getInt64Ty(*unwrap(C));
31022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
31122c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits) {
31222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(IntegerType::get(*unwrap(C), NumBits));
31322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
31422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
3151d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt1Type(void)  {
31622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt1TypeInContext(LLVMGetGlobalContext());
3171d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
3181d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt8Type(void)  {
31922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt8TypeInContext(LLVMGetGlobalContext());
3201d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
3211d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt16Type(void) {
32222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt16TypeInContext(LLVMGetGlobalContext());
3231d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
3241d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt32Type(void) {
32522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt32TypeInContext(LLVMGetGlobalContext());
3261d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
3271d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMInt64Type(void) {
32822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInt64TypeInContext(LLVMGetGlobalContext());
3291d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
33081a788176ecf158432af2b208b0a85321e5ec74aGordon HenriksenLLVMTypeRef LLVMIntType(unsigned NumBits) {
33122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMIntTypeInContext(LLVMGetGlobalContext(), NumBits);
3328b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
33446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy) {
3358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<IntegerType>(IntegerTy)->getBitWidth();
3368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
3388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on real types ............................................--*/
3398b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
340ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan GohmanLLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C) {
341ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman  return (LLVMTypeRef) Type::getHalfTy(*unwrap(C));
342ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman}
34322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C) {
34422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getFloatTy(*unwrap(C));
34522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
34622c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C) {
34722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getDoubleTy(*unwrap(C));
34822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
34922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C) {
35022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getX86_FP80Ty(*unwrap(C));
35122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
35222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C) {
35322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getFP128Ty(*unwrap(C));
35422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
35522c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C) {
35622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return (LLVMTypeRef) Type::getPPC_FP128Ty(*unwrap(C));
35722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
358bb811a244567aa8a1522203f15588f4d001b7353Dale JohannesenLLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C) {
359bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen  return (LLVMTypeRef) Type::getX86_MMXTy(*unwrap(C));
360bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen}
36122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
362ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan GohmanLLVMTypeRef LLVMHalfType(void) {
363ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman  return LLVMHalfTypeInContext(LLVMGetGlobalContext());
364ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman}
3651d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMFloatType(void) {
36622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMFloatTypeInContext(LLVMGetGlobalContext());
3671d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
3681d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMDoubleType(void) {
36922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMDoubleTypeInContext(LLVMGetGlobalContext());
3701d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
3711d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMX86FP80Type(void) {
37222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMX86FP80TypeInContext(LLVMGetGlobalContext());
3731d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
3741d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMFP128Type(void) {
37522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMFP128TypeInContext(LLVMGetGlobalContext());
3761d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
3771d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMPPCFP128Type(void) {
37822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMPPCFP128TypeInContext(LLVMGetGlobalContext());
3791d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
380bb811a244567aa8a1522203f15588f4d001b7353Dale JohannesenLLVMTypeRef LLVMX86MMXType(void) {
381bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen  return LLVMX86MMXTypeInContext(LLVMGetGlobalContext());
382bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen}
3838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
3848b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on function types ........................................--*/
3858b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
38681a788176ecf158432af2b208b0a85321e5ec74aGordon HenriksenLLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
38781a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen                             LLVMTypeRef *ParamTypes, unsigned ParamCount,
388d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool IsVarArg) {
389d155945f15f73eb5619756d94e69b5bc5319d89aFrits van Bommel  ArrayRef<Type*> Tys(unwrap(ParamTypes), ParamCount);
390debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(FunctionType::get(unwrap(ReturnType), Tys, IsVarArg != 0));
3918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
393d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy) {
3948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<FunctionType>(FunctionTy)->isVarArg();
3958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
3968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
39746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy) {
3988b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return wrap(unwrap<FunctionType>(FunctionTy)->getReturnType());
3998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
40146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy) {
4028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<FunctionType>(FunctionTy)->getNumParams();
4038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
40546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest) {
4068b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  FunctionType *Ty = unwrap<FunctionType>(FunctionTy);
4078b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  for (FunctionType::param_iterator I = Ty->param_begin(),
4088b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                                    E = Ty->param_end(); I != E; ++I)
4098b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    *Dest++ = wrap(*I);
4108b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4118b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on struct types ..........................................--*/
4138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
41422c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
415d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                           unsigned ElementCount, LLVMBool Packed) {
416d155945f15f73eb5619756d94e69b5bc5319d89aFrits van Bommel  ArrayRef<Type*> Tys(unwrap(ElementTypes), ElementCount);
41722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(StructType::get(*unwrap(C), Tys, Packed != 0));
4188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
42022c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes,
421d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                           unsigned ElementCount, LLVMBool Packed) {
42222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMStructTypeInContext(LLVMGetGlobalContext(), ElementTypes,
42322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                 ElementCount, Packed);
42422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
42522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
426d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris LattnerLLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name)
427d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner{
428c4d0e9fbddfe6b0ee5d5d7ef8eb1b341a8a242cfChris Lattner  return wrap(StructType::create(*unwrap(C), Name));
429d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner}
430d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner
431c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwinconst char *LLVMGetStructName(LLVMTypeRef Ty)
432c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin{
43331116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  StructType *Type = unwrap<StructType>(Ty);
43431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (!Type->hasName())
435dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
43631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  return Type->getName().data();
437c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin}
438c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwin
439d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattnervoid LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
440d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner                       unsigned ElementCount, LLVMBool Packed) {
441d155945f15f73eb5619756d94e69b5bc5319d89aFrits van Bommel  ArrayRef<Type*> Tys(unwrap(ElementTypes), ElementCount);
442d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner  unwrap<StructType>(StructTy)->setBody(Tys, Packed != 0);
443d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner}
44422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
44546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy) {
4468b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<StructType>(StructTy)->getNumElements();
4478b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4488b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest) {
4508b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  StructType *Ty = unwrap<StructType>(StructTy);
4518c6d1962107504e92a7413cbacc6afd5cc82cdc3Nick Lewycky  for (StructType::element_iterator I = Ty->element_begin(),
4528b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen                                    E = Ty->element_end(); I != E; ++I)
4538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    *Dest++ = wrap(*I);
4548b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4558b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
456d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy) {
4578b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<StructType>(StructTy)->isPacked();
4588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4598b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
46061afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris LattnerLLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy) {
46161afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner  return unwrap<StructType>(StructTy)->isOpaque();
46261afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner}
46361afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner
46461afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris LattnerLLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name) {
46561afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner  return wrap(unwrap(M)->getTypeByName(Name));
46661afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner}
46761afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner
4688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on array, pointer, and vector types (sequence types) .....--*/
4698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
47057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenLLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount) {
471debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(ArrayType::get(unwrap(ElementType), ElementCount));
4728b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
47457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenLLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace) {
475debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(PointerType::get(unwrap(ElementType), AddressSpace));
4768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4778b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
47857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon HenriksenLLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount) {
479debcb01b0f0a15f568ca69e8f288fade4bfc7297Owen Anderson  return wrap(VectorType::get(unwrap(ElementType), ElementCount));
4808b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4818b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4828b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty) {
4838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return wrap(unwrap<SequentialType>(Ty)->getElementType());
4848b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4858b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4868b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy) {
4878b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<ArrayType>(ArrayTy)->getNumElements();
4888b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4898b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
49057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenunsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy) {
49157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen  return unwrap<PointerType>(PointerTy)->getAddressSpace();
49257cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen}
49357cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen
4948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetVectorSize(LLVMTypeRef VectorTy) {
4958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<VectorType>(VectorTy)->getNumElements();
4968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
4978b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
4988b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on other types ...........................................--*/
4998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
50022c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C)  {
50122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(Type::getVoidTy(*unwrap(C)));
50222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
50322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C) {
50422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(Type::getLabelTy(*unwrap(C)));
50522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
50622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
5071d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMVoidType(void)  {
50822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMVoidTypeInContext(LLVMGetGlobalContext());
5091d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
5101d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen AndersonLLVMTypeRef LLVMLabelType(void) {
51122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMLabelTypeInContext(LLVMGetGlobalContext());
5121d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Anderson}
5138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
5148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- Operations on values ----------------------------------------------===*/
5158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
5168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on all values ............................................--*/
5178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
51846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMTypeRef LLVMTypeOf(LLVMValueRef Val) {
5198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return wrap(unwrap(Val)->getType());
5208b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
5228b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenconst char *LLVMGetValueName(LLVMValueRef Val) {
52393b67e40de356569493c285b86b138a3f11b5035Daniel Dunbar  return unwrap(Val)->getName().data();
5248b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5258b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
5268b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetValueName(LLVMValueRef Val, const char *Name) {
5278b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap(Val)->setName(Name);
5288b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
5298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
53088cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksenvoid LLVMDumpValue(LLVMValueRef Val) {
53188cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen  unwrap(Val)->dump();
53288cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen}
53388cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen
53414bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotovchar* LLVMPrintValueToString(LLVMValueRef Val) {
53514bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov  std::string buf;
53614bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov  raw_string_ostream os(buf);
53714bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov
538cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  if (unwrap(Val))
539cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    unwrap(Val)->print(os);
540cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  else
541cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    os << "Printing <null> Value";
542cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines
54314bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov  os.flush();
54414bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov
54514bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov  return strdup(buf.c_str());
54614bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov}
54714bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov
548885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnervoid LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal) {
549885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  unwrap(OldVal)->replaceAllUsesWith(unwrap(NewVal));
550885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
5512a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
55246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarint LLVMHasMetadata(LLVMValueRef Inst) {
55346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return unwrap<Instruction>(Inst)->hasMetadata();
55446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
55546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
55646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMGetMetadata(LLVMValueRef Inst, unsigned KindID) {
55746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return wrap(unwrap<Instruction>(Inst)->getMetadata(KindID));
55846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
55946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
56046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarvoid LLVMSetMetadata(LLVMValueRef Inst, unsigned KindID, LLVMValueRef MD) {
561dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  unwrap<Instruction>(Inst)->setMetadata(KindID,
562dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                         MD ? unwrap<MDNode>(MD) : nullptr);
56346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
56446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
5652a9c671a51126def8020870103316e6aedc73edfGordon Henriksen/*--.. Conversion functions ................................................--*/
5662a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
5672a9c671a51126def8020870103316e6aedc73edfGordon Henriksen#define LLVM_DEFINE_VALUE_CAST(name)                                       \
5682a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  LLVMValueRef LLVMIsA##name(LLVMValueRef Val) {                           \
5692a9c671a51126def8020870103316e6aedc73edfGordon Henriksen    return wrap(static_cast<Value*>(dyn_cast_or_null<name>(unwrap(Val)))); \
5702a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  }
5712a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
5722a9c671a51126def8020870103316e6aedc73edfGordon HenriksenLLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DEFINE_VALUE_CAST)
5732a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
574885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner/*--.. Operations on Uses ..................................................--*/
57524b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMUseRef LLVMGetFirstUse(LLVMValueRef Val) {
576885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Value *V = unwrap(Val);
577885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Value::use_iterator I = V->use_begin();
578885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  if (I == V->use_end())
579dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
58036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  return wrap(&*I);
581885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
582885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
58324b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMUseRef LLVMGetNextUse(LLVMUseRef U) {
58424b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar  Use *Next = unwrap(U)->getNext();
58524b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar  if (Next)
58624b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar    return wrap(Next);
587dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  return nullptr;
588885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
589885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
59024b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMValueRef LLVMGetUser(LLVMUseRef U) {
59124b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar  return wrap(unwrap(U)->getUser());
592885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
593885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
59424b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMValueRef LLVMGetUsedValue(LLVMUseRef U) {
59524b3733425511cf60268fddda13c306ab140b55fErick Tryzelaar  return wrap(unwrap(U)->get());
596885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
597885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
598885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner/*--.. Operations on Users .................................................--*/
599885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index) {
6004f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  Value *V = unwrap(Val);
6014f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  if (MDNode *MD = dyn_cast<MDNode>(V))
6024f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin      return wrap(MD->getOperand(Index));
6034f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  return wrap(cast<User>(V)->getOperand(Index));
604885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
6052a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
606f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarvoid LLVMSetOperand(LLVMValueRef Val, unsigned Index, LLVMValueRef Op) {
607f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar  unwrap<User>(Val)->setOperand(Index, unwrap(Op));
608f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar}
609f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar
610f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarint LLVMGetNumOperands(LLVMValueRef Val) {
6114f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  Value *V = unwrap(Val);
6124f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  if (MDNode *MD = dyn_cast<MDNode>(V))
6134f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin      return MD->getNumOperands();
6144f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin  return cast<User>(V)->getNumOperands();
615f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar}
616f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaar
6178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on constants of any type .................................--*/
6188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
619e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstNull(LLVMTypeRef Ty) {
620a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson  return wrap(Constant::getNullValue(unwrap(Ty)));
6218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
6228b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
623e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty) {
624a7235ea7245028a0723e8ab7fd011386b3900777Owen Anderson  return wrap(Constant::getAllOnesValue(unwrap(Ty)));
6258b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
6268b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
6278b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMGetUndef(LLVMTypeRef Ty) {
6289e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson  return wrap(UndefValue::get(unwrap(Ty)));
6298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
6308b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
631d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsConstant(LLVMValueRef Ty) {
632344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen  return isa<Constant>(unwrap(Ty));
633344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen}
634344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen
635d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsNull(LLVMValueRef Val) {
6368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  if (Constant *C = dyn_cast<Constant>(unwrap(Val)))
6378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    return C->isNullValue();
6388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return false;
6398b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
6408b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
641d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsUndef(LLVMValueRef Val) {
642344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen  return isa<UndefValue>(unwrap(Val));
643344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen}
644344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen
645e4840bc611f8260065d3879a412ea3b501550995Chris LattnerLLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty) {
64662e744b555d48b4c8b9023739fef8ae403bb20e8Owen Anderson  return
6479e9a0d5fc26878e51a58a8b57900fcbf952c2691Owen Anderson      wrap(ConstantPointerNull::get(unwrap<PointerType>(Ty)));
648e4840bc611f8260065d3879a412ea3b501550995Chris Lattner}
649e4840bc611f8260065d3879a412ea3b501550995Chris Lattner
65046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--.. Operations on metadata nodes ........................................--*/
65146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
65246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
65346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                   unsigned SLen) {
65446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return wrap(MDString::get(*unwrap(C), StringRef(Str, SLen)));
65546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
65646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
65746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMMDString(const char *Str, unsigned SLen) {
65846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return LLVMMDStringInContext(LLVMGetGlobalContext(), Str, SLen);
65946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
66046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
66146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
66246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                 unsigned Count) {
663ec9186bcf975c9ffa3ec7ca97867f0ec6eb55115Jay Foad  return wrap(MDNode::get(*unwrap(C),
66439b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                          makeArrayRef(unwrap<Value>(Vals, Count), Count)));
66546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
66646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
66746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count) {
66846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  return LLVMMDNodeInContext(LLVMGetGlobalContext(), Vals, Count);
66946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
67046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
6714f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinconst char *LLVMGetMDString(LLVMValueRef V, unsigned* Len) {
67231116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (const MDString *S = dyn_cast<MDString>(unwrap(V))) {
67331116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    *Len = S->getString().size();
67431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    return S->getString().data();
67531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  }
67631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  *Len = 0;
677dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  return nullptr;
6784f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin}
6794f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin
6804caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sandsunsigned LLVMGetMDNodeNumOperands(LLVMValueRef V)
6814caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands{
6824caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands  return cast<MDNode>(unwrap(V))->getNumOperands();
6834caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands}
6844caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands
6854caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sandsvoid LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest)
6864caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands{
6874caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands  const MDNode *N = cast<MDNode>(unwrap(V));
6884caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands  const unsigned numOperands = N->getNumOperands();
6894caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands  for (unsigned i = 0; i < numOperands; i++)
6904caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands    Dest[i] = wrap(N->getOperand(i));
6914caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands}
6924caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands
6934f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinunsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name)
6944f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin{
69531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (NamedMDNode *N = unwrap(M)->getNamedMetadata(name)) {
69631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    return N->getNumOperands();
69731116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  }
69831116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  return 0;
6994f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin}
7004f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin
7014f661ab0fb87f97c4a12912249c3c366df882102Torok Edwinvoid LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest)
7024f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin{
70331116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  NamedMDNode *N = unwrap(M)->getNamedMetadata(name);
70431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (!N)
70531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    return;
70631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  for (unsigned i=0;i<N->getNumOperands();i++)
70731116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    Dest[i] = wrap(N->getOperand(i));
7084f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin}
7094f661ab0fb87f97c4a12912249c3c366df882102Torok Edwin
71045ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patelvoid LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
71145ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel                                 LLVMValueRef Val)
71245ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel{
71345ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel  NamedMDNode *N = unwrap(M)->getOrInsertNamedMetadata(name);
71445ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel  if (!N)
71545ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel    return;
716dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  MDNode *Op = Val ? unwrap<MDNode>(Val) : nullptr;
71745ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel  if (Op)
71845ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel    N->addOperand(Op);
71945ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel}
72045ca049f1f221f5fc1a118f6aab83ac290cb8211Devang Patel
7218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on scalar constants ......................................--*/
7228b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
723e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
724d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                          LLVMBool SignExtend) {
725eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson  return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), N, SignExtend != 0));
7268b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
7278b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
7285400570097a25f05694d451afed7f949281b789eChris LattnerLLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
7295400570097a25f05694d451afed7f949281b789eChris Lattner                                              unsigned NumWords,
7305400570097a25f05694d451afed7f949281b789eChris Lattner                                              const uint64_t Words[]) {
7315400570097a25f05694d451afed7f949281b789eChris Lattner    IntegerType *Ty = unwrap<IntegerType>(IntTy);
7325400570097a25f05694d451afed7f949281b789eChris Lattner    return wrap(ConstantInt::get(Ty->getContext(),
7333ba292dbc2acee2d1052fb7ffe332e2164147b47Jeffrey Yasskin                                 APInt(Ty->getBitWidth(),
7343ba292dbc2acee2d1052fb7ffe332e2164147b47Jeffrey Yasskin                                       makeArrayRef(Words, NumWords))));
7355400570097a25f05694d451afed7f949281b789eChris Lattner}
7365400570097a25f05694d451afed7f949281b789eChris Lattner
737e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char Str[],
738e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                  uint8_t Radix) {
739e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str),
740e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                               Radix));
741e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar}
742e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar
743e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char Str[],
744e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                         unsigned SLen, uint8_t Radix) {
745e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str, SLen),
746e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                               Radix));
747e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen}
748e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen
749e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N) {
750e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantFP::get(unwrap(RealTy), N));
751e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen}
752e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen
753e62a8a353c3b21b551c00b9025800d3352e5349eGordon HenriksenLLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text) {
754e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Text)));
755e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar}
756e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar
757e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char Str[],
758e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                          unsigned SLen) {
759e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar  return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Str, SLen)));
7608b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
7618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
762885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnerunsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal) {
763885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return unwrap<ConstantInt>(ConstantVal)->getZExtValue();
764885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
765885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
766885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnerlong long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal) {
767885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return unwrap<ConstantInt>(ConstantVal)->getSExtValue();
768885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
769885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
7708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on composite constants ...................................--*/
7718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
77222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
773d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                      unsigned Length,
774d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                      LLVMBool DontNullTerminate) {
7758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  /* Inverted the sense of AddNull because ', 0)' is a
7768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen     better mnemonic for null termination than ', 1)'. */
77718c7f80b3e83ab584bd8572695a3cde8bafd9d3cChris Lattner  return wrap(ConstantDataArray::getString(*unwrap(C), StringRef(Str, Length),
77818c7f80b3e83ab584bd8572695a3cde8bafd9d3cChris Lattner                                           DontNullTerminate == 0));
7798b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
7802cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew TrickLLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
78122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                      LLVMValueRef *ConstantVals,
782d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                      unsigned Count, LLVMBool Packed) {
783b065b06c12dba6001b8140df2744d0c856ef6ea1Chris Lattner  Constant **Elements = unwrap<Constant>(ConstantVals, Count);
78439b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel  return wrap(ConstantStruct::getAnon(*unwrap(C), makeArrayRef(Elements, Count),
785b065b06c12dba6001b8140df2744d0c856ef6ea1Chris Lattner                                      Packed != 0));
78622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
7878b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
78822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMValueRef LLVMConstString(const char *Str, unsigned Length,
789d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool DontNullTerminate) {
79022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMConstStringInContext(LLVMGetGlobalContext(), Str, Length,
79122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                  DontNullTerminate);
79222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
793e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
794e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen                            LLVMValueRef *ConstantVals, unsigned Length) {
795267010864e139781ef5949939e081c41f954de0aJay Foad  ArrayRef<Constant*> V(unwrap<Constant>(ConstantVals, Length), Length);
796267010864e139781ef5949939e081c41f954de0aJay Foad  return wrap(ConstantArray::get(ArrayType::get(unwrap(ElementTy), Length), V));
7978b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
798e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
799d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool Packed) {
80022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMConstStructInContext(LLVMGetGlobalContext(), ConstantVals, Count,
80122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                  Packed);
8028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
80364090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola
80464090bd2d468ec70b9644bdf492684dd278de8a7Rafael EspindolaLLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
80564090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola                                  LLVMValueRef *ConstantVals,
80664090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola                                  unsigned Count) {
80764090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola  Constant **Elements = unwrap<Constant>(ConstantVals, Count);
808db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  StructType *Ty = cast<StructType>(unwrap(StructTy));
80964090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola
81039b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel  return wrap(ConstantStruct::get(Ty, makeArrayRef(Elements, Count)));
81164090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola}
81264090bd2d468ec70b9644bdf492684dd278de8a7Rafael Espindola
813e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size) {
81439b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel  return wrap(ConstantVector::get(makeArrayRef(
8152ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner                            unwrap<Constant>(ScalarConstantVals, Size), Size)));
8168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
8174df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin
8184df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin/*-- Opcode mapping */
8194df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin
8204df1557f4073cd91893a186acfee96bee64b28ccTorok Edwinstatic LLVMOpcode map_to_llvmopcode(int opcode)
8214df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin{
8224df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin    switch (opcode) {
82350bee42b54cd9aec5f49566307df2b0cf23afcf6Craig Topper      default: llvm_unreachable("Unhandled Opcode.");
8244df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#define HANDLE_INST(num, opc, clas) case num: return LLVM##opc;
8250b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Instruction.def"
8264df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#undef HANDLE_INST
8274df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin    }
8284df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin}
8294df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin
8304df1557f4073cd91893a186acfee96bee64b28ccTorok Edwinstatic int map_from_llvmopcode(LLVMOpcode code)
8314df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin{
8324df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin    switch (code) {
8334df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#define HANDLE_INST(num, opc, clas) case LLVM##opc: return num;
8340b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Instruction.def"
8354df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin#undef HANDLE_INST
8364df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin    }
8372dd674fdce68f8fd59d78a3bbab2cf5b8d220290David Blaikie    llvm_unreachable("Unhandled Opcode.");
8384df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin}
8394df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin
8404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen/*--.. Constant expressions ................................................--*/
8414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
842885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal) {
8434df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin  return map_to_llvmopcode(unwrap<ConstantExpr>(ConstantVal)->getOpcode());
844885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
845885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
846ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan SandsLLVMValueRef LLVMAlignOf(LLVMTypeRef Ty) {
847baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getAlignOf(unwrap(Ty)));
848ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands}
849ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands
8504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMSizeOf(LLVMTypeRef Ty) {
851baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSizeOf(unwrap(Ty)));
8524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal) {
8552ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNeg(unwrap<Constant>(ConstantVal)));
85656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
85756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
85819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal) {
8592ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNSWNeg(unwrap<Constant>(ConstantVal)));
86019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
86119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
86219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal) {
8632ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNUWNeg(unwrap<Constant>(ConstantVal)));
86419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
86519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
86619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
86756b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal) {
8682ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFNeg(unwrap<Constant>(ConstantVal)));
8694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal) {
8722ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNot(unwrap<Constant>(ConstantVal)));
8734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8762ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getAdd(unwrap<Constant>(LHSConstant),
8774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
8784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
8794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
8806e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant,
8816e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                             LLVMValueRef RHSConstant) {
8822ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNSWAdd(unwrap<Constant>(LHSConstant),
8836e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                      unwrap<Constant>(RHSConstant)));
8846e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
8856e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
88619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant,
88719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
8882ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNUWAdd(unwrap<Constant>(LHSConstant),
88919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
89019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
89119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
89256b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8932ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFAdd(unwrap<Constant>(LHSConstant),
89456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
89556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
89656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
8974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
8982ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSub(unwrap<Constant>(LHSConstant),
8994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
9004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
90219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant,
90319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
9042ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNSWSub(unwrap<Constant>(LHSConstant),
90519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
90619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
90719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
90819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant,
90919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
9102ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNUWSub(unwrap<Constant>(LHSConstant),
91119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
91219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
91319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
91456b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
91556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar  return wrap(ConstantExpr::getFSub(unwrap<Constant>(LHSConstant),
91656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
91756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
91856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
9194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9202ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getMul(unwrap<Constant>(LHSConstant),
9214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
9224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
92419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant,
92519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
9262ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNSWMul(unwrap<Constant>(LHSConstant),
92719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
92819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
92919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
93019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant,
93119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             LLVMValueRef RHSConstant) {
9322ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getNUWMul(unwrap<Constant>(LHSConstant),
93319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                                      unwrap<Constant>(RHSConstant)));
93419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
93519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
93656b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9372ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFMul(unwrap<Constant>(LHSConstant),
93856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    unwrap<Constant>(RHSConstant)));
93956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
94056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
9414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9422ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getUDiv(unwrap<Constant>(LHSConstant),
9434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
9444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9472ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSDiv(unwrap<Constant>(LHSConstant),
9484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
9494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9516e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant,
9526e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                LLVMValueRef RHSConstant) {
9532ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getExactSDiv(unwrap<Constant>(LHSConstant),
9546e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                         unwrap<Constant>(RHSConstant)));
9556e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
9566e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
9574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9582ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFDiv(unwrap<Constant>(LHSConstant),
9594647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
9604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9632ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getURem(unwrap<Constant>(LHSConstant),
9644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
9654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9682ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSRem(unwrap<Constant>(LHSConstant),
9694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
9704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9732ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFRem(unwrap<Constant>(LHSConstant),
9744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
9754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9782ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getAnd(unwrap<Constant>(LHSConstant),
9794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
9804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9832ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getOr(unwrap<Constant>(LHSConstant),
9844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                  unwrap<Constant>(RHSConstant)));
9854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
9882ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getXor(unwrap<Constant>(LHSConstant),
9894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                   unwrap<Constant>(RHSConstant)));
9904647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
9934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
994baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getICmp(Predicate,
9954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(LHSConstant),
9964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
9974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
9984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
9994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
10004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
1001baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFCmp(Predicate,
10024647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(LHSConstant),
10034647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
10044647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10054647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10064647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
10072ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getShl(unwrap<Constant>(LHSConstant),
10082ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner                                   unwrap<Constant>(RHSConstant)));
10094647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10104647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10114647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
10122ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getLShr(unwrap<Constant>(LHSConstant),
10134647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
10144647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10154647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) {
10172ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getAShr(unwrap<Constant>(LHSConstant),
10184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap<Constant>(RHSConstant)));
10194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
10224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                          LLVMValueRef *ConstantIndices, unsigned NumIndices) {
1023dab3d29605a5c83db41b28176273ef55961120c1Jay Foad  ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices),
1024dab3d29605a5c83db41b28176273ef55961120c1Jay Foad                               NumIndices);
10252ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getGetElementPtr(unwrap<Constant>(ConstantVal),
1026dab3d29605a5c83db41b28176273ef55961120c1Jay Foad                                             IdxList));
10274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10296e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
10306e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  LLVMValueRef *ConstantIndices,
10316e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  unsigned NumIndices) {
10326e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman  Constant* Val = unwrap<Constant>(ConstantVal);
1033dab3d29605a5c83db41b28176273ef55961120c1Jay Foad  ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices),
1034dab3d29605a5c83db41b28176273ef55961120c1Jay Foad                               NumIndices);
1035dab3d29605a5c83db41b28176273ef55961120c1Jay Foad  return wrap(ConstantExpr::getInBoundsGetElementPtr(Val, IdxList));
10366e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman}
10376e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman
10384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10392ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getTrunc(unwrap<Constant>(ConstantVal),
10404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                     unwrap(ToType)));
10414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10424647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10442ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSExt(unwrap<Constant>(ConstantVal),
10454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap(ToType)));
10464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10492ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getZExt(unwrap<Constant>(ConstantVal),
10504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    unwrap(ToType)));
10514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10542ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFPTrunc(unwrap<Constant>(ConstantVal),
10554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                       unwrap(ToType)));
10564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10584647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10592ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFPExtend(unwrap<Constant>(ConstantVal),
10604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
10614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10642ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getUIToFP(unwrap<Constant>(ConstantVal),
10654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
10664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
1069baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getSIToFP(unwrap<Constant>(ConstantVal),
10704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
10714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
1074baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson  return wrap(ConstantExpr::getFPToUI(unwrap<Constant>(ConstantVal),
10754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
10764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10792ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFPToSI(unwrap<Constant>(ConstantVal),
10804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap(ToType)));
10814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10834647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10842ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getPtrToInt(unwrap<Constant>(ConstantVal),
10854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
10864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10892ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getIntToPtr(unwrap<Constant>(ConstantVal),
10904647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                        unwrap(ToType)));
10914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
10934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
10942ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getBitCast(unwrap<Constant>(ConstantVal),
10954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                       unwrap(ToType)));
10964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
10974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
109859d3ae6cdc4316ad338cd848251f33a236ccb36cMatt ArsenaultLLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal,
109959d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault                                    LLVMTypeRef ToType) {
110059d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault  return wrap(ConstantExpr::getAddrSpaceCast(unwrap<Constant>(ConstantVal),
110159d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault                                             unwrap(ToType)));
110259d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault}
110359d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault
110456b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
110556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType) {
11062ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getZExtOrBitCast(unwrap<Constant>(ConstantVal),
110756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap(ToType)));
110856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
110956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
111056b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
111156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType) {
11122ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSExtOrBitCast(unwrap<Constant>(ConstantVal),
111356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                             unwrap(ToType)));
111456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
111556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
111656b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
111756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                     LLVMTypeRef ToType) {
11182ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getTruncOrBitCast(unwrap<Constant>(ConstantVal),
111956b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                              unwrap(ToType)));
112056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
112156b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
112256b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
112356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                  LLVMTypeRef ToType) {
11242ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getPointerCast(unwrap<Constant>(ConstantVal),
112556b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                           unwrap(ToType)));
112656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
112756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
112856b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
1129d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                              LLVMBool isSigned) {
11302ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getIntegerCast(unwrap<Constant>(ConstantVal),
11312ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner                                           unwrap(ToType), isSigned));
113256b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
113356b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
113456b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
11352ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getFPCast(unwrap<Constant>(ConstantVal),
113656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                      unwrap(ToType)));
113756b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar}
113856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar
11394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
11404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfTrue,
11414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfFalse) {
11422ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getSelect(unwrap<Constant>(ConstantCondition),
11434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap<Constant>(ConstantIfTrue),
11444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                      unwrap<Constant>(ConstantIfFalse)));
11454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
11464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
11474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
11484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                     LLVMValueRef IndexConstant) {
11492ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getExtractElement(unwrap<Constant>(VectorConstant),
11504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                              unwrap<Constant>(IndexConstant)));
11514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
11524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
11534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
11544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef ElementValueConstant,
11554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef IndexConstant) {
11562ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getInsertElement(unwrap<Constant>(VectorConstant),
11574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                         unwrap<Constant>(ElementValueConstant),
11584647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(IndexConstant)));
11594647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
11604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
11614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
11624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef VectorBConstant,
11634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef MaskConstant) {
11642ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getShuffleVector(unwrap<Constant>(VectorAConstant),
11654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(VectorBConstant),
11664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                             unwrap<Constant>(MaskConstant)));
11674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen}
11688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1169b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1170b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned NumIdx) {
11712ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getExtractValue(unwrap<Constant>(AggConstant),
117239b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                                            makeArrayRef(IdxList, NumIdx)));
1173b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
1174b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
1175b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1176b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef ElementValueConstant,
1177b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  unsigned *IdxList, unsigned NumIdx) {
11782ca5c8644e6c35b3a7910a576ed89cddb7b82c3bChris Lattner  return wrap(ConstantExpr::getInsertValue(unwrap<Constant>(AggConstant),
1179b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                         unwrap<Constant>(ElementValueConstant),
118039b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                                           makeArrayRef(IdxList, NumIdx)));
1181b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
1182b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
1183d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, const char *AsmString,
1184d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                const char *Constraints,
1185d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                LLVMBool HasSideEffects,
1186c1cbfa805b883deb559ecc0343936e18cca9e22fBenjamin Kramer                                LLVMBool IsAlignStack) {
1187d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner  return wrap(InlineAsm::get(dyn_cast<FunctionType>(unwrap(Ty)), AsmString,
1188c1cbfa805b883deb559ecc0343936e18cca9e22fBenjamin Kramer                             Constraints, HasSideEffects, IsAlignStack));
1189851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1190851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1191c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarLLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB) {
1192c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar  return wrap(BlockAddress::get(unwrap<Function>(F), unwrap(BB)));
1193c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar}
1194c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
11958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on global variables, functions, and aliases (globals) ....--*/
11968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1197dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global) {
1198dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<GlobalValue>(Global)->getParent());
1199dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1200dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1201d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsDeclaration(LLVMValueRef Global) {
12028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalValue>(Global)->isDeclaration();
12038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
12058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMLinkage LLVMGetLinkage(LLVMValueRef Global) {
12064aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  switch (unwrap<GlobalValue>(Global)->getLinkage()) {
12074aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::ExternalLinkage:
12084aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMExternalLinkage;
12094aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::AvailableExternallyLinkage:
12104aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMAvailableExternallyLinkage;
12114aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkOnceAnyLinkage:
12124aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkOnceAnyLinkage;
12134aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::LinkOnceODRLinkage:
12144aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMLinkOnceODRLinkage;
12154aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::WeakAnyLinkage:
12164aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMWeakAnyLinkage;
12174aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::WeakODRLinkage:
12184aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMWeakODRLinkage;
12194aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::AppendingLinkage:
12204aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMAppendingLinkage;
12214aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::InternalLinkage:
12224aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMInternalLinkage;
12234aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::PrivateLinkage:
12244aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMPrivateLinkage;
12254aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::ExternalWeakLinkage:
12264aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMExternalWeakLinkage;
12274aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case GlobalValue::CommonLinkage:
12284aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    return LLVMCommonLinkage;
12294aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  }
12304aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling
123158bd1510a4fea29b1ea57d6a6c4038eeea0264a2David Blaikie  llvm_unreachable("Invalid GlobalValue linkage!");
12328b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
12348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage) {
12354aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  GlobalValue *GV = unwrap<GlobalValue>(Global);
12364aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling
12374aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  switch (Linkage) {
12384aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMExternalLinkage:
12394aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::ExternalLinkage);
12404aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12414aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMAvailableExternallyLinkage:
12424aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::AvailableExternallyLinkage);
12434aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12444aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkOnceAnyLinkage:
12454aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkOnceAnyLinkage);
12464aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12474aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkOnceODRLinkage:
12484aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::LinkOnceODRLinkage);
12494aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
125032811bef956e0fae4329e6515420d85f7e510660Bill Wendling  case LLVMLinkOnceODRAutoHideLinkage:
125119794da02cc48a772ae6f4756b14b111a627170eRafael Espindola    DEBUG(errs() << "LLVMSetLinkage(): LLVMLinkOnceODRAutoHideLinkage is no "
125219794da02cc48a772ae6f4756b14b111a627170eRafael Espindola                    "longer supported.");
125332811bef956e0fae4329e6515420d85f7e510660Bill Wendling    break;
12544aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMWeakAnyLinkage:
12554aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::WeakAnyLinkage);
12564aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12574aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMWeakODRLinkage:
12584aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::WeakODRLinkage);
12594aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12604aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMAppendingLinkage:
12614aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::AppendingLinkage);
12624aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12634aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMInternalLinkage:
12644aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::InternalLinkage);
12654aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12664aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMPrivateLinkage:
12674aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::PrivateLinkage);
12684aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12694aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMLinkerPrivateLinkage:
127036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    GV->setLinkage(GlobalValue::PrivateLinkage);
12714aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12725e721d768254a920b78b9129d79a84c0163cb3f4Bill Wendling  case LLVMLinkerPrivateWeakLinkage:
127336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    GV->setLinkage(GlobalValue::PrivateLinkage);
12745e721d768254a920b78b9129d79a84c0163cb3f4Bill Wendling    break;
12754aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMDLLImportLinkage:
127636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    DEBUG(errs()
127736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines          << "LLVMSetLinkage(): LLVMDLLImportLinkage is no longer supported.");
12784aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12794aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMDLLExportLinkage:
128036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    DEBUG(errs()
128136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines          << "LLVMSetLinkage(): LLVMDLLExportLinkage is no longer supported.");
12824aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12834aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMExternalWeakLinkage:
12844aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::ExternalWeakLinkage);
12854aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12864aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMGhostLinkage:
1287f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin    DEBUG(errs()
1288f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin          << "LLVMSetLinkage(): LLVMGhostLinkage is no longer supported.");
12894aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12904aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  case LLVMCommonLinkage:
12914aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    GV->setLinkage(GlobalValue::CommonLinkage);
12924aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling    break;
12934aebcb4f5f69e545da86f7482a19a6a3902a5f9fBill Wendling  }
12948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
12968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenconst char *LLVMGetSection(LLVMValueRef Global) {
1297cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  return unwrap<GlobalValue>(Global)->getSection();
12988b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
12998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
13008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetSection(LLVMValueRef Global, const char *Section) {
1301dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  unwrap<GlobalObject>(Global)->setSection(Section);
13028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
13038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
13048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMVisibility LLVMGetVisibility(LLVMValueRef Global) {
13058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return static_cast<LLVMVisibility>(
13068b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    unwrap<GlobalValue>(Global)->getVisibility());
13078b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
13088b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
13098b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz) {
13108b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalValue>(Global)
13118b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    ->setVisibility(static_cast<GlobalValue::VisibilityTypes>(Viz));
13128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
13138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
131436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesLLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global) {
131536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  return static_cast<LLVMDLLStorageClass>(
131636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      unwrap<GlobalValue>(Global)->getDLLStorageClass());
131736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
131836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
131936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesvoid LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class) {
132036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  unwrap<GlobalValue>(Global)->setDLLStorageClass(
132136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      static_cast<GlobalValue::DLLStorageClassTypes>(Class));
132236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
132336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
132436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesLLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global) {
132536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  return unwrap<GlobalValue>(Global)->hasUnnamedAddr();
132636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
132736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
132836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesvoid LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr) {
132936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  unwrap<GlobalValue>(Global)->setUnnamedAddr(HasUnnamedAddr);
133036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
133136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
13327959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg/*--.. Operations on global variables, load and store instructions .........--*/
13337959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg
13347959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborgunsigned LLVMGetAlignment(LLVMValueRef V) {
13357959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg  Value *P = unwrap<Value>(V);
13367959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg  if (GlobalValue *GV = dyn_cast<GlobalValue>(P))
13377959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg    return GV->getAlignment();
133836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  if (AllocaInst *AI = dyn_cast<AllocaInst>(P))
133936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    return AI->getAlignment();
13407959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg  if (LoadInst *LI = dyn_cast<LoadInst>(P))
13417959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg    return LI->getAlignment();
13427959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg  if (StoreInst *SI = dyn_cast<StoreInst>(P))
13437959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg    return SI->getAlignment();
13447959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg
134536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  llvm_unreachable(
134636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      "only GlobalValue, AllocaInst, LoadInst and StoreInst have alignment");
13477959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg}
13487959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg
13497959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborgvoid LLVMSetAlignment(LLVMValueRef V, unsigned Bytes) {
13507959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg  Value *P = unwrap<Value>(V);
1351dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  if (GlobalObject *GV = dyn_cast<GlobalObject>(P))
13527959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg    GV->setAlignment(Bytes);
135336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  else if (AllocaInst *AI = dyn_cast<AllocaInst>(P))
135436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    AI->setAlignment(Bytes);
13557959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg  else if (LoadInst *LI = dyn_cast<LoadInst>(P))
13567959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg    LI->setAlignment(Bytes);
13577959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg  else if (StoreInst *SI = dyn_cast<StoreInst>(P))
13587959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg    SI->setAlignment(Bytes);
135972202297a90563ec3eedd3015395c8d1a8db0a87Anders Waldenborg  else
136036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    llvm_unreachable(
136136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        "only GlobalValue, AllocaInst, LoadInst and StoreInst have alignment");
13628b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
13638b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
13648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*--.. Operations on global variables ......................................--*/
13658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
13668b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name) {
1367e9b11b431308f4766b73cda93e38ec930c912122Owen Anderson  return wrap(new GlobalVariable(*unwrap(M), unwrap(Ty), false,
1368dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                 GlobalValue::ExternalLinkage, nullptr, Name));
13698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
13708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
13718e130b1d0d53346e05d0a1161a52c6d62de163c4Erick TryzelaarLLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
13728e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                         const char *Name,
13738e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                         unsigned AddressSpace) {
13748e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar  return wrap(new GlobalVariable(*unwrap(M), unwrap(Ty), false,
1375dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                 GlobalValue::ExternalLinkage, nullptr, Name,
1376dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                 nullptr, GlobalVariable::NotThreadLocal,
1377dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                 AddressSpace));
13788e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar}
13798e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar
13806d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenLLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name) {
13816d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen  return wrap(unwrap(M)->getNamedGlobal(Name));
13826d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen}
13836d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen
138434000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M) {
138534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
138634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = Mod->global_begin();
138734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->global_end())
1388dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
138934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
139034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
139134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
139234000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M) {
139334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
139434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = Mod->global_end();
139534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->global_begin())
1396dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
139734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
139834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
139934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
140034000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar) {
140134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
140234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = GV;
140334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == GV->getParent()->global_end())
1404dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
140534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
140634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
140734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
140834000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar) {
140934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
141034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::global_iterator I = GV;
14114733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == GV->getParent()->global_begin())
1412dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
141334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
141434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
141534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
14168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMDeleteGlobal(LLVMValueRef GlobalVar) {
14178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->eraseFromParent();
14188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
14198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
14208b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar) {
1421885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  GlobalVariable* GV = unwrap<GlobalVariable>(GlobalVar);
1422885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  if ( !GV->hasInitializer() )
1423dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
1424885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  return wrap(GV->getInitializer());
14258b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
14268b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
14278b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal) {
14288b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)
14298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen    ->setInitializer(unwrap<Constant>(ConstantVal));
14308b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
14318b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1432d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar) {
14338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  return unwrap<GlobalVariable>(GlobalVar)->isThreadLocal();
14348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
14358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1436d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal) {
14378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->setThreadLocal(IsThreadLocal != 0);
14388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
14398b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1440d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar) {
1441c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen  return unwrap<GlobalVariable>(GlobalVar)->isConstant();
1442c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen}
1443c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen
1444d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant) {
1445c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen  unwrap<GlobalVariable>(GlobalVar)->setConstant(IsConstant != 0);
1446c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen}
1447c84c16be9b29b4f805b92bfc2d93e2dfaa952f8fGordon Henriksen
14486334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans WennborgLLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar) {
14496334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  switch (unwrap<GlobalVariable>(GlobalVar)->getThreadLocalMode()) {
14506334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case GlobalVariable::NotThreadLocal:
14516334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    return LLVMNotThreadLocal;
14526334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case GlobalVariable::GeneralDynamicTLSModel:
14536334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    return LLVMGeneralDynamicTLSModel;
14546334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case GlobalVariable::LocalDynamicTLSModel:
14556334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    return LLVMLocalDynamicTLSModel;
14566334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case GlobalVariable::InitialExecTLSModel:
14576334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    return LLVMInitialExecTLSModel;
14586334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case GlobalVariable::LocalExecTLSModel:
14596334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    return LLVMLocalExecTLSModel;
14606334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  }
14616334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg
14626334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  llvm_unreachable("Invalid GlobalVariable thread local mode");
14636334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg}
14646334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg
14656334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborgvoid LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode) {
14666334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
14676334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg
14686334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  switch (Mode) {
14696334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case LLVMNotThreadLocal:
14706334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    GV->setThreadLocalMode(GlobalVariable::NotThreadLocal);
14716334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    break;
14726334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case LLVMGeneralDynamicTLSModel:
14736334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    GV->setThreadLocalMode(GlobalVariable::GeneralDynamicTLSModel);
14746334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    break;
14756334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case LLVMLocalDynamicTLSModel:
14766334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    GV->setThreadLocalMode(GlobalVariable::LocalDynamicTLSModel);
14776334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    break;
14786334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case LLVMInitialExecTLSModel:
14796334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    GV->setThreadLocalMode(GlobalVariable::InitialExecTLSModel);
14806334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    break;
14816334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  case LLVMLocalExecTLSModel:
14826334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    GV->setThreadLocalMode(GlobalVariable::LocalExecTLSModel);
14836334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg    break;
14846334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  }
14856334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg}
14866334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg
14876334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans WennborgLLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar) {
14886334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  return unwrap<GlobalVariable>(GlobalVar)->isExternallyInitialized();
14896334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg}
14906334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg
14916334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborgvoid LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit) {
14926334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  unwrap<GlobalVariable>(GlobalVar)->setExternallyInitialized(IsExtInit);
14936334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg}
14946334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg
1495851ba39dab544ad986f150aec9573add9d978397Chris Lattner/*--.. Operations on aliases ......................................--*/
1496851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1497851ba39dab544ad986f150aec9573add9d978397Chris LattnerLLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1498851ba39dab544ad986f150aec9573add9d978397Chris Lattner                          const char *Name) {
1499dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  auto *PTy = cast<PointerType>(unwrap(Ty));
1500dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  return wrap(GlobalAlias::create(PTy->getElementType(), PTy->getAddressSpace(),
1501dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                  GlobalValue::ExternalLinkage, Name,
1502dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                  unwrap<GlobalObject>(Aliasee), unwrap(M)));
1503851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1504851ba39dab544ad986f150aec9573add9d978397Chris Lattner
150546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Operations on functions .............................................--*/
150646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
150746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
150846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef FunctionTy) {
1509051a950000e21935165db56695e35bade668193bGabor Greif  return wrap(Function::Create(unwrap<FunctionType>(FunctionTy),
1510051a950000e21935165db56695e35bade668193bGabor Greif                               GlobalValue::ExternalLinkage, Name, unwrap(M)));
151146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
151246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
15136d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenLLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name) {
15146d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen  return wrap(unwrap(M)->getFunction(Name));
15156d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen}
15166d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon Henriksen
151734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M) {
151834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
151934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Mod->begin();
152034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->end())
1521dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
152234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
152334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
152434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
152534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastFunction(LLVMModuleRef M) {
152634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module *Mod = unwrap(M);
152734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Mod->end();
152834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Mod->begin())
1529dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
153034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
153134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
153234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
153334000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn) {
153434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
153534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Func;
153634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Func->getParent()->end())
1537dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
153834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
153934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
154034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
154134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn) {
154234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
154334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Module::iterator I = Func;
15444733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->getParent()->begin())
1545dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
154634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
154734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
154834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
154946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteFunction(LLVMValueRef Fn) {
155046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap<Function>(Fn)->eraseFromParent();
155146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
155246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
155346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetIntrinsicID(LLVMValueRef Fn) {
155446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (Function *F = dyn_cast<Function>(unwrap(Fn)))
155546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return F->getIntrinsicID();
155646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return 0;
155746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
155846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
155946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetFunctionCallConv(LLVMValueRef Fn) {
156046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return unwrap<Function>(Fn)->getCallingConv();
156146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
156246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
156346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC) {
156465c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel  return unwrap<Function>(Fn)->setCallingConv(
156565c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    static_cast<CallingConv::ID>(CC));
156646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
156746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
15685eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenconst char *LLVMGetGC(LLVMValueRef Fn) {
156980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  Function *F = unwrap<Function>(Fn);
1570dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  return F->hasGC()? F->getGC() : nullptr;
157180a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen}
157280a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
15735eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenvoid LLVMSetGC(LLVMValueRef Fn, const char *GC) {
157480a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  Function *F = unwrap<Function>(Fn);
15755eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen  if (GC)
15765eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    F->setGC(GC);
157780a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen  else
15785eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen    F->clearGC();
157980a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen}
158080a75bfae980df96f969f1c05b0c4a80ce975240Gordon Henriksen
1581e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
1582e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Function *Func = unwrap<Function>(Fn);
158399faa3b4ec6d03ac7808fe4ff3fbf3d04e375502Bill Wendling  const AttributeSet PAL = Func->getAttributes();
1584702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling  AttrBuilder B(PA);
158599faa3b4ec6d03ac7808fe4ff3fbf3d04e375502Bill Wendling  const AttributeSet PALnew =
1586ac72eb264c3a8a15cda81aaead6adc8419058666Bill Wendling    PAL.addAttributes(Func->getContext(), AttributeSet::FunctionIndex,
1587ac72eb264c3a8a15cda81aaead6adc8419058666Bill Wendling                      AttributeSet::get(Func->getContext(),
1588ac72eb264c3a8a15cda81aaead6adc8419058666Bill Wendling                                        AttributeSet::FunctionIndex, B));
1589e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Func->setAttributes(PALnew);
1590e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands}
1591e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
159268ee1520ce777871353e33fcc63725439e611f4eTom Stellardvoid LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
159368ee1520ce777871353e33fcc63725439e611f4eTom Stellard                                        const char *V) {
159468ee1520ce777871353e33fcc63725439e611f4eTom Stellard  Function *Func = unwrap<Function>(Fn);
1595403569373f1e63cc96ea8274b18088bf7ff17bd6Bill Wendling  AttributeSet::AttrIndex Idx =
1596403569373f1e63cc96ea8274b18088bf7ff17bd6Bill Wendling    AttributeSet::AttrIndex(AttributeSet::FunctionIndex);
159768ee1520ce777871353e33fcc63725439e611f4eTom Stellard  AttrBuilder B;
159868ee1520ce777871353e33fcc63725439e611f4eTom Stellard
159968ee1520ce777871353e33fcc63725439e611f4eTom Stellard  B.addAttribute(A, V);
160068ee1520ce777871353e33fcc63725439e611f4eTom Stellard  AttributeSet Set = AttributeSet::get(Func->getContext(), Idx, B);
160168ee1520ce777871353e33fcc63725439e611f4eTom Stellard  Func->addAttributes(Idx, Set);
160268ee1520ce777871353e33fcc63725439e611f4eTom Stellard}
160368ee1520ce777871353e33fcc63725439e611f4eTom Stellard
1604e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA) {
1605e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Function *Func = unwrap<Function>(Fn);
160699faa3b4ec6d03ac7808fe4ff3fbf3d04e375502Bill Wendling  const AttributeSet PAL = Func->getAttributes();
1607702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling  AttrBuilder B(PA);
160899faa3b4ec6d03ac7808fe4ff3fbf3d04e375502Bill Wendling  const AttributeSet PALnew =
16098246df61f6de716acf1f8c64fac3c19970a2c174Bill Wendling    PAL.removeAttributes(Func->getContext(), AttributeSet::FunctionIndex,
16108246df61f6de716acf1f8c64fac3c19970a2c174Bill Wendling                         AttributeSet::get(Func->getContext(),
16118246df61f6de716acf1f8c64fac3c19970a2c174Bill Wendling                                           AttributeSet::FunctionIndex, B));
1612e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands  Func->setAttributes(PALnew);
1613e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands}
1614e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sands
1615885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn) {
1616885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Function *Func = unwrap<Function>(Fn);
161799faa3b4ec6d03ac7808fe4ff3fbf3d04e375502Bill Wendling  const AttributeSet PAL = Func->getAttributes();
16181db9b6957c2565a2322206bd5907530895f1c7acBill Wendling  return (LLVMAttribute)PAL.Raw(AttributeSet::FunctionIndex);
1619885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
1620885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1621dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/*--.. Operations on parameters ............................................--*/
1622dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1623dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenunsigned LLVMCountParams(LLVMValueRef FnRef) {
1624dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  // This function is strictly redundant to
1625dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  //   LLVMCountParamTypes(LLVMGetElementType(LLVMTypeOf(FnRef)))
16264d515d0b09d43af59cd040bfb8bf1b7a2b992980Dan Gohman  return unwrap<Function>(FnRef)->arg_size();
1627dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1628dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1629dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenvoid LLVMGetParams(LLVMValueRef FnRef, LLVMValueRef *ParamRefs) {
1630dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  Function *Fn = unwrap<Function>(FnRef);
1631dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  for (Function::arg_iterator I = Fn->arg_begin(),
1632dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen                              E = Fn->arg_end(); I != E; I++)
1633dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    *ParamRefs++ = wrap(I);
1634dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1635dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1636dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParam(LLVMValueRef FnRef, unsigned index) {
1637dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  Function::arg_iterator AI = unwrap<Function>(FnRef)->arg_begin();
1638dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  while (index --> 0)
1639dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen    AI++;
1640dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(AI);
1641dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1642dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1643dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParamParent(LLVMValueRef V) {
1644dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<Argument>(V)->getParent());
1645dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1646dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
16474733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn) {
16484733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function *Func = unwrap<Function>(Fn);
16494733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = Func->arg_begin();
16504733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->arg_end())
1651dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
16524733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(I);
16534733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
16544733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
16554733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetLastParam(LLVMValueRef Fn) {
16564733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function *Func = unwrap<Function>(Fn);
16574733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = Func->arg_end();
16584733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == Func->arg_begin())
1659dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
16604733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(--I);
16614733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
16624733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
16634733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetNextParam(LLVMValueRef Arg) {
16644733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Argument *A = unwrap<Argument>(Arg);
16654733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = A;
16664733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (++I == A->getParent()->arg_end())
1667dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
16684733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(I);
16694733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
16704733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
16714733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg) {
16724733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Argument *A = unwrap<Argument>(Arg);
16734733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  Function::arg_iterator I = A;
16744733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  if (I == A->getParent()->arg_begin())
1675dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
16764733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(--I);
16774733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen}
16784733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen
16790598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA) {
1680cb3de0bc800d7920087b19bb12a545d4cc84114eBill Wendling  Argument *A = unwrap<Argument>(Arg);
1681702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling  AttrBuilder B(PA);
168228d65722d6f283b327b5815914382077fe9c0ab4Bill Wendling  A->addAttr(AttributeSet::get(A->getContext(), A->getArgNo() + 1,  B));
1683e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1684e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
16850598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA) {
1686cb3de0bc800d7920087b19bb12a545d4cc84114eBill Wendling  Argument *A = unwrap<Argument>(Arg);
1687702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling  AttrBuilder B(PA);
168828d65722d6f283b327b5815914382077fe9c0ab4Bill Wendling  A->removeAttr(AttributeSet::get(A->getContext(), A->getArgNo() + 1,  B));
1689e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1690e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
1691885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetAttribute(LLVMValueRef Arg) {
1692885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  Argument *A = unwrap<Argument>(Arg);
169394e94b350652d3a71993bbc7d44afbe3b304605eBill Wendling  return (LLVMAttribute)A->getParent()->getAttributes().
16941db9b6957c2565a2322206bd5907530895f1c7acBill Wendling    Raw(A->getArgNo()+1);
1695885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner}
16962cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trick
1697885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
1698e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksenvoid LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align) {
169928d65722d6f283b327b5815914382077fe9c0ab4Bill Wendling  Argument *A = unwrap<Argument>(Arg);
1700702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling  AttrBuilder B;
1701da3f9d8edc5b3e0a3e0b94257c63e24215a85653Bill Wendling  B.addAlignmentAttr(align);
170228d65722d6f283b327b5815914382077fe9c0ab4Bill Wendling  A->addAttr(AttributeSet::get(A->getContext(),A->getArgNo() + 1, B));
1703e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1704e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
170546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Operations on basic blocks ..........................................--*/
170646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1707dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB) {
1708dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(static_cast<Value*>(unwrap(BB)));
170946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
171046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1711d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val) {
171246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return isa<BasicBlock>(unwrap(Val));
171346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
171446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
171546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val) {
171646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap<BasicBlock>(Val));
171746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
171846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
17194733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB) {
17204733be38930ae81716bba9ae75a8281bcb180634Gordon Henriksen  return wrap(unwrap(BB)->getParent());
1721dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1722dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
17237ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate BegemanLLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB) {
17247ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman  return wrap(unwrap(BB)->getTerminator());
17257ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman}
17267ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
172746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountBasicBlocks(LLVMValueRef FnRef) {
17284d515d0b09d43af59cd040bfb8bf1b7a2b992980Dan Gohman  return unwrap<Function>(FnRef)->size();
172946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
173046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
173146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMGetBasicBlocks(LLVMValueRef FnRef, LLVMBasicBlockRef *BasicBlocksRefs){
173246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Function *Fn = unwrap<Function>(FnRef);
173346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  for (Function::iterator I = Fn->begin(), E = Fn->end(); I != E; I++)
173446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    *BasicBlocksRefs++ = wrap(I);
173546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
173646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
173746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn) {
173846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(&unwrap<Function>(Fn)->getEntryBlock());
173946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
174046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
174134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn) {
174234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
174334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Func->begin();
174434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Func->end())
1745dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
174634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
174734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
174834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
174934000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn) {
175034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function *Func = unwrap<Function>(Fn);
175134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Func->end();
175234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Func->begin())
1753dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
175434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
175534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
175634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
175734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB) {
175834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
175934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Block;
176034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Block->getParent()->end())
1761dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
176234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
176334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
176434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
176534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB) {
176634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
176734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Function::iterator I = Block;
176834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->getParent()->begin())
1769dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
177034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
177134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
177234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
177322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
177422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMValueRef FnRef,
177522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name) {
177622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(BasicBlock::Create(*unwrap(C), Name, unwrap<Function>(FnRef)));
177722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
177822c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
177946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef FnRef, const char *Name) {
178022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMAppendBasicBlockInContext(LLVMGetGlobalContext(), FnRef, Name);
178122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
178222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
178322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
178422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMBasicBlockRef BBRef,
178522c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name) {
178622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  BasicBlock *BB = unwrap(BBRef);
178722c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(BasicBlock::Create(*unwrap(C), Name, BB->getParent(), BB));
178846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
178946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
179022c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef BBRef,
179146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                       const char *Name) {
179222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMInsertBasicBlockInContext(LLVMGetGlobalContext(), BBRef, Name);
179346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
179446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
179546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteBasicBlock(LLVMBasicBlockRef BBRef) {
179646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(BBRef)->eraseFromParent();
179746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
179846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
17997ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begemanvoid LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BBRef) {
18007ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman  unwrap(BBRef)->removeFromParent();
18017ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman}
18027ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
1803837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sandsvoid LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos) {
1804837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands  unwrap(BB)->moveBefore(unwrap(MovePos));
1805837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands}
1806837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands
1807837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sandsvoid LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos) {
1808837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands  unwrap(BB)->moveAfter(unwrap(MovePos));
1809837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands}
1810837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands
1811dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen/*--.. Operations on instructions ..........................................--*/
1812dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1813dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst) {
1814dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen  return wrap(unwrap<Instruction>(Inst)->getParent());
1815dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1816dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
181734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB) {
181834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
181934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Block->begin();
182034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->end())
1821dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
182234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
182334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
182434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
182534000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB) {
182634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *Block = unwrap(BB);
182734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Block->end();
182834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Block->begin())
1829dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
183034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
183134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
183234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
183334000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst) {
183434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *Instr = unwrap<Instruction>(Inst);
183534000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Instr;
183634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (++I == Instr->getParent()->end())
1837dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
183834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(I);
183934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
184034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
184134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst) {
184234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *Instr = unwrap<Instruction>(Inst);
184334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock::iterator I = Instr;
184434000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  if (I == Instr->getParent()->begin())
1845dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    return nullptr;
184634000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  return wrap(--I);
184734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
184834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
18490e6a24d92ab4661bb39f838ac390ccb17f649cb5Devang Patelvoid LLVMInstructionEraseFromParent(LLVMValueRef Inst) {
18500e6a24d92ab4661bb39f838ac390ccb17f649cb5Devang Patel  unwrap<Instruction>(Inst)->eraseFromParent();
18510e6a24d92ab4661bb39f838ac390ccb17f649cb5Devang Patel}
18520e6a24d92ab4661bb39f838ac390ccb17f649cb5Devang Patel
18534917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok EdwinLLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst) {
185431116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (ICmpInst *I = dyn_cast<ICmpInst>(unwrap(Inst)))
185531116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    return (LLVMIntPredicate)I->getPredicate();
185631116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(unwrap(Inst)))
185731116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin    if (CE->getOpcode() == Instruction::ICmp)
185831116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin      return (LLVMIntPredicate)CE->getPredicate();
185931116410de16f435d8c76c53e3d6b95fa812cd2cTorok Edwin  return (LLVMIntPredicate)0;
18604917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin}
18614917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok Edwin
18626563c879964c3bcf5c77d40da8d4c807adf605aaTorok EdwinLLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst) {
18636563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  if (Instruction *C = dyn_cast<Instruction>(unwrap(Inst)))
18646563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin    return map_to_llvmopcode(C->getOpcode());
18656563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin  return (LLVMOpcode)0;
18666563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin}
18676563c879964c3bcf5c77d40da8d4c807adf605aaTorok Edwin
186846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Call and invoke instructions ........................................--*/
186946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
187046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetInstructionCallConv(LLVMValueRef Instr) {
187146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Value *V = unwrap(Instr);
187246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (CallInst *CI = dyn_cast<CallInst>(V))
187346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return CI->getCallingConv();
18744d6ccb5f68cd7c6418a209f1fa4dbade569e4493David Blaikie  if (InvokeInst *II = dyn_cast<InvokeInst>(V))
187546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen    return II->getCallingConv();
1876c23197a26f34f559ea9797de51e187087c039c42Torok Edwin  llvm_unreachable("LLVMGetInstructionCallConv applies only to call and invoke!");
187746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
187846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
187946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC) {
188046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Value *V = unwrap(Instr);
188146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  if (CallInst *CI = dyn_cast<CallInst>(V))
188265c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    return CI->setCallingConv(static_cast<CallingConv::ID>(CC));
188346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  else if (InvokeInst *II = dyn_cast<InvokeInst>(V))
188465c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel    return II->setCallingConv(static_cast<CallingConv::ID>(CC));
1885c23197a26f34f559ea9797de51e187087c039c42Torok Edwin  llvm_unreachable("LLVMSetInstructionCallConv applies only to call and invoke!");
188646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
188746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
18882cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trickvoid LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index,
18890598866c052147c31b808391f58434ce3dbfb838Devang Patel                           LLVMAttribute PA) {
1890e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
1891702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling  AttrBuilder B(PA);
18920598866c052147c31b808391f58434ce3dbfb838Devang Patel  Call.setAttributes(
1893defaca00b8087d452df2b783250a48a32658a910Bill Wendling    Call.getAttributes().addAttributes(Call->getContext(), index,
1894defaca00b8087d452df2b783250a48a32658a910Bill Wendling                                       AttributeSet::get(Call->getContext(),
1895defaca00b8087d452df2b783250a48a32658a910Bill Wendling                                                         index, B)));
1896e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1897e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
18982cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trickvoid LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
18990598866c052147c31b808391f58434ce3dbfb838Devang Patel                              LLVMAttribute PA) {
1900e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
1901702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling  AttrBuilder B(PA);
19028246df61f6de716acf1f8c64fac3c19970a2c174Bill Wendling  Call.setAttributes(Call.getAttributes()
19038246df61f6de716acf1f8c64fac3c19970a2c174Bill Wendling                       .removeAttributes(Call->getContext(), index,
19048246df61f6de716acf1f8c64fac3c19970a2c174Bill Wendling                                         AttributeSet::get(Call->getContext(),
19058246df61f6de716acf1f8c64fac3c19970a2c174Bill Wendling                                                           index, B)));
1906e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1907e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
19082cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trickvoid LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
1909e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen                                unsigned align) {
1910e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen  CallSite Call = CallSite(unwrap<Instruction>(Instr));
1911702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling  AttrBuilder B;
1912da3f9d8edc5b3e0a3e0b94257c63e24215a85653Bill Wendling  B.addAlignmentAttr(align);
1913defaca00b8087d452df2b783250a48a32658a910Bill Wendling  Call.setAttributes(Call.getAttributes()
1914defaca00b8087d452df2b783250a48a32658a910Bill Wendling                       .addAttributes(Call->getContext(), index,
1915defaca00b8087d452df2b783250a48a32658a910Bill Wendling                                      AttributeSet::get(Call->getContext(),
1916defaca00b8087d452df2b783250a48a32658a910Bill Wendling                                                        index, B)));
1917e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen}
1918e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
191907cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen/*--.. Operations on call instructions (only) ..............................--*/
192007cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
1921d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsTailCall(LLVMValueRef Call) {
192207cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen  return unwrap<CallInst>(Call)->isTailCall();
192307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen}
192407cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
1925d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetTailCall(LLVMValueRef Call, LLVMBool isTailCall) {
192607cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen  unwrap<CallInst>(Call)->setTailCall(isTailCall);
192707cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen}
192807cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
19297ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman/*--.. Operations on switch instructions (only) ............................--*/
19307ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
19317ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate BegemanLLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef Switch) {
19327ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman  return wrap(unwrap<SwitchInst>(Switch)->getDefaultDest());
19337ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman}
19347ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
19352618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen/*--.. Operations on phi nodes .............................................--*/
19362618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
19372618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenvoid LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
19382618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     LLVMBasicBlockRef *IncomingBlocks, unsigned Count) {
19392618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  PHINode *PhiVal = unwrap<PHINode>(PhiNode);
19402618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  for (unsigned I = 0; I != Count; ++I)
19412618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen    PhiVal->addIncoming(unwrap(IncomingValues[I]), unwrap(IncomingBlocks[I]));
19422618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
19432618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
19442618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenunsigned LLVMCountIncoming(LLVMValueRef PhiNode) {
19452618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return unwrap<PHINode>(PhiNode)->getNumIncomingValues();
19462618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
19472618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
19482618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index) {
19492618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return wrap(unwrap<PHINode>(PhiNode)->getIncomingValue(Index));
19502618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
19512618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
19522618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index) {
19532618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen  return wrap(unwrap<PHINode>(PhiNode)->getIncomingBlock(Index));
19542618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen}
19552618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen
195646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
195746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*===-- Instruction builders ----------------------------------------------===*/
195846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
195922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C) {
196022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return wrap(new IRBuilder<>(*unwrap(C)));
196122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar}
196222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
196316c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMBuilderRef LLVMCreateBuilder(void) {
196422c3f1877d22972adb787c553192edb426874594Erick Tryzelaar  return LLVMCreateBuilderInContext(LLVMGetGlobalContext());
196546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
196646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
196734000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksenvoid LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
196834000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen                         LLVMValueRef Instr) {
196934000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  BasicBlock *BB = unwrap(Block);
197034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  Instruction *I = Instr? unwrap<Instruction>(Instr) : (Instruction*) BB->end();
197134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen  unwrap(Builder)->SetInsertPoint(BB, I);
197234000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen}
197334000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen
197446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr) {
197546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  Instruction *I = unwrap<Instruction>(Instr);
197646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(Builder)->SetInsertPoint(I->getParent(), I);
197746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
197846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
197946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block) {
198046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  BasicBlock *BB = unwrap(Block);
198146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  unwrap(Builder)->SetInsertPoint(BB);
198246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
198346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
1984dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder) {
1985dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen   return wrap(unwrap(Builder)->GetInsertBlock());
1986dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen}
1987dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
1988851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMClearInsertionPosition(LLVMBuilderRef Builder) {
1989a41b9153c3e568c874eb777d2b295659a9aca10aChris Lattner  unwrap(Builder)->ClearInsertionPoint();
1990851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1991851ba39dab544ad986f150aec9573add9d978397Chris Lattner
1992851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr) {
1993851ba39dab544ad986f150aec9573add9d978397Chris Lattner  unwrap(Builder)->Insert(unwrap<Instruction>(Instr));
1994851ba39dab544ad986f150aec9573add9d978397Chris Lattner}
1995851ba39dab544ad986f150aec9573add9d978397Chris Lattner
19965c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarvoid LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
19975c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                                   const char *Name) {
19985c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar  unwrap(Builder)->Insert(unwrap<Instruction>(Instr), Name);
19995c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar}
20005c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar
200146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDisposeBuilder(LLVMBuilderRef Builder) {
200246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  delete unwrap(Builder);
200346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
200446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
200546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/*--.. Metadata builders ...................................................--*/
200646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
200746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarvoid LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L) {
2008dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  MDNode *Loc = L ? unwrap<MDNode>(L) : nullptr;
200984e679beea11ac55ed7871eec4deaccdf393de3eChris Lattner  unwrap(Builder)->SetCurrentDebugLocation(DebugLoc::getFromDILocation(Loc));
201046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
201146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
201246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder) {
2013a41b9153c3e568c874eb777d2b295659a9aca10aChris Lattner  return wrap(unwrap(Builder)->getCurrentDebugLocation()
2014a41b9153c3e568c874eb777d2b295659a9aca10aChris Lattner              .getAsMDNode(unwrap(Builder)->getContext()));
201546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
201646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
201746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarvoid LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst) {
201846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar  unwrap(Builder)->SetInstDebugLocation(unwrap<Instruction>(Inst));
201946c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar}
202046c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
202146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
202246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Instruction builders ................................................--*/
202346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
202446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef B) {
202546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateRetVoid());
202646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
202746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
202846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRet(LLVMBuilderRef B, LLVMValueRef V) {
202946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateRet(unwrap(V)));
203046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
203146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2032f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef B, LLVMValueRef *RetVals,
2033f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   unsigned N) {
2034f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateAggregateRet(unwrap(RetVals), N));
2035f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2036f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
203746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBr(LLVMBuilderRef B, LLVMBasicBlockRef Dest) {
203846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateBr(unwrap(Dest)));
203946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
204046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
204146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCondBr(LLVMBuilderRef B, LLVMValueRef If,
204246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Else) {
204346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateCondBr(unwrap(If), unwrap(Then), unwrap(Else)));
204446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
204546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
204646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSwitch(LLVMBuilderRef B, LLVMValueRef V,
204746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Else, unsigned NumCases) {
204846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSwitch(unwrap(V), unwrap(Else), NumCases));
204946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
205046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2051c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarLLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
2052c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar                                 unsigned NumDests) {
2053c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar  return wrap(unwrap(B)->CreateIndirectBr(unwrap(Addr), NumDests));
2054c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar}
2055c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
205646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInvoke(LLVMBuilderRef B, LLVMValueRef Fn,
205746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef *Args, unsigned NumArgs,
205846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
205946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
206046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateInvoke(unwrap(Fn), unwrap(Then), unwrap(Catch),
206139b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                                      makeArrayRef(unwrap(Args), NumArgs),
206246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      Name));
206346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
206446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2065e6e8826870bee3facb04f950f0bd725f8a88623dBill WendlingLLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
2066e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling                                 LLVMValueRef PersFn, unsigned NumClauses,
2067e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling                                 const char *Name) {
2068e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling  return wrap(unwrap(B)->CreateLandingPad(unwrap(Ty),
2069e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling                                          cast<Function>(unwrap(PersFn)),
2070e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling                                          NumClauses, Name));
2071e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling}
2072e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling
2073dccc03b2423fe65efb5963ae816b99c24fc53374Bill WendlingLLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn) {
2074dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling  return wrap(unwrap(B)->CreateResume(unwrap(Exn)));
2075dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling}
2076dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling
207746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef B) {
207846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUnreachable());
207946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
208046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2081ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksenvoid LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
2082ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen                 LLVMBasicBlockRef Dest) {
2083ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen  unwrap<SwitchInst>(Switch)->addCase(unwrap<ConstantInt>(OnVal), unwrap(Dest));
2084ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen}
2085ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen
2086c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarvoid LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest) {
2087c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar  unwrap<IndirectBrInst>(IndirectBr)->addDestination(unwrap(Dest));
2088c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar}
2089c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
2090e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendlingvoid LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal) {
2091e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling  unwrap<LandingPadInst>(LandingPad)->
2092e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling    addClause(cast<Constant>(unwrap(ClauseVal)));
2093e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling}
2094e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling
2095e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendlingvoid LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val) {
2096e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling  unwrap<LandingPadInst>(LandingPad)->setCleanup(Val);
2097e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling}
2098e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling
209946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Arithmetic ..........................................................--*/
210046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
210146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
210246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
210346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAdd(unwrap(LHS), unwrap(RHS), Name));
210446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
210546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2106f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
2107f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
2108f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateNSWAdd(unwrap(LHS), unwrap(RHS), Name));
2109f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2110f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
211119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
211219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
211319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWAdd(unwrap(LHS), unwrap(RHS), Name));
211419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
211519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
2116f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
2117f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
2118f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFAdd(unwrap(LHS), unwrap(RHS), Name));
2119f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2120f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
212146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
212246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
212346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSub(unwrap(LHS), unwrap(RHS), Name));
212446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
212546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
212619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
212719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
212819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNSWSub(unwrap(LHS), unwrap(RHS), Name));
212919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
213019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
213119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
213219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
213319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWSub(unwrap(LHS), unwrap(RHS), Name));
213419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
213519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
2136f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
2137f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
2138f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFSub(unwrap(LHS), unwrap(RHS), Name));
2139f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2140f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
214146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
214246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
214346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateMul(unwrap(LHS), unwrap(RHS), Name));
214446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
214546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
214619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
214719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
214819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNSWMul(unwrap(LHS), unwrap(RHS), Name));
214919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
215019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
215119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
215219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                          const char *Name) {
215319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWMul(unwrap(LHS), unwrap(RHS), Name));
215419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
215519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
2156f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
2157f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                          const char *Name) {
2158f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFMul(unwrap(LHS), unwrap(RHS), Name));
2159f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2160f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
216146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
216246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
216346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUDiv(unwrap(LHS), unwrap(RHS), Name));
216446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
216546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
216646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
216746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
216846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSDiv(unwrap(LHS), unwrap(RHS), Name));
216946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
217046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2171f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef B, LLVMValueRef LHS,
2172f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                LLVMValueRef RHS, const char *Name) {
2173f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateExactSDiv(unwrap(LHS), unwrap(RHS), Name));
2174f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2175f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
217646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
217746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
217846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFDiv(unwrap(LHS), unwrap(RHS), Name));
217946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
218046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
218146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildURem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
218246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
218346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateURem(unwrap(LHS), unwrap(RHS), Name));
218446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
218546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
218646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
218746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
218846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSRem(unwrap(LHS), unwrap(RHS), Name));
218946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
219046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
219146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
219246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
219346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFRem(unwrap(LHS), unwrap(RHS), Name));
219446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
219546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
219646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShl(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
219746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
219846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateShl(unwrap(LHS), unwrap(RHS), Name));
219946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
220046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
220146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
220246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
220346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateLShr(unwrap(LHS), unwrap(RHS), Name));
220446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
220546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
220646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
220746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
220846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAShr(unwrap(LHS), unwrap(RHS), Name));
220946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
221046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
221146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAnd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
221246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
221346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAnd(unwrap(LHS), unwrap(RHS), Name));
221446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
221546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
221646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildOr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
221746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                         const char *Name) {
221846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateOr(unwrap(LHS), unwrap(RHS), Name));
221946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
222046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
222146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildXor(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
222246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
222346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateXor(unwrap(LHS), unwrap(RHS), Name));
222446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
222546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2226abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick TryzelaarLLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
2227abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                            LLVMValueRef LHS, LLVMValueRef RHS,
2228abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                            const char *Name) {
22294df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin  return wrap(unwrap(B)->CreateBinOp(Instruction::BinaryOps(map_from_llvmopcode(Op)), unwrap(LHS),
2230abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                                     unwrap(RHS), Name));
2231abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar}
2232abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar
223346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
223446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateNeg(unwrap(V), Name));
223546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
223646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
223719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
223819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name) {
223919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNSWNeg(unwrap(V), Name));
224019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
224119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
224219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
224319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name) {
224419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar  return wrap(unwrap(B)->CreateNUWNeg(unwrap(V), Name));
224519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar}
224619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar
2247d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan GohmanLLVMValueRef LLVMBuildFNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
2248d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman  return wrap(unwrap(B)->CreateFNeg(unwrap(V), Name));
2249d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman}
2250d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan Gohman
225146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNot(LLVMBuilderRef B, LLVMValueRef V, const char *Name) {
225246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateNot(unwrap(V), Name));
225346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
225446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
225546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Memory ..............................................................--*/
225646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
225746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMalloc(LLVMBuilderRef B, LLVMTypeRef Ty,
225846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
2259db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
22609d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
22619d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
22622cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trick  Instruction* Malloc = CallInst::CreateMalloc(unwrap(B)->GetInsertBlock(),
22632cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trick                                               ITy, unwrap(Ty), AllocSize,
2264dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                               nullptr, nullptr, "");
22659d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  return wrap(unwrap(B)->Insert(Malloc, Twine(Name)));
226646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
226746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
226846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef B, LLVMTypeRef Ty,
226946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name) {
2270db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
22719d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
22729d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
22732cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trick  Instruction* Malloc = CallInst::CreateMalloc(unwrap(B)->GetInsertBlock(),
22742cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trick                                               ITy, unwrap(Ty), AllocSize,
2275dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                               unwrap(Val), nullptr, "");
22769d0b704e3ea418441001dac4d1a56c2c224cdbf5Victor Hernandez  return wrap(unwrap(B)->Insert(Malloc, Twine(Name)));
227746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
227846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
227946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAlloca(LLVMBuilderRef B, LLVMTypeRef Ty,
228046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
2281dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), nullptr, Name));
228246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
228346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
228446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef B, LLVMTypeRef Ty,
228546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name) {
228646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), unwrap(Val), Name));
228746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
228846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
228946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFree(LLVMBuilderRef B, LLVMValueRef PointerVal) {
2290046e78ce55a7c3d82b7b6758d2d77f2d99f970bfVictor Hernandez  return wrap(unwrap(B)->Insert(
2291046e78ce55a7c3d82b7b6758d2d77f2d99f970bfVictor Hernandez     CallInst::CreateFree(unwrap(PointerVal), unwrap(B)->GetInsertBlock())));
229246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
229346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
229446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
229546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLoad(LLVMBuilderRef B, LLVMValueRef PointerVal,
229646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
229746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateLoad(unwrap(PointerVal), Name));
229846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
229946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
23002cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew TrickLLVMValueRef LLVMBuildStore(LLVMBuilderRef B, LLVMValueRef Val,
230146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMValueRef PointerVal) {
230246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateStore(unwrap(Val), unwrap(PointerVal)));
230346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
230446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
230536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstatic AtomicOrdering mapFromLLVMOrdering(LLVMAtomicOrdering Ordering) {
230636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  switch (Ordering) {
230736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    case LLVMAtomicOrderingNotAtomic: return NotAtomic;
230836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    case LLVMAtomicOrderingUnordered: return Unordered;
230936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    case LLVMAtomicOrderingMonotonic: return Monotonic;
231036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    case LLVMAtomicOrderingAcquire: return Acquire;
231136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    case LLVMAtomicOrderingRelease: return Release;
231236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    case LLVMAtomicOrderingAcquireRelease: return AcquireRelease;
231336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    case LLVMAtomicOrderingSequentiallyConsistent:
231436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      return SequentiallyConsistent;
231536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  }
231636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
231736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  llvm_unreachable("Invalid LLVMAtomicOrdering value!");
231836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
231936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
232036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesLLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering Ordering,
232136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                            LLVMBool isSingleThread, const char *Name) {
232236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  return wrap(
232336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    unwrap(B)->CreateFence(mapFromLLVMOrdering(Ordering),
232436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                           isSingleThread ? SingleThread : CrossThread,
232536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                           Name));
232636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
232736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
232846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
232946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          LLVMValueRef *Indices, unsigned NumIndices,
233046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name) {
23310a2a60ace9b79164b71794ce7ff981171c61e442Jay Foad  ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
23320a2a60ace9b79164b71794ce7ff981171c61e442Jay Foad  return wrap(unwrap(B)->CreateGEP(unwrap(Pointer), IdxList, Name));
233346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
233446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2335f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2336f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMValueRef *Indices, unsigned NumIndices,
2337f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  const char *Name) {
23380a2a60ace9b79164b71794ce7ff981171c61e442Jay Foad  ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
23390a2a60ace9b79164b71794ce7ff981171c61e442Jay Foad  return wrap(unwrap(B)->CreateInBoundsGEP(unwrap(Pointer), IdxList, Name));
2340f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2341f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2342f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2343f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                unsigned Idx, const char *Name) {
2344f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateStructGEP(unwrap(Pointer), Idx, Name));
2345f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2346f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2347f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2348f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   const char *Name) {
2349f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateGlobalString(Str, Name));
2350f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2351f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2352f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2353f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                      const char *Name) {
2354f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateGlobalStringPtr(Str, Name));
2355f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2356f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2357eabe3ad57d824c2b07016352fd97ce85777b6f9dChris LattnerLLVMBool LLVMGetVolatile(LLVMValueRef MemAccessInst) {
2358eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  Value *P = unwrap<Value>(MemAccessInst);
2359eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  if (LoadInst *LI = dyn_cast<LoadInst>(P))
2360eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner    return LI->isVolatile();
2361eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  return cast<StoreInst>(P)->isVolatile();
2362eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner}
2363eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner
2364eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattnervoid LLVMSetVolatile(LLVMValueRef MemAccessInst, LLVMBool isVolatile) {
2365eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  Value *P = unwrap<Value>(MemAccessInst);
2366eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  if (LoadInst *LI = dyn_cast<LoadInst>(P))
2367eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner    return LI->setVolatile(isVolatile);
2368eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner  return cast<StoreInst>(P)->setVolatile(isVolatile);
2369eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner}
2370eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattner
237146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Casts ...............................................................--*/
237246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
237346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildTrunc(LLVMBuilderRef B, LLVMValueRef Val,
237446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name) {
237546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateTrunc(unwrap(Val), unwrap(DestTy), Name));
237646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
237746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
237846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildZExt(LLVMBuilderRef B, LLVMValueRef Val,
237946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name) {
238046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateZExt(unwrap(Val), unwrap(DestTy), Name));
238146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
238246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
238346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSExt(LLVMBuilderRef B, LLVMValueRef Val,
238446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name) {
238546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSExt(unwrap(Val), unwrap(DestTy), Name));
238646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
238746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
238846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef B, LLVMValueRef Val,
238946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
239046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPToUI(unwrap(Val), unwrap(DestTy), Name));
239146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
239246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
239346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef B, LLVMValueRef Val,
239446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
239546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPToSI(unwrap(Val), unwrap(DestTy), Name));
239646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
239746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
239846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef B, LLVMValueRef Val,
239946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
240046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateUIToFP(unwrap(Val), unwrap(DestTy), Name));
240146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
240246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
240346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef B, LLVMValueRef Val,
240446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name) {
240546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSIToFP(unwrap(Val), unwrap(DestTy), Name));
240646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
240746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
240846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef B, LLVMValueRef Val,
240946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name) {
241046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPTrunc(unwrap(Val), unwrap(DestTy), Name));
241146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
241246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
241346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPExt(LLVMBuilderRef B, LLVMValueRef Val,
241446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name) {
241546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFPExt(unwrap(Val), unwrap(DestTy), Name));
241646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
241746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
241846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef B, LLVMValueRef Val,
241946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name) {
242046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreatePtrToInt(unwrap(Val), unwrap(DestTy), Name));
242146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
242246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
242346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef B, LLVMValueRef Val,
242446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name) {
242546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateIntToPtr(unwrap(Val), unwrap(DestTy), Name));
242646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
242746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
242846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBitCast(LLVMBuilderRef B, LLVMValueRef Val,
242946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name) {
243046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateBitCast(unwrap(Val), unwrap(DestTy), Name));
243146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
243246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
243359d3ae6cdc4316ad338cd848251f33a236ccb36cMatt ArsenaultLLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef B, LLVMValueRef Val,
243459d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault                                    LLVMTypeRef DestTy, const char *Name) {
243559d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault  return wrap(unwrap(B)->CreateAddrSpaceCast(unwrap(Val), unwrap(DestTy), Name));
243659d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault}
243759d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault
2438f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
2439f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name) {
2440f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateZExtOrBitCast(unwrap(Val), unwrap(DestTy),
2441f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                             Name));
2442f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2443f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2444f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
2445f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name) {
2446f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateSExtOrBitCast(unwrap(Val), unwrap(DestTy),
2447f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                             Name));
2448f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2449f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2450f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
2451f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                     LLVMTypeRef DestTy, const char *Name) {
2452f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateTruncOrBitCast(unwrap(Val), unwrap(DestTy),
2453f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                              Name));
2454f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2455f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2456abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick TryzelaarLLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2457abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                           LLVMTypeRef DestTy, const char *Name) {
24584df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin  return wrap(unwrap(B)->CreateCast(Instruction::CastOps(map_from_llvmopcode(Op)), unwrap(Val),
2459abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                                    unwrap(DestTy), Name));
2460abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar}
2461abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar
2462f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef B, LLVMValueRef Val,
2463f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMTypeRef DestTy, const char *Name) {
2464f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreatePointerCast(unwrap(Val), unwrap(DestTy), Name));
2465f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2466f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2467f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIntCast(LLVMBuilderRef B, LLVMValueRef Val,
2468e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands                              LLVMTypeRef DestTy, const char *Name) {
2469e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands  return wrap(unwrap(B)->CreateIntCast(unwrap(Val), unwrap(DestTy),
2470e8e01b600cd377504e5288a31152b1db4b8477b1Duncan Sands                                       /*isSigned*/true, Name));
2471f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2472f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2473f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFPCast(LLVMBuilderRef B, LLVMValueRef Val,
2474f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             LLVMTypeRef DestTy, const char *Name) {
2475f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateFPCast(unwrap(Val), unwrap(DestTy), Name));
2476f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2477f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
247846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Comparisons .........................................................--*/
247946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
248046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildICmp(LLVMBuilderRef B, LLVMIntPredicate Op,
248146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
248246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
248346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateICmp(static_cast<ICmpInst::Predicate>(Op),
248446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(LHS), unwrap(RHS), Name));
248546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
248646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
248746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFCmp(LLVMBuilderRef B, LLVMRealPredicate Op,
248846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
248946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
249046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateFCmp(static_cast<FCmpInst::Predicate>(Op),
249146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    unwrap(LHS), unwrap(RHS), Name));
249246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
249346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
249446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/*--.. Miscellaneous instructions ..........................................--*/
249546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
249646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPhi(LLVMBuilderRef B, LLVMTypeRef Ty, const char *Name) {
24973ecfc861b4365f341c5c969b40e1afccde676e6fJay Foad  return wrap(unwrap(B)->CreatePHI(unwrap(Ty), 0, Name));
249846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
249946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
250046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn,
250146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef *Args, unsigned NumArgs,
250246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name) {
2503a3efbb15ddd5aa9006564cd79086723640084878Jay Foad  return wrap(unwrap(B)->CreateCall(unwrap(Fn),
250439b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel                                    makeArrayRef(unwrap(Args), NumArgs),
2505a3efbb15ddd5aa9006564cd79086723640084878Jay Foad                                    Name));
250646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
250746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
250846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSelect(LLVMBuilderRef B, LLVMValueRef If,
250946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef Then, LLVMValueRef Else,
251046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name) {
251146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateSelect(unwrap(If), unwrap(Then), unwrap(Else),
251246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      Name));
251346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
251446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
251546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildVAArg(LLVMBuilderRef B, LLVMValueRef List,
251646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef Ty, const char *Name) {
251746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateVAArg(unwrap(List), unwrap(Ty), Name));
251846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
251946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
252046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef B, LLVMValueRef VecVal,
252146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                      LLVMValueRef Index, const char *Name) {
252246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateExtractElement(unwrap(VecVal), unwrap(Index),
252346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                              Name));
252446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
252546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
252646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef B, LLVMValueRef VecVal,
252746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef EltVal, LLVMValueRef Index,
252846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name) {
252946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateInsertElement(unwrap(VecVal), unwrap(EltVal),
253046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                             unwrap(Index), Name));
253146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
253246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
253346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef B, LLVMValueRef V1,
253446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef V2, LLVMValueRef Mask,
253546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name) {
253646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  return wrap(unwrap(B)->CreateShuffleVector(unwrap(V1), unwrap(V2),
253746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                             unwrap(Mask), Name));
253846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}
25391ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2540b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef B, LLVMValueRef AggVal,
2541b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned Index, const char *Name) {
2542b593117b44a74c72bc784080bb402576b3181d94Dan Gohman  return wrap(unwrap(B)->CreateExtractValue(unwrap(AggVal), Index, Name));
2543b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
2544b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
2545b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef B, LLVMValueRef AggVal,
2546b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef EltVal, unsigned Index,
2547b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  const char *Name) {
2548b593117b44a74c72bc784080bb402576b3181d94Dan Gohman  return wrap(unwrap(B)->CreateInsertValue(unwrap(AggVal), unwrap(EltVal),
2549b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                           Index, Name));
2550b593117b44a74c72bc784080bb402576b3181d94Dan Gohman}
2551b593117b44a74c72bc784080bb402576b3181d94Dan Gohman
2552f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNull(LLVMBuilderRef B, LLVMValueRef Val,
2553f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             const char *Name) {
2554f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateIsNull(unwrap(Val), Name));
2555f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2556f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2557f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef B, LLVMValueRef Val,
2558f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                const char *Name) {
2559f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreateIsNotNull(unwrap(Val), Name));
2560f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2561f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
2562f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef B, LLVMValueRef LHS,
2563f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                              LLVMValueRef RHS, const char *Name) {
2564f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar  return wrap(unwrap(B)->CreatePtrDiff(unwrap(LHS), unwrap(RHS), Name));
2565f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar}
2566f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
25672cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew TrickLLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B,LLVMAtomicRMWBinOp op,
25682cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trick                               LLVMValueRef PTR, LLVMValueRef Val,
25692cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trick                               LLVMAtomicOrdering ordering,
25708effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                               LLVMBool singleThread) {
25718effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok  AtomicRMWInst::BinOp intop;
25728effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok  switch (op) {
25738effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpXchg: intop = AtomicRMWInst::Xchg; break;
25748effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpAdd: intop = AtomicRMWInst::Add; break;
25758effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpSub: intop = AtomicRMWInst::Sub; break;
25768effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpAnd: intop = AtomicRMWInst::And; break;
25778effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpNand: intop = AtomicRMWInst::Nand; break;
25788effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpOr: intop = AtomicRMWInst::Or; break;
25798effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpXor: intop = AtomicRMWInst::Xor; break;
25808effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpMax: intop = AtomicRMWInst::Max; break;
25818effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpMin: intop = AtomicRMWInst::Min; break;
25828effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpUMax: intop = AtomicRMWInst::UMax; break;
25838effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    case LLVMAtomicRMWBinOpUMin: intop = AtomicRMWInst::UMin; break;
25848effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok  }
25852cccc6220cc351b52d2cd2d0b7139502e854b68dAndrew Trick  return wrap(unwrap(B)->CreateAtomicRMW(intop, unwrap(PTR), unwrap(Val),
258636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    mapFromLLVMOrdering(ordering), singleThread ? SingleThread : CrossThread));
25878effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok}
25888effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok
25891ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
25901ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen/*===-- Module providers --------------------------------------------------===*/
25911ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
25921ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMModuleProviderRef
25931ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMCreateModuleProviderForExistingModule(LLVMModuleRef M) {
2594f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin  return reinterpret_cast<LLVMModuleProviderRef>(M);
25951ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen}
25961ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
25971ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksenvoid LLVMDisposeModuleProvider(LLVMModuleProviderRef MP) {
25981ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen  delete unwrap(MP);
25991ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen}
26001ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
2601da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2602da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Memory buffers ----------------------------------------------------===*/
2603da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2604d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithContentsOfFile(
2605d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    const char *Path,
2606d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    LLVMMemoryBufferRef *OutMemBuf,
2607d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner    char **OutMessage) {
2608d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner
2609cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  ErrorOr<std::unique_ptr<MemoryBuffer>> MBOrErr = MemoryBuffer::getFile(Path);
2610cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  if (std::error_code EC = MBOrErr.getError()) {
2611cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    *OutMessage = strdup(EC.message().c_str());
2612cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    return 1;
2613da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  }
2614cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  *OutMemBuf = wrap(MBOrErr.get().release());
2615cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  return 0;
2616da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2617da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2618d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2619d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                         char **OutMessage) {
2620cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  ErrorOr<std::unique_ptr<MemoryBuffer>> MBOrErr = MemoryBuffer::getSTDIN();
2621cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  if (std::error_code EC = MBOrErr.getError()) {
2622cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    *OutMessage = strdup(EC.message().c_str());
2623cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    return 1;
2624da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  }
2625cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  *OutMemBuf = wrap(MBOrErr.get().release());
2626cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  return 0;
2627da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
2628da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
262931cfc707058ad3f470924cdb3c460c8f50ee76c3Bill WendlingLLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(
263031cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling    const char *InputData,
263131cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling    size_t InputDataLength,
263231cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling    const char *BufferName,
2633aefd14be3951d5b84cda5561655fe63549819d25Bill Wendling    LLVMBool RequiresNullTerminator) {
263431cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling
263531cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling  return wrap(MemoryBuffer::getMemBuffer(
263631cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling      StringRef(InputData, InputDataLength),
263731cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling      StringRef(BufferName),
263831cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling      RequiresNullTerminator));
263931cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling}
264031cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling
264131cfc707058ad3f470924cdb3c460c8f50ee76c3Bill WendlingLLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(
264231cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling    const char *InputData,
264331cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling    size_t InputDataLength,
264431cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling    const char *BufferName) {
264531cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling
264631cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling  return wrap(MemoryBuffer::getMemBufferCopy(
264731cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling      StringRef(InputData, InputDataLength),
264831cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling      StringRef(BufferName)));
264931cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling}
265031cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling
26514bfeee1302eaeb6cf8f4248e3bb4fdf31a11dce1Tom Stellardconst char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf) {
26524074343b2d9bec7a70c500b2f62b3cd63b44f8c9Tom Stellard  return unwrap(MemBuf)->getBufferStart();
26534074343b2d9bec7a70c500b2f62b3cd63b44f8c9Tom Stellard}
265431cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling
2655edc93b356da17d404467d47456bb27b99c775e39Tom Stellardsize_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf) {
2656edc93b356da17d404467d47456bb27b99c775e39Tom Stellard  return unwrap(MemBuf)->getBufferSize();
2657edc93b356da17d404467d47456bb27b99c775e39Tom Stellard}
2658edc93b356da17d404467d47456bb27b99c775e39Tom Stellard
2659da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenvoid LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf) {
2660da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen  delete unwrap(MemBuf);
2661da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen}
266211112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
26631a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson/*===-- Pass Registry -----------------------------------------------------===*/
26641a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson
26651a3d23362168ae6d8e07efd547a92cc36738a789Owen AndersonLLVMPassRegistryRef LLVMGetGlobalPassRegistry(void) {
26661a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson  return wrap(PassRegistry::getPassRegistry());
26671a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson}
266811112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
266911112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman/*===-- Pass Manager ------------------------------------------------------===*/
267011112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
267111112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMPassManagerRef LLVMCreatePassManager() {
267211112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return wrap(new PassManager());
267311112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
267411112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
267511112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M) {
267611112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return wrap(new FunctionPassManager(unwrap(M)));
267711112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
267811112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
267911112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef P) {
268011112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return LLVMCreateFunctionPassManagerForModule(
268111112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman                                            reinterpret_cast<LLVMModuleRef>(P));
268211112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
268311112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
268411112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M) {
268511112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return unwrap<PassManager>(PM)->run(*unwrap(M));
268611112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
268711112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
268811112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM) {
268911112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return unwrap<FunctionPassManager>(FPM)->doInitialization();
269011112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
269111112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
269211112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F) {
269311112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return unwrap<FunctionPassManager>(FPM)->run(*unwrap<Function>(F));
269411112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
269511112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
269611112e0d7b1fb2741ed65a5085037918d1425916Dan GohmanLLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM) {
269711112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  return unwrap<FunctionPassManager>(FPM)->doFinalization();
269811112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
269911112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman
270011112e0d7b1fb2741ed65a5085037918d1425916Dan Gohmanvoid LLVMDisposePassManager(LLVMPassManagerRef PM) {
270111112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman  delete unwrap(PM);
270211112e0d7b1fb2741ed65a5085037918d1425916Dan Gohman}
2703906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
2704906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands/*===-- Threading ------------------------------------------------------===*/
2705906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
2706906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan SandsLLVMBool LLVMStartMultithreaded() {
2707cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  return LLVMIsMultithreaded();
2708906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands}
2709906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
2710906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sandsvoid LLVMStopMultithreaded() {
2711906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands}
2712906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
2713906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan SandsLLVMBool LLVMIsMultithreaded() {
2714906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands  return llvm_is_multithreaded();
2715906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands}
2716