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