123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248 |
- #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 */
- LLVMTargetExtTypeKind, /**< Target extension type */
- } 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,
- LLVMConstantTargetNoneValueKind,
- } 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 */
- LLVMAtomicRMWBinOpFMax, /**< Sets the value if it's greater than the
- original using an floating point comparison and
- return the old one */
- LLVMAtomicRMWBinOpFMin, /**< Sets the value if it's smaller than the
- original using an floating point comparison 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);
- /*===-- Version query -----------------------------------------------------===*/
- /**
- * Return the major, minor, and patch version of LLVM
- *
- * The version components are returned via the function's three output
- * parameters or skipped if a NULL pointer was supplied.
- */
- void LLVMGetVersion(unsigned *Major, unsigned *Minor, unsigned *Patch);
- /*===-- 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);
- /**
- * Set whether the given context is in opaque pointer mode.
- *
- * @see LLVMContext::setOpaquePointers()
- */
- void LLVMContextSetOpaquePointers(LLVMContextRef C, LLVMBool OpaquePointers);
- /**
- * 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 element type of an array or vector type.
- *
- * This currently also works for pointer types, but this usage is deprecated.
- *
- * @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);
- /**
- * Determine whether a pointer is opaque.
- *
- * True if this is an instance of an opaque PointerType.
- *
- * @see llvm::Type::isOpaquePointerTy()
- */
- LLVMBool LLVMPointerTypeIsOpaque(LLVMTypeRef Ty);
- /**
- * Create an opaque pointer type in a context.
- *
- * @see llvm::PointerType::get()
- */
- LLVMTypeRef LLVMPointerTypeInContext(LLVMContextRef C, 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);
- /**
- * Create a target extension type in LLVM context.
- */
- LLVMTypeRef LLVMTargetExtTypeInContext(LLVMContextRef C, const char *Name,
- LLVMTypeRef *TypeParams,
- unsigned TypeParamCount,
- unsigned *IntParams,
- unsigned IntParamCount);
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @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 element of a constant aggregate (struct, array or vector) at the
- * specified index. Returns null if the index is out of range, or it's not
- * possible to determine the element (e.g., because the constant is a
- * constant expression.)
- *
- * @see llvm::Constant::getAggregateElement()
- */
- LLVMValueRef LLVMGetAggregateElement(LLVMValueRef C, unsigned Idx);
- /**
- * Get an element at specified index as a constant.
- *
- * @see ConstantDataSequential::getElementAsConstant()
- */
- LLVM_ATTRIBUTE_C_DEPRECATED(
- LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef C, unsigned idx),
- "Use LLVMGetAggregateElement instead");
- /**
- * 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 LLVMConstNot(LLVMValueRef ConstantVal);
- LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
- LLVMValueRef LLVMConstNUWMul(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);
- LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
- LLVMValueRef *ConstantIndices, unsigned NumIndices);
- 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 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
- *
- * @{
- */
- /**
- * 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 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);
- /**
- * Delete an instruction.
- *
- * The instruction specified is deleted. It must have previously been
- * removed from its containing building block.
- *
- * @see llvm::Value::deleteValue()
- */
- void LLVMDeleteInstruction(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);
- 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);
- LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef, LLVMTypeRef Ty,
- LLVMValueRef PointerVal, const char *Name);
- LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
- 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);
- LLVMOpcode LLVMGetCastOpcode(LLVMValueRef Src, LLVMBool SrcIsSigned,
- LLVMTypeRef DestTy, LLVMBool DestIsSigned);
- /* 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);
- 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);
- 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
|