/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 2 2 ĠPl ank Ċ Ġ* Ċ Ġ* ĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . pl ank . llvm 4 k Ċ Ċ import Ġorg . byte deco . llvm . LLVM . LLVM Builder Ref Ċ import Ġorg . byte deco . llvm . global . LLVM Ċ import Ġorg . pl ank . llvm 4 k . ir . Addr Space Ċ import Ġorg . pl ank . llvm 4 k . ir . Alloc a Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Atomic Cmp X chg Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Atomic Ordering Ċ import Ġorg . pl ank . llvm 4 k . ir . Atomic RM W Bin Op Ċ import Ġorg . pl ank . llvm 4 k . ir . Atomic RM W Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . BasicBlock Ċ import Ġorg . pl ank . llvm 4 k . ir . Branch Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Call Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Catch Pad Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Catch Return Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Catch Switch Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Cleanup Pad Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Cleanup Return Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Fence Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Function Ċ import Ġorg . pl ank . llvm 4 k . ir . FunctionType Ċ import Ġorg . pl ank . llvm 4 k . ir . Global Variable Ċ import Ġorg . pl ank . llvm 4 k . ir . Indirect Br Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Int Predicate Ċ import Ġorg . pl ank . llvm 4 k . ir . Invoke Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Landing Pad Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Load Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Opcode Ċ import Ġorg . pl ank . llvm 4 k . ir . Phi Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Real Predicate Ċ import Ġorg . pl ank . llvm 4 k . ir . Resume Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Return Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Store Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Switch Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Type Ċ import Ġorg . pl ank . llvm 4 k . ir . Un reachable Inst Ċ import Ġorg . pl ank . llvm 4 k . ir . Value Ċ import Ġkotlin . properties . Property Delegate Provider Ċ import Ġkotlin . properties . ReadOnly Property Ċ Ċ internal Ġclass ĠIR Builder Impl ( val Ġref : ĠLLVM Builder Ref ?) Ġ: ĠIR Builder Ġ{ ĊĠ Ġoverride Ġval Ġinsertion Block : ĠBasic Block ? ĊĠĠĠ Ġget (): ĠBasic Block ? Ġ= ĠLLVM . LLVM Get Insert Block ( ref )?. let (:: BasicBlock ) ĊĊĠ Ġoverride Ġfun Ġposition After ( block : ĠBasic Block ): ĠIR Builder Ġ{ ĊĠĠĠ ĠLLVM . LL V MP osition Builder At End ( ref , Ġblock . ref ) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Global StringPtr ( value : ĠString ): ĠProperty Delegate Provider < Any ?, ĠReadOnly Property < Any ?, ĠGlobal Variable >> Ġ{ ĊĠĠĠ Ġreturn ĠProperty Delegate Provider Ġ{ Ġ_, Ġproperty Ġ-> ĊĠĠĠĠĠ Ġval Ġptr Ġ= Ġcreate Global StringPtr ( value , Ġproperty . name ) ĊĊĠĠĠĠĠ ĠReadOnly Property Ġ{ Ġ_, Ġ_ Ġ-> Ġptr Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Global StringPtr ( value : ĠString , Ġname : ĠString ): ĠGlobal Variable Ġ{ ĊĠĠĠ Ġreturn ĠGlobal Variable ( LLVM . LLVM Build Global StringPtr ( ref , Ġvalue , Ġname )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Global String ( value : ĠString ): ĠProperty Delegate Provider < Any ?, ĠReadOnly Property < Any ?, ĠGlobal Variable >> Ġ{ ĊĠĠĠ Ġreturn ĠProperty Delegate Provider Ġ{ Ġ_, Ġproperty Ġ-> ĊĠĠĠĠĠ Ġval Ġstring Ġ= Ġcreate Global String ( value , Ġproperty . name ) ĊĊĠĠĠĠĠ ĠReadOnly Property Ġ{ Ġ_, Ġ_ Ġ-> Ġstring Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Global String ( value : ĠString , Ġname : ĠString ): ĠGlobal Variable Ġ{ ĊĠĠĠ Ġreturn ĠGlobal Variable ( LLVM . LLVM Build Global String ( ref , Ġvalue , Ġname )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Ret Void (): ĠReturn Inst Ġ{ ĊĠĠĠ Ġreturn ĠReturn Inst ( LLVM . LLVM Build Ret Void ( ref )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Ret ( value : ĠValue ?): ĠReturn Inst Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠ Ġnull Ġ-> ĠReturn Inst ( LLVM . LLVM Build Ret Void ( ref )) ĊĠĠĠĠĠ Ġelse Ġ-> ĠReturn Inst ( LLVM . LLVM Build Ret ( ref , Ġvalue . ref )) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Aggregate Ret ( values : ĠList < Value >): ĠReturn Inst Ġ{ ĊĠĠĠ Ġreturn ĠReturn Inst ( ĊĠĠĠĠĠ ĠLLVM . LLVM Build Aggregate Ret ( ĊĠĠĠĠĠĠĠ Ġref , ĊĠĠĠĠĠĠĠ Ġvalues . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), ĊĠĠĠĠĠĠĠ Ġvalues . size ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Br ( dest : ĠBasic Block ): ĠBranch Inst Ġ{ ĊĠĠĠ Ġreturn ĠBranch Inst ( LLVM . LLVM Build Br ( ref , Ġdest . ref )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Cond Br ( cond : ĠValue , Ġif True : ĠBasic Block , Ġif False : ĠBasic Block ): ĠBranch Inst Ġ{ ĊĠĠĠ Ġreturn ĠBranch Inst ( LLVM . LLVM Build Cond Br ( ref , Ġcond . ref , Ġif True . ref , Ġif False . ref )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Switch ( value : ĠValue , Ġdefault : ĠBasic Block , Ġnum Cases : ĠInt ): ĠSwitch Inst Ġ{ ĊĠĠĠ Ġreturn ĠSwitch Inst ( LLVM . LLVM Build Switch ( ref , Ġvalue . ref , Ġdefault . ref , Ġnum Cases )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Indirect Br ( address : ĠValue , Ġnum Dest s : ĠInt ): ĠIn direct Br Inst Ġ{ ĊĠĠĠ Ġreturn ĠIn direct Br Inst ( LLVM . LLVM Build Indirect Br ( ref , Ġaddress . ref , Ġnum Dest s )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Invoke ( ĊĠĠĠ Ġtype : ĠFunction Type , ĊĠĠĠ Ġcal lee : ĠValue , ĊĠĠĠ Ġnormal Dest : ĠBasic Block , ĊĠĠĠ Ġun wind Dest : ĠBasic Block , ĊĠĠĠ Ġargs : ĠList < Value >, ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠInvoke Inst Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Invoke 2 ( ĊĠĠĠĠĠ Ġref , Ġtype . ref , Ġcal lee . ref , Ġargs . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), Ġargs . size , ĊĠĠĠĠĠ Ġnormal Dest . ref , Ġun wind Dest . ref , Ġname Ġ?: Ġ"" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn ĠInvoke Inst ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Invoke ( ĊĠĠĠ Ġcal lee : ĠValue , ĊĠĠĠ Ġnormal Dest : ĠBasic Block , ĊĠĠĠ Ġun wind Dest : ĠBasic Block , ĊĠĠĠ Ġargs : ĠList < Value >, ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠInvoke Inst Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Invoke ( ĊĠĠĠĠĠ Ġref , Ġcal lee . ref , Ġargs . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), Ġargs . size , ĊĠĠĠĠĠ Ġnormal Dest . ref , Ġun wind Dest . ref , Ġname Ġ?: Ġ"" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn ĠInvoke Inst ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Resume ( value : ĠValue ): ĠResume Inst Ġ{ ĊĠĠĠ Ġreturn ĠResume Inst ( LLVM . LLVM Build Resume ( ref , Ġvalue . ref )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Cleanup Ret ( pad : ĠCleanup Pad Inst , Ġun wind BB : ĠBasic Block ?): ĠCleanup Return Inst Ġ{ ĊĠĠĠ Ġreturn ĠCleanup Return Inst ( LLVM . LLVM Build Cleanup Ret ( ref , Ġpad . ref , Ġun wind BB ?. ref )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Catch Switch ( ĊĠĠĠ Ġparent Pad : ĠValue , ĊĠĠĠ Ġun wind BB : ĠBasic Block , ĊĠĠĠ Ġnum Handlers : ĠInt , ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠCatch Switch Inst Ġ{ ĊĠĠĠ Ġreturn ĠCatch Switch Inst ( ĊĠĠĠĠĠ ĠLLVM . LLVM Build Catch Switch ( ref , Ġparent Pad . ref , Ġun wind BB . ref , Ġnum Handlers , Ġname Ġ?: Ġ"") ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Catch Pad ( parent Pad : ĠValue , Ġargs : ĠList < Value >, Ġname : ĠString ?): ĠCatch Pad Inst Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Catch Pad ( ĊĠĠĠĠĠ Ġref , ĊĠĠĠĠĠ Ġparent Pad . ref , ĊĠĠĠĠĠ Ġargs . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), ĊĠĠĠĠĠ Ġargs . size , ĊĠĠĠĠĠ Ġname Ġ?: Ġ"", ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn ĠCatch Pad Inst ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Cleanup Pad ( ĊĠĠĠ Ġparent Pad : ĠValue , ĊĠĠĠ Ġargs : ĠList < Value >, ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠCleanup Pad Inst Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Cleanup Pad ( ĊĠĠĠĠĠ Ġref , ĊĠĠĠĠĠ Ġparent Pad . ref , ĊĠĠĠĠĠ Ġargs . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), Ġargs . size , ĊĠĠĠĠĠ Ġname Ġ?: Ġ"" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn ĠCleanup Pad Inst ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Catch Ret ( catch Pad : ĠCatch Pad Inst , Ġbb : ĠBasic Block ): ĠCatch Return Inst Ġ{ ĊĠĠĠ Ġreturn ĠCatch Return Inst ( LLVM . LLVM Build Catch Ret ( ref , Ġcatch Pad . ref , Ġbb . ref )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Un reachable (): ĠUn reachable Inst Ġ{ ĊĠĠĠ Ġreturn ĠUn reachable Inst ( LLVM . LLVM Build Un reachable ( ref )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Add ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Add ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate NS W Add ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build NS W Add ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate NU W Add ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build NU W Add ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Sub ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Sub ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate NS W Sub ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build NS W Sub ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate NU W Sub ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build NU W Sub ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Mul ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Mul ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate NS WM ul ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build NS WM ul ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate NU WM ul ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build NU WM ul ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate UD iv ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build UD iv ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Exact UD iv ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Exact UD iv ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate SD iv ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build SD iv ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Exact SD iv ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Exact SD iv ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate UR em ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build UR em ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate S Rem ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build S Rem ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Sh l ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Sh l ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate L Sh r ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build L Sh r ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate AS hr ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build AS hr ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate And ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build And ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Or ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Or ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Xor ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Xor ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate F Add ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build F Add ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate F Sub ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build F Sub ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate FM ul ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build FM ul ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate FD iv ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build FD iv ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate F Rem ( lhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build F Rem ( ref , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Bin Op ( opcode : ĠOpcode , Ġlhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Bin Op ( ref , Ġopcode . llvm , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Neg ( value : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Neg ( ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate NS WN eg ( value : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build NS WN eg ( ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate NU WN eg ( value : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build NU WN eg ( ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate FN eg ( value : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build FN eg ( ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Not ( value : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Not ( ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Alloc a ( type : ĠType , Ġaddr Space : ĠAddr Space , Ġname : ĠString ?): ĠAlloc a Inst Ġ{ ĊĠĠĠ Ġreturn ĠAlloc a Inst ( LLVM . LLVM Build Alloc a ( ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Array Alloc a ( ĊĠĠĠ Ġtype : ĠType , ĊĠĠĠ Ġvalue : ĠValue , ĊĠĠĠ Ġaddr Space : ĠAddr Space , ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠAlloc a Inst Ġ{ ĊĠĠĠ Ġreturn ĠAlloc a Inst ( LLVM . LLVM Build Array Alloc a ( ref , Ġtype . ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Malloc ( type : ĠType , Ġaddr Space : ĠAddr Space , Ġname : ĠString ?): ĠCall Inst Ġ{ ĊĠĠĠ Ġreturn ĠCall Inst ( LLVM . LLVM Build Malloc ( ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Array Malloc ( ĊĠĠĠ Ġtype : ĠType , ĊĠĠĠ Ġaddr Space : ĠAddr Space , ĊĠĠĠ Ġvalue : ĠValue , ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠCall Inst Ġ{ ĊĠĠĠ Ġreturn ĠCall Inst ( LLVM . LLVM Build Array Malloc ( ref , Ġtype . ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Load ( ptr : ĠValue , Ġname : ĠString ?): ĠLoad Inst Ġ{ ĊĠĠĠ Ġreturn ĠLoad Inst ( LLVM . LLVM Build Load ( ref , Ġptr . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Load ( type : ĠType , Ġptr : ĠValue , Ġname : ĠString ?): ĠLoad Inst Ġ{ ĊĠĠĠ Ġreturn ĠLoad Inst ( LLVM . LLVM Build Load 2 ( ref , Ġtype . ref , Ġptr . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Store ( value : ĠValue , Ġptr : ĠValue ): ĠStore Inst Ġ{ ĊĠĠĠ Ġreturn ĠStore Inst ( LLVM . LLVM Build Store ( ref , Ġvalue . ref , Ġptr . ref )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Fence ( order : ĠAtomic Ordering , Ġsingle Thread : ĠBoolean , Ġname : ĠString ?): ĠF ence Inst Ġ{ ĊĠĠĠ Ġreturn ĠF ence Inst ( LLVM . LLVM Build Fence ( ref , Ġorder . llvm , Ġsingle Thread . toInt (), Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Atomic Cmp X chg ( ĊĠĠĠ Ġptr : ĠValue , ĊĠĠĠ Ġcmp : ĠValue , ĊĠĠĠ Ġnew : ĠValue , ĊĠĠĠ Ġsuccess Ordering : ĠAtomic Ordering , ĊĠĠĠ Ġfail Ordering : ĠAtomic Ordering , ĊĠĠĠ Ġsingle Thread : ĠBoolean , ĊĠ Ġ): ĠAtomic Cmp X chg Inst Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Atomic Cmp X chg ( ĊĠĠĠĠĠ Ġref , ĊĠĠĠĠĠ Ġptr . ref , ĊĠĠĠĠĠ Ġcmp . ref , ĊĠĠĠĠĠ Ġnew . ref , ĊĠĠĠĠĠ Ġsuccess Ordering . llvm , ĊĠĠĠĠĠ Ġfail Ordering . llvm , ĊĠĠĠĠĠ Ġsingle Thread . toInt () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn ĠAtomic Cmp X chg Inst ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Atomic RM W ( ĊĠĠĠ Ġopcode : ĠAtomic RM W Bin Op , ĊĠĠĠ Ġptr : ĠValue , ĊĠĠĠ Ġvalue : ĠValue , ĊĠĠĠ Ġorder : ĠAtomic Ordering , ĊĠĠĠ Ġsingle Thread : ĠBoolean , ĊĠ Ġ): ĠAtomic RM W Inst Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Atomic RM W ( ĊĠĠĠĠĠ Ġref , ĊĠĠĠĠĠ Ġopcode . llvm , ĊĠĠĠĠĠ Ġptr . ref , ĊĠĠĠĠĠ Ġvalue . ref , ĊĠĠĠĠĠ Ġorder . llvm , ĊĠĠĠĠĠ Ġsingle Thread . toInt () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn ĠAtomic RM W Inst ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate GE P ( ĊĠĠĠ Ġpointer : ĠValue , ĊĠĠĠ Ġindices : ĠList < Value >, ĊĠĠĠ Ġin Bounds : ĠBoolean , ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠValue Ġ{ ĊĠĠĠ Ġval Ġref Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠ Ġin Bounds Ġ-> ĠLLVM . LLVM Build In Bounds GE P ( ĊĠĠĠĠĠĠĠ Ġref , ĊĠĠĠĠĠĠĠ Ġpointer . ref , ĊĠĠĠĠĠĠĠ Ġindices . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), ĊĠĠĠĠĠĠĠ Ġindices . size , ĊĠĠĠĠĠĠĠ Ġname Ġ?: Ġ"" ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġelse Ġ-> ĠLLVM . LLVM Build GE P ( ĊĠĠĠĠĠĠĠ Ġref , ĊĠĠĠĠĠĠĠ Ġpointer . ref , ĊĠĠĠĠĠĠĠ Ġindices . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), ĊĠĠĠĠĠĠĠ Ġindices . size , ĊĠĠĠĠĠĠĠ Ġname Ġ?: Ġ"" ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠValue ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate GE P ( ĊĠĠĠ Ġtype : ĠType , ĊĠĠĠ Ġpointer : ĠValue , ĊĠĠĠ Ġindices : ĠList < Value >, ĊĠĠĠ Ġin Bounds : ĠBoolean , ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠValue Ġ{ ĊĠĠĠ Ġval Ġref Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠ Ġin Bounds Ġ-> ĠLLVM . LLVM Build In Bounds GE P 2 ( ĊĠĠĠĠĠĠĠ Ġref , ĊĠĠĠĠĠĠĠ Ġtype . ref , ĊĠĠĠĠĠĠĠ Ġpointer . ref , ĊĠĠĠĠĠĠĠ Ġindices . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), ĊĠĠĠĠĠĠĠ Ġindices . size , ĊĠĠĠĠĠĠĠ Ġname Ġ?: Ġ"" ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġelse Ġ-> ĠLLVM . LLVM Build GE P 2 ( ĊĠĠĠĠĠĠĠ Ġref , ĊĠĠĠĠĠĠĠ Ġtype . ref , ĊĠĠĠĠĠĠĠ Ġpointer . ref , ĊĠĠĠĠĠĠĠ Ġindices . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), ĊĠĠĠĠĠĠĠ Ġindices . size , ĊĠĠĠĠĠĠĠ Ġname Ġ?: Ġ"" ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠValue ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Struct GE P ( pointer : ĠValue , Ġindex : ĠInt , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Struct GE P ( ref , Ġpointer . ref , Ġindex , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Struct GE P ( type : ĠType , Ġpointer : ĠValue , Ġindex : ĠInt , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Struct GE P 2 ( ref , Ġtype . ref , Ġpointer . ref , Ġindex , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Trunc ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Trunc ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Z Ext ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Z Ext ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate S Ext ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build S Ext ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate FP To UI ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build FP To UI ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate FP To SI ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build FP To SI ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate UI To FP ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build UI To FP ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate SI To FP ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build SI To FP ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate FP Trunc ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build FP Trunc ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate FP Ext ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build FP Ext ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Ptr ToInt ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Ptr ToInt ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Int ToPtr ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Int ToPtr ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Bit Cast ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Bit Cast ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Address Space Cast ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Addr Space Cast ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Z Ext Or Bit Cast ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Z Ext Or Bit Cast ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate S Ext Or Bit Cast ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build S Ext Or Bit Cast ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Trunc Or Bit Cast ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Trunc Or Bit Cast ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Cast ( opcode : ĠOpcode , Ġvalue : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Cast ( ref , Ġopcode . llvm , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Pointer Cast ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Pointer Cast ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Int Cast ( value : ĠValue , Ġtype : ĠType , Ġis Signed : ĠBoolean , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Int Cast 2 ( ref , Ġvalue . ref , Ġtype . ref , Ġis Signed . toInt (), Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate F PC ast ( value : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build F PC ast ( ref , Ġvalue . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate IC mp ( predicate : ĠInt Predicate , Ġlhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build IC mp ( ref , Ġpredicate . llvm , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate FC mp ( predicate : ĠReal Predicate , Ġlhs : ĠValue , Ġrhs : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build FC mp ( ref , Ġpredicate . llvm , Ġlhs . ref , Ġrhs . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Call ( ĊĠĠĠ Ġtype : ĠType , ĊĠĠĠ Ġfunc : ĠFunction , ĊĠĠĠ Ġarguments : ĠList < Value >, ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠCall Inst Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Call 2 ( ĊĠĠĠĠĠ Ġref , ĊĠĠĠĠĠ Ġtype . ref , ĊĠĠĠĠĠ Ġfunc . ref , ĊĠĠĠĠĠ Ġarguments . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), ĊĠĠĠĠĠ Ġarguments . size , ĊĠĠĠĠĠ Ġname Ġ?: Ġ"" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn ĠCall Inst ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Call ( func : ĠFunction , Ġarguments : ĠList < Value >, Ġname : ĠString ?): ĠCall Inst Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Call ( ĊĠĠĠĠĠ Ġref , ĊĠĠĠĠĠ Ġfunc . ref , ĊĠĠĠĠĠ Ġarguments . map Ġ{ Ġit . ref Ġ}. to Pointer Pointer (), ĊĠĠĠĠĠ Ġarguments . size , ĊĠĠĠĠĠ Ġname Ġ?: Ġ"" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn ĠCall Inst ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Select ( cond : ĠValue , Ġif True : ĠValue , Ġif False : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Select ( ref , Ġcond . ref , Ġif True . ref , Ġif False . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate VA Arg ( list : ĠValue , Ġtype : ĠType , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build VA Arg ( ref , Ġlist . ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Extract Element ( vec : ĠValue , Ġindex : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Extract Element ( ref , Ġvec . ref , Ġindex . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Insert Element ( vec : ĠValue , Ġelement : ĠValue , Ġindex : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Insert Element ( ref , Ġvec . ref , Ġelement . ref , Ġindex . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Shuffle Vector ( vec 1 : ĠValue , Ġvec 2 : ĠValue , Ġmask : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Shuffle Vector ( ref , Ġvec 1 . ref , Ġvec 2 . ref , Ġmask . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Extract Value ( aggregate : ĠValue , Ġindex : ĠInt , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Extract Value ( ref , Ġaggregate . ref , Ġindex , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Insert Value ( ĊĠĠĠ Ġaggregate : ĠValue , ĊĠĠĠ Ġelement : ĠValue , ĊĠĠĠ Ġindex : ĠInt , ĊĠĠĠ Ġname : ĠString ?, ĊĠ Ġ): ĠValue Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Insert Value ( ref , Ġaggregate . ref , Ġelement . ref , Ġindex , Ġname Ġ?: Ġ"") ĊĊĠĠĠ Ġreturn ĠValue ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Landing Pad ( type : ĠType , Ġnum Clause s : ĠInt , Ġname : ĠString ?): ĠLand ing Pad Inst Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠLLVM . LLVM Build Landing Pad ( ref , Ġtype . ref , Ġnull , Ġnum Clause s , Ġname Ġ?: Ġ"") ĊĊĠĠĠ Ġreturn ĠLand ing Pad Inst ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Freeze ( value : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build Freeze ( ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Phi ( type : ĠType , Ġname : ĠString ?): ĠPhi Inst Ġ{ ĊĠĠĠ Ġreturn ĠPhi Inst ( LLVM . LLVM Build Phi ( ref , Ġtype . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate IsNull ( value : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build IsNull ( ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate IsNotNull ( value : ĠValue , Ġname : ĠString ?): ĠValue Ġ{ ĊĠĠĠ Ġreturn ĠValue ( LLVM . LLVM Build IsNotNull ( ref , Ġvalue . ref , Ġname Ġ?: Ġ"")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠ ĠLLVM . LLVM Dispose Builder ( ref ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" IR Builder " Ċ } Ċ