18b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\
28b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen|*                                                                            *|
38b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen|*                     The LLVM Compiler Infrastructure                       *|
48b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen|*                                                                            *|
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner|* This file is distributed under the University of Illinois Open Source      *|
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner|* License. See LICENSE.TXT for details.                                      *|
78b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen|*                                                                            *|
88b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen|*===----------------------------------------------------------------------===*|
98b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen|*                                                                            *|
108b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen|* This header declares the C interface to libLLVMCore.a, which implements    *|
118b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen|* the LLVM intermediate representation.                                      *|
128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen|*                                                                            *|
138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen\*===----------------------------------------------------------------------===*/
148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#ifndef LLVM_C_CORE_H
168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#define LLVM_C_CORE_H
178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm-c/Support.h"
19e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar
209313da5a90838c7242101dae250e86dcfc708e6aEvan Cheng#ifdef __cplusplus
218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenextern "C" {
228b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#endif
238b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMC LLVM-C: C interface to LLVM
266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This module exposes parts of the LLVM library as a C API.
286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCTransforms Transforms
346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCore Core
386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This modules provide an interface to libLLVMCore, which implements
406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * the LLVM intermediate representation as well as other related types
416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * and utilities.
426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * parameters must be passed as base types. Despite the declared types, most
456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * of the functions provided operate only on branches of the type hierarchy.
466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The declared parameter names are descriptive and specify which type is
476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * required. Additionally, each type hierarchy is documented along with the
486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * functions that operate upon it. For more detail, refer to LLVM's C++ code.
49dadace036efe0304d6aee5c00fb9a9c594bde268Eli Bendersky * If in doubt, refer to Core.cpp, which performs parameter downcasts in the
506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * form unwrap<RequiredType>(Param).
516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Many exotic languages can interoperate with C code but have a harder time
536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * with C++ due to name mangling. So in addition to C, this interface enables
546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * tools written in such languages.
556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreTypes Types and Enumerations
616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen/* Opaque types. */
66dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen
67dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen/**
686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The top-level container for all LLVM global data. See the LLVMContext class.
698b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson */
7022c3f1877d22972adb787c553192edb426874594Erick Tryzelaartypedef struct LLVMOpaqueContext *LLVMContextRef;
718b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
728b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson/**
73dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen * The top-level container for all other LLVM Intermediate Representation (IR)
746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * objects.
756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Module
77dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen */
788b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksentypedef struct LLVMOpaqueModule *LLVMModuleRef;
79dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen
80dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen/**
816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Each value in the LLVM IR has a type, an LLVMTypeRef.
826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Type
84dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen */
858b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksentypedef struct LLVMOpaqueType *LLVMTypeRef;
86dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen
876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Represents an individual value in LLVM IR.
896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This models llvm::Value.
916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksentypedef struct LLVMOpaqueValue *LLVMValueRef;
936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
95dadace036efe0304d6aee5c00fb9a9c594bde268Eli Bendersky * Represents a basic block of instructions in LLVM IR.
966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This models llvm::BasicBlock.
986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
9946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksentypedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
1006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
1016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
1026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Represents an LLVM basic block builder.
1036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
1046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This models llvm::IRBuilder.
1056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksentypedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
107da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
1086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
1096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Interface used to provide a module to JIT or interpreter.
1106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This is now just a synonym for llvm::Module, but we have to keep using the
1116244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * different type to keep binary compatibility.
112da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen */
1131ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksentypedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
1148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
1156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/** @see llvm::PassManagerBase */
116d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksentypedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
117d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
1186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/** @see llvm::PassRegistry */
1191a3d23362168ae6d8e07efd547a92cc36738a789Owen Andersontypedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
1201a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson
1216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
1226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Used to get the users and usees of a Value.
1236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
1246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Use */
12524b3733425511cf60268fddda13c306ab140b55fErick Tryzelaartypedef struct LLVMOpaqueUse *LLVMUseRef;
126885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
127dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
128dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/**
129dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines * @see llvm::DiagnosticInfo
130dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines */
131dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinestypedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
132dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
1338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksentypedef enum {
1340598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMZExtAttribute       = 1<<0,
1350598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMSExtAttribute       = 1<<1,
1360598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMNoReturnAttribute   = 1<<2,
1370598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMInRegAttribute      = 1<<3,
1380598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMStructRetAttribute  = 1<<4,
1390598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMNoUnwindAttribute   = 1<<5,
1400598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMNoAliasAttribute    = 1<<6,
1410598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMByValAttribute      = 1<<7,
1420598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMNestAttribute       = 1<<8,
1430598866c052147c31b808391f58434ce3dbfb838Devang Patel    LLVMReadNoneAttribute   = 1<<9,
144c5ec8a78ea898087ad361e5b755f74a76150e5fdAnton Korobeynikov    LLVMReadOnlyAttribute   = 1<<10,
14546a47f539d94349667f964a26dc636b468532657Anton Korobeynikov    LLVMNoInlineAttribute   = 1<<11,
14646a47f539d94349667f964a26dc636b468532657Anton Korobeynikov    LLVMAlwaysInlineAttribute    = 1<<12,
14746a47f539d94349667f964a26dc636b468532657Anton Korobeynikov    LLVMOptimizeForSizeAttribute = 1<<13,
14846a47f539d94349667f964a26dc636b468532657Anton Korobeynikov    LLVMStackProtectAttribute    = 1<<14,
14946a47f539d94349667f964a26dc636b468532657Anton Korobeynikov    LLVMStackProtectReqAttribute = 1<<15,
1504ad188ba8dde52201c16d46ec6558e32c0dd4805Erick Tryzelaar    LLVMAlignment = 31<<16,
15146a47f539d94349667f964a26dc636b468532657Anton Korobeynikov    LLVMNoCaptureAttribute  = 1<<21,
15246a47f539d94349667f964a26dc636b468532657Anton Korobeynikov    LLVMNoRedZoneAttribute  = 1<<22,
15346a47f539d94349667f964a26dc636b468532657Anton Korobeynikov    LLVMNoImplicitFloatAttribute = 1<<23,
154570a4a5d9ca31f276a67502d1e0533d59d331feaJakob Stoklund Olesen    LLVMNakedAttribute      = 1<<24,
1554ad188ba8dde52201c16d46ec6558e32c0dd4805Erick Tryzelaar    LLVMInlineHintAttribute = 1<<25,
1566831b7c645c766a233ff779c26357d1add578c5dTorok Edwin    LLVMStackAlignment = 7<<26,
1576831b7c645c766a233ff779c26357d1add578c5dTorok Edwin    LLVMReturnsTwice = 1 << 29,
1586831b7c645c766a233ff779c26357d1add578c5dTorok Edwin    LLVMUWTable = 1 << 30,
1598f7fe08fee403994a50bb3c07384453c0d046558Chandler Carruth    LLVMNonLazyBind = 1 << 31
1608f7fe08fee403994a50bb3c07384453c0d046558Chandler Carruth
161114baee1fa017daefad2339c77b45b9ca3d79a41Bill Wendling    /* FIXME: These attributes are currently not included in the C API as
1622d892c5a72cf6941234f4d48e92b4973aa79721bNuno Lopes       a temporary measure until the API/ABI impact to the C API is understood
1632d892c5a72cf6941234f4d48e92b4973aa79721bNuno Lopes       and the path forward agreed upon.
164114baee1fa017daefad2339c77b45b9ca3d79a41Bill Wendling    LLVMAddressSafety = 1ULL << 32,
1655768bb8d77892926dff0d078b1fb08c14ea791f3Andrea Di Biagio    LLVMStackProtectStrongAttribute = 1ULL<<33,
1665768bb8d77892926dff0d078b1fb08c14ea791f3Andrea Di Biagio    LLVMCold = 1ULL << 34,
16736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    LLVMOptimizeNone = 1ULL << 35,
168dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    LLVMInAllocaAttribute = 1ULL << 36,
169cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    LLVMNonNullAttribute = 1ULL << 37,
170cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    LLVMJumpTableAttribute = 1ULL << 38,
1712d892c5a72cf6941234f4d48e92b4973aa79721bNuno Lopes    */
1720598866c052147c31b808391f58434ce3dbfb838Devang Patel} LLVMAttribute;
173e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen
174e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksentypedef enum {
175b218b278fe890162e7abb636a761dc90f95840ccBill Wendling  /* Terminator Instructions */
176885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  LLVMRet            = 1,
177885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  LLVMBr             = 2,
178885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner  LLVMSwitch         = 3,
179cb0b7be886871f94edc46a425db7f65d86e4767fBill Wendling  LLVMIndirectBr     = 4,
180cb0b7be886871f94edc46a425db7f65d86e4767fBill Wendling  LLVMInvoke         = 5,
18116005253850679a34b09a70bca32a6c0233380d6Bill Wendling  /* removed 6 due to API changes */
182c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMUnreachable    = 7,
183cb0b7be886871f94edc46a425db7f65d86e4767fBill Wendling
184b218b278fe890162e7abb636a761dc90f95840ccBill Wendling  /* Standard Binary Operators */
185c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMAdd            = 8,
186c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFAdd           = 9,
187c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMSub            = 10,
188c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFSub           = 11,
189c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMMul            = 12,
190c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFMul           = 13,
191c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMUDiv           = 14,
192c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMSDiv           = 15,
193c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFDiv           = 16,
194c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMURem           = 17,
195c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMSRem           = 18,
196c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFRem           = 19,
197cb0b7be886871f94edc46a425db7f65d86e4767fBill Wendling
198b218b278fe890162e7abb636a761dc90f95840ccBill Wendling  /* Logical Operators */
199c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMShl            = 20,
200c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMLShr           = 21,
201c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMAShr           = 22,
202c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMAnd            = 23,
203c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMOr             = 24,
204c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMXor            = 25,
205cb0b7be886871f94edc46a425db7f65d86e4767fBill Wendling
206b218b278fe890162e7abb636a761dc90f95840ccBill Wendling  /* Memory Operators */
207c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMAlloca         = 26,
208c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMLoad           = 27,
209c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMStore          = 28,
210c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMGetElementPtr  = 29,
211cb0b7be886871f94edc46a425db7f65d86e4767fBill Wendling
212b218b278fe890162e7abb636a761dc90f95840ccBill Wendling  /* Cast Operators */
213c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMTrunc          = 30,
214c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMZExt           = 31,
215c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMSExt           = 32,
216c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFPToUI         = 33,
217c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFPToSI         = 34,
218c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMUIToFP         = 35,
219c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMSIToFP         = 36,
220c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFPTrunc        = 37,
221c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFPExt          = 38,
222c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMPtrToInt       = 39,
223c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMIntToPtr       = 40,
224c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMBitCast        = 41,
22559d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault  LLVMAddrSpaceCast  = 60,
226cb0b7be886871f94edc46a425db7f65d86e4767fBill Wendling
227b218b278fe890162e7abb636a761dc90f95840ccBill Wendling  /* Other Operators */
228c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMICmp           = 42,
229c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFCmp           = 43,
230c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMPHI            = 44,
231c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMCall           = 45,
232c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMSelect         = 46,
2334df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin  LLVMUserOp1        = 47,
2344df1557f4073cd91893a186acfee96bee64b28ccTorok Edwin  LLVMUserOp2        = 48,
235c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMVAArg          = 49,
236c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMExtractElement = 50,
237c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMInsertElement  = 51,
238c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMShuffleVector  = 52,
239c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMExtractValue   = 53,
240c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMInsertValue    = 54,
241abcd715fdfd786e59f68579f7a68007d46d5218bEli Friedman
242abcd715fdfd786e59f68579f7a68007d46d5218bEli Friedman  /* Atomic operators */
243c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling  LLVMFence          = 55,
244ff03048c1350fcc4fda1ef6d6c57252f3a950854Eli Friedman  LLVMAtomicCmpXchg  = 56,
245dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling  LLVMAtomicRMW      = 57,
246dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling
247dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling  /* Exception Handling Operators */
248e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling  LLVMResume         = 58,
2498833ef03b9ceaa52063116819fff8b3d16fd8933Bill Wendling  LLVMLandingPad     = 59
250c94eefb258fb35e6bb95ceea8f21ea030a907f08Bill Wendling
251885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner} LLVMOpcode;
252885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
253885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnertypedef enum {
254dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMVoidTypeKind,        /**< type with no size */
255ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan Gohman  LLVMHalfTypeKind,        /**< 16 bit floating point type */
256dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMFloatTypeKind,       /**< 32 bit floating point type */
257dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMDoubleTypeKind,      /**< 64 bit floating point type */
258dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMX86_FP80TypeKind,    /**< 80 bit floating point type (X87) */
259dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMFP128TypeKind,       /**< 128 bit floating point type (112-bit mantissa)*/
260dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMPPC_FP128TypeKind,   /**< 128 bit floating point type (two 64-bits) */
261dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMLabelTypeKind,       /**< Labels */
262dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntegerTypeKind,     /**< Arbitrary bit width integers */
263dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMFunctionTypeKind,    /**< Functions */
264dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMStructTypeKind,      /**< Structures */
265dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMArrayTypeKind,       /**< Arrays */
266dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMPointerTypeKind,     /**< Pointers */
2670df5c8e3f1061cd23f8abde64840828f713d4597Chris Lattner  LLVMVectorTypeKind,      /**< SIMD 'packed' format, or other vector type */
268bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen  LLVMMetadataTypeKind,    /**< Metadata */
269bb811a244567aa8a1522203f15588f4d001b7353Dale Johannesen  LLVMX86_MMXTypeKind      /**< X86 MMX */
2708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen} LLVMTypeKind;
2718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2728b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksentypedef enum {
273dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMExternalLinkage,    /**< Externally visible function */
274db1afd499eb64ecf8443f728eabe3f2b32a658caChris Lattner  LLVMAvailableExternallyLinkage,
275667d4b8de6dea70195ff12ef39a4deebffa2f5c7Duncan Sands  LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
276667d4b8de6dea70195ff12ef39a4deebffa2f5c7Duncan Sands  LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
277667d4b8de6dea70195ff12ef39a4deebffa2f5c7Duncan Sands                            equivalent. */
27819794da02cc48a772ae6f4756b14b111a627170eRafael Espindola  LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
279667d4b8de6dea70195ff12ef39a4deebffa2f5c7Duncan Sands  LLVMWeakAnyLinkage,     /**< Keep one copy of function when linking (weak) */
280667d4b8de6dea70195ff12ef39a4deebffa2f5c7Duncan Sands  LLVMWeakODRLinkage,     /**< Same, but only replaced by something
281667d4b8de6dea70195ff12ef39a4deebffa2f5c7Duncan Sands                            equivalent. */
282dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMAppendingLinkage,   /**< Special purpose, only applies to global arrays */
283dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMInternalLinkage,    /**< Rename collisions when linking (static
284dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen                               functions) */
285667d4b8de6dea70195ff12ef39a4deebffa2f5c7Duncan Sands  LLVMPrivateLinkage,     /**< Like Internal, but omit from symbol table */
28636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  LLVMDLLImportLinkage,   /**< Obsolete */
28736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  LLVMDLLExportLinkage,   /**< Obsolete */
2885f4ee1fc5d00ae55c30fa2ce450c69be4c6d6e63Duncan Sands  LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
289f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin  LLVMGhostLinkage,       /**< Obsolete */
29039a499b6c471e1db9853e9c8d087ca83f106c5d5Bill Wendling  LLVMCommonLinkage,      /**< Tentative definitions */
2915e721d768254a920b78b9129d79a84c0163cb3f4Bill Wendling  LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
29232811bef956e0fae4329e6515420d85f7e510660Bill Wendling  LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
2938b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen} LLVMLinkage;
2948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksentypedef enum {
296dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMDefaultVisibility,  /**< The GV is visible */
297dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMHiddenVisibility,   /**< The GV is hidden */
298dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMProtectedVisibility /**< The GV is protected */
2998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen} LLVMVisibility;
3008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
30146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksentypedef enum {
30236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  LLVMDefaultStorageClass   = 0,
30336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */
30436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  LLVMDLLExportStorageClass = 2  /**< Function to be accessible from DLL. */
30536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} LLVMDLLStorageClass;
30636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
30736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinestypedef enum {
30846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  LLVMCCallConv           = 0,
30946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  LLVMFastCallConv        = 8,
31046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  LLVMColdCallConv        = 9,
3119defe9a7ccb29b02ed78bede5892fd4e3e64307bFilip Pizlo  LLVMWebKitJSCallConv    = 12,
3129defe9a7ccb29b02ed78bede5892fd4e3e64307bFilip Pizlo  LLVMAnyRegCallConv      = 13,
31346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  LLVMX86StdcallCallConv  = 64,
31446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen  LLVMX86FastcallCallConv = 65
31546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} LLVMCallConv;
31646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
31746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksentypedef enum {
318dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntEQ = 32, /**< equal */
319dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntNE,      /**< not equal */
320dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntUGT,     /**< unsigned greater than */
321dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntUGE,     /**< unsigned greater or equal */
322dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntULT,     /**< unsigned less than */
323dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntULE,     /**< unsigned less or equal */
324dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntSGT,     /**< signed greater than */
325dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntSGE,     /**< signed greater or equal */
326dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntSLT,     /**< signed less than */
327dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMIntSLE      /**< signed less or equal */
32846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} LLVMIntPredicate;
32946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
33046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksentypedef enum {
331dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealPredicateFalse, /**< Always false (always folded) */
332dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealOEQ,            /**< True if ordered and equal */
333dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealOGT,            /**< True if ordered and greater than */
334dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealOGE,            /**< True if ordered and greater than or equal */
335dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealOLT,            /**< True if ordered and less than */
336dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealOLE,            /**< True if ordered and less than or equal */
337dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealONE,            /**< True if ordered and operands are unequal */
338dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealORD,            /**< True if ordered (no nans) */
339dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealUNO,            /**< True if unordered: isnan(X) | isnan(Y) */
340dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealUEQ,            /**< True if unordered or equal */
341dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealUGT,            /**< True if unordered or greater than */
342dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealUGE,            /**< True if unordered, greater than, or equal */
343dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealULT,            /**< True if unordered or less than */
344dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealULE,            /**< True if unordered, less than, or equal */
345dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealUNE,            /**< True if unordered or not equal */
346dc2c07a7cf7b21cfb164fc9c2eee0523a43e4ceaGordon Henriksen  LLVMRealPredicateTrue   /**< Always true (always folded) */
34746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen} LLVMRealPredicate;
34846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
349e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendlingtypedef enum {
350e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling  LLVMLandingPadCatch,    /**< A catch clause   */
351e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling  LLVMLandingPadFilter    /**< A filter clause  */
352e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling} LLVMLandingPadClauseTy;
353e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling
3546334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborgtypedef enum {
3556334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  LLVMNotThreadLocal = 0,
3566334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  LLVMGeneralDynamicTLSModel,
3576334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  LLVMLocalDynamicTLSModel,
3586334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  LLVMInitialExecTLSModel,
3596334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg  LLVMLocalExecTLSModel
3606334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg} LLVMThreadLocalMode;
3616334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborg
362d86871dd71788491c2f6fbe4f517e7f668d499baCarlo Koktypedef enum {
3638effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok  LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
3648effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok  LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
3658effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                                     somewhat sane results, lock free. */
366e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi  LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
367e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                     operations affecting a specific address,
3688effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                                     a consistent ordering exists */
369e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi  LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
370e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                   necessary to acquire a lock to access other
3718effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                                   memory with normal loads and stores. */
372e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi  LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
373e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                   a barrier of the sort necessary to release
3748effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                                   a lock. */
375e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi  LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
376e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                          Release barrier (for fences and
3778effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                                          operations which both read and write
3788effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                                           memory). */
379e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi  LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
380e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                                 for loads and Release
381e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                                 semantics for stores.
382e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                                 Additionally, it guarantees
383e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                                 that a total ordering exists
384e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                                 between all
385e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                                 SequentiallyConsistent
3868effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                                                 operations. */
387d86871dd71788491c2f6fbe4f517e7f668d499baCarlo Kok} LLVMAtomicOrdering;
3888effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok
389d86871dd71788491c2f6fbe4f517e7f668d499baCarlo Koktypedef enum {
3908effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
3918effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
3928effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
3938effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
3948effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
3958effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
3968effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
3978effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
398e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                             original using a signed comparison and return
3998effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                             the old one */
4008effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
401e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                             original using a signed comparison and return
4028effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                             the old one */
4038effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
404e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                             original using an unsigned comparison and return
4058effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                             the old one */
4068effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok    LLVMAtomicRMWBinOpUMin /**< Sets the value if it's greater than the
407e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                             original using an unsigned comparison  and return
4088effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                             the old one */
409d86871dd71788491c2f6fbe4f517e7f668d499baCarlo Kok} LLVMAtomicRMWBinOp;
4108effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok
411dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinestypedef enum {
412dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    LLVMDSError,
413dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    LLVMDSWarning,
414dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    LLVMDSRemark,
415dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    LLVMDSNote
416dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} LLVMDiagnosticSeverity;
417dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
4186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
4196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
4206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
4216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
422be1532ec66648f1c86d684f4840c03e29a4391ceNick Lewyckyvoid LLVMInitializeCore(LLVMPassRegistryRef R);
423be1532ec66648f1c86d684f4840c03e29a4391ceNick Lewycky
424906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands/** Deallocate and destroy all ManagedStatic variables.
425906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands    @see llvm::llvm_shutdown
426906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands    @see ManagedStatic */
427f39fe46062d2093fc3d7c092bc8c4561b744164cBenjamin Kramervoid LLVMShutdown(void);
428906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
4298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
430da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen/*===-- Error handling ----------------------------------------------------===*/
431da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
4326cfed36338d7728076ddbc1331908b887a4302d3Filip Pizlochar *LLVMCreateMessage(const char *Message);
433da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenvoid LLVMDisposeMessage(char *Message);
434da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
4350739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlotypedef void (*LLVMFatalErrorHandler)(const char *Reason);
4360739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo
4370739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo/**
4380739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo * Install a fatal error handler. By default, if LLVM detects a fatal error, it
4390739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo * will call exit(1). This may not be appropriate in many contexts. For example,
4400739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo * doing exit(1) will bypass many crash reporting/tracing system tools. This
4410739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo * function allows you to install a callback that will be invoked prior to the
4420739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo * call to exit(1).
4430739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo */
4440739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlovoid LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
4450739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo
4460739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo/**
4470739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo * Reset the fatal error handler. This resets LLVM's fatal error handling
4480739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo * behavior to the default.
4490739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlo */
4500739140b05337d97c22fd17c97ac71ab5a34f5d9Filip Pizlovoid LLVMResetFatalErrorHandler(void);
451da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
4526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
453fa0da86a59c502bfbfa01d3d5f694f18f6e8a717Filip Pizlo * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
454fa0da86a59c502bfbfa01d3d5f694f18f6e8a717Filip Pizlo * signals and prints which component of LLVM you were in at the time if the
455fa0da86a59c502bfbfa01d3d5f694f18f6e8a717Filip Pizlo * crash.
45635a1e9414d48f52093679b4723578192cceeb3c5Filip Pizlo */
457fa0da86a59c502bfbfa01d3d5f694f18f6e8a717Filip Pizlovoid LLVMEnablePrettyStackTrace(void);
45835a1e9414d48f52093679b4723578192cceeb3c5Filip Pizlo
45935a1e9414d48f52093679b4723578192cceeb3c5Filip Pizlo/**
4606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreContext Contexts
4616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
4626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Contexts are execution states for the core LLVM IR system.
4636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
4646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Most types are tied to a context instance. Multiple contexts can
4656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * exist simultaneously. A single context is not thread safe. However,
4666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * different contexts can execute on different threads simultaneously.
4676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
4686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
4696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
4708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
471dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinestypedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
472dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinestypedef void (*LLVMYieldCallback)(LLVMContextRef, void *);
473dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
4746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
4756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a new context.
4766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
4776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Every call to this function should be paired with a call to
4786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMContextDispose() or the context will leak memory.
4796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
480bf4a68ebe2007b42f2f7750e655341a7126e25d9Erick TryzelaarLLVMContextRef LLVMContextCreate(void);
4816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
4826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
4836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the global context instance.
4846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
485bf4a68ebe2007b42f2f7750e655341a7126e25d9Erick TryzelaarLLVMContextRef LLVMGetGlobalContext(void);
4866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
4876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
488dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines * Set the diagnostic handler for this context.
489dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines */
490dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesvoid LLVMContextSetDiagnosticHandler(LLVMContextRef C,
491dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                     LLVMDiagnosticHandler Handler,
492dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                     void *DiagnosticContext);
493dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
494dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/**
495dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines * Set the yield callback function for this context.
496dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines *
497dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines * @see LLVMContext::setYieldCallback()
498dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines */
499dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesvoid LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
500dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                 void *OpaqueHandle);
501dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
502dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/**
5036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Destroy a context instance.
5046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This should be called for every call to LLVMContextCreate() or memory
5066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * will be leaked.
5076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
5088b477ed579794ba6d76915d56b3f448a7dd20120Owen Andersonvoid LLVMContextDispose(LLVMContextRef C);
5098b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson
510dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/**
511dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines * Return a string representation of the DiagnosticInfo. Use
512dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines * LLVMDisposeMessage to free the string.
513dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines *
514dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines * @see DiagnosticInfo::print()
515dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines */
516dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hineschar *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
517dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
518dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/**
519dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines * Return an enum LLVMDiagnosticSeverity.
520dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines *
521dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines * @see DiagnosticInfo::getSeverity()
522dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines */
523dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesLLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
524dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
52546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarunsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char* Name,
52646c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar                                  unsigned SLen);
52746c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarunsigned LLVMGetMDKindID(const char* Name, unsigned SLen);
52846c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
5296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
5306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
5316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
5326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
53357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
53457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @defgroup LLVMCCoreModule Modules
5356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
53613230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * Modules represent the top-level structure in an LLVM program. An LLVM
5376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * module is effectively a translation unit or a collection of
5386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * translation units merged together.
5396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
5416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
5426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
5436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
5446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a new, empty module in the global context.
5456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This is equivalent to calling LLVMModuleCreateWithNameInContext with
5476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMGetGlobalContext() as the context parameter.
5486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Every invocation should be paired with LLVMDisposeModule() or memory
5506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * will be leaked.
5516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
5528b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
5536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
5546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
5556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a new, empty module in a specific context.
5566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Every invocation should be paired with LLVMDisposeModule() or memory
5586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * will be leaked.
5596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
560c8897d9c2f9fcee6061a2c2d380028269026a836Owen AndersonLLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
561c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson                                                LLVMContextRef C);
562bbf1c514bd832bf1306fe3e87221fd78bbc306efGordon Henriksen
5636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
5646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Destroy a module instance.
5656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This must be called for every created module or memory will be
5676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * leaked.
5686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
5698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMDisposeModule(LLVMModuleRef M);
5708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
5716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
5726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the data layout for a module.
5736244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see Module::getDataLayout()
5756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
576a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenconst char *LLVMGetDataLayout(LLVMModuleRef M);
5776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
5786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
5796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set the data layout for a module.
5806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see Module::setDataLayout()
5826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
583a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenvoid LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
584a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
5856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
5866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the target triple for a module.
5876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see Module::getTargetTriple()
5896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
590a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenconst char *LLVMGetTarget(LLVMModuleRef M);
5916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
5926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
5936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set the target triple for a module.
5946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
5956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see Module::setTargetTriple()
5966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
597a353ffa7e556bfd2864474911174da691117f691Gordon Henriksenvoid LLVMSetTarget(LLVMModuleRef M, const char *Triple);
598a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen
5996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
6006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Dump a representation of a module to stderr.
6016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
6026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see Module::dump()
6036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
604af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksenvoid LLVMDumpModule(LLVMModuleRef M);
605af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen
6066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
6075c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg * Print a representation of a module to a file. The ErrorMessage needs to be
6085c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
6095c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg *
6105c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg * @see Module::print()
6115c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg */
6125c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans WennborgLLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
6135c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg                               char **ErrorMessage);
6145c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg
6155c87b4958d1a5dabf2400be5b3a86aed4f82db91Hans Wennborg/**
6162906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg * Return a string representation of the module. Use
6172906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg * LLVMDisposeMessage to free the string.
6182906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg *
6192906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg * @see Module::print()
6202906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg */
6212906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborgchar *LLVMPrintModuleToString(LLVMModuleRef M);
6222906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg
6232906b519d1f47f1b269ed1be9c70f752b3dca928Anders Waldenborg/**
6246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set inline assembly for a module.
6256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
6266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see Module::setModuleInlineAsm()
6276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
6280941534c712d77243d9dda5e8c1d927563b4edffChris Lattnervoid LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
6298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
6306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
6316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the context to which this module is associated.
6326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
6336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see Module::getContext()
6346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
635a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris LattnerLLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
636a1ac3bbec703f7faf20cbc06fa0eb9d34bb4f5f6Chris Lattner
6376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
6386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a Type from a module by its registered name.
6396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
6406244b518880842f2c15200ee041e06799e4cc779Gregory SzorcLLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
6416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
6426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
6436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the number of operands for named metadata in a module.
6446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
6456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Module::getNamedMetadata()
6466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
6476244b518880842f2c15200ee041e06799e4cc779Gregory Szorcunsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char* name);
6486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
6496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
6506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the named metadata operands for a module.
6516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
6526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The passed LLVMValueRef pointer should refer to an array of
6536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
6546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * array will be populated with the LLVMValueRef instances. Each
6556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * instance corresponds to a llvm::MDNode.
6566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
6576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Module::getNamedMetadata()
6586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::MDNode::getOperand()
6596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
6606244b518880842f2c15200ee041e06799e4cc779Gregory Szorcvoid LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char* name, LLVMValueRef *Dest);
6616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
6626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
6636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Add an operand to named metadata.
6646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
6656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Module::getNamedMetadata()
6666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::MDNode::addOperand()
6676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
6686244b518880842f2c15200ee041e06799e4cc779Gregory Szorcvoid LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char* name,
6696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc                                 LLVMValueRef Val);
6706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
67157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
67257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Add a function to a module under a specified name.
67357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
67457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::Function::Create()
67557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
67657f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
67757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                             LLVMTypeRef FunctionTy);
67857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
67957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
68057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Obtain a Function value from a Module by its name.
68157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
68257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * The returned value corresponds to a llvm::Function value.
68357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
68457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::Module::getFunction()
68557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
68657f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
68757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
68857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
68957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Obtain an iterator to the first Function in a Module.
69057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
69157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::Module::begin()
69257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
69357f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
69457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
69557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
69657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Obtain an iterator to the last Function in a Module.
69757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
69857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::Module::end()
69957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
70057f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
70157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
70257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
70357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Advance a Function iterator to the next Function.
70457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
70557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Returns NULL if the iterator was already at the end and there are no more
70657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * functions.
70757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
70857f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
70957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
71057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
71157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Decrement a Function iterator to the previous Function.
71257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
71357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Returns NULL if the iterator was already at the beginning and there are
71457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * no previous functions.
71557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
71657f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
7178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
7186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
7196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
7206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
7216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
7226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
7236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreType Types
7246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Types represent the type of a value.
7266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Types are associated with a context instance. The context internally
7286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * deduplicates types so there is only 1 instance of a specific type
7296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * alive at a time. In other words, a unique type is shared among all
7306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * consumers within a context.
7316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * A Type in the C API corresponds to llvm::Type.
7336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Types have the following hierarchy:
7356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *   types:
7378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *     integer type
7388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *     real type
7398b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *     function type
7408b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *     sequence types:
7418b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *       array type
7428b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *       pointer type
7438b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *       vector type
7448b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *     void type
7458b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *     label type
7468b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen *     opaque type
7476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
7498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen */
7508b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
7516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
7526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the enumerated type of a Type instance.
7536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Type:getTypeID()
7556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
7568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
7576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
7586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
7596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Whether the type has a known size.
7606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Things that don't have a size are abstract types, labels, and void.a
7626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Type::isSized()
7646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
765ff12c99d131789ccb9e8739963f4d8e0e95667d4Torok EdwinLLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
766bbf1c514bd832bf1306fe3e87221fd78bbc306efGordon Henriksen
7676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
7686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the context to which this type instance is associated.
7696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Type::getContext()
7716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
77222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
77322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
7746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
77575a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborg * Dump a representation of a type to stderr.
77675a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborg *
77775a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborg * @see llvm::Type::dump()
77875a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborg */
77975a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborgvoid LLVMDumpType(LLVMTypeRef Val);
78075a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborg
78175a5df1d1e086f3d9c46e1b602381fb56a8911f3Anders Waldenborg/**
78218b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg * Return a string representation of the type. Use
78318b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg * LLVMDisposeMessage to free the string.
78418b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg *
78518b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg * @see llvm::Type::print()
78618b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg */
78718b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborgchar *LLVMPrintTypeToString(LLVMTypeRef Val);
78818b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg
78918b9105d02ee152e7f8faab751d6f356428c3054Anders Waldenborg/**
7906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreTypeInt Integer Types
7916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Functions in this section operate on integer types.
7936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
7946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
7956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
7966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
7976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
7986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain an integer type from a context with specified bit width.
7996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
80022c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
80122c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
80222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
80322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
80422c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
80522c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
80622c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
8076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain an integer type from the global context with a specified bit
8096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * width.
8106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
81116c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMInt1Type(void);
81216c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMInt8Type(void);
81316c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMInt16Type(void);
81416c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMInt32Type(void);
81516c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMInt64Type(void);
81681a788176ecf158432af2b208b0a85321e5ec74aGordon HenriksenLLVMTypeRef LLVMIntType(unsigned NumBits);
81746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
8188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
8196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
8216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
8226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreTypeFloat Floating Point Types
8256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
8266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
8276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
8286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a 16-bit floating point type from a context.
8316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
832ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan GohmanLLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
8336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a 32-bit floating point type from a context.
8366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
83722c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
8386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a 64-bit floating point type from a context.
8416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
84222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
8436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a 80-bit floating point type (X87) from a context.
8466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
84722c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
8486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a 128-bit floating point type (112-bit mantissa) from a
8516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * context.
8526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
85322c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
8546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a 128-bit floating point type (two 64-bits) from a context.
8576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
85822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
85922c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
8606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a floating point type from the global context.
8626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
8636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * These map to the functions in this group of the same name.
8646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
865ce16339930a2b03e53b4e6399ef59c092a7f2cfaDan GohmanLLVMTypeRef LLVMHalfType(void);
86616c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMFloatType(void);
86716c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMDoubleType(void);
86816c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMX86FP80Type(void);
86916c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMFP128Type(void);
87016c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMPPCFP128Type(void);
8718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
8726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8736244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
8746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
8756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreTypeFunction Function Types
8786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
8796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
8806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
8816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a function type consisting of a specified signature.
8846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
8856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The function is defined as a tuple of a return Type, a list of
8866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * parameter types, and whether the function is variadic.
8876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
88881a788176ecf158432af2b208b0a85321e5ec74aGordon HenriksenLLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
88981a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen                             LLVMTypeRef *ParamTypes, unsigned ParamCount,
890d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                             LLVMBool IsVarArg);
8916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Returns whether a function type is variadic.
8946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
895d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
8966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
8976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
8986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the Type this function Type returns.
8996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
90046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
9016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the number of parameters this function accepts.
9046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
90546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
9066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the types of a function's parameters.
9096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The Dest parameter should point to a pre-allocated array of
9116244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
9126244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * first LLVMCountParamTypes() entries in the array will be populated
9136244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * with LLVMTypeRef instances.
9146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @param FunctionTy The function type to operate on.
9166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @param Dest Memory address of an array to be filled with result.
9176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
91846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
9198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
9206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
9226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
9236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreTypeStruct Structure Types
9266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * These functions relate to LLVMTypeRef instances.
9286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::StructType
9306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
9326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
9336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a new structure type in a context.
9366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * A structure is specified by a list of inner elements/types and
9386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * whether these can be packed together.
9396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::StructType::create()
9416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
94222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
943d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                    unsigned ElementCount, LLVMBool Packed);
9446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a new structure type in the global context.
9476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::StructType::create()
9496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
95081a788176ecf158432af2b208b0a85321e5ec74aGordon HenriksenLLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
951d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                           LLVMBool Packed);
9526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create an empty structure in a context having a specified name.
9556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::StructType::create()
9576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
958d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris LattnerLLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
9596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the name of a structure.
9626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::StructType::getName()
9646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
965c44943ed4f4f2d44b6668e6b51eb355f8310660cTorok Edwinconst char *LLVMGetStructName(LLVMTypeRef Ty);
9666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set the contents of a structure type.
9696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::StructType::setBody()
9716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
972d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattnervoid LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
973d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner                       unsigned ElementCount, LLVMBool Packed);
974d91aa14075d5c4c093ed1a84ea4b5397ce5f6eb4Chris Lattner
9756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Get the number of elements defined inside the structure.
9776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::StructType::getNumElements()
9796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
98046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
9816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Get the elements within a structure.
9846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The function is passed the address of a pre-allocated array of
9866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
9876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * invocation, this array will be populated with the structure's
9886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * elements. The objects in the destination array will have a lifetime
9896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * of the structure type itself, which is the lifetime of the context it
9906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * is contained in.
9916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
9928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
9936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
9946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
9956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Determine whether a structure is packed.
9966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
9976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::StructType::isPacked()
9986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
999d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
10006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Determine whether a structure is opaque.
10036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::StructType::isOpaque()
10056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
100661afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris LattnerLLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
100761afc8820f2bc85f7b7158850a0250f9d8c1ebaaChris Lattner
10086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
10106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10118b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10136244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreTypeSequential Sequential Types
10156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Sequential types represents "arrays" of types. This is a super class
10176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * for array, vector, and pointer types.
10186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
10206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the type of elements within a sequential type.
10246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This works on array, vector, and pointer types.
10266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::SequentialType::getElementType()
10286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
10306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a fixed size array type that refers to a specific type.
10336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The created type will exist in the context that its element type
10356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * exists in.
10366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::ArrayType::get()
10386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10396244b518880842f2c15200ee041e06799e4cc779Gregory SzorcLLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
10406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the length of an array type.
10436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This only works on types that represent arrays.
10456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::ArrayType::getNumElements()
10476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10488b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
10496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a pointer type that points to a defined type.
10526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The created type will exist in the context that its pointee type
10546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * exists in.
10556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::PointerType::get()
10576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10586244b518880842f2c15200ee041e06799e4cc779Gregory SzorcLLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
10596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the address space of a pointer type.
10626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This only works on types that represent pointers.
10646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::PointerType::getAddressSpace()
10666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
106757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksenunsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
10686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a vector type that contains a defined type and has a specific
10716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * number of elements.
10726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10736244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The created type will exist in the context thats its element type
10746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * exists in.
10756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::VectorType::get()
10776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10786244b518880842f2c15200ee041e06799e4cc779Gregory SzorcLLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
10796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the number of elements in a vector type.
10826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This only works on types that represent vectors.
10846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::VectorType::getNumElements()
10866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10878b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenunsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
10888b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
10896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
10916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
10946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreTypeOther Other Types
10956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
10966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
10976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
10986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
10996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
11006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a void type in a context.
11016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
110222c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
11036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
11046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
11056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a label type in a context.
11066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
110722c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
11086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
11096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
11106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Create a X86 MMX type in a context.
11116244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1112401e2d3386219ac2e5cf734334fcbf99ccfc8634Dale JohannesenLLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
111322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
11146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
11156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * These are similar to the above functions except they operate on the
11166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * global context.
11176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
111816c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMVoidType(void);
111916c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMTypeRef LLVMLabelType(void);
1120401e2d3386219ac2e5cf734334fcbf99ccfc8634Dale JohannesenLLVMTypeRef LLVMX86MMXType(void);
11218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
11236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
11246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
11256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
11266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
11276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
11286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
11298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
11316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValues Values
11326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
11336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The bulk of LLVM's object model consists of values, which comprise a very
11348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen * rich type hierarchy.
11356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
11366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMValueRef essentially represents llvm::Value. There is a rich
11376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * hierarchy of classes within this type. Depending on the instance
1138ac8a4ad47d17bac8c107d9f0e407d87befcd314eEli Bendersky * obtained, not all APIs are available.
11396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
114013230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * Callers can determine the type of an LLVMValueRef by calling the
11416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
11426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * functions are defined by a macro, so it isn't obvious which are
11436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * available by looking at the Doxygen source code. Instead, look at the
11446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
11456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * of value names given. These value names also correspond to classes in
11466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * the llvm::Value hierarchy.
11476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
11486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
11498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen */
11508b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
11512a9c671a51126def8020870103316e6aedc73edfGordon Henriksen#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
11522a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  macro(Argument)                           \
11532a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  macro(BasicBlock)                         \
11542a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  macro(InlineAsm)                          \
11553dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  macro(MDNode)                             \
11563dd16741864302af14b31b7f75375c09d8544a35Torok Edwin  macro(MDString)                           \
11572a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  macro(User)                               \
11582a9c671a51126def8020870103316e6aedc73edfGordon Henriksen    macro(Constant)                         \
11593dd16741864302af14b31b7f75375c09d8544a35Torok Edwin      macro(BlockAddress)                   \
11602a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ConstantAggregateZero)          \
11612a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ConstantArray)                  \
11620fac3dfa4153dc6064d299fe0a0933630ae3f840Peter Zotov      macro(ConstantDataSequential)         \
11630fac3dfa4153dc6064d299fe0a0933630ae3f840Peter Zotov        macro(ConstantDataArray)            \
11640fac3dfa4153dc6064d299fe0a0933630ae3f840Peter Zotov        macro(ConstantDataVector)           \
11652a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ConstantExpr)                   \
11662a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ConstantFP)                     \
11672a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ConstantInt)                    \
11682a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ConstantPointerNull)            \
11692a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ConstantStruct)                 \
11702a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ConstantVector)                 \
11712a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(GlobalValue)                    \
11722a9c671a51126def8020870103316e6aedc73edfGordon Henriksen        macro(GlobalAlias)                  \
1173dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines        macro(GlobalObject)                 \
1174dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines          macro(Function)                   \
1175dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines          macro(GlobalVariable)             \
11762a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(UndefValue)                     \
11772a9c671a51126def8020870103316e6aedc73edfGordon Henriksen    macro(Instruction)                      \
11782a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(BinaryOperator)                 \
11792a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(CallInst)                       \
11802a9c671a51126def8020870103316e6aedc73edfGordon Henriksen        macro(IntrinsicInst)                \
11812a9c671a51126def8020870103316e6aedc73edfGordon Henriksen          macro(DbgInfoIntrinsic)           \
11822a9c671a51126def8020870103316e6aedc73edfGordon Henriksen            macro(DbgDeclareInst)           \
11832a9c671a51126def8020870103316e6aedc73edfGordon Henriksen          macro(MemIntrinsic)               \
11842a9c671a51126def8020870103316e6aedc73edfGordon Henriksen            macro(MemCpyInst)               \
11852a9c671a51126def8020870103316e6aedc73edfGordon Henriksen            macro(MemMoveInst)              \
11862a9c671a51126def8020870103316e6aedc73edfGordon Henriksen            macro(MemSetInst)               \
11872a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(CmpInst)                        \
11883dd16741864302af14b31b7f75375c09d8544a35Torok Edwin        macro(FCmpInst)                     \
11893dd16741864302af14b31b7f75375c09d8544a35Torok Edwin        macro(ICmpInst)                     \
11902a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ExtractElementInst)             \
11912a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(GetElementPtrInst)              \
11922a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(InsertElementInst)              \
11932a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(InsertValueInst)                \
1194e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling      macro(LandingPadInst)                 \
11952a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(PHINode)                        \
11962a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(SelectInst)                     \
11972a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(ShuffleVectorInst)              \
11982a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(StoreInst)                      \
11992a9c671a51126def8020870103316e6aedc73edfGordon Henriksen      macro(TerminatorInst)                 \
12002a9c671a51126def8020870103316e6aedc73edfGordon Henriksen        macro(BranchInst)                   \
12013dd16741864302af14b31b7f75375c09d8544a35Torok Edwin        macro(IndirectBrInst)               \
12022a9c671a51126def8020870103316e6aedc73edfGordon Henriksen        macro(InvokeInst)                   \
12032a9c671a51126def8020870103316e6aedc73edfGordon Henriksen        macro(ReturnInst)                   \
12042a9c671a51126def8020870103316e6aedc73edfGordon Henriksen        macro(SwitchInst)                   \
12052a9c671a51126def8020870103316e6aedc73edfGordon Henriksen        macro(UnreachableInst)              \
1206dccc03b2423fe65efb5963ae816b99c24fc53374Bill Wendling        macro(ResumeInst)                   \
12075d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands      macro(UnaryInstruction)               \
12085d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands        macro(AllocaInst)                   \
12095d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands        macro(CastInst)                     \
121059d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault          macro(AddrSpaceCastInst)          \
12115d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(BitCastInst)                \
12125d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(FPExtInst)                  \
12135d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(FPToSIInst)                 \
12145d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(FPToUIInst)                 \
12155d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(FPTruncInst)                \
12165d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(IntToPtrInst)               \
12175d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(PtrToIntInst)               \
12185d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(SExtInst)                   \
12195d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(SIToFPInst)                 \
12205d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(TruncInst)                  \
12215d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(UIToFPInst)                 \
12225d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands          macro(ZExtInst)                   \
12235d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands        macro(ExtractValueInst)             \
12245d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands        macro(LoadInst)                     \
12255d042c63741bc5ccec8ad18bfebf9f621fcde640Duncan Sands        macro(VAArgInst)
12262a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
12276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
12286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValueGeneral General APIs
12296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
12306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Functions in this section work on all LLVMValueRef instances,
12316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * regardless of their sub-type. They correspond to functions available
12326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * on llvm::Value.
12336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
12346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
12356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
12366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
12376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
12386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the type of a value.
12396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
12406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Value::getType()
12416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
124246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
12436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
12446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
12456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the string name of a value.
12466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
12476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Value::getName()
12486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
12498b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenconst char *LLVMGetValueName(LLVMValueRef Val);
12506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
12516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
12526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set the string name of a value.
12536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
12546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Value::setName()
12556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
12568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetValueName(LLVMValueRef Val, const char *Name);
12576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
12586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
12596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Dump a representation of a value to stderr.
12606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
12616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Value::dump()
12626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
126388cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksenvoid LLVMDumpValue(LLVMValueRef Val);
12646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
12656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
126614bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov * Return a string representation of the value. Use
126714bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov * LLVMDisposeMessage to free the string.
126814bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov *
126914bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov * @see llvm::Value::print()
127014bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov */
127114bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotovchar *LLVMPrintValueToString(LLVMValueRef Val);
127214bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov
127314bbb1d9b083c7935185e7c11ddf059f352aa3fcPeter Zotov/**
12746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Replace all uses of a value with another one.
12756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
12766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Value::replaceAllUsesWith()
12776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1278885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnervoid LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
12798b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
12806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
12816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Determine whether the specified constant instance is constant.
12826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
12836244b518880842f2c15200ee041e06799e4cc779Gregory SzorcLLVMBool LLVMIsConstant(LLVMValueRef Val);
12846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
12856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
12866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Determine whether a value instance is undefined.
12876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
12886244b518880842f2c15200ee041e06799e4cc779Gregory SzorcLLVMBool LLVMIsUndef(LLVMValueRef Val);
12896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
12906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
12916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Convert value instances between types.
12926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
129313230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * Internally, an LLVMValueRef is "pinned" to a specific type. This
12946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * series of functions allows you to cast an instance to a specific
12956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * type.
12966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
12976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * If the cast is not valid for the specified type, NULL is returned.
12986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
12996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::dyn_cast_or_null<>
13006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
13012a9c671a51126def8020870103316e6aedc73edfGordon Henriksen#define LLVM_DECLARE_VALUE_CAST(name) \
13022a9c671a51126def8020870103316e6aedc73edfGordon Henriksen  LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
13032a9c671a51126def8020870103316e6aedc73edfGordon HenriksenLLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
13042a9c671a51126def8020870103316e6aedc73edfGordon Henriksen
13056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
13076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
13086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValueUses Usage
13116244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13126244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This module defines functions that allow you to inspect the uses of a
13136244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMValueRef.
13146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
131513230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
13166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
13176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * llvm::User and llvm::Value.
13186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
13206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
13216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the first use of a value.
13246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Uses are obtained in an iterator fashion. First, call this function
13266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * to obtain a reference to the first use. Then, call LLVMGetNextUse()
1327ac8a4ad47d17bac8c107d9f0e407d87befcd314eEli Bendersky * on that instance and all subsequently obtained instances until
13286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMGetNextUse() returns NULL.
13296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Value::use_begin()
13316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
133224b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
13336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the next use of a value.
13366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This effectively advances the iterator. It returns NULL if you are on
13386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * the final use and no more are available.
13396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
134024b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMUseRef LLVMGetNextUse(LLVMUseRef U);
13416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the user value for a user.
13446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The returned value corresponds to a llvm::User type.
13466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Use::getUser()
13486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
134924b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMValueRef LLVMGetUser(LLVMUseRef U);
13506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the value this use corresponds to.
13536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Use::get().
13556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
135624b3733425511cf60268fddda13c306ab140b55fErick TryzelaarLLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
1357885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
13586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
13606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
13616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
136357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @defgroup LLVMCCoreValueUser User value
13646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Function in this group pertain to LLVMValueRef instances that descent
13666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * from llvm::User. This includes constants, instructions, and
13676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * operators.
13686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
13706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
13716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13736244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain an operand at a specific index in a llvm::User value.
13746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::User::getOperand()
13766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1377885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
13786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set an operand at a specific index in a llvm::User value.
13816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::User::setOperand()
13836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1384f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarvoid LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
13856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the number of operands in a llvm::User value.
13886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
13896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::User::getNumOperands()
13906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1391f7af931930dfab74b8a72b195e53df34b4ea2480Erick Tryzelaarint LLVMGetNumOperands(LLVMValueRef Val);
1392885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattner
13936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
13946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
13956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
13966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
13976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
139857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @defgroup LLVMCCoreValueConstant Constants
13996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This section contains APIs for interacting with LLVMValueRef that
14016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * correspond to llvm::Constant instances.
14026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * These functions will work for any LLVMValueRef in the llvm::Constant
14046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * class hierarchy.
14056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
14076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
14086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
14096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant value referring to the null instance of a type.
14116244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14126244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Constant::getNullValue()
14136244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1414e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
14156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
14166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant value referring to the instance of a type
14186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * consisting of all ones.
14196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This is only valid for integer types.
14216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Constant::getAllOnesValue()
14236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
14246244b518880842f2c15200ee041e06799e4cc779Gregory SzorcLLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
14256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
14266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant value referring to an undefined value of a type.
14286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::UndefValue::get()
14306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
14318b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
14326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
14336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Determine whether a value instance is null.
14356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Constant::isNullValue()
14376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1438d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsNull(LLVMValueRef Val);
14396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
14406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant that is a constant pointer pointing to NULL for a
14426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * specified type.
14436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1444e4840bc611f8260065d3879a412ea3b501550995Chris LattnerLLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
14458b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
14466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValueConstantScalar Scalar constants
14486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Functions in this group model LLVMValueRef instances that correspond
14506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * to constants referring to scalar types.
14516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * For integer types, the LLVMTypeRef parameter should correspond to a
14536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * llvm::IntegerType instance and the returned LLVMValueRef will
14546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * correspond to a llvm::ConstantInt.
14556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * For floating point types, the LLVMTypeRef returned corresponds to a
14576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * llvm::ConstantFP.
14586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
14606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
146146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
14626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant value for an integer type.
14646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The returned value corresponds to a llvm::ConstantInt.
14666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::ConstantInt::get()
14686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @param IntTy Integer type to obtain value of.
14706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @param N The value the returned instance should refer to.
14716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @param SignExtend Whether to sign extend the produced value.
14726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1473e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
1474d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                          LLVMBool SignExtend);
14756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
14766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant value for an integer of arbitrary precision.
14786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::ConstantInt::get()
14806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
14815400570097a25f05694d451afed7f949281b789eChris LattnerLLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
14825400570097a25f05694d451afed7f949281b789eChris Lattner                                              unsigned NumWords,
14835400570097a25f05694d451afed7f949281b789eChris Lattner                                              const uint64_t Words[]);
14846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
14856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant value for an integer parsed from a string.
14876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * A similar API, LLVMConstIntOfStringAndSize is also available. If the
14896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * string's length is available, it is preferred to call that function
14906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * instead.
14916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
14926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::ConstantInt::get()
14936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1494e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
1495e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                  uint8_t Radix);
14966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
14976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
14986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant value for an integer parsed from a string with
14996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * specified length.
15006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
15016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::ConstantInt::get()
15026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1503e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
1504e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                         unsigned SLen, uint8_t Radix);
15056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
15076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant value referring to a double floating point value.
15086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1509e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenLLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
15106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15116244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
15126244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant for a floating point value parsed from a string.
15136244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
15146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * A similar API, LLVMConstRealOfStringAndSize is also available. It
15156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * should be used if the input string's length is known.
15166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1517e62a8a353c3b21b551c00b9025800d3352e5349eGordon HenriksenLLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
15186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
15206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain a constant for a floating point value parsed from a string.
15216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1522e0a1bf64c9885df16bf596447d037f1c75f92637Erick TryzelaarLLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
1523e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar                                          unsigned SLen);
15246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
15266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the zero extended value for an integer constant value.
15276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
15286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::ConstantInt::getZExtValue()
15296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1530885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnerunsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
15316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
15336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the sign extended value for an integer constant value.
15346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
15356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::ConstantInt::getSExtValue()
15366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1537885dffc3914be3e33cffdd2496ed031f6d8acd08Chris Lattnerlong long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
1538e0a1bf64c9885df16bf596447d037f1c75f92637Erick Tryzelaar
15396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
15406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
15416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
15426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
154457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @defgroup LLVMCCoreValueConstantComposite Composite Constants
154557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
154657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Functions in this group operate on composite constants.
154757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
154857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @{
15496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
15506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
155257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Create a ConstantDataSequential and initialize it with a string.
15536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
155457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::ConstantDataArray::getString()
15556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
155657f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
155757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                                      unsigned Length, LLVMBool DontNullTerminate);
15586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
156057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Create a ConstantDataSequential with string content in the global context.
15616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
156257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * This is the same as LLVMConstStringInContext except it operates on the
156357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * global context.
15646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
156557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see LLVMConstStringInContext()
156657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::ConstantDataArray::getString()
15676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
156857f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMConstString(const char *Str, unsigned Length,
156957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                             LLVMBool DontNullTerminate);
15706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
157257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Create an anonymous ConstantStruct with the specified values.
157357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
157457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::ConstantStruct::getAnon()
15756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
157657f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
157757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                                      LLVMValueRef *ConstantVals,
157857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                                      unsigned Count, LLVMBool Packed);
15796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
158157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Create a ConstantStruct in the global Context.
15826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
158357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * This is the same as LLVMConstStructInContext except it operates on the
158457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * global Context.
158557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
158657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see LLVMConstStructInContext()
15876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
158857f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
158957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                             LLVMBool Packed);
15906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
159257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Create a ConstantArray from values.
159357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
159457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::ConstantArray::get()
15956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
159657f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
159757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                            LLVMValueRef *ConstantVals, unsigned Length);
15986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
15996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
160057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Create a non-anonymous ConstantStruct from values.
16016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
160257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::ConstantStruct::get()
16036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
160457f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
160557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                                  LLVMValueRef *ConstantVals,
160657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                                  unsigned Count);
160757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
160857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
160957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Create a ConstantVector from values.
161057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
161157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::ConstantVector::get()
161257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
161357f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
16146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
16156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
16166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
16176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
16186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
16196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
162057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
162157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
162257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Functions in this group correspond to APIs on llvm::ConstantExpr.
16236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
162457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::ConstantExpr.
16256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
16266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
16276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1628885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
162944a708f6f44102cbfe3cdc68322674f6a9848a5bErick TryzelaarLLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
16304647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
16314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
163219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
163319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
163456b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
16354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
16364647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16376e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
163819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
163956b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
164119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
164219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
164356b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
164519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
164619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
164756b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16506e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16584647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
16594647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
16614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                           LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
16654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
16664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                          LLVMValueRef *ConstantIndices, unsigned NumIndices);
16676e7ad958683f34bf6c014c88fef723e5a2d741beDan GohmanLLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
16686e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  LLVMValueRef *ConstantIndices,
16696e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman                                  unsigned NumIndices);
16704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
168259d3ae6cdc4316ad338cd848251f33a236ccb36cMatt ArsenaultLLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
168356b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
168456b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType);
168556b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
168656b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                    LLVMTypeRef ToType);
168756b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
168856b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                     LLVMTypeRef ToType);
168956b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
169056b22697d81cc4f520e3023e914f38081b9b6a0cErick Tryzelaar                                  LLVMTypeRef ToType);
169156b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
1692d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                              LLVMBool isSigned);
169356b22697d81cc4f520e3023e914f38081b9b6a0cErick TryzelaarLLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
16944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
16954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfTrue,
16964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                             LLVMValueRef ConstantIfFalse);
16974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
16984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                     LLVMValueRef IndexConstant);
16994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
17004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef ElementValueConstant,
17014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef IndexConstant);
17024647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenLLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
17034647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef VectorBConstant,
17044647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen                                    LLVMValueRef MaskConstant);
1705b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
1706b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned NumIdx);
1707b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
1708b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef ElementValueConstant,
1709b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  unsigned *IdxList, unsigned NumIdx);
1710d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
1711851ba39dab544ad986f150aec9573add9d978397Chris Lattner                                const char *AsmString, const char *Constraints,
1712d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                LLVMBool HasSideEffects, LLVMBool IsAlignStack);
1713c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarLLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
17144647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen
171557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
171657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @}
171757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
171857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
171957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
172057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @defgroup LLVMCCoreValueConstantGlobals Global Values
172157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
172257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * This group contains functions that operate on global values. Functions in
172357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * this group relate to functions in the llvm::GlobalValue class tree.
172457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
172557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::GlobalValue
172657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
172757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @{
172857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
172957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
1730dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
1731d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsDeclaration(LLVMValueRef Global);
17328b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
17338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
17348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenconst char *LLVMGetSection(LLVMValueRef Global);
17358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetSection(LLVMValueRef Global, const char *Section);
17368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
17378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
173836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesLLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
173936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesvoid LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
174036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesLLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
174136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesvoid LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
17427959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg
17437959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg/**
17447959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * @defgroup LLVMCCoreValueWithAlignment Values with alignment
17457959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg *
17467959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * Functions in this group only apply to values with alignment, i.e.
17477959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * global variables, load and store instructions.
17487959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg */
17497959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg
17507959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg/**
17517959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * Obtain the preferred alignment of the value.
175236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * @see llvm::AllocaInst::getAlignment()
17537959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * @see llvm::LoadInst::getAlignment()
17547959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * @see llvm::StoreInst::getAlignment()
17557959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * @see llvm::GlobalValue::getAlignment()
17567959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg */
17577959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborgunsigned LLVMGetAlignment(LLVMValueRef V);
17587959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg
17597959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg/**
17607959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * Set the preferred alignment of the value.
176136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines * @see llvm::AllocaInst::setAlignment()
17627959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * @see llvm::LoadInst::setAlignment()
17637959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * @see llvm::StoreInst::setAlignment()
17647959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg * @see llvm::GlobalValue::setAlignment()
17657959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg */
17667959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborgvoid LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
17677959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg
17687959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg/**
17697959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg  * @}
17707959f209ba8e63ffaf7335842deddda4ca0480e7Anders Waldenborg  */
17718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
177257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
177357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
177457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
177557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * This group contains functions that operate on global variable values.
177657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
177757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::GlobalVariable
177857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
177957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @{
178057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
17818b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
17828e130b1d0d53346e05d0a1161a52c6d62de163c4Erick TryzelaarLLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
17838e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                         const char *Name,
17848e130b1d0d53346e05d0a1161a52c6d62de163c4Erick Tryzelaar                                         unsigned AddressSpace);
17856d6203dff3560a2cc3ac8ec620ac3b105b0c7cc7Gordon HenriksenLLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
17864733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
17874733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
17884733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
17894733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
17908b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMDeleteGlobal(LLVMValueRef GlobalVar);
17918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenLLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
17928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenvoid LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
1793d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
1794d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
1795d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
1796d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
17976334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans WennborgLLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
17986334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborgvoid LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
17996334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans WennborgLLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
18006334e1351f8f7bb58b3399d7c001eed0a32e1c64Hans Wennborgvoid LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
18018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
180257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
180357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @}
180457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
180557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
180657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
180757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
180857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
180957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * This group contains function that operate on global alias values.
181057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
181157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @see llvm::GlobalAlias
181257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
181357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @{
181457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
1815851ba39dab544ad986f150aec9573add9d978397Chris LattnerLLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
1816851ba39dab544ad986f150aec9573add9d978397Chris Lattner                          const char *Name);
1817851ba39dab544ad986f150aec9573add9d978397Chris Lattner
18186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
18196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
18206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
18216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
18226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
18236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValueFunction Function values
18246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Functions in this group operate on LLVMValueRef instances that
18266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * correspond to llvm::Function instances.
18276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function
18296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
18316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
18326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
18336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
18346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Remove a function from its containing module and deletes it.
18356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::eraseFromParent()
18376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
183846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteFunction(LLVMValueRef Fn);
18396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
18406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
18416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the ID number from a function instance.
18426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::getIntrinsicID()
18446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
184546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
18466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
18476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
18486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the calling function of a function.
18496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The returned value corresponds to the LLVMCallConv enumeration.
18516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::getCallingConv()
18536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
185446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
18556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
18566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
18576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set the calling convention of a function.
18586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::setCallingConv()
18606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @param Fn Function to operate on
18626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @param CC LLVMCallConv to set calling convention to
18636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
186446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
18656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
18666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
18676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the name of the garbage collector to use during code
18686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * generation.
18696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::getGC()
18716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
18725eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenconst char *LLVMGetGC(LLVMValueRef Fn);
18736244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
18746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
18756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Define the garbage collector to use during code generation.
18766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::setGC()
18786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
18795eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksenvoid LLVMSetGC(LLVMValueRef Fn, const char *Name);
18806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
18816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
18826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Add an attribute to a function.
18836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::addAttribute()
18856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1886e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMAddFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
18876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
18886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
188968ee1520ce777871353e33fcc63725439e611f4eTom Stellard * Add a target-dependent attribute to a fuction
189068ee1520ce777871353e33fcc63725439e611f4eTom Stellard * @see llvm::AttrBuilder::addAttribute()
189168ee1520ce777871353e33fcc63725439e611f4eTom Stellard */
189268ee1520ce777871353e33fcc63725439e611f4eTom Stellardvoid LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
189368ee1520ce777871353e33fcc63725439e611f4eTom Stellard                                        const char *V);
189468ee1520ce777871353e33fcc63725439e611f4eTom Stellard
189568ee1520ce777871353e33fcc63725439e611f4eTom Stellard/**
18966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain an attribute from a function.
18976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
18986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::getAttributes()
18996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1900885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetFunctionAttr(LLVMValueRef Fn);
19016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Remove an attribute from a function.
19046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1905e149e9960ba0726f4b084763f7ef95afa12d9a88Duncan Sandsvoid LLVMRemoveFunctionAttr(LLVMValueRef Fn, LLVMAttribute PA);
190646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
19076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
19096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Functions in this group relate to arguments/parameters on functions.
19116244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19126244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Functions in this group expect LLVMValueRef instances that correspond
19136244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * to llvm::Function instances.
19146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
19166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
19176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the number of parameters in a function.
19206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::arg_size()
19226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1923dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenunsigned LLVMCountParams(LLVMValueRef Fn);
19246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the parameters in a function.
19276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The takes a pointer to a pre-allocated array of LLVMValueRef that is
19296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * at least LLVMCountParams() long. This array will be filled with
19306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMValueRef instances which correspond to the parameters the
19316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * function receives. Each LLVMValueRef corresponds to a llvm::Argument
19326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * instance.
19336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::arg_begin()
19356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1936dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksenvoid LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
19376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the parameter at the specified index.
19406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Parameters are indexed from 0.
19426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::arg_begin()
19446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1945dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
19466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the function to which this argument belongs.
19496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
195013230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * Unlike other functions in this group, this one takes an LLVMValueRef
19516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * that corresponds to a llvm::Attribute.
19526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The returned LLVMValueRef is the llvm::Function to which this
19546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * argument belongs.
19556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
1956dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
19576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the first parameter to a function.
19606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::arg_begin()
19626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
19634733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
19646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the last parameter to a function.
19676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::arg_end()
19696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
19704733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
19716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19736244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the next parameter to a function.
19746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
197513230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
19766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * actually a wrapped iterator) and obtains the next parameter from the
19776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * underlying iterator.
19786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
19794733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
19806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the previous parameter to a function.
19836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This is the opposite of LLVMGetNextParam().
19856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
19864733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
19876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Add an attribute to a function argument.
19906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Argument::addAttr()
19926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
19930598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMAddAttribute(LLVMValueRef Arg, LLVMAttribute PA);
19946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
19956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
19966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Remove an attribute from a function argument.
19976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
19986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Argument::removeAttr()
19996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
20000598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMRemoveAttribute(LLVMValueRef Arg, LLVMAttribute PA);
20016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
20026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
20036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Get an attribute from a function argument.
20046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2005885dffc3914be3e33cffdd2496ed031f6d8acd08Chris LattnerLLVMAttribute LLVMGetAttribute(LLVMValueRef Arg);
20066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
20076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
20086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set the alignment for a function parameter.
20096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
20106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Argument::addAttr()
2011702cc91aa1bd41540e8674921ae7ac89a4ff061fBill Wendling * @see llvm::AttrBuilder::addAlignmentAttr()
20126244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2013e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksenvoid LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align);
2014dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
20156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
20166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
20176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
20186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
20196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
20206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
20216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
20226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
20236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
202457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @}
202557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
202657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
202757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
202857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @}
202957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
203057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
203157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
203257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @defgroup LLVMCCoreValueMetadata Metadata
203357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
203457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @{
203557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
203657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
203757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
203857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Obtain a MDString value from a context.
203957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
204057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * The returned instance corresponds to the llvm::MDString class.
204157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
204257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * The instance is specified by string data of a specified length. The
204357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * string content is copied, so the backing memory can be freed after
204457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * this function returns.
204557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
204657f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
204757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                                   unsigned SLen);
204857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
204957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
205057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Obtain a MDString value from the global context.
205157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
205257f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
205357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
205457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
205557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Obtain a MDNode value from a context.
205657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
205757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * The returned value corresponds to the llvm::MDNode class.
205857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
205957f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
206057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc                                 unsigned Count);
206157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
206257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
206357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Obtain a MDNode value from the global context.
206457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
206557f33c86c76e149f5be266e678f408133e5d88d9Gregory SzorcLLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
206657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
206757f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
206857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * Obtain the underlying string from a MDString value.
206957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc *
207057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @param V Instance to obtain string from.
207157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @param Len Memory address which will hold length of returned string.
207257f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @return String data in MDString.
207357f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
207457f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorcconst char  *LLVMGetMDString(LLVMValueRef V, unsigned* Len);
207557f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
207657f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
20774caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * Obtain the number of operands from an MDNode value.
20784caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands *
20794caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * @param V MDNode to get number of operands from.
20804caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * @return Number of operands of the MDNode.
20814caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands */
20824caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sandsunsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
20834caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands
20844caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands/**
20854caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * Obtain the given MDNode's operands.
20864caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands *
20874caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * The passed LLVMValueRef pointer should point to enough memory to hold all of
20884caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
20894caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
20904caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * MDNode's operands.
20914caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands *
20924caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * @param V MDNode to get the operands from.
20934caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands * @param Dest Destination array for operands.
20944caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands */
20954caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sandsvoid LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
20964caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands
20974caf5281bf9cbdbc13758a6f2b965b0e9ef233d3Duncan Sands/**
209857f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc * @}
209957f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc */
210057f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc
210157f33c86c76e149f5be266e678f408133e5d88d9Gregory Szorc/**
21026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValueBasicBlock Basic Block
21036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * A basic block represents a single entry single exit section of code.
21056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Basic blocks contain a list of instructions which form the body of
21066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * the block.
21076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Basic blocks belong to functions. They have the type of label.
21096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Basic blocks are themselves values. However, the C API models them as
21116244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMBasicBlockRef.
21126244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21136244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock
21146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
21166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
21176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Convert a basic block instance to a value type.
21206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
21214733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
21226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
212413230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * Determine whether an LLVMValueRef is itself a basic block.
21256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2126d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
21276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
212913230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
21306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
213146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
21326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the function to which a basic block belongs.
21356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::getParent()
21376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
21384733be38930ae81716bba9ae75a8281bcb180634Gordon HenriksenLLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
21396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the terminator instruction for a basic block.
21426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * If the basic block does not have a terminator (it is not well-formed
21446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * if it doesn't), then NULL is returned.
21456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The returned LLVMValueRef corresponds to a llvm::TerminatorInst.
21476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::getTerminator()
21496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
21507ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate BegemanLLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
21516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the number of basic blocks in a function.
21546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @param Fn Function value to operate on.
21566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
215746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenunsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
21586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21596244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain all of the basic blocks in a function.
21616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This operates on a function value. The BasicBlocks parameter is a
21636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
21646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMCountBasicBlocks() in length. This array is populated with
21656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMBasicBlockRef instances.
21666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
216746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
21686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the first basic block in a function.
21716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The returned basic block can be used as an iterator. You will likely
21736244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * eventually call into LLVMGetNextBasicBlock() with it.
21746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::begin()
21766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
217734000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
21786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the last basic block in a function.
21816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
21826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::end()
21836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
218434000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
21856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Advance a basic block iterator.
21886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
218934000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
21906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Go backwards in a basic block iterator.
21936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
219434000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
21956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
21966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
21976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the basic block that corresponds to the entry point of a
21986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * function.
21996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Function::getEntryBlock()
22016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
220246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
220322c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
22046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Append a basic block to the end of a function.
22066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::Create()
22086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
220922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
221022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMValueRef Fn,
221122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name);
22126244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
22136244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Append a basic block to the end of a function using the global
22156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * context.
22166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::Create()
22186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
22196244b518880842f2c15200ee041e06799e4cc779Gregory SzorcLLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
22206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
22216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Insert a basic block in a function before another basic block.
22236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The function to add to is determined by the function of the
22256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * passed basic block.
22266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::Create()
22286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
222922c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
223022c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                LLVMBasicBlockRef BB,
223122c3f1877d22972adb787c553192edb426874594Erick Tryzelaar                                                const char *Name);
223222c3f1877d22972adb787c553192edb426874594Erick Tryzelaar
22336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Insert a basic block in a function using the global context.
22356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::Create()
22376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
223846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
223946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                       const char *Name);
22406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
22416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Remove a basic block from a function and delete it.
22436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This deletes the basic block from its containing function and deletes
22456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * the basic block itself.
22466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::eraseFromParent()
22486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
224946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
22506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
22516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Remove a basic block from a function.
22536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This deletes the basic block from its containing function but keep
22556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * the basic block alive.
22566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::removeFromParent()
22586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
22597ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begemanvoid LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
226046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
22616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Move a basic block to before another one.
22636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::moveBefore()
22656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2266837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sandsvoid LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
22676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
22686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Move a basic block to after another one.
22706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::BasicBlock::moveAfter()
22726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2273837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sandsvoid LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
2274837a0c3b052cdbfd7b212d9e9f570f7aaf864b44Duncan Sands
22756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the first instruction in a basic block.
22776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The returned LLVMValueRef corresponds to a llvm::Instruction
22796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * instance.
22806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
228134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
22826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
22836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the last instruction in a basic block.
22856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
228613230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * The returned LLVMValueRef corresponds to an LLVM:Instruction.
22876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
228834000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
22897ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
22906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
22926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
22936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
22946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
22956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValueInstruction Instructions
22966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
22976244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Functions in this group relate to the inspection and manipulation of
22986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * individual instructions.
22996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * In the C++ API, an instruction is modeled by llvm::Instruction. This
23016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * class has a large number of descendents. llvm::Instruction is a
23026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * llvm::Value and in the C API, instructions are modeled by
23036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * LLVMValueRef.
23046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This group also contains sub-groups which operate on specific
23066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * llvm::Instruction types, e.g. llvm::CallInst.
23076244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
23096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
23106244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23116244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23126244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Determine whether an instruction has any metadata attached.
23136244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
23146244b518880842f2c15200ee041e06799e4cc779Gregory Szorcint LLVMHasMetadata(LLVMValueRef Val);
23156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Return metadata associated with an instruction value.
23186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
23196244b518880842f2c15200ee041e06799e4cc779Gregory SzorcLLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
23206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set metadata associated with an instruction value.
23236244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
23246244b518880842f2c15200ee041e06799e4cc779Gregory Szorcvoid LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
23256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the basic block to which an instruction belongs.
23286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Instruction::getParent()
23306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
23317ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate BegemanLLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
23326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the instruction that occurs after the one specified.
23356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The next instruction will be from the same basic block.
23376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * If this is the last instruction in a basic block, NULL will be
23396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * returned.
23406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
234134000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
23426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
2344d9b0b025612992a0b724eeca8bdf10b1d7a5c355Benjamin Kramer * Obtain the instruction that occurred before this one.
23456244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23466244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * If the instruction is the first instruction in a basic block, NULL
23476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * will be returned.
23486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
234934000979662d9ae9b22e4d05272b77d944871d1cGordon HenriksenLLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
23506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Remove and delete an instruction.
23536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * The instruction specified is removed from its containing building
23556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * block and then deleted.
23566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Instruction::eraseFromParent()
23586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
23590e6a24d92ab4661bb39f838ac390ccb17f649cb5Devang Patelvoid LLVMInstructionEraseFromParent(LLVMValueRef Inst);
23606244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the code opcode for an individual instruction.
23636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::Instruction::getOpCode()
23656244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
23666563c879964c3bcf5c77d40da8d4c807adf605aaTorok EdwinLLVMOpcode   LLVMGetInstructionOpcode(LLVMValueRef Inst);
23676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23686244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the predicate of an instruction.
23706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This is only valid for instructions that correspond to llvm::ICmpInst
23726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
23736244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::ICmpInst::getPredicate()
23756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
23764917ec9ec775d7bc7fbc3362b4c576c32b7617f4Torok EdwinLLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
2377dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen
23786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
23806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Functions in this group apply to instructions that refer to call
23826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * sites and invocations. These correspond to C++ types in the
23836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * llvm::CallInst class tree.
23846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
23866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
23876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
23896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set the calling convention for a call instruction.
23906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
23926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * llvm::InvokeInst.
23936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
23946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::CallInst::setCallingConv()
23956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::InvokeInst::setCallingConv()
23966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2397cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenvoid LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
23986244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
23996244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the calling convention for a call instruction.
24016244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24026244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This is the opposite of LLVMSetInstructionCallConv(). Reads its
24036244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * usage.
24046244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24056244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see LLVMSetInstructionCallConv()
24066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2407cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksenunsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
24086244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24096244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24100598866c052147c31b808391f58434ce3dbfb838Devang Patelvoid LLVMAddInstrAttribute(LLVMValueRef Instr, unsigned index, LLVMAttribute);
24116244b518880842f2c15200ee041e06799e4cc779Gregory Szorcvoid LLVMRemoveInstrAttribute(LLVMValueRef Instr, unsigned index,
24120598866c052147c31b808391f58434ce3dbfb838Devang Patel                              LLVMAttribute);
24136244b518880842f2c15200ee041e06799e4cc779Gregory Szorcvoid LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
2414e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen                                unsigned align);
2415cc0928ff22d9f3e8f2930874f6727db8c700ec35Gordon Henriksen
24166244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24176244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain whether a call instruction is a tail call.
24186244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24196244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This only works on llvm::CallInst instructions.
24206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24216244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::CallInst::isTailCall()
24226244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2423d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
24246244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24256244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Set whether a call instruction is a tail call.
24276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This only works on llvm::CallInst instructions.
24296244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::CallInst::setTailCall()
24316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2432d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattnervoid LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
243307cabf6102800aa701bc4d1bd282fafb63b8a416Gordon Henriksen
24346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24356244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
24366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
24376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24386244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the default destination basic block of a switch instruction.
24406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * This only works on llvm::SwitchInst instructions.
24426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @see llvm::SwitchInst::getDefaultDest()
24446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
24457ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate BegemanLLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
24467ced7763cab4fc22b8198f39fbbb6b7264cd1628Nate Begeman
24476244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
24496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Functions in this group only apply to instructions that map to
24516244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * llvm::PHINode instances.
24526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
24546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
24556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24576244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Add an incoming value to the end of a PHI list.
24586244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
24592618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenvoid LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
24602618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksen                     LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
24616244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24626244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24636244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Obtain the number of incoming basic blocks to a PHI node.
24646244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
24652618a6c1122d5d2007787fb56156be44b21ab32aGordon Henriksenunsigned LLVMCountIncoming(LLVMValueRef PhiNode);
24666244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24676244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
246813230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * Obtain an incoming value to a PHI node as an LLVMValueRef.
24696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
24702618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
24716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
247313230064236e0cb916cefddcd75bd55d9ce15c41Daniel Dunbar * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
24746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
24752618a6c1122d5d2007787fb56156be44b21ab32aGordon HenriksenLLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
247646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
24776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
24796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
24806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
24836244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
24846244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
24856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24866244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
24876244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
248846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
24896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
24906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
24916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * An instruction builder represents a point within a basic block and is
24936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * the exclusive means of building instructions using the C interface.
24946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
24956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
249646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen */
249746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
249822c3f1877d22972adb787c553192edb426874594Erick TryzelaarLLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
249916c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMBuilderRef LLVMCreateBuilder(void);
250034000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksenvoid LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
250134000979662d9ae9b22e4d05272b77d944871d1cGordon Henriksen                         LLVMValueRef Instr);
250246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
250346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
2504dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon HenriksenLLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
2505851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMClearInsertionPosition(LLVMBuilderRef Builder);
2506851ba39dab544ad986f150aec9573add9d978397Chris Lattnervoid LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
25075c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaarvoid LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
25085c1c2082968ff4c36063ed09c4eea772eb808b6aErick Tryzelaar                                   const char *Name);
250946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksenvoid LLVMDisposeBuilder(LLVMBuilderRef Builder);
251046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
251146c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar/* Metadata */
251246c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarvoid LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
251346c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick TryzelaarLLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
251446c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaarvoid LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
251546c80e0c5653e11ada7cebcb46f9a8f7df758e41Erick Tryzelaar
251646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* Terminators */
251746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
251846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
251944a708f6f44102cbfe3cdc68322674f6a9848a5bErick TryzelaarLLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
2520f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   unsigned N);
252146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
252246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
252346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
252446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
252546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Else, unsigned NumCases);
2526c59286bff1cca8c4fa15f390c9002db94117614eErick TryzelaarLLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
2527c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar                                 unsigned NumDests);
252846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
252946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef *Args, unsigned NumArgs,
253046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
253146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name);
2532613d13beb03bb56a17e6b3262c5e8e539a7e9db8Benjamin KramerLLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
2533613d13beb03bb56a17e6b3262c5e8e539a7e9db8Benjamin Kramer                                 LLVMValueRef PersFn, unsigned NumClauses,
2534613d13beb03bb56a17e6b3262c5e8e539a7e9db8Benjamin Kramer                                 const char *Name);
2535dccc03b2423fe65efb5963ae816b99c24fc53374Bill WendlingLLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
253646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
253746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
2538ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen/* Add a case to the switch instruction */
2539ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksenvoid LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
2540ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen                 LLVMBasicBlockRef Dest);
2541ab477ccde9382b58d3883eeb574ba09469d4cde8Gordon Henriksen
2542c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar/* Add a destination to the indirectbr instruction */
2543c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaarvoid LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
2544c59286bff1cca8c4fa15f390c9002db94117614eErick Tryzelaar
2545e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling/* Add a catch or filter clause to the landingpad instruction */
2546e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendlingvoid LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
2547e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling
2548e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling/* Set the 'cleanup' flag in the landingpad instruction */
2549e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendlingvoid LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
2550e6e8826870bee3facb04f950f0bd725f8a88623dBill Wendling
255146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* Arithmetic */
255246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
255346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name);
2554f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2555f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             const char *Name);
255619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
255719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name);
2558f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2559f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                           const char *Name);
256046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
256146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name);
256219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
256319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name);
256419f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
256519f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name);
2566f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2567f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                           const char *Name);
256846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
256946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name);
257019f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
257119f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name);
257219f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
257319f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name);
2574f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2575f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                           const char *Name);
257646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
257746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
257846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
257946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
2580f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
2581f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                const char *Name);
258246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
258346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
258446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
258546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
258646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
258746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
258846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
258946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
259046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
259146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
259246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
259346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
259446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
259546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
259646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
259746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name);
259846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
259946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name);
260046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
260146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name);
2602abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick TryzelaarLLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
2603abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                            LLVMValueRef LHS, LLVMValueRef RHS,
2604abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                            const char *Name);
260546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
260619f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
260719f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name);
260819f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick TryzelaarLLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
260919f047f5f6c44d1cd5681f9314b3ff5e7bae122dErick Tryzelaar                             const char *Name);
2610d0c5a292aaf4d9d69c77fe059bfcbab0496d5f2cDan GohmanLLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
261146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
261246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
261346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* Memory */
261446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
261546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
261646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name);
261746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
261846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
261946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                  LLVMValueRef Val, const char *Name);
262046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
262146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
262246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
262346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
262446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
262546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          LLVMValueRef *Indices, unsigned NumIndices,
262646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                          const char *Name);
2627f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2628f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMValueRef *Indices, unsigned NumIndices,
2629f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  const char *Name);
2630f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
2631f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                unsigned Idx, const char *Name);
2632f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
2633f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                   const char *Name);
2634f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
2635f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                      const char *Name);
2636eabe3ad57d824c2b07016352fd97ce85777b6f9dChris LattnerLLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
2637eabe3ad57d824c2b07016352fd97ce85777b6f9dChris Lattnervoid LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
263846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
263946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* Casts */
264046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
264146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name);
264246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
264346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name);
264446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
264546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMTypeRef DestTy, const char *Name);
264646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
264746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name);
264846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
264946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name);
265046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
265146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name);
265246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
265346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMTypeRef DestTy, const char *Name);
265446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
265546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name);
265646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
265746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            LLVMTypeRef DestTy, const char *Name);
265846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
265946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name);
266046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
266146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                               LLVMTypeRef DestTy, const char *Name);
266246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
266346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                              LLVMTypeRef DestTy, const char *Name);
266459d3ae6cdc4316ad338cd848251f33a236ccb36cMatt ArsenaultLLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
266559d3ae6cdc4316ad338cd848251f33a236ccb36cMatt Arsenault                                    LLVMTypeRef DestTy, const char *Name);
2666f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2667f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name);
2668f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2669f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                    LLVMTypeRef DestTy, const char *Name);
2670f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
2671f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                     LLVMTypeRef DestTy, const char *Name);
2672abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick TryzelaarLLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
2673abbcc5ee6fa39daadadaa0b583579b3e17f32fd7Erick Tryzelaar                           LLVMTypeRef DestTy, const char *Name);
2674f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
2675f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                  LLVMTypeRef DestTy, const char *Name);
2676e8e01b600cd377504e5288a31152b1db4b8477b1Duncan SandsLLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
2677f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                              LLVMTypeRef DestTy, const char *Name);
2678f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
2679f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             LLVMTypeRef DestTy, const char *Name);
268046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
268146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* Comparisons */
268246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
268346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
268446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
268546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
268646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef LHS, LLVMValueRef RHS,
268746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
268846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
268946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen/* Miscellaneous instructions */
269046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
269146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
269246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           LLVMValueRef *Args, unsigned NumArgs,
269346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                           const char *Name);
269446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
269546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             LLVMValueRef Then, LLVMValueRef Else,
269646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                             const char *Name);
269746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
269846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                            const char *Name);
269946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
270046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                     LLVMValueRef Index, const char *Name);
270146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
270246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef EltVal, LLVMValueRef Index,
270346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name);
270446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon HenriksenLLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
270546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    LLVMValueRef V2, LLVMValueRef Mask,
270646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen                                    const char *Name);
2707b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
2708b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                   unsigned Index, const char *Name);
2709b593117b44a74c72bc784080bb402576b3181d94Dan GohmanLLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
2710b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  LLVMValueRef EltVal, unsigned Index,
2711b593117b44a74c72bc784080bb402576b3181d94Dan Gohman                                  const char *Name);
27128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen
2713f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
2714f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                             const char *Name);
2715f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
2716f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                                const char *Name);
2717f72596c04a06458c6152a51c9678690a34d59ab8Erick TryzelaarLLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
2718f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar                              LLVMValueRef RHS, const char *Name);
271936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesLLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
272036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                            LLVMBool singleThread, const char *Name);
272136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesLLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
2722e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                LLVMValueRef PTR, LLVMValueRef Val,
2723e21c3137e1dfcd9644d3870a0a4528374375271fNAKAMURA Takumi                                LLVMAtomicOrdering ordering,
27248effd8dc98a793181b086dbfde31cdcbd2047200Carlo Kok                                LLVMBool singleThread);
2725f72596c04a06458c6152a51c9678690a34d59ab8Erick Tryzelaar
27266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27276244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
27286244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2729da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
27306244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreModuleProvider Module Providers
27326244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
27336244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
27346244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
27351ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
27366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27376244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Changes the type of M so it can be passed to FunctionPassManagers and the
2738f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskin * JIT.  They take ModuleProviders for historical reasons.
27391ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen */
27401ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMModuleProviderRef
27411ae6135fa37eb061499d079b9b33dc82dcc1283fGordon HenriksenLLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
27421ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
27436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27446244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * Destroys the module M.
27451ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen */
2746f0356fe140af1a30587b9a86bcfb1b2c51b8ce20Jeffrey Yasskinvoid LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
27471ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen
27486244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27496244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
27506244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2751da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
27526244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27536244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
27546244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
27556244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
27566244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2757da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
2758d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
2759d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                                  LLVMMemoryBufferRef *OutMemBuf,
2760d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                                  char **OutMessage);
2761d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
2762d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris Lattner                                         char **OutMessage);
276331cfc707058ad3f470924cdb3c460c8f50ee76c3Bill WendlingLLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
276431cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling                                                          size_t InputDataLength,
276531cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling                                                          const char *BufferName,
2766296756a2b542f99dff470a70040e97469530ee3cBill Wendling                                                          LLVMBool RequiresNullTerminator);
276731cfc707058ad3f470924cdb3c460c8f50ee76c3Bill WendlingLLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
276831cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling                                                              size_t InputDataLength,
276931cfc707058ad3f470924cdb3c460c8f50ee76c3Bill Wendling                                                              const char *BufferName);
27704bfeee1302eaeb6cf8f4248e3bb4fdf31a11dce1Tom Stellardconst char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
2771edc93b356da17d404467d47456bb27b99c775e39Tom Stellardsize_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
2772da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksenvoid LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
2773da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen
27746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27756244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
27766244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
27776244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
27786244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27796244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCorePassRegistry Pass Registry
27806244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
27816244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
27826244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
27831a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson
27841a3d23362168ae6d8e07efd547a92cc36738a789Owen Anderson/** Return the global pass registry, for use with initialization functions.
27856244b518880842f2c15200ee041e06799e4cc779Gregory Szorc    @see llvm::PassRegistry::getPassRegistry */
27861a3d23362168ae6d8e07efd547a92cc36738a789Owen AndersonLLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
2787d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
27886244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27896244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
27906244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
27916244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
27926244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
27936244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @defgroup LLVMCCorePassManagers Pass Managers
27946244b518880842f2c15200ee041e06799e4cc779Gregory Szorc *
27956244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @{
27966244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2797d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2798d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/** Constructs a new whole-module pass pipeline. This type of pipeline is
2799d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen    suitable for link-time optimization and whole-module transformations.
28006244b518880842f2c15200ee041e06799e4cc779Gregory Szorc    @see llvm::PassManager::PassManager */
280116c1f44d91211a225497062ea508d58fd25085a9Gordon HenriksenLLVMPassManagerRef LLVMCreatePassManager(void);
2802d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2803d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/** Constructs a new function-by-function pass pipeline over the module
2804d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen    provider. It does not take ownership of the module provider. This type of
2805d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen    pipeline is suitable for code generation and JIT compilation tasks.
28066244b518880842f2c15200ee041e06799e4cc779Gregory Szorc    @see llvm::FunctionPassManager::FunctionPassManager */
2807df7df075b723e926e51555bf5aff6e231279a479Erick TryzelaarLLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
2808df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar
2809df7df075b723e926e51555bf5aff6e231279a479Erick Tryzelaar/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
2810d78c0f5a7255e4347cbd82f7435c51401096652cGordon HenriksenLLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
2811d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2812d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/** Initializes, executes on the provided module, and finalizes all of the
2813d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen    passes scheduled in the pass manager. Returns 1 if any of the passes
28146244b518880842f2c15200ee041e06799e4cc779Gregory Szorc    modified the module, 0 otherwise.
28156244b518880842f2c15200ee041e06799e4cc779Gregory Szorc    @see llvm::PassManager::run(Module&) */
2816d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
2817d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2818d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/** Initializes all of the function passes scheduled in the function pass
2819d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen    manager. Returns 1 if any of the passes modified the module, 0 otherwise.
28206244b518880842f2c15200ee041e06799e4cc779Gregory Szorc    @see llvm::FunctionPassManager::doInitialization */
2821d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
2822d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2823d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/** Executes all of the function passes scheduled in the function pass manager
2824d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen    on the provided function. Returns 1 if any of the passes modified the
2825d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen    function, false otherwise.
28266244b518880842f2c15200ee041e06799e4cc779Gregory Szorc    @see llvm::FunctionPassManager::run(Function&) */
2827d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
2828d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2829d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/** Finalizes all of the function passes scheduled in in the function pass
2830d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen    manager. Returns 1 if any of the passes modified the module, 0 otherwise.
28316244b518880842f2c15200ee041e06799e4cc779Gregory Szorc    @see llvm::FunctionPassManager::doFinalization */
2832d686c8e73f74e37ab5f647b65a12051ee6cbad16Chris LattnerLLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
2833d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
2834d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen/** Frees the memory of a pass pipeline. For function pipelines, does not free
2835d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen    the module provider.
28366244b518880842f2c15200ee041e06799e4cc779Gregory Szorc    @see llvm::PassManagerBase::~PassManagerBase. */
2837d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksenvoid LLVMDisposePassManager(LLVMPassManagerRef PM);
2838d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
28396244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
28406244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
28416244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
28426244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
28436244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
2844906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands * @defgroup LLVMCCoreThreading Threading
2845906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands *
2846906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands * Handle the structures needed to make LLVM safe for multithreading.
2847906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands *
2848906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands * @{
2849906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands */
2850906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
2851cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines/** Deprecated: Multi-threading can only be enabled/disabled with the compile
2852cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    time define LLVM_ENABLE_THREADS.  This function always returns
2853cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    LLVMIsMultithreaded(). */
2854f39fe46062d2093fc3d7c092bc8c4561b744164cBenjamin KramerLLVMBool LLVMStartMultithreaded(void);
2855906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
2856cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines/** Deprecated: Multi-threading can only be enabled/disabled with the compile
2857cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines    time define LLVM_ENABLE_THREADS. */
2858f39fe46062d2093fc3d7c092bc8c4561b744164cBenjamin Kramervoid LLVMStopMultithreaded(void);
2859906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
2860906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands/** Check whether LLVM is executing in thread-safe mode or not.
2861906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands    @see llvm::llvm_is_multithreaded */
2862f39fe46062d2093fc3d7c092bc8c4561b744164cBenjamin KramerLLVMBool LLVMIsMultithreaded(void);
2863906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
2864906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands/**
2865906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands * @}
2866906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands */
2867906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands
2868906727dcfeb359acec4caca3ba8c756c4308ff6bDuncan Sands/**
28696244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
28706244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
28716244b518880842f2c15200ee041e06799e4cc779Gregory Szorc
28726244b518880842f2c15200ee041e06799e4cc779Gregory Szorc/**
28736244b518880842f2c15200ee041e06799e4cc779Gregory Szorc * @}
28746244b518880842f2c15200ee041e06799e4cc779Gregory Szorc */
2875d78c0f5a7255e4347cbd82f7435c51401096652cGordon Henriksen
28768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#ifdef __cplusplus
28778b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}
28789313da5a90838c7242101dae250e86dcfc708e6aEvan Cheng#endif /* !defined(__cplusplus) */
2879acd96191cd8d85f376ec0baafdc4f21b3042f677Gordon Henriksen
28809313da5a90838c7242101dae250e86dcfc708e6aEvan Cheng#endif /* !defined(LLVM_C_CORE_H) */
2881