12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- /*===-- llvm-c/Core.h - Core Library C Interface ------------------*- C -*-===*\
- |* *|
- |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *|
- |* Exceptions. *|
- |* See https://llvm.org/LICENSE.txt for license information. *|
- |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *|
- |* *|
- |*===----------------------------------------------------------------------===*|
- |* *|
- |* This header declares the C interface to libLLVMCore.a, which implements *|
- |* the LLVM intermediate representation. *|
- |* *|
- \*===----------------------------------------------------------------------===*/
- #ifndef LLVM_C_CORE_H
- #define LLVM_C_CORE_H
- #include "llvm-c/Deprecated.h"
- #include "llvm-c/ErrorHandling.h"
- #include "llvm-c/ExternC.h"
- #include "llvm-c/Types.h"
- LLVM_C_EXTERN_C_BEGIN
- /**
- * @defgroup LLVMC LLVM-C: C interface to LLVM
- *
- * This module exposes parts of the LLVM library as a C API.
- *
- * @{
- */
- /**
- * @defgroup LLVMCTransforms Transforms
- */
- /**
- * @defgroup LLVMCCore Core
- *
- * This modules provide an interface to libLLVMCore, which implements
- * the LLVM intermediate representation as well as other related types
- * and utilities.
- *
- * Many exotic languages can interoperate with C code but have a harder time
- * with C++ due to name mangling. So in addition to C, this interface enables
- * tools written in such languages.
- *
- * @{
- */
- /**
- * @defgroup LLVMCCoreTypes Types and Enumerations
- *
- * @{
- */
- /// External users depend on the following values being stable. It is not safe
- /// to reorder them.
- typedef enum {
- /* Terminator Instructions */
- LLVMRet = 1,
- LLVMBr = 2,
- LLVMSwitch = 3,
- LLVMIndirectBr = 4,
- LLVMInvoke = 5,
- /* removed 6 due to API changes */
- LLVMUnreachable = 7,
- LLVMCallBr = 67,
- /* Standard Unary Operators */
- LLVMFNeg = 66,
- /* Standard Binary Operators */
- LLVMAdd = 8,
- LLVMFAdd = 9,
- LLVMSub = 10,
- LLVMFSub = 11,
- LLVMMul = 12,
- LLVMFMul = 13,
- LLVMUDiv = 14,
- LLVMSDiv = 15,
- LLVMFDiv = 16,
- LLVMURem = 17,
- LLVMSRem = 18,
- LLVMFRem = 19,
- /* Logical Operators */
- LLVMShl = 20,
- LLVMLShr = 21,
- LLVMAShr = 22,
- LLVMAnd = 23,
- LLVMOr = 24,
- LLVMXor = 25,
- /* Memory Operators */
- LLVMAlloca = 26,
- LLVMLoad = 27,
- LLVMStore = 28,
- LLVMGetElementPtr = 29,
- /* Cast Operators */
- LLVMTrunc = 30,
- LLVMZExt = 31,
- LLVMSExt = 32,
- LLVMFPToUI = 33,
- LLVMFPToSI = 34,
- LLVMUIToFP = 35,
- LLVMSIToFP = 36,
- LLVMFPTrunc = 37,
- LLVMFPExt = 38,
- LLVMPtrToInt = 39,
- LLVMIntToPtr = 40,
- LLVMBitCast = 41,
- LLVMAddrSpaceCast = 60,
- /* Other Operators */
- LLVMICmp = 42,
- LLVMFCmp = 43,
- LLVMPHI = 44,
- LLVMCall = 45,
- LLVMSelect = 46,
- LLVMUserOp1 = 47,
- LLVMUserOp2 = 48,
- LLVMVAArg = 49,
- LLVMExtractElement = 50,
- LLVMInsertElement = 51,
- LLVMShuffleVector = 52,
- LLVMExtractValue = 53,
- LLVMInsertValue = 54,
- LLVMFreeze = 68,
- /* Atomic operators */
- LLVMFence = 55,
- LLVMAtomicCmpXchg = 56,
- LLVMAtomicRMW = 57,
- /* Exception Handling Operators */
- LLVMResume = 58,
- LLVMLandingPad = 59,
- LLVMCleanupRet = 61,
- LLVMCatchRet = 62,
- LLVMCatchPad = 63,
- LLVMCleanupPad = 64,
- LLVMCatchSwitch = 65
- } LLVMOpcode;
- typedef enum {
- LLVMVoidTypeKind, /**< type with no size */
- LLVMHalfTypeKind, /**< 16 bit floating point type */
- LLVMFloatTypeKind, /**< 32 bit floating point type */
- LLVMDoubleTypeKind, /**< 64 bit floating point type */
- LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
- LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
- LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
- LLVMLabelTypeKind, /**< Labels */
- LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
- LLVMFunctionTypeKind, /**< Functions */
- LLVMStructTypeKind, /**< Structures */
- LLVMArrayTypeKind, /**< Arrays */
- LLVMPointerTypeKind, /**< Pointers */
- LLVMVectorTypeKind, /**< Fixed width SIMD vector type */
- LLVMMetadataTypeKind, /**< Metadata */
- LLVMX86_MMXTypeKind, /**< X86 MMX */
- LLVMTokenTypeKind, /**< Tokens */
- LLVMScalableVectorTypeKind, /**< Scalable SIMD vector type */
- LLVMBFloatTypeKind, /**< 16 bit brain floating point type */
- LLVMX86_AMXTypeKind /**< X86 AMX */
- } LLVMTypeKind;
- typedef enum {
- LLVMExternalLinkage, /**< Externally visible function */
- LLVMAvailableExternallyLinkage,
- LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
- LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
- equivalent. */
- LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
- LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
- LLVMWeakODRLinkage, /**< Same, but only replaced by something
- equivalent. */
- LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
- LLVMInternalLinkage, /**< Rename collisions when linking (static
- functions) */
- LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
- LLVMDLLImportLinkage, /**< Obsolete */
- LLVMDLLExportLinkage, /**< Obsolete */
- LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
- LLVMGhostLinkage, /**< Obsolete */
- LLVMCommonLinkage, /**< Tentative definitions */
- LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
- LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
- } LLVMLinkage;
- typedef enum {
- LLVMDefaultVisibility, /**< The GV is visible */
- LLVMHiddenVisibility, /**< The GV is hidden */
- LLVMProtectedVisibility /**< The GV is protected */
- } LLVMVisibility;
- typedef enum {
- LLVMNoUnnamedAddr, /**< Address of the GV is significant. */
- LLVMLocalUnnamedAddr, /**< Address of the GV is locally insignificant. */
- LLVMGlobalUnnamedAddr /**< Address of the GV is globally insignificant. */
- } LLVMUnnamedAddr;
- typedef enum {
- LLVMDefaultStorageClass = 0,
- LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */
- LLVMDLLExportStorageClass = 2 /**< Function to be accessible from DLL. */
- } LLVMDLLStorageClass;
- typedef enum {
- LLVMCCallConv = 0,
- LLVMFastCallConv = 8,
- LLVMColdCallConv = 9,
- LLVMGHCCallConv = 10,
- LLVMHiPECallConv = 11,
- LLVMWebKitJSCallConv = 12,
- LLVMAnyRegCallConv = 13,
- LLVMPreserveMostCallConv = 14,
- LLVMPreserveAllCallConv = 15,
- LLVMSwiftCallConv = 16,
- LLVMCXXFASTTLSCallConv = 17,
- LLVMX86StdcallCallConv = 64,
- LLVMX86FastcallCallConv = 65,
- LLVMARMAPCSCallConv = 66,
- LLVMARMAAPCSCallConv = 67,
- LLVMARMAAPCSVFPCallConv = 68,
- LLVMMSP430INTRCallConv = 69,
- LLVMX86ThisCallCallConv = 70,
- LLVMPTXKernelCallConv = 71,
- LLVMPTXDeviceCallConv = 72,
- LLVMSPIRFUNCCallConv = 75,
- LLVMSPIRKERNELCallConv = 76,
- LLVMIntelOCLBICallConv = 77,
- LLVMX8664SysVCallConv = 78,
- LLVMWin64CallConv = 79,
- LLVMX86VectorCallCallConv = 80,
- LLVMHHVMCallConv = 81,
- LLVMHHVMCCallConv = 82,
- LLVMX86INTRCallConv = 83,
- LLVMAVRINTRCallConv = 84,
- LLVMAVRSIGNALCallConv = 85,
- LLVMAVRBUILTINCallConv = 86,
- LLVMAMDGPUVSCallConv = 87,
- LLVMAMDGPUGSCallConv = 88,
- LLVMAMDGPUPSCallConv = 89,
- LLVMAMDGPUCSCallConv = 90,
- LLVMAMDGPUKERNELCallConv = 91,
- LLVMX86RegCallCallConv = 92,
- LLVMAMDGPUHSCallConv = 93,
- LLVMMSP430BUILTINCallConv = 94,
- LLVMAMDGPULSCallConv = 95,
- LLVMAMDGPUESCallConv = 96
- } LLVMCallConv;
- typedef enum {
- LLVMArgumentValueKind,
- LLVMBasicBlockValueKind,
- LLVMMemoryUseValueKind,
- LLVMMemoryDefValueKind,
- LLVMMemoryPhiValueKind,
- LLVMFunctionValueKind,
- LLVMGlobalAliasValueKind,
- LLVMGlobalIFuncValueKind,
- LLVMGlobalVariableValueKind,
- LLVMBlockAddressValueKind,
- LLVMConstantExprValueKind,
- LLVMConstantArrayValueKind,
- LLVMConstantStructValueKind,
- LLVMConstantVectorValueKind,
- LLVMUndefValueValueKind,
- LLVMConstantAggregateZeroValueKind,
- LLVMConstantDataArrayValueKind,
- LLVMConstantDataVectorValueKind,
- LLVMConstantIntValueKind,
- LLVMConstantFPValueKind,
- LLVMConstantPointerNullValueKind,
- LLVMConstantTokenNoneValueKind,
- LLVMMetadataAsValueValueKind,
- LLVMInlineAsmValueKind,
- LLVMInstructionValueKind,
- LLVMPoisonValueValueKind
- } LLVMValueKind;
- typedef enum {
- LLVMIntEQ = 32, /**< equal */
- LLVMIntNE, /**< not equal */
- LLVMIntUGT, /**< unsigned greater than */
- LLVMIntUGE, /**< unsigned greater or equal */
- LLVMIntULT, /**< unsigned less than */
- LLVMIntULE, /**< unsigned less or equal */
- LLVMIntSGT, /**< signed greater than */
- LLVMIntSGE, /**< signed greater or equal */
- LLVMIntSLT, /**< signed less than */
- LLVMIntSLE /**< signed less or equal */
- } LLVMIntPredicate;
- typedef enum {
- LLVMRealPredicateFalse, /**< Always false (always folded) */
- LLVMRealOEQ, /**< True if ordered and equal */
- LLVMRealOGT, /**< True if ordered and greater than */
- LLVMRealOGE, /**< True if ordered and greater than or equal */
- LLVMRealOLT, /**< True if ordered and less than */
- LLVMRealOLE, /**< True if ordered and less than or equal */
- LLVMRealONE, /**< True if ordered and operands are unequal */
- LLVMRealORD, /**< True if ordered (no nans) */
- LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
- LLVMRealUEQ, /**< True if unordered or equal */
- LLVMRealUGT, /**< True if unordered or greater than */
- LLVMRealUGE, /**< True if unordered, greater than, or equal */
- LLVMRealULT, /**< True if unordered or less than */
- LLVMRealULE, /**< True if unordered, less than, or equal */
- LLVMRealUNE, /**< True if unordered or not equal */
- LLVMRealPredicateTrue /**< Always true (always folded) */
- } LLVMRealPredicate;
- typedef enum {
- LLVMLandingPadCatch, /**< A catch clause */
- LLVMLandingPadFilter /**< A filter clause */
- } LLVMLandingPadClauseTy;
- typedef enum {
- LLVMNotThreadLocal = 0,
- LLVMGeneralDynamicTLSModel,
- LLVMLocalDynamicTLSModel,
- LLVMInitialExecTLSModel,
- LLVMLocalExecTLSModel
- } LLVMThreadLocalMode;
- typedef enum {
- LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
- LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
- somewhat sane results, lock free. */
- LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
- operations affecting a specific address,
- a consistent ordering exists */
- LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
- necessary to acquire a lock to access other
- memory with normal loads and stores. */
- LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
- a barrier of the sort necessary to release
- a lock. */
- LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
- Release barrier (for fences and
- operations which both read and write
- memory). */
- LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
- for loads and Release
- semantics for stores.
- Additionally, it guarantees
- that a total ordering exists
- between all
- SequentiallyConsistent
- operations. */
- } LLVMAtomicOrdering;
- typedef enum {
- LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
- LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
- LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
- LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
- LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
- LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
- LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
- LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
- original using a signed comparison and return
- the old one */
- LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
- original using a signed comparison and return
- the old one */
- LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
- original using an unsigned comparison and return
- the old one */
- LLVMAtomicRMWBinOpUMin, /**< Sets the value if it's greater than the
- original using an unsigned comparison and return
- the old one */
- LLVMAtomicRMWBinOpFAdd, /**< Add a floating point value and return the
- old one */
- LLVMAtomicRMWBinOpFSub /**< Subtract a floating point value and return the
- old one */
- } LLVMAtomicRMWBinOp;
- typedef enum {
- LLVMDSError,
- LLVMDSWarning,
- LLVMDSRemark,
- LLVMDSNote
- } LLVMDiagnosticSeverity;
- typedef enum {
- LLVMInlineAsmDialectATT,
- LLVMInlineAsmDialectIntel
- } LLVMInlineAsmDialect;
- typedef enum {
- /**
- * Emits an error if two values disagree, otherwise the resulting value is
- * that of the operands.
- *
- * @see Module::ModFlagBehavior::Error
- */
- LLVMModuleFlagBehaviorError,
- /**
- * Emits a warning if two values disagree. The result value will be the
- * operand for the flag from the first module being linked.
- *
- * @see Module::ModFlagBehavior::Warning
- */
- LLVMModuleFlagBehaviorWarning,
- /**
- * Adds a requirement that another module flag be present and have a
- * specified value after linking is performed. The value must be a metadata
- * pair, where the first element of the pair is the ID of the module flag
- * to be restricted, and the second element of the pair is the value the
- * module flag should be restricted to. This behavior can be used to
- * restrict the allowable results (via triggering of an error) of linking
- * IDs with the **Override** behavior.
- *
- * @see Module::ModFlagBehavior::Require
- */
- LLVMModuleFlagBehaviorRequire,
- /**
- * Uses the specified value, regardless of the behavior or value of the
- * other module. If both modules specify **Override**, but the values
- * differ, an error will be emitted.
- *
- * @see Module::ModFlagBehavior::Override
- */
- LLVMModuleFlagBehaviorOverride,
- /**
- * Appends the two values, which are required to be metadata nodes.
- *
- * @see Module::ModFlagBehavior::Append
- */
- LLVMModuleFlagBehaviorAppend,
- /**
- * Appends the two values, which are required to be metadata
- * nodes. However, duplicate entries in the second list are dropped
- * during the append operation.
- *
- * @see Module::ModFlagBehavior::AppendUnique
- */
- LLVMModuleFlagBehaviorAppendUnique,
- } LLVMModuleFlagBehavior;
- /**
- * Attribute index are either LLVMAttributeReturnIndex,
- * LLVMAttributeFunctionIndex or a parameter number from 1 to N.
- */
- enum {
- LLVMAttributeReturnIndex = 0U,
- // ISO C restricts enumerator values to range of 'int'
- // (4294967295 is too large)
- // LLVMAttributeFunctionIndex = ~0U,
- LLVMAttributeFunctionIndex = -1,
- };
- typedef unsigned LLVMAttributeIndex;
- /**
- * @}
- */
- void LLVMInitializeCore(LLVMPassRegistryRef R);
- /** Deallocate and destroy all ManagedStatic variables.
- @see llvm::llvm_shutdown
- @see ManagedStatic */
- void LLVMShutdown(void);
- /*===-- Error handling ----------------------------------------------------===*/
- char *LLVMCreateMessage(const char *Message);
- void LLVMDisposeMessage(char *Message);
- /**
- * @defgroup LLVMCCoreContext Contexts
- *
- * Contexts are execution states for the core LLVM IR system.
- *
- * Most types are tied to a context instance. Multiple contexts can
- * exist simultaneously. A single context is not thread safe. However,
- * different contexts can execute on different threads simultaneously.
- *
- * @{
- */
- typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
- typedef void (*LLVMYieldCallback)(LLVMContextRef, void *);
- /**
- * Create a new context.
- *
- * Every call to this function should be paired with a call to
- * LLVMContextDispose() or the context will leak memory.
- */
- LLVMContextRef LLVMContextCreate(void);
- /**
- * Obtain the global context instance.
- */
- LLVMContextRef LLVMGetGlobalContext(void);
- /**
- * Set the diagnostic handler for this context.
- */
- void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
- LLVMDiagnosticHandler Handler,
- void *DiagnosticContext);
- /**
- * Get the diagnostic handler of this context.
- */
- LLVMDiagnosticHandler LLVMContextGetDiagnosticHandler(LLVMContextRef C);
- /**
- * Get the diagnostic context of this context.
- */
- void *LLVMContextGetDiagnosticContext(LLVMContextRef C);
- /**
- * Set the yield callback function for this context.
- *
- * @see LLVMContext::setYieldCallback()
- */
- void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
- void *OpaqueHandle);
- /**
- * Retrieve whether the given context is set to discard all value names.
- *
- * @see LLVMContext::shouldDiscardValueNames()
- */
- LLVMBool LLVMContextShouldDiscardValueNames(LLVMContextRef C);
- /**
- * Set whether the given context discards all value names.
- *
- * If true, only the names of GlobalValue objects will be available in the IR.
- * This can be used to save memory and runtime, especially in release mode.
- *
- * @see LLVMContext::setDiscardValueNames()
- */
- void LLVMContextSetDiscardValueNames(LLVMContextRef C, LLVMBool Discard);
- /**
- * Destroy a context instance.
- *
- * This should be called for every call to LLVMContextCreate() or memory
- * will be leaked.
- */
- void LLVMContextDispose(LLVMContextRef C);
- /**
- * Return a string representation of the DiagnosticInfo. Use
- * LLVMDisposeMessage to free the string.
- *
- * @see DiagnosticInfo::print()
- */
- char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
- /**
- * Return an enum LLVMDiagnosticSeverity.
- *
- * @see DiagnosticInfo::getSeverity()
- */
- LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
- unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char *Name,
- unsigned SLen);
- unsigned LLVMGetMDKindID(const char *Name, unsigned SLen);
- /**
- * Return an unique id given the name of a enum attribute,
- * or 0 if no attribute by that name exists.
- *
- * See http://llvm.org/docs/LangRef.html#parameter-attributes
- * and http://llvm.org/docs/LangRef.html#function-attributes
- * for the list of available attributes.
- *
- * NB: Attribute names and/or id are subject to change without
- * going through the C API deprecation cycle.
- */
- unsigned LLVMGetEnumAttributeKindForName(const char *Name, size_t SLen);
- unsigned LLVMGetLastEnumAttributeKind(void);
- /**
- * Create an enum attribute.
- */
- LLVMAttributeRef LLVMCreateEnumAttribute(LLVMContextRef C, unsigned KindID,
- uint64_t Val);
- /**
- * Get the unique id corresponding to the enum attribute
- * passed as argument.
- */
- unsigned LLVMGetEnumAttributeKind(LLVMAttributeRef A);
- /**
- * Get the enum attribute's value. 0 is returned if none exists.
- */
- uint64_t LLVMGetEnumAttributeValue(LLVMAttributeRef A);
- /**
- * Create a type attribute
- */
- LLVMAttributeRef LLVMCreateTypeAttribute(LLVMContextRef C, unsigned KindID,
- LLVMTypeRef type_ref);
- /**
- * Get the type attribute's value.
- */
- LLVMTypeRef LLVMGetTypeAttributeValue(LLVMAttributeRef A);
- /**
- * Create a string attribute.
- */
- LLVMAttributeRef LLVMCreateStringAttribute(LLVMContextRef C,
- const char *K, unsigned KLength,
- const char *V, unsigned VLength);
- /**
- * Get the string attribute's kind.
- */
- const char *LLVMGetStringAttributeKind(LLVMAttributeRef A, unsigned *Length);
- /**
- * Get the string attribute's value.
- */
- const char *LLVMGetStringAttributeValue(LLVMAttributeRef A, unsigned *Length);
- /**
- * Check for the different types of attributes.
- */
- LLVMBool LLVMIsEnumAttribute(LLVMAttributeRef A);
- LLVMBool LLVMIsStringAttribute(LLVMAttributeRef A);
- LLVMBool LLVMIsTypeAttribute(LLVMAttributeRef A);
- /**
- * Obtain a Type from a context by its registered name.
- */
- LLVMTypeRef LLVMGetTypeByName2(LLVMContextRef C, const char *Name);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreModule Modules
- *
- * Modules represent the top-level structure in an LLVM program. An LLVM
- * module is effectively a translation unit or a collection of
- * translation units merged together.
- *
- * @{
- */
- /**
- * Create a new, empty module in the global context.
- *
- * This is equivalent to calling LLVMModuleCreateWithNameInContext with
- * LLVMGetGlobalContext() as the context parameter.
- *
- * Every invocation should be paired with LLVMDisposeModule() or memory
- * will be leaked.
- */
- LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
- /**
- * Create a new, empty module in a specific context.
- *
- * Every invocation should be paired with LLVMDisposeModule() or memory
- * will be leaked.
- */
- LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
- LLVMContextRef C);
- /**
- * Return an exact copy of the specified module.
- */
- LLVMModuleRef LLVMCloneModule(LLVMModuleRef M);
- /**
- * Destroy a module instance.
- *
- * This must be called for every created module or memory will be
- * leaked.
- */
- void LLVMDisposeModule(LLVMModuleRef M);
- /**
- * Obtain the identifier of a module.
- *
- * @param M Module to obtain identifier of
- * @param Len Out parameter which holds the length of the returned string.
- * @return The identifier of M.
- * @see Module::getModuleIdentifier()
- */
- const char *LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len);
- /**
- * Set the identifier of a module to a string Ident with length Len.
- *
- * @param M The module to set identifier
- * @param Ident The string to set M's identifier to
- * @param Len Length of Ident
- * @see Module::setModuleIdentifier()
- */
- void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len);
- /**
- * Obtain the module's original source file name.
- *
- * @param M Module to obtain the name of
- * @param Len Out parameter which holds the length of the returned string
- * @return The original source file name of M
- * @see Module::getSourceFileName()
- */
- const char *LLVMGetSourceFileName(LLVMModuleRef M, size_t *Len);
- /**
- * Set the original source file name of a module to a string Name with length
- * Len.
- *
- * @param M The module to set the source file name of
- * @param Name The string to set M's source file name to
- * @param Len Length of Name
- * @see Module::setSourceFileName()
- */
- void LLVMSetSourceFileName(LLVMModuleRef M, const char *Name, size_t Len);
- /**
- * Obtain the data layout for a module.
- *
- * @see Module::getDataLayoutStr()
- *
- * LLVMGetDataLayout is DEPRECATED, as the name is not only incorrect,
- * but match the name of another method on the module. Prefer the use
- * of LLVMGetDataLayoutStr, which is not ambiguous.
- */
- const char *LLVMGetDataLayoutStr(LLVMModuleRef M);
- const char *LLVMGetDataLayout(LLVMModuleRef M);
- /**
- * Set the data layout for a module.
- *
- * @see Module::setDataLayout()
- */
- void LLVMSetDataLayout(LLVMModuleRef M, const char *DataLayoutStr);
- /**
- * Obtain the target triple for a module.
- *
- * @see Module::getTargetTriple()
- */
- const char *LLVMGetTarget(LLVMModuleRef M);
- /**
- * Set the target triple for a module.
- *
- * @see Module::setTargetTriple()
- */
- void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
- /**
- * Returns the module flags as an array of flag-key-value triples. The caller
- * is responsible for freeing this array by calling
- * \c LLVMDisposeModuleFlagsMetadata.
- *
- * @see Module::getModuleFlagsMetadata()
- */
- LLVMModuleFlagEntry *LLVMCopyModuleFlagsMetadata(LLVMModuleRef M, size_t *Len);
- /**
- * Destroys module flags metadata entries.
- */
- void LLVMDisposeModuleFlagsMetadata(LLVMModuleFlagEntry *Entries);
- /**
- * Returns the flag behavior for a module flag entry at a specific index.
- *
- * @see Module::ModuleFlagEntry::Behavior
- */
- LLVMModuleFlagBehavior
- LLVMModuleFlagEntriesGetFlagBehavior(LLVMModuleFlagEntry *Entries,
- unsigned Index);
- /**
- * Returns the key for a module flag entry at a specific index.
- *
- * @see Module::ModuleFlagEntry::Key
- */
- const char *LLVMModuleFlagEntriesGetKey(LLVMModuleFlagEntry *Entries,
- unsigned Index, size_t *Len);
- /**
- * Returns the metadata for a module flag entry at a specific index.
- *
- * @see Module::ModuleFlagEntry::Val
- */
- LLVMMetadataRef LLVMModuleFlagEntriesGetMetadata(LLVMModuleFlagEntry *Entries,
- unsigned Index);
- /**
- * Add a module-level flag to the module-level flags metadata if it doesn't
- * already exist.
- *
- * @see Module::getModuleFlag()
- */
- LLVMMetadataRef LLVMGetModuleFlag(LLVMModuleRef M,
- const char *Key, size_t KeyLen);
- /**
- * Add a module-level flag to the module-level flags metadata if it doesn't
- * already exist.
- *
- * @see Module::addModuleFlag()
- */
- void LLVMAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior,
- const char *Key, size_t KeyLen,
- LLVMMetadataRef Val);
- /**
- * Dump a representation of a module to stderr.
- *
- * @see Module::dump()
- */
- void LLVMDumpModule(LLVMModuleRef M);
- /**
- * Print a representation of a module to a file. The ErrorMessage needs to be
- * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
- *
- * @see Module::print()
- */
- LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
- char **ErrorMessage);
- /**
- * Return a string representation of the module. Use
- * LLVMDisposeMessage to free the string.
- *
- * @see Module::print()
- */
- char *LLVMPrintModuleToString(LLVMModuleRef M);
- /**
- * Get inline assembly for a module.
- *
- * @see Module::getModuleInlineAsm()
- */
- const char *LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t *Len);
- /**
- * Set inline assembly for a module.
- *
- * @see Module::setModuleInlineAsm()
- */
- void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const char *Asm, size_t Len);
- /**
- * Append inline assembly to a module.
- *
- * @see Module::appendModuleInlineAsm()
- */
- void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm, size_t Len);
- /**
- * Create the specified uniqued inline asm string.
- *
- * @see InlineAsm::get()
- */
- LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty, char *AsmString,
- size_t AsmStringSize, char *Constraints,
- size_t ConstraintsSize, LLVMBool HasSideEffects,
- LLVMBool IsAlignStack,
- LLVMInlineAsmDialect Dialect, LLVMBool CanThrow);
- /**
- * Obtain the context to which this module is associated.
- *
- * @see Module::getContext()
- */
- LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
- /** Deprecated: Use LLVMGetTypeByName2 instead. */
- LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
- /**
- * Obtain an iterator to the first NamedMDNode in a Module.
- *
- * @see llvm::Module::named_metadata_begin()
- */
- LLVMNamedMDNodeRef LLVMGetFirstNamedMetadata(LLVMModuleRef M);
- /**
- * Obtain an iterator to the last NamedMDNode in a Module.
- *
- * @see llvm::Module::named_metadata_end()
- */
- LLVMNamedMDNodeRef LLVMGetLastNamedMetadata(LLVMModuleRef M);
- /**
- * Advance a NamedMDNode iterator to the next NamedMDNode.
- *
- * Returns NULL if the iterator was already at the end and there are no more
- * named metadata nodes.
- */
- LLVMNamedMDNodeRef LLVMGetNextNamedMetadata(LLVMNamedMDNodeRef NamedMDNode);
- /**
- * Decrement a NamedMDNode iterator to the previous NamedMDNode.
- *
- * Returns NULL if the iterator was already at the beginning and there are
- * no previous named metadata nodes.
- */
- LLVMNamedMDNodeRef LLVMGetPreviousNamedMetadata(LLVMNamedMDNodeRef NamedMDNode);
- /**
- * Retrieve a NamedMDNode with the given name, returning NULL if no such
- * node exists.
- *
- * @see llvm::Module::getNamedMetadata()
- */
- LLVMNamedMDNodeRef LLVMGetNamedMetadata(LLVMModuleRef M,
- const char *Name, size_t NameLen);
- /**
- * Retrieve a NamedMDNode with the given name, creating a new node if no such
- * node exists.
- *
- * @see llvm::Module::getOrInsertNamedMetadata()
- */
- LLVMNamedMDNodeRef LLVMGetOrInsertNamedMetadata(LLVMModuleRef M,
- const char *Name,
- size_t NameLen);
- /**
- * Retrieve the name of a NamedMDNode.
- *
- * @see llvm::NamedMDNode::getName()
- */
- const char *LLVMGetNamedMetadataName(LLVMNamedMDNodeRef NamedMD,
- size_t *NameLen);
- /**
- * Obtain the number of operands for named metadata in a module.
- *
- * @see llvm::Module::getNamedMetadata()
- */
- unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char *Name);
- /**
- * Obtain the named metadata operands for a module.
- *
- * The passed LLVMValueRef pointer should refer to an array of
- * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
- * array will be populated with the LLVMValueRef instances. Each
- * instance corresponds to a llvm::MDNode.
- *
- * @see llvm::Module::getNamedMetadata()
- * @see llvm::MDNode::getOperand()
- */
- void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char *Name,
- LLVMValueRef *Dest);
- /**
- * Add an operand to named metadata.
- *
- * @see llvm::Module::getNamedMetadata()
- * @see llvm::MDNode::addOperand()
- */
- void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char *Name,
- LLVMValueRef Val);
- /**
- * Return the directory of the debug location for this value, which must be
- * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function.
- *
- * @see llvm::Instruction::getDebugLoc()
- * @see llvm::GlobalVariable::getDebugInfo()
- * @see llvm::Function::getSubprogram()
- */
- const char *LLVMGetDebugLocDirectory(LLVMValueRef Val, unsigned *Length);
- /**
- * Return the filename of the debug location for this value, which must be
- * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function.
- *
- * @see llvm::Instruction::getDebugLoc()
- * @see llvm::GlobalVariable::getDebugInfo()
- * @see llvm::Function::getSubprogram()
- */
- const char *LLVMGetDebugLocFilename(LLVMValueRef Val, unsigned *Length);
- /**
- * Return the line number of the debug location for this value, which must be
- * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function.
- *
- * @see llvm::Instruction::getDebugLoc()
- * @see llvm::GlobalVariable::getDebugInfo()
- * @see llvm::Function::getSubprogram()
- */
- unsigned LLVMGetDebugLocLine(LLVMValueRef Val);
- /**
- * Return the column number of the debug location for this value, which must be
- * an llvm::Instruction.
- *
- * @see llvm::Instruction::getDebugLoc()
- */
- unsigned LLVMGetDebugLocColumn(LLVMValueRef Val);
- /**
- * Add a function to a module under a specified name.
- *
- * @see llvm::Function::Create()
- */
- LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
- LLVMTypeRef FunctionTy);
- /**
- * Obtain a Function value from a Module by its name.
- *
- * The returned value corresponds to a llvm::Function value.
- *
- * @see llvm::Module::getFunction()
- */
- LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
- /**
- * Obtain an iterator to the first Function in a Module.
- *
- * @see llvm::Module::begin()
- */
- LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
- /**
- * Obtain an iterator to the last Function in a Module.
- *
- * @see llvm::Module::end()
- */
- LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
- /**
- * Advance a Function iterator to the next Function.
- *
- * Returns NULL if the iterator was already at the end and there are no more
- * functions.
- */
- LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
- /**
- * Decrement a Function iterator to the previous Function.
- *
- * Returns NULL if the iterator was already at the beginning and there are
- * no previous functions.
- */
- LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
- /** Deprecated: Use LLVMSetModuleInlineAsm2 instead. */
- void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreType Types
- *
- * Types represent the type of a value.
- *
- * Types are associated with a context instance. The context internally
- * deduplicates types so there is only 1 instance of a specific type
- * alive at a time. In other words, a unique type is shared among all
- * consumers within a context.
- *
- * A Type in the C API corresponds to llvm::Type.
- *
- * Types have the following hierarchy:
- *
- * types:
- * integer type
- * real type
- * function type
- * sequence types:
- * array type
- * pointer type
- * vector type
- * void type
- * label type
- * opaque type
- *
- * @{
- */
- /**
- * Obtain the enumerated type of a Type instance.
- *
- * @see llvm::Type:getTypeID()
- */
- LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
- /**
- * Whether the type has a known size.
- *
- * Things that don't have a size are abstract types, labels, and void.a
- *
- * @see llvm::Type::isSized()
- */
- LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
- /**
- * Obtain the context to which this type instance is associated.
- *
- * @see llvm::Type::getContext()
- */
- LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
- /**
- * Dump a representation of a type to stderr.
- *
- * @see llvm::Type::dump()
- */
- void LLVMDumpType(LLVMTypeRef Val);
- /**
- * Return a string representation of the type. Use
- * LLVMDisposeMessage to free the string.
- *
- * @see llvm::Type::print()
- */
- char *LLVMPrintTypeToString(LLVMTypeRef Val);
- /**
- * @defgroup LLVMCCoreTypeInt Integer Types
- *
- * Functions in this section operate on integer types.
- *
- * @{
- */
- /**
- * Obtain an integer type from a context with specified bit width.
- */
- LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
- LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
- LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
- LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
- LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
- LLVMTypeRef LLVMInt128TypeInContext(LLVMContextRef C);
- LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
- /**
- * Obtain an integer type from the global context with a specified bit
- * width.
- */
- LLVMTypeRef LLVMInt1Type(void);
- LLVMTypeRef LLVMInt8Type(void);
- LLVMTypeRef LLVMInt16Type(void);
- LLVMTypeRef LLVMInt32Type(void);
- LLVMTypeRef LLVMInt64Type(void);
- LLVMTypeRef LLVMInt128Type(void);
- LLVMTypeRef LLVMIntType(unsigned NumBits);
- unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreTypeFloat Floating Point Types
- *
- * @{
- */
- /**
- * Obtain a 16-bit floating point type from a context.
- */
- LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
- /**
- * Obtain a 16-bit brain floating point type from a context.
- */
- LLVMTypeRef LLVMBFloatTypeInContext(LLVMContextRef C);
- /**
- * Obtain a 32-bit floating point type from a context.
- */
- LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
- /**
- * Obtain a 64-bit floating point type from a context.
- */
- LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
- /**
- * Obtain a 80-bit floating point type (X87) from a context.
- */
- LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
- /**
- * Obtain a 128-bit floating point type (112-bit mantissa) from a
- * context.
- */
- LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
- /**
- * Obtain a 128-bit floating point type (two 64-bits) from a context.
- */
- LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
- /**
- * Obtain a floating point type from the global context.
- *
- * These map to the functions in this group of the same name.
- */
- LLVMTypeRef LLVMHalfType(void);
- LLVMTypeRef LLVMBFloatType(void);
- LLVMTypeRef LLVMFloatType(void);
- LLVMTypeRef LLVMDoubleType(void);
- LLVMTypeRef LLVMX86FP80Type(void);
- LLVMTypeRef LLVMFP128Type(void);
- LLVMTypeRef LLVMPPCFP128Type(void);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreTypeFunction Function Types
- *
- * @{
- */
- /**
- * Obtain a function type consisting of a specified signature.
- *
- * The function is defined as a tuple of a return Type, a list of
- * parameter types, and whether the function is variadic.
- */
- LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
- LLVMTypeRef *ParamTypes, unsigned ParamCount,
- LLVMBool IsVarArg);
- /**
- * Returns whether a function type is variadic.
- */
- LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
- /**
- * Obtain the Type this function Type returns.
- */
- LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
- /**
- * Obtain the number of parameters this function accepts.
- */
- unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
- /**
- * Obtain the types of a function's parameters.
- *
- * The Dest parameter should point to a pre-allocated array of
- * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
- * first LLVMCountParamTypes() entries in the array will be populated
- * with LLVMTypeRef instances.
- *
- * @param FunctionTy The function type to operate on.
- * @param Dest Memory address of an array to be filled with result.
- */
- void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreTypeStruct Structure Types
- *
- * These functions relate to LLVMTypeRef instances.
- *
- * @see llvm::StructType
- *
- * @{
- */
- /**
- * Create a new structure type in a context.
- *
- * A structure is specified by a list of inner elements/types and
- * whether these can be packed together.
- *
- * @see llvm::StructType::create()
- */
- LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
- unsigned ElementCount, LLVMBool Packed);
- /**
- * Create a new structure type in the global context.
- *
- * @see llvm::StructType::create()
- */
- LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
- LLVMBool Packed);
- /**
- * Create an empty structure in a context having a specified name.
- *
- * @see llvm::StructType::create()
- */
- LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
- /**
- * Obtain the name of a structure.
- *
- * @see llvm::StructType::getName()
- */
- const char *LLVMGetStructName(LLVMTypeRef Ty);
- /**
- * Set the contents of a structure type.
- *
- * @see llvm::StructType::setBody()
- */
- void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
- unsigned ElementCount, LLVMBool Packed);
- /**
- * Get the number of elements defined inside the structure.
- *
- * @see llvm::StructType::getNumElements()
- */
- unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
- /**
- * Get the elements within a structure.
- *
- * The function is passed the address of a pre-allocated array of
- * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
- * invocation, this array will be populated with the structure's
- * elements. The objects in the destination array will have a lifetime
- * of the structure type itself, which is the lifetime of the context it
- * is contained in.
- */
- void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
- /**
- * Get the type of the element at a given index in the structure.
- *
- * @see llvm::StructType::getTypeAtIndex()
- */
- LLVMTypeRef LLVMStructGetTypeAtIndex(LLVMTypeRef StructTy, unsigned i);
- /**
- * Determine whether a structure is packed.
- *
- * @see llvm::StructType::isPacked()
- */
- LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
- /**
- * Determine whether a structure is opaque.
- *
- * @see llvm::StructType::isOpaque()
- */
- LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
- /**
- * Determine whether a structure is literal.
- *
- * @see llvm::StructType::isLiteral()
- */
- LLVMBool LLVMIsLiteralStruct(LLVMTypeRef StructTy);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreTypeSequential Sequential Types
- *
- * Sequential types represents "arrays" of types. This is a super class
- * for array, vector, and pointer types.
- *
- * @{
- */
- /**
- * Obtain the type of elements within a sequential type.
- *
- * This works on array, vector, and pointer types.
- *
- * @see llvm::SequentialType::getElementType()
- */
- LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
- /**
- * Returns type's subtypes
- *
- * @see llvm::Type::subtypes()
- */
- void LLVMGetSubtypes(LLVMTypeRef Tp, LLVMTypeRef *Arr);
- /**
- * Return the number of types in the derived type.
- *
- * @see llvm::Type::getNumContainedTypes()
- */
- unsigned LLVMGetNumContainedTypes(LLVMTypeRef Tp);
- /**
- * Create a fixed size array type that refers to a specific type.
- *
- * The created type will exist in the context that its element type
- * exists in.
- *
- * @see llvm::ArrayType::get()
- */
- LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
- /**
- * Obtain the length of an array type.
- *
- * This only works on types that represent arrays.
- *
- * @see llvm::ArrayType::getNumElements()
- */
- unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
- /**
- * Create a pointer type that points to a defined type.
- *
- * The created type will exist in the context that its pointee type
- * exists in.
- *
- * @see llvm::PointerType::get()
- */
- LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
- /**
- * Obtain the address space of a pointer type.
- *
- * This only works on types that represent pointers.
- *
- * @see llvm::PointerType::getAddressSpace()
- */
- unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
- /**
- * Create a vector type that contains a defined type and has a specific
- * number of elements.
- *
- * The created type will exist in the context thats its element type
- * exists in.
- *
- * @see llvm::VectorType::get()
- */
- LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
- /**
- * Create a vector type that contains a defined type and has a scalable
- * number of elements.
- *
- * The created type will exist in the context thats its element type
- * exists in.
- *
- * @see llvm::ScalableVectorType::get()
- */
- LLVMTypeRef LLVMScalableVectorType(LLVMTypeRef ElementType,
- unsigned ElementCount);
- /**
- * Obtain the (possibly scalable) number of elements in a vector type.
- *
- * This only works on types that represent vectors (fixed or scalable).
- *
- * @see llvm::VectorType::getNumElements()
- */
- unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreTypeOther Other Types
- *
- * @{
- */
- /**
- * Create a void type in a context.
- */
- LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
- /**
- * Create a label type in a context.
- */
- LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
- /**
- * Create a X86 MMX type in a context.
- */
- LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
- /**
- * Create a X86 AMX type in a context.
- */
- LLVMTypeRef LLVMX86AMXTypeInContext(LLVMContextRef C);
- /**
- * Create a token type in a context.
- */
- LLVMTypeRef LLVMTokenTypeInContext(LLVMContextRef C);
- /**
- * Create a metadata type in a context.
- */
- LLVMTypeRef LLVMMetadataTypeInContext(LLVMContextRef C);
- /**
- * These are similar to the above functions except they operate on the
- * global context.
- */
- LLVMTypeRef LLVMVoidType(void);
- LLVMTypeRef LLVMLabelType(void);
- LLVMTypeRef LLVMX86MMXType(void);
- LLVMTypeRef LLVMX86AMXType(void);
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValues Values
- *
- * The bulk of LLVM's object model consists of values, which comprise a very
- * rich type hierarchy.
- *
- * LLVMValueRef essentially represents llvm::Value. There is a rich
- * hierarchy of classes within this type. Depending on the instance
- * obtained, not all APIs are available.
- *
- * Callers can determine the type of an LLVMValueRef by calling the
- * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
- * functions are defined by a macro, so it isn't obvious which are
- * available by looking at the Doxygen source code. Instead, look at the
- * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
- * of value names given. These value names also correspond to classes in
- * the llvm::Value hierarchy.
- *
- * @{
- */
- #define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
- macro(Argument) \
- macro(BasicBlock) \
- macro(InlineAsm) \
- macro(User) \
- macro(Constant) \
- macro(BlockAddress) \
- macro(ConstantAggregateZero) \
- macro(ConstantArray) \
- macro(ConstantDataSequential) \
- macro(ConstantDataArray) \
- macro(ConstantDataVector) \
- macro(ConstantExpr) \
- macro(ConstantFP) \
- macro(ConstantInt) \
- macro(ConstantPointerNull) \
- macro(ConstantStruct) \
- macro(ConstantTokenNone) \
- macro(ConstantVector) \
- macro(GlobalValue) \
- macro(GlobalAlias) \
- macro(GlobalObject) \
- macro(Function) \
- macro(GlobalVariable) \
- macro(GlobalIFunc) \
- macro(UndefValue) \
- macro(PoisonValue) \
- macro(Instruction) \
- macro(UnaryOperator) \
- macro(BinaryOperator) \
- macro(CallInst) \
- macro(IntrinsicInst) \
- macro(DbgInfoIntrinsic) \
- macro(DbgVariableIntrinsic) \
- macro(DbgDeclareInst) \
- macro(DbgLabelInst) \
- macro(MemIntrinsic) \
- macro(MemCpyInst) \
- macro(MemMoveInst) \
- macro(MemSetInst) \
- macro(CmpInst) \
- macro(FCmpInst) \
- macro(ICmpInst) \
- macro(ExtractElementInst) \
- macro(GetElementPtrInst) \
- macro(InsertElementInst) \
- macro(InsertValueInst) \
- macro(LandingPadInst) \
- macro(PHINode) \
- macro(SelectInst) \
- macro(ShuffleVectorInst) \
- macro(StoreInst) \
- macro(BranchInst) \
- macro(IndirectBrInst) \
- macro(InvokeInst) \
- macro(ReturnInst) \
- macro(SwitchInst) \
- macro(UnreachableInst) \
- macro(ResumeInst) \
- macro(CleanupReturnInst) \
- macro(CatchReturnInst) \
- macro(CatchSwitchInst) \
- macro(CallBrInst) \
- macro(FuncletPadInst) \
- macro(CatchPadInst) \
- macro(CleanupPadInst) \
- macro(UnaryInstruction) \
- macro(AllocaInst) \
- macro(CastInst) \
- macro(AddrSpaceCastInst) \
- macro(BitCastInst) \
- macro(FPExtInst) \
- macro(FPToSIInst) \
- macro(FPToUIInst) \
- macro(FPTruncInst) \
- macro(IntToPtrInst) \
- macro(PtrToIntInst) \
- macro(SExtInst) \
- macro(SIToFPInst) \
- macro(TruncInst) \
- macro(UIToFPInst) \
- macro(ZExtInst) \
- macro(ExtractValueInst) \
- macro(LoadInst) \
- macro(VAArgInst) \
- macro(FreezeInst) \
- macro(AtomicCmpXchgInst) \
- macro(AtomicRMWInst) \
- macro(FenceInst)
- /**
- * @defgroup LLVMCCoreValueGeneral General APIs
- *
- * Functions in this section work on all LLVMValueRef instances,
- * regardless of their sub-type. They correspond to functions available
- * on llvm::Value.
- *
- * @{
- */
- /**
- * Obtain the type of a value.
- *
- * @see llvm::Value::getType()
- */
- LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
- /**
- * Obtain the enumerated type of a Value instance.
- *
- * @see llvm::Value::getValueID()
- */
- LLVMValueKind LLVMGetValueKind(LLVMValueRef Val);
- /**
- * Obtain the string name of a value.
- *
- * @see llvm::Value::getName()
- */
- const char *LLVMGetValueName2(LLVMValueRef Val, size_t *Length);
- /**
- * Set the string name of a value.
- *
- * @see llvm::Value::setName()
- */
- void LLVMSetValueName2(LLVMValueRef Val, const char *Name, size_t NameLen);
- /**
- * Dump a representation of a value to stderr.
- *
- * @see llvm::Value::dump()
- */
- void LLVMDumpValue(LLVMValueRef Val);
- /**
- * Return a string representation of the value. Use
- * LLVMDisposeMessage to free the string.
- *
- * @see llvm::Value::print()
- */
- char *LLVMPrintValueToString(LLVMValueRef Val);
- /**
- * Replace all uses of a value with another one.
- *
- * @see llvm::Value::replaceAllUsesWith()
- */
- void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
- /**
- * Determine whether the specified value instance is constant.
- */
- LLVMBool LLVMIsConstant(LLVMValueRef Val);
- /**
- * Determine whether a value instance is undefined.
- */
- LLVMBool LLVMIsUndef(LLVMValueRef Val);
- /**
- * Determine whether a value instance is poisonous.
- */
- LLVMBool LLVMIsPoison(LLVMValueRef Val);
- /**
- * Convert value instances between types.
- *
- * Internally, an LLVMValueRef is "pinned" to a specific type. This
- * series of functions allows you to cast an instance to a specific
- * type.
- *
- * If the cast is not valid for the specified type, NULL is returned.
- *
- * @see llvm::dyn_cast_or_null<>
- */
- #define LLVM_DECLARE_VALUE_CAST(name) \
- LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
- LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
- LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val);
- LLVMValueRef LLVMIsAMDString(LLVMValueRef Val);
- /** Deprecated: Use LLVMGetValueName2 instead. */
- const char *LLVMGetValueName(LLVMValueRef Val);
- /** Deprecated: Use LLVMSetValueName2 instead. */
- void LLVMSetValueName(LLVMValueRef Val, const char *Name);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueUses Usage
- *
- * This module defines functions that allow you to inspect the uses of a
- * LLVMValueRef.
- *
- * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
- * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
- * llvm::User and llvm::Value.
- *
- * @{
- */
- /**
- * Obtain the first use of a value.
- *
- * Uses are obtained in an iterator fashion. First, call this function
- * to obtain a reference to the first use. Then, call LLVMGetNextUse()
- * on that instance and all subsequently obtained instances until
- * LLVMGetNextUse() returns NULL.
- *
- * @see llvm::Value::use_begin()
- */
- LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
- /**
- * Obtain the next use of a value.
- *
- * This effectively advances the iterator. It returns NULL if you are on
- * the final use and no more are available.
- */
- LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
- /**
- * Obtain the user value for a user.
- *
- * The returned value corresponds to a llvm::User type.
- *
- * @see llvm::Use::getUser()
- */
- LLVMValueRef LLVMGetUser(LLVMUseRef U);
- /**
- * Obtain the value this use corresponds to.
- *
- * @see llvm::Use::get().
- */
- LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueUser User value
- *
- * Function in this group pertain to LLVMValueRef instances that descent
- * from llvm::User. This includes constants, instructions, and
- * operators.
- *
- * @{
- */
- /**
- * Obtain an operand at a specific index in a llvm::User value.
- *
- * @see llvm::User::getOperand()
- */
- LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
- /**
- * Obtain the use of an operand at a specific index in a llvm::User value.
- *
- * @see llvm::User::getOperandUse()
- */
- LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, unsigned Index);
- /**
- * Set an operand at a specific index in a llvm::User value.
- *
- * @see llvm::User::setOperand()
- */
- void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
- /**
- * Obtain the number of operands in a llvm::User value.
- *
- * @see llvm::User::getNumOperands()
- */
- int LLVMGetNumOperands(LLVMValueRef Val);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueConstant Constants
- *
- * This section contains APIs for interacting with LLVMValueRef that
- * correspond to llvm::Constant instances.
- *
- * These functions will work for any LLVMValueRef in the llvm::Constant
- * class hierarchy.
- *
- * @{
- */
- /**
- * Obtain a constant value referring to the null instance of a type.
- *
- * @see llvm::Constant::getNullValue()
- */
- LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
- /**
- * Obtain a constant value referring to the instance of a type
- * consisting of all ones.
- *
- * This is only valid for integer types.
- *
- * @see llvm::Constant::getAllOnesValue()
- */
- LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
- /**
- * Obtain a constant value referring to an undefined value of a type.
- *
- * @see llvm::UndefValue::get()
- */
- LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
- /**
- * Obtain a constant value referring to a poison value of a type.
- *
- * @see llvm::PoisonValue::get()
- */
- LLVMValueRef LLVMGetPoison(LLVMTypeRef Ty);
- /**
- * Determine whether a value instance is null.
- *
- * @see llvm::Constant::isNullValue()
- */
- LLVMBool LLVMIsNull(LLVMValueRef Val);
- /**
- * Obtain a constant that is a constant pointer pointing to NULL for a
- * specified type.
- */
- LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
- /**
- * @defgroup LLVMCCoreValueConstantScalar Scalar constants
- *
- * Functions in this group model LLVMValueRef instances that correspond
- * to constants referring to scalar types.
- *
- * For integer types, the LLVMTypeRef parameter should correspond to a
- * llvm::IntegerType instance and the returned LLVMValueRef will
- * correspond to a llvm::ConstantInt.
- *
- * For floating point types, the LLVMTypeRef returned corresponds to a
- * llvm::ConstantFP.
- *
- * @{
- */
- /**
- * Obtain a constant value for an integer type.
- *
- * The returned value corresponds to a llvm::ConstantInt.
- *
- * @see llvm::ConstantInt::get()
- *
- * @param IntTy Integer type to obtain value of.
- * @param N The value the returned instance should refer to.
- * @param SignExtend Whether to sign extend the produced value.
- */
- LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
- LLVMBool SignExtend);
- /**
- * Obtain a constant value for an integer of arbitrary precision.
- *
- * @see llvm::ConstantInt::get()
- */
- LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
- unsigned NumWords,
- const uint64_t Words[]);
- /**
- * Obtain a constant value for an integer parsed from a string.
- *
- * A similar API, LLVMConstIntOfStringAndSize is also available. If the
- * string's length is available, it is preferred to call that function
- * instead.
- *
- * @see llvm::ConstantInt::get()
- */
- LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
- uint8_t Radix);
- /**
- * Obtain a constant value for an integer parsed from a string with
- * specified length.
- *
- * @see llvm::ConstantInt::get()
- */
- LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
- unsigned SLen, uint8_t Radix);
- /**
- * Obtain a constant value referring to a double floating point value.
- */
- LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
- /**
- * Obtain a constant for a floating point value parsed from a string.
- *
- * A similar API, LLVMConstRealOfStringAndSize is also available. It
- * should be used if the input string's length is known.
- */
- LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
- /**
- * Obtain a constant for a floating point value parsed from a string.
- */
- LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
- unsigned SLen);
- /**
- * Obtain the zero extended value for an integer constant value.
- *
- * @see llvm::ConstantInt::getZExtValue()
- */
- unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
- /**
- * Obtain the sign extended value for an integer constant value.
- *
- * @see llvm::ConstantInt::getSExtValue()
- */
- long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
- /**
- * Obtain the double value for an floating point constant value.
- * losesInfo indicates if some precision was lost in the conversion.
- *
- * @see llvm::ConstantFP::getDoubleValue
- */
- double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueConstantComposite Composite Constants
- *
- * Functions in this group operate on composite constants.
- *
- * @{
- */
- /**
- * Create a ConstantDataSequential and initialize it with a string.
- *
- * @see llvm::ConstantDataArray::getString()
- */
- LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
- unsigned Length, LLVMBool DontNullTerminate);
- /**
- * Create a ConstantDataSequential with string content in the global context.
- *
- * This is the same as LLVMConstStringInContext except it operates on the
- * global context.
- *
- * @see LLVMConstStringInContext()
- * @see llvm::ConstantDataArray::getString()
- */
- LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
- LLVMBool DontNullTerminate);
- /**
- * Returns true if the specified constant is an array of i8.
- *
- * @see ConstantDataSequential::getAsString()
- */
- LLVMBool LLVMIsConstantString(LLVMValueRef c);
- /**
- * Get the given constant data sequential as a string.
- *
- * @see ConstantDataSequential::getAsString()
- */
- const char *LLVMGetAsString(LLVMValueRef c, size_t *Length);
- /**
- * Create an anonymous ConstantStruct with the specified values.
- *
- * @see llvm::ConstantStruct::getAnon()
- */
- LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
- LLVMValueRef *ConstantVals,
- unsigned Count, LLVMBool Packed);
- /**
- * Create a ConstantStruct in the global Context.
- *
- * This is the same as LLVMConstStructInContext except it operates on the
- * global Context.
- *
- * @see LLVMConstStructInContext()
- */
- LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
- LLVMBool Packed);
- /**
- * Create a ConstantArray from values.
- *
- * @see llvm::ConstantArray::get()
- */
- LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
- LLVMValueRef *ConstantVals, unsigned Length);
- /**
- * Create a non-anonymous ConstantStruct from values.
- *
- * @see llvm::ConstantStruct::get()
- */
- LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
- LLVMValueRef *ConstantVals,
- unsigned Count);
- /**
- * Get an element at specified index as a constant.
- *
- * @see ConstantDataSequential::getElementAsConstant()
- */
- LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef C, unsigned idx);
- /**
- * Create a ConstantVector from values.
- *
- * @see llvm::ConstantVector::get()
- */
- LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
- *
- * Functions in this group correspond to APIs on llvm::ConstantExpr.
- *
- * @see llvm::ConstantExpr.
- *
- * @{
- */
- LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
- LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
- LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
- LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
- LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
- LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
- LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
- LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
- LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstExactUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
- LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
- LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
- LLVMValueRef *ConstantIndices,
- unsigned NumIndices),
- "Use LLVMConstGEP2 instead to support opaque pointers");
- LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
- LLVMValueRef *ConstantIndices, unsigned NumIndices);
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
- LLVMValueRef *ConstantIndices,
- unsigned NumIndices),
- "Use LLVMConstInBoundsGEP2 instead to support opaque pointers");
- LLVMValueRef LLVMConstInBoundsGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
- LLVMValueRef *ConstantIndices,
- unsigned NumIndices);
- LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
- LLVMTypeRef ToType);
- LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
- LLVMTypeRef ToType);
- LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
- LLVMTypeRef ToType);
- LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
- LLVMTypeRef ToType);
- LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
- LLVMBool isSigned);
- LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
- LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
- LLVMValueRef ConstantIfTrue,
- LLVMValueRef ConstantIfFalse);
- LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
- LLVMValueRef IndexConstant);
- LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
- LLVMValueRef ElementValueConstant,
- LLVMValueRef IndexConstant);
- LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
- LLVMValueRef VectorBConstant,
- LLVMValueRef MaskConstant);
- LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
- unsigned NumIdx);
- LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
- LLVMValueRef ElementValueConstant,
- unsigned *IdxList, unsigned NumIdx);
- LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
- /** Deprecated: Use LLVMGetInlineAsm instead. */
- LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
- const char *AsmString, const char *Constraints,
- LLVMBool HasSideEffects, LLVMBool IsAlignStack);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueConstantGlobals Global Values
- *
- * This group contains functions that operate on global values. Functions in
- * this group relate to functions in the llvm::GlobalValue class tree.
- *
- * @see llvm::GlobalValue
- *
- * @{
- */
- LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
- LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
- LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
- void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
- const char *LLVMGetSection(LLVMValueRef Global);
- void LLVMSetSection(LLVMValueRef Global, const char *Section);
- LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
- void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
- LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
- void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
- LLVMUnnamedAddr LLVMGetUnnamedAddress(LLVMValueRef Global);
- void LLVMSetUnnamedAddress(LLVMValueRef Global, LLVMUnnamedAddr UnnamedAddr);
- /**
- * Returns the "value type" of a global value. This differs from the formal
- * type of a global value which is always a pointer type.
- *
- * @see llvm::GlobalValue::getValueType()
- */
- LLVMTypeRef LLVMGlobalGetValueType(LLVMValueRef Global);
- /** Deprecated: Use LLVMGetUnnamedAddress instead. */
- LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
- /** Deprecated: Use LLVMSetUnnamedAddress instead. */
- void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
- /**
- * @defgroup LLVMCCoreValueWithAlignment Values with alignment
- *
- * Functions in this group only apply to values with alignment, i.e.
- * global variables, load and store instructions.
- */
- /**
- * Obtain the preferred alignment of the value.
- * @see llvm::AllocaInst::getAlignment()
- * @see llvm::LoadInst::getAlignment()
- * @see llvm::StoreInst::getAlignment()
- * @see llvm::AtomicRMWInst::setAlignment()
- * @see llvm::AtomicCmpXchgInst::setAlignment()
- * @see llvm::GlobalValue::getAlignment()
- */
- unsigned LLVMGetAlignment(LLVMValueRef V);
- /**
- * Set the preferred alignment of the value.
- * @see llvm::AllocaInst::setAlignment()
- * @see llvm::LoadInst::setAlignment()
- * @see llvm::StoreInst::setAlignment()
- * @see llvm::AtomicRMWInst::setAlignment()
- * @see llvm::AtomicCmpXchgInst::setAlignment()
- * @see llvm::GlobalValue::setAlignment()
- */
- void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
- /**
- * Sets a metadata attachment, erasing the existing metadata attachment if
- * it already exists for the given kind.
- *
- * @see llvm::GlobalObject::setMetadata()
- */
- void LLVMGlobalSetMetadata(LLVMValueRef Global, unsigned Kind,
- LLVMMetadataRef MD);
- /**
- * Erases a metadata attachment of the given kind if it exists.
- *
- * @see llvm::GlobalObject::eraseMetadata()
- */
- void LLVMGlobalEraseMetadata(LLVMValueRef Global, unsigned Kind);
- /**
- * Removes all metadata attachments from this value.
- *
- * @see llvm::GlobalObject::clearMetadata()
- */
- void LLVMGlobalClearMetadata(LLVMValueRef Global);
- /**
- * Retrieves an array of metadata entries representing the metadata attached to
- * this value. The caller is responsible for freeing this array by calling
- * \c LLVMDisposeValueMetadataEntries.
- *
- * @see llvm::GlobalObject::getAllMetadata()
- */
- LLVMValueMetadataEntry *LLVMGlobalCopyAllMetadata(LLVMValueRef Value,
- size_t *NumEntries);
- /**
- * Destroys value metadata entries.
- */
- void LLVMDisposeValueMetadataEntries(LLVMValueMetadataEntry *Entries);
- /**
- * Returns the kind of a value metadata entry at a specific index.
- */
- unsigned LLVMValueMetadataEntriesGetKind(LLVMValueMetadataEntry *Entries,
- unsigned Index);
- /**
- * Returns the underlying metadata node of a value metadata entry at a
- * specific index.
- */
- LLVMMetadataRef
- LLVMValueMetadataEntriesGetMetadata(LLVMValueMetadataEntry *Entries,
- unsigned Index);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
- *
- * This group contains functions that operate on global variable values.
- *
- * @see llvm::GlobalVariable
- *
- * @{
- */
- LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
- LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
- const char *Name,
- unsigned AddressSpace);
- LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
- LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
- LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
- LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
- LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
- void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
- LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
- void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
- LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
- void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
- LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
- void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
- LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
- void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
- LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
- void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
- *
- * This group contains function that operate on global alias values.
- *
- * @see llvm::GlobalAlias
- *
- * @{
- */
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty,
- LLVMValueRef Aliasee, const char *Name),
- "Use LLVMAddAlias2 instead to support opaque pointers");
- /**
- * Add a GlobalAlias with the given value type, address space and aliasee.
- *
- * @see llvm::GlobalAlias::create()
- */
- LLVMValueRef LLVMAddAlias2(LLVMModuleRef M, LLVMTypeRef ValueTy,
- unsigned AddrSpace, LLVMValueRef Aliasee,
- const char *Name);
- /**
- * Obtain a GlobalAlias value from a Module by its name.
- *
- * The returned value corresponds to a llvm::GlobalAlias value.
- *
- * @see llvm::Module::getNamedAlias()
- */
- LLVMValueRef LLVMGetNamedGlobalAlias(LLVMModuleRef M,
- const char *Name, size_t NameLen);
- /**
- * Obtain an iterator to the first GlobalAlias in a Module.
- *
- * @see llvm::Module::alias_begin()
- */
- LLVMValueRef LLVMGetFirstGlobalAlias(LLVMModuleRef M);
- /**
- * Obtain an iterator to the last GlobalAlias in a Module.
- *
- * @see llvm::Module::alias_end()
- */
- LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M);
- /**
- * Advance a GlobalAlias iterator to the next GlobalAlias.
- *
- * Returns NULL if the iterator was already at the end and there are no more
- * global aliases.
- */
- LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA);
- /**
- * Decrement a GlobalAlias iterator to the previous GlobalAlias.
- *
- * Returns NULL if the iterator was already at the beginning and there are
- * no previous global aliases.
- */
- LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA);
- /**
- * Retrieve the target value of an alias.
- */
- LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias);
- /**
- * Set the target value of an alias.
- */
- void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueFunction Function values
- *
- * Functions in this group operate on LLVMValueRef instances that
- * correspond to llvm::Function instances.
- *
- * @see llvm::Function
- *
- * @{
- */
- /**
- * Remove a function from its containing module and deletes it.
- *
- * @see llvm::Function::eraseFromParent()
- */
- void LLVMDeleteFunction(LLVMValueRef Fn);
- /**
- * Check whether the given function has a personality function.
- *
- * @see llvm::Function::hasPersonalityFn()
- */
- LLVMBool LLVMHasPersonalityFn(LLVMValueRef Fn);
- /**
- * Obtain the personality function attached to the function.
- *
- * @see llvm::Function::getPersonalityFn()
- */
- LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn);
- /**
- * Set the personality function attached to the function.
- *
- * @see llvm::Function::setPersonalityFn()
- */
- void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn);
- /**
- * Obtain the intrinsic ID number which matches the given function name.
- *
- * @see llvm::Function::lookupIntrinsicID()
- */
- unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen);
- /**
- * Obtain the ID number from a function instance.
- *
- * @see llvm::Function::getIntrinsicID()
- */
- unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
- /**
- * Create or insert the declaration of an intrinsic. For overloaded intrinsics,
- * parameter types must be provided to uniquely identify an overload.
- *
- * @see llvm::Intrinsic::getDeclaration()
- */
- LLVMValueRef LLVMGetIntrinsicDeclaration(LLVMModuleRef Mod,
- unsigned ID,
- LLVMTypeRef *ParamTypes,
- size_t ParamCount);
- /**
- * Retrieves the type of an intrinsic. For overloaded intrinsics, parameter
- * types must be provided to uniquely identify an overload.
- *
- * @see llvm::Intrinsic::getType()
- */
- LLVMTypeRef LLVMIntrinsicGetType(LLVMContextRef Ctx, unsigned ID,
- LLVMTypeRef *ParamTypes, size_t ParamCount);
- /**
- * Retrieves the name of an intrinsic.
- *
- * @see llvm::Intrinsic::getName()
- */
- const char *LLVMIntrinsicGetName(unsigned ID, size_t *NameLength);
- /** Deprecated: Use LLVMIntrinsicCopyOverloadedName2 instead. */
- const char *LLVMIntrinsicCopyOverloadedName(unsigned ID,
- LLVMTypeRef *ParamTypes,
- size_t ParamCount,
- size_t *NameLength);
- /**
- * Copies the name of an overloaded intrinsic identified by a given list of
- * parameter types.
- *
- * Unlike LLVMIntrinsicGetName, the caller is responsible for freeing the
- * returned string.
- *
- * This version also supports unnamed types.
- *
- * @see llvm::Intrinsic::getName()
- */
- const char *LLVMIntrinsicCopyOverloadedName2(LLVMModuleRef Mod, unsigned ID,
- LLVMTypeRef *ParamTypes,
- size_t ParamCount,
- size_t *NameLength);
- /**
- * Obtain if the intrinsic identified by the given ID is overloaded.
- *
- * @see llvm::Intrinsic::isOverloaded()
- */
- LLVMBool LLVMIntrinsicIsOverloaded(unsigned ID);
- /**
- * Obtain the calling function of a function.
- *
- * The returned value corresponds to the LLVMCallConv enumeration.
- *
- * @see llvm::Function::getCallingConv()
- */
- unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
- /**
- * Set the calling convention of a function.
- *
- * @see llvm::Function::setCallingConv()
- *
- * @param Fn Function to operate on
- * @param CC LLVMCallConv to set calling convention to
- */
- void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
- /**
- * Obtain the name of the garbage collector to use during code
- * generation.
- *
- * @see llvm::Function::getGC()
- */
- const char *LLVMGetGC(LLVMValueRef Fn);
- /**
- * Define the garbage collector to use during code generation.
- *
- * @see llvm::Function::setGC()
- */
- void LLVMSetGC(LLVMValueRef Fn, const char *Name);
- /**
- * Add an attribute to a function.
- *
- * @see llvm::Function::addAttribute()
- */
- void LLVMAddAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
- LLVMAttributeRef A);
- unsigned LLVMGetAttributeCountAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx);
- void LLVMGetAttributesAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
- LLVMAttributeRef *Attrs);
- LLVMAttributeRef LLVMGetEnumAttributeAtIndex(LLVMValueRef F,
- LLVMAttributeIndex Idx,
- unsigned KindID);
- LLVMAttributeRef LLVMGetStringAttributeAtIndex(LLVMValueRef F,
- LLVMAttributeIndex Idx,
- const char *K, unsigned KLen);
- void LLVMRemoveEnumAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
- unsigned KindID);
- void LLVMRemoveStringAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
- const char *K, unsigned KLen);
- /**
- * Add a target-dependent attribute to a function
- * @see llvm::AttrBuilder::addAttribute()
- */
- void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
- const char *V);
- /**
- * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
- *
- * Functions in this group relate to arguments/parameters on functions.
- *
- * Functions in this group expect LLVMValueRef instances that correspond
- * to llvm::Function instances.
- *
- * @{
- */
- /**
- * Obtain the number of parameters in a function.
- *
- * @see llvm::Function::arg_size()
- */
- unsigned LLVMCountParams(LLVMValueRef Fn);
- /**
- * Obtain the parameters in a function.
- *
- * The takes a pointer to a pre-allocated array of LLVMValueRef that is
- * at least LLVMCountParams() long. This array will be filled with
- * LLVMValueRef instances which correspond to the parameters the
- * function receives. Each LLVMValueRef corresponds to a llvm::Argument
- * instance.
- *
- * @see llvm::Function::arg_begin()
- */
- void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
- /**
- * Obtain the parameter at the specified index.
- *
- * Parameters are indexed from 0.
- *
- * @see llvm::Function::arg_begin()
- */
- LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
- /**
- * Obtain the function to which this argument belongs.
- *
- * Unlike other functions in this group, this one takes an LLVMValueRef
- * that corresponds to a llvm::Attribute.
- *
- * The returned LLVMValueRef is the llvm::Function to which this
- * argument belongs.
- */
- LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
- /**
- * Obtain the first parameter to a function.
- *
- * @see llvm::Function::arg_begin()
- */
- LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
- /**
- * Obtain the last parameter to a function.
- *
- * @see llvm::Function::arg_end()
- */
- LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
- /**
- * Obtain the next parameter to a function.
- *
- * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
- * actually a wrapped iterator) and obtains the next parameter from the
- * underlying iterator.
- */
- LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
- /**
- * Obtain the previous parameter to a function.
- *
- * This is the opposite of LLVMGetNextParam().
- */
- LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
- /**
- * Set the alignment for a function parameter.
- *
- * @see llvm::Argument::addAttr()
- * @see llvm::AttrBuilder::addAlignmentAttr()
- */
- void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned Align);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueGlobalIFunc IFuncs
- *
- * Functions in this group relate to indirect functions.
- *
- * Functions in this group expect LLVMValueRef instances that correspond
- * to llvm::GlobalIFunc instances.
- *
- * @{
- */
- /**
- * Add a global indirect function to a module under a specified name.
- *
- * @see llvm::GlobalIFunc::create()
- */
- LLVMValueRef LLVMAddGlobalIFunc(LLVMModuleRef M,
- const char *Name, size_t NameLen,
- LLVMTypeRef Ty, unsigned AddrSpace,
- LLVMValueRef Resolver);
- /**
- * Obtain a GlobalIFunc value from a Module by its name.
- *
- * The returned value corresponds to a llvm::GlobalIFunc value.
- *
- * @see llvm::Module::getNamedIFunc()
- */
- LLVMValueRef LLVMGetNamedGlobalIFunc(LLVMModuleRef M,
- const char *Name, size_t NameLen);
- /**
- * Obtain an iterator to the first GlobalIFunc in a Module.
- *
- * @see llvm::Module::ifunc_begin()
- */
- LLVMValueRef LLVMGetFirstGlobalIFunc(LLVMModuleRef M);
- /**
- * Obtain an iterator to the last GlobalIFunc in a Module.
- *
- * @see llvm::Module::ifunc_end()
- */
- LLVMValueRef LLVMGetLastGlobalIFunc(LLVMModuleRef M);
- /**
- * Advance a GlobalIFunc iterator to the next GlobalIFunc.
- *
- * Returns NULL if the iterator was already at the end and there are no more
- * global aliases.
- */
- LLVMValueRef LLVMGetNextGlobalIFunc(LLVMValueRef IFunc);
- /**
- * Decrement a GlobalIFunc iterator to the previous GlobalIFunc.
- *
- * Returns NULL if the iterator was already at the beginning and there are
- * no previous global aliases.
- */
- LLVMValueRef LLVMGetPreviousGlobalIFunc(LLVMValueRef IFunc);
- /**
- * Retrieves the resolver function associated with this indirect function, or
- * NULL if it doesn't not exist.
- *
- * @see llvm::GlobalIFunc::getResolver()
- */
- LLVMValueRef LLVMGetGlobalIFuncResolver(LLVMValueRef IFunc);
- /**
- * Sets the resolver function associated with this indirect function.
- *
- * @see llvm::GlobalIFunc::setResolver()
- */
- void LLVMSetGlobalIFuncResolver(LLVMValueRef IFunc, LLVMValueRef Resolver);
- /**
- * Remove a global indirect function from its parent module and delete it.
- *
- * @see llvm::GlobalIFunc::eraseFromParent()
- */
- void LLVMEraseGlobalIFunc(LLVMValueRef IFunc);
- /**
- * Remove a global indirect function from its parent module.
- *
- * This unlinks the global indirect function from its containing module but
- * keeps it alive.
- *
- * @see llvm::GlobalIFunc::removeFromParent()
- */
- void LLVMRemoveGlobalIFunc(LLVMValueRef IFunc);
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueMetadata Metadata
- *
- * @{
- */
- /**
- * Create an MDString value from a given string value.
- *
- * The MDString value does not take ownership of the given string, it remains
- * the responsibility of the caller to free it.
- *
- * @see llvm::MDString::get()
- */
- LLVMMetadataRef LLVMMDStringInContext2(LLVMContextRef C, const char *Str,
- size_t SLen);
- /**
- * Create an MDNode value with the given array of operands.
- *
- * @see llvm::MDNode::get()
- */
- LLVMMetadataRef LLVMMDNodeInContext2(LLVMContextRef C, LLVMMetadataRef *MDs,
- size_t Count);
- /**
- * Obtain a Metadata as a Value.
- */
- LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, LLVMMetadataRef MD);
- /**
- * Obtain a Value as a Metadata.
- */
- LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val);
- /**
- * Obtain the underlying string from a MDString value.
- *
- * @param V Instance to obtain string from.
- * @param Length Memory address which will hold length of returned string.
- * @return String data in MDString.
- */
- const char *LLVMGetMDString(LLVMValueRef V, unsigned *Length);
- /**
- * Obtain the number of operands from an MDNode value.
- *
- * @param V MDNode to get number of operands from.
- * @return Number of operands of the MDNode.
- */
- unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
- /**
- * Obtain the given MDNode's operands.
- *
- * The passed LLVMValueRef pointer should point to enough memory to hold all of
- * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
- * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
- * MDNode's operands.
- *
- * @param V MDNode to get the operands from.
- * @param Dest Destination array for operands.
- */
- void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
- /** Deprecated: Use LLVMMDStringInContext2 instead. */
- LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
- unsigned SLen);
- /** Deprecated: Use LLVMMDStringInContext2 instead. */
- LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
- /** Deprecated: Use LLVMMDNodeInContext2 instead. */
- LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
- unsigned Count);
- /** Deprecated: Use LLVMMDNodeInContext2 instead. */
- LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueBasicBlock Basic Block
- *
- * A basic block represents a single entry single exit section of code.
- * Basic blocks contain a list of instructions which form the body of
- * the block.
- *
- * Basic blocks belong to functions. They have the type of label.
- *
- * Basic blocks are themselves values. However, the C API models them as
- * LLVMBasicBlockRef.
- *
- * @see llvm::BasicBlock
- *
- * @{
- */
- /**
- * Convert a basic block instance to a value type.
- */
- LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
- /**
- * Determine whether an LLVMValueRef is itself a basic block.
- */
- LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
- /**
- * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
- */
- LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
- /**
- * Obtain the string name of a basic block.
- */
- const char *LLVMGetBasicBlockName(LLVMBasicBlockRef BB);
- /**
- * Obtain the function to which a basic block belongs.
- *
- * @see llvm::BasicBlock::getParent()
- */
- LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
- /**
- * Obtain the terminator instruction for a basic block.
- *
- * If the basic block does not have a terminator (it is not well-formed
- * if it doesn't), then NULL is returned.
- *
- * The returned LLVMValueRef corresponds to an llvm::Instruction.
- *
- * @see llvm::BasicBlock::getTerminator()
- */
- LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
- /**
- * Obtain the number of basic blocks in a function.
- *
- * @param Fn Function value to operate on.
- */
- unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
- /**
- * Obtain all of the basic blocks in a function.
- *
- * This operates on a function value. The BasicBlocks parameter is a
- * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
- * LLVMCountBasicBlocks() in length. This array is populated with
- * LLVMBasicBlockRef instances.
- */
- void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
- /**
- * Obtain the first basic block in a function.
- *
- * The returned basic block can be used as an iterator. You will likely
- * eventually call into LLVMGetNextBasicBlock() with it.
- *
- * @see llvm::Function::begin()
- */
- LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
- /**
- * Obtain the last basic block in a function.
- *
- * @see llvm::Function::end()
- */
- LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
- /**
- * Advance a basic block iterator.
- */
- LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
- /**
- * Go backwards in a basic block iterator.
- */
- LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
- /**
- * Obtain the basic block that corresponds to the entry point of a
- * function.
- *
- * @see llvm::Function::getEntryBlock()
- */
- LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
- /**
- * Insert the given basic block after the insertion point of the given builder.
- *
- * The insertion point must be valid.
- *
- * @see llvm::Function::BasicBlockListType::insertAfter()
- */
- void LLVMInsertExistingBasicBlockAfterInsertBlock(LLVMBuilderRef Builder,
- LLVMBasicBlockRef BB);
- /**
- * Append the given basic block to the basic block list of the given function.
- *
- * @see llvm::Function::BasicBlockListType::push_back()
- */
- void LLVMAppendExistingBasicBlock(LLVMValueRef Fn,
- LLVMBasicBlockRef BB);
- /**
- * Create a new basic block without inserting it into a function.
- *
- * @see llvm::BasicBlock::Create()
- */
- LLVMBasicBlockRef LLVMCreateBasicBlockInContext(LLVMContextRef C,
- const char *Name);
- /**
- * Append a basic block to the end of a function.
- *
- * @see llvm::BasicBlock::Create()
- */
- LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
- LLVMValueRef Fn,
- const char *Name);
- /**
- * Append a basic block to the end of a function using the global
- * context.
- *
- * @see llvm::BasicBlock::Create()
- */
- LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
- /**
- * Insert a basic block in a function before another basic block.
- *
- * The function to add to is determined by the function of the
- * passed basic block.
- *
- * @see llvm::BasicBlock::Create()
- */
- LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
- LLVMBasicBlockRef BB,
- const char *Name);
- /**
- * Insert a basic block in a function using the global context.
- *
- * @see llvm::BasicBlock::Create()
- */
- LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
- const char *Name);
- /**
- * Remove a basic block from a function and delete it.
- *
- * This deletes the basic block from its containing function and deletes
- * the basic block itself.
- *
- * @see llvm::BasicBlock::eraseFromParent()
- */
- void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
- /**
- * Remove a basic block from a function.
- *
- * This deletes the basic block from its containing function but keep
- * the basic block alive.
- *
- * @see llvm::BasicBlock::removeFromParent()
- */
- void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
- /**
- * Move a basic block to before another one.
- *
- * @see llvm::BasicBlock::moveBefore()
- */
- void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
- /**
- * Move a basic block to after another one.
- *
- * @see llvm::BasicBlock::moveAfter()
- */
- void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
- /**
- * Obtain the first instruction in a basic block.
- *
- * The returned LLVMValueRef corresponds to a llvm::Instruction
- * instance.
- */
- LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
- /**
- * Obtain the last instruction in a basic block.
- *
- * The returned LLVMValueRef corresponds to an LLVM:Instruction.
- */
- LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueInstruction Instructions
- *
- * Functions in this group relate to the inspection and manipulation of
- * individual instructions.
- *
- * In the C++ API, an instruction is modeled by llvm::Instruction. This
- * class has a large number of descendents. llvm::Instruction is a
- * llvm::Value and in the C API, instructions are modeled by
- * LLVMValueRef.
- *
- * This group also contains sub-groups which operate on specific
- * llvm::Instruction types, e.g. llvm::CallInst.
- *
- * @{
- */
- /**
- * Determine whether an instruction has any metadata attached.
- */
- int LLVMHasMetadata(LLVMValueRef Val);
- /**
- * Return metadata associated with an instruction value.
- */
- LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
- /**
- * Set metadata associated with an instruction value.
- */
- void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
- /**
- * Returns the metadata associated with an instruction value, but filters out
- * all the debug locations.
- *
- * @see llvm::Instruction::getAllMetadataOtherThanDebugLoc()
- */
- LLVMValueMetadataEntry *
- LLVMInstructionGetAllMetadataOtherThanDebugLoc(LLVMValueRef Instr,
- size_t *NumEntries);
- /**
- * Obtain the basic block to which an instruction belongs.
- *
- * @see llvm::Instruction::getParent()
- */
- LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
- /**
- * Obtain the instruction that occurs after the one specified.
- *
- * The next instruction will be from the same basic block.
- *
- * If this is the last instruction in a basic block, NULL will be
- * returned.
- */
- LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
- /**
- * Obtain the instruction that occurred before this one.
- *
- * If the instruction is the first instruction in a basic block, NULL
- * will be returned.
- */
- LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
- /**
- * Remove and delete an instruction.
- *
- * The instruction specified is removed from its containing building
- * block but is kept alive.
- *
- * @see llvm::Instruction::removeFromParent()
- */
- void LLVMInstructionRemoveFromParent(LLVMValueRef Inst);
- /**
- * Remove and delete an instruction.
- *
- * The instruction specified is removed from its containing building
- * block and then deleted.
- *
- * @see llvm::Instruction::eraseFromParent()
- */
- void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
- /**
- * Obtain the code opcode for an individual instruction.
- *
- * @see llvm::Instruction::getOpCode()
- */
- LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
- /**
- * Obtain the predicate of an instruction.
- *
- * This is only valid for instructions that correspond to llvm::ICmpInst
- * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
- *
- * @see llvm::ICmpInst::getPredicate()
- */
- LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
- /**
- * Obtain the float predicate of an instruction.
- *
- * This is only valid for instructions that correspond to llvm::FCmpInst
- * or llvm::ConstantExpr whose opcode is llvm::Instruction::FCmp.
- *
- * @see llvm::FCmpInst::getPredicate()
- */
- LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst);
- /**
- * Create a copy of 'this' instruction that is identical in all ways
- * except the following:
- * * The instruction has no parent
- * * The instruction has no name
- *
- * @see llvm::Instruction::clone()
- */
- LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst);
- /**
- * Determine whether an instruction is a terminator. This routine is named to
- * be compatible with historical functions that did this by querying the
- * underlying C++ type.
- *
- * @see llvm::Instruction::isTerminator()
- */
- LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Inst);
- /**
- * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
- *
- * Functions in this group apply to instructions that refer to call
- * sites and invocations. These correspond to C++ types in the
- * llvm::CallInst class tree.
- *
- * @{
- */
- /**
- * Obtain the argument count for a call instruction.
- *
- * This expects an LLVMValueRef that corresponds to a llvm::CallInst,
- * llvm::InvokeInst, or llvm:FuncletPadInst.
- *
- * @see llvm::CallInst::getNumArgOperands()
- * @see llvm::InvokeInst::getNumArgOperands()
- * @see llvm::FuncletPadInst::getNumArgOperands()
- */
- unsigned LLVMGetNumArgOperands(LLVMValueRef Instr);
- /**
- * Set the calling convention for a call instruction.
- *
- * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
- * llvm::InvokeInst.
- *
- * @see llvm::CallInst::setCallingConv()
- * @see llvm::InvokeInst::setCallingConv()
- */
- void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
- /**
- * Obtain the calling convention for a call instruction.
- *
- * This is the opposite of LLVMSetInstructionCallConv(). Reads its
- * usage.
- *
- * @see LLVMSetInstructionCallConv()
- */
- unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
- void LLVMSetInstrParamAlignment(LLVMValueRef Instr, LLVMAttributeIndex Idx,
- unsigned Align);
- void LLVMAddCallSiteAttribute(LLVMValueRef C, LLVMAttributeIndex Idx,
- LLVMAttributeRef A);
- unsigned LLVMGetCallSiteAttributeCount(LLVMValueRef C, LLVMAttributeIndex Idx);
- void LLVMGetCallSiteAttributes(LLVMValueRef C, LLVMAttributeIndex Idx,
- LLVMAttributeRef *Attrs);
- LLVMAttributeRef LLVMGetCallSiteEnumAttribute(LLVMValueRef C,
- LLVMAttributeIndex Idx,
- unsigned KindID);
- LLVMAttributeRef LLVMGetCallSiteStringAttribute(LLVMValueRef C,
- LLVMAttributeIndex Idx,
- const char *K, unsigned KLen);
- void LLVMRemoveCallSiteEnumAttribute(LLVMValueRef C, LLVMAttributeIndex Idx,
- unsigned KindID);
- void LLVMRemoveCallSiteStringAttribute(LLVMValueRef C, LLVMAttributeIndex Idx,
- const char *K, unsigned KLen);
- /**
- * Obtain the function type called by this instruction.
- *
- * @see llvm::CallBase::getFunctionType()
- */
- LLVMTypeRef LLVMGetCalledFunctionType(LLVMValueRef C);
- /**
- * Obtain the pointer to the function invoked by this instruction.
- *
- * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
- * llvm::InvokeInst.
- *
- * @see llvm::CallInst::getCalledOperand()
- * @see llvm::InvokeInst::getCalledOperand()
- */
- LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr);
- /**
- * Obtain whether a call instruction is a tail call.
- *
- * This only works on llvm::CallInst instructions.
- *
- * @see llvm::CallInst::isTailCall()
- */
- LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
- /**
- * Set whether a call instruction is a tail call.
- *
- * This only works on llvm::CallInst instructions.
- *
- * @see llvm::CallInst::setTailCall()
- */
- void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
- /**
- * Return the normal destination basic block.
- *
- * This only works on llvm::InvokeInst instructions.
- *
- * @see llvm::InvokeInst::getNormalDest()
- */
- LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst);
- /**
- * Return the unwind destination basic block.
- *
- * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and
- * llvm::CatchSwitchInst instructions.
- *
- * @see llvm::InvokeInst::getUnwindDest()
- * @see llvm::CleanupReturnInst::getUnwindDest()
- * @see llvm::CatchSwitchInst::getUnwindDest()
- */
- LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef InvokeInst);
- /**
- * Set the normal destination basic block.
- *
- * This only works on llvm::InvokeInst instructions.
- *
- * @see llvm::InvokeInst::setNormalDest()
- */
- void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B);
- /**
- * Set the unwind destination basic block.
- *
- * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and
- * llvm::CatchSwitchInst instructions.
- *
- * @see llvm::InvokeInst::setUnwindDest()
- * @see llvm::CleanupReturnInst::setUnwindDest()
- * @see llvm::CatchSwitchInst::setUnwindDest()
- */
- void LLVMSetUnwindDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueInstructionTerminator Terminators
- *
- * Functions in this group only apply to instructions for which
- * LLVMIsATerminatorInst returns true.
- *
- * @{
- */
- /**
- * Return the number of successors that this terminator has.
- *
- * @see llvm::Instruction::getNumSuccessors
- */
- unsigned LLVMGetNumSuccessors(LLVMValueRef Term);
- /**
- * Return the specified successor.
- *
- * @see llvm::Instruction::getSuccessor
- */
- LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i);
- /**
- * Update the specified successor to point at the provided block.
- *
- * @see llvm::Instruction::setSuccessor
- */
- void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block);
- /**
- * Return if a branch is conditional.
- *
- * This only works on llvm::BranchInst instructions.
- *
- * @see llvm::BranchInst::isConditional
- */
- LLVMBool LLVMIsConditional(LLVMValueRef Branch);
- /**
- * Return the condition of a branch instruction.
- *
- * This only works on llvm::BranchInst instructions.
- *
- * @see llvm::BranchInst::getCondition
- */
- LLVMValueRef LLVMGetCondition(LLVMValueRef Branch);
- /**
- * Set the condition of a branch instruction.
- *
- * This only works on llvm::BranchInst instructions.
- *
- * @see llvm::BranchInst::setCondition
- */
- void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond);
- /**
- * Obtain the default destination basic block of a switch instruction.
- *
- * This only works on llvm::SwitchInst instructions.
- *
- * @see llvm::SwitchInst::getDefaultDest()
- */
- LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueInstructionAlloca Allocas
- *
- * Functions in this group only apply to instructions that map to
- * llvm::AllocaInst instances.
- *
- * @{
- */
- /**
- * Obtain the type that is being allocated by the alloca instruction.
- */
- LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueInstructionGetElementPointer GEPs
- *
- * Functions in this group only apply to instructions that map to
- * llvm::GetElementPtrInst instances.
- *
- * @{
- */
- /**
- * Check whether the given GEP operator is inbounds.
- */
- LLVMBool LLVMIsInBounds(LLVMValueRef GEP);
- /**
- * Set the given GEP instruction to be inbounds or not.
- */
- void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds);
- /**
- * Get the source element type of the given GEP operator.
- */
- LLVMTypeRef LLVMGetGEPSourceElementType(LLVMValueRef GEP);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
- *
- * Functions in this group only apply to instructions that map to
- * llvm::PHINode instances.
- *
- * @{
- */
- /**
- * Add an incoming value to the end of a PHI list.
- */
- void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
- LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
- /**
- * Obtain the number of incoming basic blocks to a PHI node.
- */
- unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
- /**
- * Obtain an incoming value to a PHI node as an LLVMValueRef.
- */
- LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
- /**
- * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
- */
- LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreValueInstructionExtractValue ExtractValue
- * @defgroup LLVMCCoreValueInstructionInsertValue InsertValue
- *
- * Functions in this group only apply to instructions that map to
- * llvm::ExtractValue and llvm::InsertValue instances.
- *
- * @{
- */
- /**
- * Obtain the number of indices.
- * NB: This also works on GEP operators.
- */
- unsigned LLVMGetNumIndices(LLVMValueRef Inst);
- /**
- * Obtain the indices as an array.
- */
- const unsigned *LLVMGetIndices(LLVMValueRef Inst);
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
- *
- * An instruction builder represents a point within a basic block and is
- * the exclusive means of building instructions using the C interface.
- *
- * @{
- */
- LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
- LLVMBuilderRef LLVMCreateBuilder(void);
- void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
- LLVMValueRef Instr);
- void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
- void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
- LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
- void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
- void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
- void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
- const char *Name);
- void LLVMDisposeBuilder(LLVMBuilderRef Builder);
- /* Metadata */
- /**
- * Get location information used by debugging information.
- *
- * @see llvm::IRBuilder::getCurrentDebugLocation()
- */
- LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder);
- /**
- * Set location information used by debugging information.
- *
- * To clear the location metadata of the given instruction, pass NULL to \p Loc.
- *
- * @see llvm::IRBuilder::SetCurrentDebugLocation()
- */
- void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, LLVMMetadataRef Loc);
- /**
- * Attempts to set the debug location for the given instruction using the
- * current debug location for the given builder. If the builder has no current
- * debug location, this function is a no-op.
- *
- * @deprecated LLVMSetInstDebugLocation is deprecated in favor of the more general
- * LLVMAddMetadataToInst.
- *
- * @see llvm::IRBuilder::SetInstDebugLocation()
- */
- void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
- /**
- * Adds the metadata registered with the given builder to the given instruction.
- *
- * @see llvm::IRBuilder::AddMetadataToInst()
- */
- void LLVMAddMetadataToInst(LLVMBuilderRef Builder, LLVMValueRef Inst);
- /**
- * Get the dafult floating-point math metadata for a given builder.
- *
- * @see llvm::IRBuilder::getDefaultFPMathTag()
- */
- LLVMMetadataRef LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder);
- /**
- * Set the default floating-point math metadata for the given builder.
- *
- * To clear the metadata, pass NULL to \p FPMathTag.
- *
- * @see llvm::IRBuilder::setDefaultFPMathTag()
- */
- void LLVMBuilderSetDefaultFPMathTag(LLVMBuilderRef Builder,
- LLVMMetadataRef FPMathTag);
- /**
- * Deprecated: Passing the NULL location will crash.
- * Use LLVMGetCurrentDebugLocation2 instead.
- */
- void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
- /**
- * Deprecated: Returning the NULL location will crash.
- * Use LLVMGetCurrentDebugLocation2 instead.
- */
- LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
- /* Terminators */
- LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
- LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
- LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
- unsigned N);
- LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
- LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
- LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
- LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
- LLVMBasicBlockRef Else, unsigned NumCases);
- LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
- unsigned NumDests);
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
- LLVMValueRef *Args, unsigned NumArgs,
- LLVMBasicBlockRef Then,
- LLVMBasicBlockRef Catch, const char *Name),
- "Use LLVMBuildInvoke2 instead to support opaque pointers");
- LLVMValueRef LLVMBuildInvoke2(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Fn,
- LLVMValueRef *Args, unsigned NumArgs,
- LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
- const char *Name);
- LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
- /* Exception Handling */
- LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
- LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
- LLVMValueRef PersFn, unsigned NumClauses,
- const char *Name);
- LLVMValueRef LLVMBuildCleanupRet(LLVMBuilderRef B, LLVMValueRef CatchPad,
- LLVMBasicBlockRef BB);
- LLVMValueRef LLVMBuildCatchRet(LLVMBuilderRef B, LLVMValueRef CatchPad,
- LLVMBasicBlockRef BB);
- LLVMValueRef LLVMBuildCatchPad(LLVMBuilderRef B, LLVMValueRef ParentPad,
- LLVMValueRef *Args, unsigned NumArgs,
- const char *Name);
- LLVMValueRef LLVMBuildCleanupPad(LLVMBuilderRef B, LLVMValueRef ParentPad,
- LLVMValueRef *Args, unsigned NumArgs,
- const char *Name);
- LLVMValueRef LLVMBuildCatchSwitch(LLVMBuilderRef B, LLVMValueRef ParentPad,
- LLVMBasicBlockRef UnwindBB,
- unsigned NumHandlers, const char *Name);
- /* Add a case to the switch instruction */
- void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
- LLVMBasicBlockRef Dest);
- /* Add a destination to the indirectbr instruction */
- void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
- /* Get the number of clauses on the landingpad instruction */
- unsigned LLVMGetNumClauses(LLVMValueRef LandingPad);
- /* Get the value of the clause at index Idx on the landingpad instruction */
- LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx);
- /* Add a catch or filter clause to the landingpad instruction */
- void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
- /* Get the 'cleanup' flag in the landingpad instruction */
- LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad);
- /* Set the 'cleanup' flag in the landingpad instruction */
- void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
- /* Add a destination to the catchswitch instruction */
- void LLVMAddHandler(LLVMValueRef CatchSwitch, LLVMBasicBlockRef Dest);
- /* Get the number of handlers on the catchswitch instruction */
- unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch);
- /**
- * Obtain the basic blocks acting as handlers for a catchswitch instruction.
- *
- * The Handlers parameter should point to a pre-allocated array of
- * LLVMBasicBlockRefs at least LLVMGetNumHandlers() large. On return, the
- * first LLVMGetNumHandlers() entries in the array will be populated
- * with LLVMBasicBlockRef instances.
- *
- * @param CatchSwitch The catchswitch instruction to operate on.
- * @param Handlers Memory address of an array to be filled with basic blocks.
- */
- void LLVMGetHandlers(LLVMValueRef CatchSwitch, LLVMBasicBlockRef *Handlers);
- /* Funclets */
- /* Get the number of funcletpad arguments. */
- LLVMValueRef LLVMGetArgOperand(LLVMValueRef Funclet, unsigned i);
- /* Set a funcletpad argument at the given index. */
- void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, LLVMValueRef value);
- /**
- * Get the parent catchswitch instruction of a catchpad instruction.
- *
- * This only works on llvm::CatchPadInst instructions.
- *
- * @see llvm::CatchPadInst::getCatchSwitch()
- */
- LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad);
- /**
- * Set the parent catchswitch instruction of a catchpad instruction.
- *
- * This only works on llvm::CatchPadInst instructions.
- *
- * @see llvm::CatchPadInst::setCatchSwitch()
- */
- void LLVMSetParentCatchSwitch(LLVMValueRef CatchPad, LLVMValueRef CatchSwitch);
- /* Arithmetic */
- LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildExactUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
- LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
- LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
- const char *Name);
- LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
- const char *Name);
- LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
- LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
- /* Memory */
- LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
- LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
- LLVMValueRef Val, const char *Name);
- /**
- * Creates and inserts a memset to the specified pointer and the
- * specified value.
- *
- * @see llvm::IRRBuilder::CreateMemSet()
- */
- LLVMValueRef LLVMBuildMemSet(LLVMBuilderRef B, LLVMValueRef Ptr,
- LLVMValueRef Val, LLVMValueRef Len,
- unsigned Align);
- /**
- * Creates and inserts a memcpy between the specified pointers.
- *
- * @see llvm::IRRBuilder::CreateMemCpy()
- */
- LLVMValueRef LLVMBuildMemCpy(LLVMBuilderRef B,
- LLVMValueRef Dst, unsigned DstAlign,
- LLVMValueRef Src, unsigned SrcAlign,
- LLVMValueRef Size);
- /**
- * Creates and inserts a memmove between the specified pointers.
- *
- * @see llvm::IRRBuilder::CreateMemMove()
- */
- LLVMValueRef LLVMBuildMemMove(LLVMBuilderRef B,
- LLVMValueRef Dst, unsigned DstAlign,
- LLVMValueRef Src, unsigned SrcAlign,
- LLVMValueRef Size);
- LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
- LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
- LLVMValueRef Val, const char *Name);
- LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
- const char *Name),
- "Use LLVMBuildLoad2 instead to support opaque pointers");
- LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef, LLVMTypeRef Ty,
- LLVMValueRef PointerVal, const char *Name);
- LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
- LLVMValueRef *Indices, unsigned NumIndices,
- const char *Name),
- "Use LLVMBuildGEP2 instead to support opaque pointers");
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
- LLVMValueRef *Indices,
- unsigned NumIndices, const char *Name),
- "Use LLVMBuildInBoundsGEP2 instead to support opaque pointers");
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
- unsigned Idx, const char *Name),
- "Use LLVMBuildStructGEP2 instead to support opaque pointers");
- LLVMValueRef LLVMBuildGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
- LLVMValueRef Pointer, LLVMValueRef *Indices,
- unsigned NumIndices, const char *Name);
- LLVMValueRef LLVMBuildInBoundsGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
- LLVMValueRef Pointer, LLVMValueRef *Indices,
- unsigned NumIndices, const char *Name);
- LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
- LLVMValueRef Pointer, unsigned Idx,
- const char *Name);
- LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
- const char *Name);
- LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
- const char *Name);
- LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
- void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
- LLVMBool LLVMGetWeak(LLVMValueRef CmpXchgInst);
- void LLVMSetWeak(LLVMValueRef CmpXchgInst, LLVMBool IsWeak);
- LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst);
- void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering);
- LLVMAtomicRMWBinOp LLVMGetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst);
- void LLVMSetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst, LLVMAtomicRMWBinOp BinOp);
- /* Casts */
- LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- LLVMValueRef LLVMBuildIntCast2(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, LLVMBool IsSigned,
- const char *Name);
- LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
- /** Deprecated: This cast is always signed. Use LLVMBuildIntCast2 instead. */
- LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
- LLVMTypeRef DestTy, const char *Name);
- /* Comparisons */
- LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
- LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
- LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- /* Miscellaneous instructions */
- LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
- LLVMValueRef *Args, unsigned NumArgs,
- const char *Name),
- "Use LLVMBuildCall2 instead to support opaque pointers");
- LLVMValueRef LLVMBuildCall2(LLVMBuilderRef, LLVMTypeRef, LLVMValueRef Fn,
- LLVMValueRef *Args, unsigned NumArgs,
- const char *Name);
- LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
- LLVMValueRef Then, LLVMValueRef Else,
- const char *Name);
- LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
- const char *Name);
- LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
- LLVMValueRef Index, const char *Name);
- LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
- LLVMValueRef EltVal, LLVMValueRef Index,
- const char *Name);
- LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
- LLVMValueRef V2, LLVMValueRef Mask,
- const char *Name);
- LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
- unsigned Index, const char *Name);
- LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
- LLVMValueRef EltVal, unsigned Index,
- const char *Name);
- LLVMValueRef LLVMBuildFreeze(LLVMBuilderRef, LLVMValueRef Val,
- const char *Name);
- LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
- const char *Name);
- LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
- const char *Name);
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
- LLVMValueRef RHS, const char *Name),
- "Use LLVMBuildPtrDiff2 instead to support opaque pointers");
- LLVMValueRef LLVMBuildPtrDiff2(LLVMBuilderRef, LLVMTypeRef ElemTy,
- LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
- LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
- LLVMBool singleThread, const char *Name);
- LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
- LLVMValueRef PTR, LLVMValueRef Val,
- LLVMAtomicOrdering ordering,
- LLVMBool singleThread);
- LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr,
- LLVMValueRef Cmp, LLVMValueRef New,
- LLVMAtomicOrdering SuccessOrdering,
- LLVMAtomicOrdering FailureOrdering,
- LLVMBool SingleThread);
- /**
- * Get the number of elements in the mask of a ShuffleVector instruction.
- */
- unsigned LLVMGetNumMaskElements(LLVMValueRef ShuffleVectorInst);
- /**
- * \returns a constant that specifies that the result of a \c ShuffleVectorInst
- * is undefined.
- */
- int LLVMGetUndefMaskElem(void);
- /**
- * Get the mask value at position Elt in the mask of a ShuffleVector
- * instruction.
- *
- * \Returns the result of \c LLVMGetUndefMaskElem() if the mask value is undef
- * at that position.
- */
- int LLVMGetMaskValue(LLVMValueRef ShuffleVectorInst, unsigned Elt);
- LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst);
- void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool SingleThread);
- LLVMAtomicOrdering LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst);
- void LLVMSetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst,
- LLVMAtomicOrdering Ordering);
- LLVMAtomicOrdering LLVMGetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst);
- void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst,
- LLVMAtomicOrdering Ordering);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreModuleProvider Module Providers
- *
- * @{
- */
- /**
- * Changes the type of M so it can be passed to FunctionPassManagers and the
- * JIT. They take ModuleProviders for historical reasons.
- */
- LLVMModuleProviderRef
- LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
- /**
- * Destroys the module M.
- */
- void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
- *
- * @{
- */
- LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
- LLVMMemoryBufferRef *OutMemBuf,
- char **OutMessage);
- LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
- char **OutMessage);
- LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
- size_t InputDataLength,
- const char *BufferName,
- LLVMBool RequiresNullTerminator);
- LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
- size_t InputDataLength,
- const char *BufferName);
- const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
- size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
- void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCorePassRegistry Pass Registry
- * @ingroup LLVMCCore
- *
- * @{
- */
- /** Return the global pass registry, for use with initialization functions.
- @see llvm::PassRegistry::getPassRegistry */
- LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCorePassManagers Pass Managers
- * @ingroup LLVMCCore
- *
- * @{
- */
- /** Constructs a new whole-module pass pipeline. This type of pipeline is
- suitable for link-time optimization and whole-module transformations.
- @see llvm::PassManager::PassManager */
- LLVMPassManagerRef LLVMCreatePassManager(void);
- /** Constructs a new function-by-function pass pipeline over the module
- provider. It does not take ownership of the module provider. This type of
- pipeline is suitable for code generation and JIT compilation tasks.
- @see llvm::FunctionPassManager::FunctionPassManager */
- LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
- /** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
- LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
- /** Initializes, executes on the provided module, and finalizes all of the
- passes scheduled in the pass manager. Returns 1 if any of the passes
- modified the module, 0 otherwise.
- @see llvm::PassManager::run(Module&) */
- LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
- /** Initializes all of the function passes scheduled in the function pass
- manager. Returns 1 if any of the passes modified the module, 0 otherwise.
- @see llvm::FunctionPassManager::doInitialization */
- LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
- /** Executes all of the function passes scheduled in the function pass manager
- on the provided function. Returns 1 if any of the passes modified the
- function, false otherwise.
- @see llvm::FunctionPassManager::run(Function&) */
- LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
- /** Finalizes all of the function passes scheduled in the function pass
- manager. Returns 1 if any of the passes modified the module, 0 otherwise.
- @see llvm::FunctionPassManager::doFinalization */
- LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
- /** Frees the memory of a pass pipeline. For function pipelines, does not free
- the module provider.
- @see llvm::PassManagerBase::~PassManagerBase. */
- void LLVMDisposePassManager(LLVMPassManagerRef PM);
- /**
- * @}
- */
- /**
- * @defgroup LLVMCCoreThreading Threading
- *
- * Handle the structures needed to make LLVM safe for multithreading.
- *
- * @{
- */
- /** Deprecated: Multi-threading can only be enabled/disabled with the compile
- time define LLVM_ENABLE_THREADS. This function always returns
- LLVMIsMultithreaded(). */
- LLVMBool LLVMStartMultithreaded(void);
- /** Deprecated: Multi-threading can only be enabled/disabled with the compile
- time define LLVM_ENABLE_THREADS. */
- void LLVMStopMultithreaded(void);
- /** Check whether LLVM is executing in thread-safe mode or not.
- @see llvm::llvm_is_multithreaded */
- LLVMBool LLVMIsMultithreaded(void);
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- LLVM_C_EXTERN_C_END
- #endif /* LLVM_C_CORE_H */
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|