ó
    „ñ:i\ƒ  ã                   ó  • S SK r S SKrS SKJrJrJr  SSSSSSS	.r\R                  4S
 jr\R                  4S jr	\R                  4S jr
\R                  4S jrS rS rS rS r\R                   4S jrS r " S S\5      rg)é    N)ÚinstructionsÚtypesÚvaluesÚgtÚltÚeqÚneÚgeÚle)Ú>Ú<ú==ú!=z>=z<=c                 ó   ^ ^• UU 4S jnU$ )Nc                 óL   >• [         R                  " U 5      SUU4S jj5       nU$ )Nc                 ól   >• T" U R                   UR                  TU/X#5      nU R                  U5        U$ ©N©ÚblockÚtypeÚ_insert)ÚselfÚargÚnameÚflagsÚinstrÚclsÚopnames        €€ÚV/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/llvmlite/ir/builder.pyÚwrappedÚ$_unop.<locals>.wrap.<locals>.wrapped   s0   ø€ á˜Ÿ
™
 C§H¡H¨f°s°e¸TÓIˆEØ�L‰L˜ÔØˆLó    ©Ú © ©Ú	functoolsÚwraps©Úfnr    r   r   s     €€r   ÚwrapÚ_unop.<locals>.wrap   ó%   ø€ Ü	�Š˜Ó	÷	ó 
ð	ð
 ˆr"   r%   ©r   r   r+   s   `` r   Ú_unopr/      ó   ù€ öð €Kr"   c                 ó   ^ ^• UU 4S jnU$ )Nc                 óL   >• [         R                  " U 5      SUU4S jj5       nU$ )Nc                 óð   >• UR                   UR                   :w  a(  [        SUR                   < SUR                   < S35      eT" U R                  UR                   TX4X45      nU R                  U5        U$ )Nú%Operands must be the same type, got (ú, Ú))r   Ú
ValueErrorr   r   )r   ÚlhsÚrhsr   r   r   r   r   s         €€r   r    Ú%_binop.<locals>.wrap.<locals>.wrapped   s_   ø€ à�x‰x˜3Ÿ8™8Ó#Ý Ø$'§H¤H¨c¯h¬hð"8ó 9ð 9á˜Ÿ
™
 C§H¡H¨f°s°jÀ$ÓNˆEØ�L‰L˜ÔØˆLr"   r#   r&   r)   s     €€r   r+   Ú_binop.<locals>.wrap   s%   ø€ Ü	�Š˜Ó	÷	ó 
ð	ð ˆr"   r%   r.   s   `` r   Ú_binopr<      s   ù€ ö
ð €Kr"   c                 ó   ^ • U 4S jnU$ )Nc                 óJ   >• [         R                  " U 5      SU4S jj5       nU$ )Nc                 óô  >• UR                   UR                   :w  a(  [        SUR                   < SUR                   < S35      eUR                   n[        U[        R                  5      (       d  [        SU< 35      e[        R                  " S5      nU R                  n[        R                  " [        R                  " XE/5      XD/5      nUR                  ST
< S3U/U5      nU R                  X�U/US9n	U	$ )	Nr4   r5   r6   zexpected an integer type, got é   zllvm.z.with.overflow©r   )r   r7   Ú
isinstancer   ÚIntTypeÚ	TypeErrorÚmoduleÚFunctionTypeÚLiteralStructTypeÚdeclare_intrinsicÚcall)r   r8   r9   r   ÚtyÚbool_tyÚmodÚfntyr*   Úretr   s             €r   r    Ú3_binop_with_overflow.<locals>.wrap.<locals>.wrapped/   sÌ   ø€ à�x‰x˜3Ÿ8™8Ó#Ý Ø$'§H¤H¨c¯h¬hð"8ó 9ð 9à—‘ˆBÜ˜b¤%§-¡-×0Ñ0ÝÂbÐ JÓKÐKÜ—m’m AÓ&ˆGà—+‘+ˆCÜ×%Ò%¤e×&=Ò&=¸r¸mÓ&LØ') hó0ˆDà×&Ò&Ã&Ð'JØ(* t¨Tó3ˆBà—)‘)˜B c 
°�)Ð6ˆCØˆJr"   ©r$   r&   ©r*   r    r   s     €r   r+   Ú"_binop_with_overflow.<locals>.wrap.   s%   ø€ Ü	�Š˜Ó	ö	ó 
ð	ð" ˆr"   r%   r.   s   `  r   Ú_binop_with_overflowrS   -   s   ø€ õð* €Kr"   c                 ó   ^ ^• UU 4S jnU$ )Nc                 óL   >• [         R                  " U 5      SUU4S jj5       nU$ )Nc                 ól   >• T" U R                   UR                  TU/U5      nU R                  U5        U$ r   r   )r   Úoperandr   r   r   r   s       €€r   r    Ú%_uniop.<locals>.wrap.<locals>.wrappedH   s0   ø€ á˜Ÿ
™
 G§L¡L°&¸7¸)ÀTÓJˆEØ�L‰L˜ÔØˆLr"   rP   r&   r)   s     €€r   r+   Ú_uniop.<locals>.wrapG   r-   r"   r%   r.   s   `` r   Ú_unioprZ   F   r0   r"   c                 ó   ^ • U 4S jnU$ )Nc                 óJ   >• [         R                  " U 5      SU4S jj5       nU$ )Nc                 óú   >• [        UR                  [        R                  5      (       d  [	        SUR                  -  5      eU R
                  R                  TUR                  /5      nU R                  X1/U5      $ )Nú expected an integer type, got %s)rB   r   r   rC   rD   rE   rH   rI   ©r   rW   r   r*   r   s       €r   r    Ú3_uniop_intrinsic_int.<locals>.wrap.<locals>.wrappedU   se   ø€ ä˜gŸl™l¬E¯M©M×:Ñ:ÜØ6Ø—L‘Lñ!ó"ð "ð —‘×.Ñ.¨v¸¿¹°~ÓFˆBØ—9‘9˜R ¨DÓ1Ð1r"   rP   r&   rQ   s     €r   r+   Ú"_uniop_intrinsic_int.<locals>.wrapT   s%   ø€ Ü	�Š˜Ó	ö	2ó 
ð	2ð ˆr"   r%   ©r   r+   s   ` r   Ú_uniop_intrinsic_intrc   S   s   ø€ õ
ð €Kr"   c                 ó   ^ • U 4S jnU$ )Nc                 óJ   >• [         R                  " U 5      SU4S jj5       nU$ )Nc                 ó  >• [        UR                  [        R                  [        R                  45      (       d  [        SUR                  -  5      eU R                  R                  TUR                  /5      nU R                  X1/U5      $ )Núexpected a float type, got %s)	rB   r   r   Ú	FloatTypeÚ
DoubleTyperD   rE   rH   rI   r_   s       €r   r    Ú5_uniop_intrinsic_float.<locals>.wrap.<locals>.wrappede   sn   ø€ äØ—L‘L¤5§?¡?´E×4DÑ4DÐ"E÷Gñ GäÐ ?À'Ç,Á,Ñ NÓOÐOØ—‘×.Ñ.¨v¸¿¹°~ÓFˆBØ—9‘9˜R ¨DÓ1Ð1r"   rP   r&   rQ   s     €r   r+   Ú$_uniop_intrinsic_float.<locals>.wrapd   s%   ø€ Ü	�Š˜Ó	ö	2ó 
ð	2ð ˆr"   r%   rb   s   ` r   Ú_uniop_intrinsic_floatrl   c   s   ø€ õ	ð €Kr"   c                 ó   ^ • U 4S jnU$ )Nc                 óJ   >• [         R                  " U 5      SU4S jj5       nU$ )Nc                 óÈ  >• [        UR                  [        R                  5      (       d  [	        SUR                  -  5      e[        UR                  [        R                  5      (       a  UR                  R
                  S:X  d  [	        SUR                  -  5      eU R                  R                  TUR                  UR                  /5      nU R                  XAU/U5      $ )Nr^   r@   zexpected an i1 type, got %s)	rB   r   r   rC   rD   ÚwidthrE   rH   rI   )r   rW   Úflagr   r*   r   s        €r   r    Ú9_uniop_intrinsic_with_flag.<locals>.wrap.<locals>.wrappedt   s«   ø€ ä˜gŸl™l¬E¯M©M×:Ñ:ÜØ6Ø—L‘Lñ!ó"ð "ô ˜tŸy™y¬%¯-©-×8Ñ8Ø—I‘I—O‘O qÓ(ÜÐ =ÀÇ	Á	Ñ IÓJÐJØ—‘×.Ñ.Ø˜Ÿ™ t§y¡yÐ1ó3ˆBà—9‘9˜R¨4 °$Ó7Ð7r"   rP   r&   rQ   s     €r   r+   Ú(_uniop_intrinsic_with_flag.<locals>.wraps   s%   ø€ Ü	�Š˜Ó	ö
	8ó 
ð
	8ð ˆr"   r%   rb   s   ` r   Ú_uniop_intrinsic_with_flagrt   r   s   ø€ õð  €Kr"   c                 ó   ^ • U 4S jnU$ )Nc                 óJ   >• [         R                  " U 5      SU4S jj5       nU$ )Nc                 ó8  >• UR                   UR                   :w  d  UR                   UR                   :w  a5  [        SUR                   < SUR                   < SUR                   < 35      e[        UR                   [        R                  [        R
                  [        R                  45      (       d  [        SUR                   -  5      eU R                  R                  TUR                   UR                   UR                   /5      nU R                  XQX#/U5      $ )Nz#expected types to be the same, got r5   z'expected an floating point type, got %s)
r   rD   rB   r   ÚHalfTyperh   ri   rE   rH   rI   )r   ÚaÚbÚcr   r*   r   s         €r   r    Ú/_triop_intrinsic.<locals>.wrap.<locals>.wrappedˆ   s×   ø€ à�v‰v˜Ÿ™Ó 1§6¡6¨Q¯V©VÓ#3ÝàŸœØŸœØŸ›ð ó!ð !ô
  Ø—F‘FÜ—^‘^¤U§_¡_´e×6FÑ6FÐG÷Iñ Iô  Ø=Ø—F‘Fñóð ð —‘×.Ñ.¨v¸¿¹ÀÇÁÈÏÉÐ7OÓPˆBØ—9‘9˜R Q ¨DÓ1Ð1r"   rP   r&   rQ   s     €r   r+   Ú_triop_intrinsic.<locals>.wrap‡   s%   ø€ Ü	�Š˜Ó	ö	2ó 
ð	2ð  ˆr"   r%   rb   s   ` r   Ú_triop_intrinsicr~   †   s   ø€ õð( €Kr"   c                 ó   ^ ^• UU 4S jnU$ )Nc                 óL   >• [         R                  " U 5      SUU4S jj5       nU$ )Nc                 óx   >• UR                   U:X  a  U$ T" U R                  TXU5      nU R                  U5        U$ r   )r   r   r   )r   ÚvalÚtypr   r   r   r   s        €€r   r    Ú&_castop.<locals>.wrap.<locals>.wrapped    s8   ø€ à�x‰x˜3‹Ø�
Ù˜Ÿ
™
 F¨C°dÓ;ˆEØ�L‰L˜ÔØˆLr"   rP   r&   r)   s     €€r   r+   Ú_castop.<locals>.wrapŸ   s%   ø€ Ü	�Š˜Ó	÷	ó 
ð	ð ˆr"   r%   r.   s   `` r   Ú_castopr†   ž   s   ù€ ö	ð €Kr"   c                 óZ   • [        U 5      S:”  a  SnSR                  U SU SU/5      $ X-   $ )z‘Returns (label + suffix) or a truncated version if it's too long.
Parameters
----------
label : str
    Label name
suffix : str
    Label suffix
é2   é   r$   Nz..)ÚlenÚjoin)ÚlabelÚsuffixÚnheads      r   Ú_label_suffixr�   ­   s8   € ô ˆ5ƒz�BƒØˆØ�w‰w˜˜f˜u˜ t¨VÐ4Ó5Ð5à‰~Ðr"   c                   ó,  • \ rS rSrS—S jr\S 5       r\r\S 5       r\S 5       r	S r
S rS	 rS
 rS˜S jrS r\R"                  S 5       r\R"                  S 5       r\R"                  S 5       r\R"                  S—S j5       r\R"                  S—S j5       rS rS r\" S5      S˜S j5       r\" S5      S˜S j5       r\" S5      S˜S j5       r\" S5      S˜S j5       r\" S5      S˜S j5       r\" S5      S˜S j5       r\" S 5      S˜S! j5       r \" S"5      S˜S# j5       r!\" S$5      S˜S% j5       r"\" S&5      S˜S' j5       r#\" S(5      S˜S) j5       r$\" S*5      S˜S+ j5       r%\" S,5      S˜S- j5       r&\" S.5      S˜S/ j5       r'\" S05      S˜S1 j5       r(\" S25      S˜S3 j5       r)\" S45      S˜S5 j5       r*\" S65      S˜S7 j5       r+\," S85      S˜S9 j5       r-\," S:5      S˜S; j5       r.\," S<5      S˜S= j5       r/\," S>5      S˜S? j5       r0\," S@5      S˜SA j5       r1\," SB5      S˜SC j5       r2S˜SD jr3S˜SE jr4\5" SF5      S™SG j5       r6SH r7S˜SI jr8S˜SJ jr9S™SK jr:S™SL jr;S™SM jr<\=" SN5      S˜SO j5       r>\=" SP5      S˜SQ j5       r?\=" SR5      S˜SS j5       r@\=" ST5      S˜SU j5       rA\=" SV5      S˜SW j5       rB\=" SX5      S˜SY j5       rC\=" SZ5      S˜S[ j5       rD\=" S\5      S˜S] j5       rE\=" S^5      S˜S_ j5       rF\=" S`5      S˜Sa j5       rG\=" Sb5      S˜Sc j5       rH\=" Sd5      S˜Se j5       rI\=" Sf5      S˜Sg j5       rJSšSh jrKS›Si jrLS—Sj jrMSœSk jrNSl rOSm rPSn rQSo rRSp rSSq rTSr rUSs rV  S�St jrWS˜Su jrXS˜Sv jrYS˜Sw jrZ SžSx jr[SŸSy jr\S˜Sz jr]S˜S{ jr^S˜S| jr_S˜S} jr`S˜S~ jraS™S jrbS€ rcS˜S� jrdSšS‚ jreS Sƒ jrfS„ rgSšS… jrhS† ri\j" S‡5      Sˆ 5       rk\j" S‰5      SŠ 5       rl\j" S‹5      SŒ 5       rm\n" S�5      SŽ 5       ro\n" S�5      S� 5       rp\q" S‘5      S’ 5       rrSšS“ jrs\t" S”5      S• 5       ruS–rvg)¡Ú	IRBuilderé½   Nc                 ód   • Xl         U(       a  [        UR                  5      OSU l        S U l        g )Nr   )Ú_blockrŠ   r   Ú_anchorÚdebug_metadata©r   r   s     r   Ú__init__ÚIRBuilder.__init__¾   s%   € ØŒÞ27”s˜5×-Ñ-Ô.¸QˆŒØ"ˆÕr"   c                 ó   • U R                   $ )z
The current basic block.
)r”   ©r   s    r   r   ÚIRBuilder.blockÃ   s   € ð
 �{‰{Ðr"   c                 ó.   • U R                   R                  $ )z
The current function.
)r   Úparentr›   s    r   ÚfunctionÚIRBuilder.functionÌ   s   € ð
 �z‰z× Ñ Ð r"   c                 óB   • U R                   R                  R                  $ )z
The current module.
)r   rž   rE   r›   s    r   rE   ÚIRBuilder.moduleÓ   s   € ð
 �z‰z× Ñ ×'Ñ'Ð'r"   c                 óz   • UR                   U l        U R                  R                  R                  U5      U l        g)zy
Position immediately before the given instruction.  The current block
is also changed to the instruction's basic block.
N©rž   r”   r   Úindexr•   ©r   r   s     r   Úposition_beforeÚIRBuilder.position_beforeÚ   s+   € ð
 —l‘lˆŒØ—{‘{×/Ñ/×5Ñ5°eÓ<ˆ�r"   c                 ó€   • UR                   U l        U R                  R                  R                  U5      S-   U l        g)zx
Position immediately after the given instruction.  The current block
is also changed to the instruction's basic block.
r@   Nr¤   r¦   s     r   Úposition_afterÚIRBuilder.position_afterâ   s0   € ð
 —l‘lˆŒØ—{‘{×/Ñ/×5Ñ5°eÓ<¸qÑ@ˆ�r"   c                 ó   • Xl         SU l        g)z-
Position at the start of the basic *block*.
r   N)r”   r•   r—   s     r   Úposition_at_startÚIRBuilder.position_at_startê   s   € ð ŒØˆ�r"   c                 óD   • Xl         [        UR                  5      U l        g)z+
Position at the end of the basic *block*.
N)r”   rŠ   r   r•   r—   s     r   Úposition_at_endÚIRBuilder.position_at_endñ   s   € ð ŒÜ˜5×-Ñ-Ó.ˆ�r"   c                 ó8   • U R                   R                  U5      $ )z�
Append a basic block, with the given optional *name*, to the current
function.  The current block is not changed.  The new block is returned.
)rŸ   Úappend_basic_block)r   r   s     r   r³   ÚIRBuilder.append_basic_blockø   s   € ð
 �}‰}×/Ñ/°Ó5Ð5r"   c                 ó  • U R                   R                  R                  U5      nU R                   R                  U	 U R                   R                  U:X  a  SU R                   l        U R                  U:”  a  U =R                  S-  sl        gg)zRemove the given instruction.Nr@   )r”   r   r¥   Ú
terminatorr•   )r   r   Úidxs      r   ÚremoveÚIRBuilder.removeÿ   sk   € à�k‰k×&Ñ&×,Ñ,¨UÓ3ˆØ�K‰K×$Ñ$ SÐ)Ø�;‰;×!Ñ! UÓ*Ø%)ˆD�K‰KÔ"Ø�<‰<˜#ÓØ�LŠL˜AÑŽLð r"   c              #   óà   #   • U R                   nUR                  nUb  U R                  U5        OU R                  U5         Sv •  U R                  U5        g! U R                  U5        f = f7f)zw
A context manager which temporarily positions the builder at the end
of basic block *bb* (but before any terminator).
N)Úbasic_blockr¶   r§   r°   )r   r   Ú	old_blockÚterms       r   Ú
goto_blockÚIRBuilder.goto_block  sc   é € ð ×$Ñ$ˆ	Ø×ÑˆØÑØ× Ñ  Õ&à× Ñ  Ô'ð	,Ûà× Ñ  Õ+øˆD× Ñ  Õ+üs   ‚?A.ÁA ÁA.ÁA+Á+A.c              #   ó’   #   • U R                  U R                  R                  5         Sv •  SSS5        g! , (       d  f       g= f7f)ze
A context manager which temporarily positions the builder at the
end of the function's entry block.
N)r¾   rŸ   Úentry_basic_blockr›   s    r   Úgoto_entry_blockÚIRBuilder.goto_entry_block  s+   é € ð �_‰_˜TŸ]™]×<Ñ<Õ=Û÷ >×=Ö=üs   ‚&A¨6­	A¶
AÁ Ac              #   óˆ   #   • U R                  U5        Uv •  U R                  R                  c  U R                  U5        g g 7fr   )r°   r»   r¶   Úbranch)r   ÚbbenterÚbbexits      r   Ú_branch_helperÚIRBuilder._branch_helper"  s;   é € à×Ñ˜WÔ%ØŠØ×Ñ×&Ñ&Ñ.Ø�K‰K˜Õð /ùs   ‚A Ac              #   ó–  #   • U R                   nU R                  [        UR                  S5      S9nU R                  [        UR                  S5      S9nU R	                  XU5      nUb  UR                  U(       a  SS/OSS/5        U R                  XE5         Uv •  SSS5        U R                  U5        g! , (       d  f       N = f7f)ao  
A context manager which sets up a conditional basic block based
on the given predicate (a i1 value).  If the conditional block
is not explicitly terminated, a branch will be added to the next
block.
If *likely* is given, its boolean value indicates whether the
predicate is likely to be true or not, and metadata is issued
for LLVM's optimizers to account for that.
ú.ifrA   ú.endifNéc   r@   ©r»   r³   r�   r   ÚcbranchÚset_weightsrÈ   r°   )r   ÚpredÚlikelyÚbbÚbbifÚbbendÚbrs          r   Úif_thenÚIRBuilder.if_then)  s¬   é € ð ×ÑˆØ×&Ñ&¬M¸"¿'¹'À5Ó,IÐ&ÐJˆØ×'Ñ'¬]¸2¿7¹7ÀHÓ-MÐ'ÐNˆØ�\‰\˜$ eÓ,ˆØÑØ�N‰N¦f˜B ™7°1°b°'Ô:à× Ñ  Õ-ØŠK÷ .ð 	×Ñ˜UÕ#÷ .Õ-üs   ‚BC	ÂB8ÂC	Â8
CÃC	c              #   óÌ  #   • U R                   nU R                  [        UR                  S5      S9nU R                  [        UR                  S5      S9nU R                  [        UR                  S5      S9nU R	                  XU5      nUb  UR                  U(       a  SS/OSS/5        U R                  XF5      nU R                  XV5      n	X‰4v •  U R                  U5        g7f)aà  
A context manager which sets up two conditional basic blocks based
on the given predicate (a i1 value).
A tuple of context managers is yield'ed.  Each context manager
acts as a if_then() block.
*likely* has the same meaning as in if_then().

Typical use::
    with builder.if_else(pred) as (then, otherwise):
        with then:
            # emit instructions for when the predicate is true
        with otherwise:
            # emit instructions for when the predicate is false
rË   rA   z.elserÌ   NrÍ   r@   rÎ   )
r   rÑ   rÒ   rÓ   rÔ   ÚbbelserÕ   rÖ   ÚthenÚ	otherwises
             r   Úif_elseÚIRBuilder.if_else@  sÐ   é € ð  ×ÑˆØ×&Ñ&¬M¸"¿'¹'À5Ó,IÐ&ÐJˆØ×(Ñ(¬m¸B¿G¹GÀWÓ.MÐ(ÐNˆØ×'Ñ'¬]¸2¿7¹7ÀHÓ-MÐ'ÐNˆØ�\‰\˜$ fÓ-ˆØÑØ�N‰N¦f˜B ™7°1°b°'Ô:à×"Ñ" 4Ó/ˆØ×'Ñ'¨Ó6ˆ	àˆoÒà×Ñ˜UÕ#ùs   ‚C"C$c                 óú   • U R                   b)  SUR                  ;  a  U R                   UR                  S'   U R                  R                  R	                  U R
                  U5        U =R
                  S-  sl        g )NÚdbgr@   )r–   Úmetadatar”   r   Úinsertr•   r¦   s     r   r   ÚIRBuilder._insert_  sY   € Ø×ÑÑ*¨u¸E¿N¹NÓ/JØ$(×$7Ñ$7ˆE�N‰N˜5Ñ!Ø�‰× Ñ ×'Ñ'¨¯©°eÔ<Ø�Š˜ÑŽr"   c                 ó‚   • U R                   R                  (       a   eU R                  U5        XR                   l        U$ r   )r   Úis_terminatedr   r¶   )r   r½   s     r   Ú_set_terminatorÚIRBuilder._set_terminatore  s0   € Ø—:‘:×+×+Ð+Ð+Ø�‰�TÔØ $�
‰
ÔØˆr"   Úshlc                 ó   • g)z+
Left integer shift:
    name = lhs << rhs
Nr%   ©r   r8   r9   r   s       r   rè   ÚIRBuilder.shlo  ó   � r"   Úlshrc                 ó   • g)z?
Logical (unsigned) right integer shift:
    name = lhs >> rhs
Nr%   rê   s       r   rí   ÚIRBuilder.lshrv  rì   r"   Úashrc                 ó   • g)z@
Arithmetic (signed) right integer shift:
    name = lhs >> rhs
Nr%   rê   s       r   rð   ÚIRBuilder.ashr}  rì   r"   Úaddc                 ó   • g)z(
Integer addition:
    name = lhs + rhs
Nr%   rê   s       r   ró   ÚIRBuilder.add„  rì   r"   Úfaddc                 ó   • g)z/
Floating-point addition:
    name = lhs + rhs
Nr%   rê   s       r   rö   ÚIRBuilder.fadd‹  rì   r"   Úsubc                 ó   • g)z+
Integer subtraction:
    name = lhs - rhs
Nr%   rê   s       r   rù   ÚIRBuilder.sub’  rì   r"   Úfsubc                 ó   • g)z2
Floating-point subtraction:
    name = lhs - rhs
Nr%   rê   s       r   rü   ÚIRBuilder.fsub™  rì   r"   Úmulc                 ó   • g)z.
Integer multiplication:
    name = lhs * rhs
Nr%   rê   s       r   rÿ   ÚIRBuilder.mul   rì   r"   Úfmulc                 ó   • g)z5
Floating-point multiplication:
    name = lhs * rhs
Nr%   rê   s       r   r  ÚIRBuilder.fmul§  rì   r"   Úudivc                 ó   • g)z1
Unsigned integer division:
    name = lhs / rhs
Nr%   rê   s       r   r  ÚIRBuilder.udiv®  rì   r"   Úsdivc                 ó   • g)z/
Signed integer division:
    name = lhs / rhs
Nr%   rê   s       r   r  ÚIRBuilder.sdivµ  rì   r"   Úfdivc                 ó   • g)z/
Floating-point division:
    name = lhs / rhs
Nr%   rê   s       r   r  ÚIRBuilder.fdiv¼  rì   r"   Úuremc                 ó   • g)z2
Unsigned integer remainder:
    name = lhs % rhs
Nr%   rê   s       r   r  ÚIRBuilder.uremÃ  rì   r"   Úsremc                 ó   • g)z0
Signed integer remainder:
    name = lhs % rhs
Nr%   rê   s       r   r  ÚIRBuilder.sremÊ  rì   r"   Úfremc                 ó   • g)z0
Floating-point remainder:
    name = lhs % rhs
Nr%   rê   s       r   r  ÚIRBuilder.fremÑ  rì   r"   Úorc                 ó   • g)z*
Bitwise integer OR:
    name = lhs | rhs
Nr%   rê   s       r   Úor_ÚIRBuilder.or_Ø  rì   r"   Úandc                 ó   • g)z+
Bitwise integer AND:
    name = lhs & rhs
Nr%   rê   s       r   Úand_ÚIRBuilder.and_ß  rì   r"   Úxorc                 ó   • g)z+
Bitwise integer XOR:
    name = lhs ^ rhs
Nr%   rê   s       r   r  ÚIRBuilder.xoræ  rì   r"   Úsaddc                 ó   • g)zV
Signed integer addition with overflow:
    name = {result, overflow bit} = lhs + rhs
Nr%   rê   s       r   Úsadd_with_overflowÚIRBuilder.sadd_with_overflowí  rì   r"   Úsmulc                 ó   • g)z\
Signed integer multiplication with overflow:
    name = {result, overflow bit} = lhs * rhs
Nr%   rê   s       r   Úsmul_with_overflowÚIRBuilder.smul_with_overflowô  rì   r"   Ússubc                 ó   • g)zY
Signed integer subtraction with overflow:
    name = {result, overflow bit} = lhs - rhs
Nr%   rê   s       r   Ússub_with_overflowÚIRBuilder.ssub_with_overflowû  rì   r"   Úuaddc                 ó   • g)zX
Unsigned integer addition with overflow:
    name = {result, overflow bit} = lhs + rhs
Nr%   rê   s       r   Úuadd_with_overflowÚIRBuilder.uadd_with_overflow  rì   r"   Úumulc                 ó   • g)z^
Unsigned integer multiplication with overflow:
    name = {result, overflow bit} = lhs * rhs
Nr%   rê   s       r   Úumul_with_overflowÚIRBuilder.umul_with_overflow	  rì   r"   Úusubc                 ó   • g)z[
Unsigned integer subtraction with overflow:
    name = {result, overflow bit} = lhs - rhs
Nr%   rê   s       r   Úusub_with_overflowÚIRBuilder.usub_with_overflow  rì   r"   c                 ó(  • [        UR                  [        R                  5      (       a9  [        R
                  " UR                  SUR                  R                  -  5      nO![        R
                  " UR                  S5      nU R                  XUS9$ )z/
Bitwise integer complement:
    name = ~value
)éÿÿÿÿr;  rA   )rB   r   r   Ú
VectorTyper   ÚConstantÚcountr  )r   Úvaluer   r9   s       r   Únot_ÚIRBuilder.not_  se   € ô
 �e—j‘j¤%×"2Ñ"2×3Ñ3Ü—/’/ %§*¡*¨e°e·j±j×6FÑ6FÑ.FÓG‰Cä—/’/ %§*¡*¨bÓ1ˆCØ�x‰x˜¨ˆxÐ.Ð.r"   c                 ó`   • U R                  [        R                  " UR                  S5      XS9$ )z%
Integer negative:
    name = -value
r   rA   )rù   r   r=  r   )r   r?  r   s      r   ÚnegÚIRBuilder.neg&  s&   € ð
 �x‰xœŸš¨¯
©
°AÓ6¸ˆxÐIÐIr"   Úfnegc                 ó   • g)z*
Floating-point negative:
    name = -arg
Nr%   )r   r   r   r   s       r   rE  ÚIRBuilder.fneg-  rì   r"   c                 óÌ   •  [         U   nUS;  a  X-   n[        R                  " U R
                  XcXES9nU R                  U5        U$ ! [         a    [        SU< S35      ef = f)Nzinvalid comparison z	 for icmp)r   r   rA   )Ú_CMP_MAPÚKeyErrorr7   r   Ú	ICMPInstrr   r   )r   ÚprefixÚcmpopr8   r9   r   Úopr   s           r   Ú_icmpÚIRBuilder._icmp8  sl   € ð	JÜ˜%‘ˆBð ˜Ó$Ø‘ˆBÜ×&Ò& t§z¡z°2¸CÑKˆØ�‰�UÔØˆøô ó 	JÝÃÐHÓIÐIð	Jús   ‚	A ÁA#c                 ó(   • U R                  SXX45      $ )zl
Signed integer comparison:
    name = lhs <cmpop> rhs

where cmpop can be '==', '!=', '<', '<=', '>', '>='
Ús©rO  ©r   rM  r8   r9   r   s        r   Úicmp_signedÚIRBuilder.icmp_signedC  ó   € ð �z‰z˜#˜u¨3Ó5Ð5r"   c                 ó(   • U R                  SXX45      $ )z{
Unsigned integer (or pointer) comparison:
    name = lhs <cmpop> rhs

where cmpop can be '==', '!=', '<', '<=', '>', '>='
ÚurS  rT  s        r   Úicmp_unsignedÚIRBuilder.icmp_unsignedL  rW  r"   c           	      óœ   • U[         ;   a  S[         U   -   nOUn[        R                  " U R                  XbX4US9nU R	                  U5        U$ )z‚
Floating-point ordered comparison:
    name = lhs <cmpop> rhs

where cmpop can be '==', '!=', '<', '<=', '>', '>=', 'ord', 'uno'
Úo©r   r   ©rI  r   Ú	FCMPInstrr   r   ©r   rM  r8   r9   r   r   rN  r   s           r   Úfcmp_orderedÚIRBuilder.fcmp_orderedU  óM   € ð ”HÓØ”x ‘Ñ&‰BàˆBÜ×&Ò&Ø�J‰J˜ °uñ>ˆà�‰�UÔØˆr"   c           	      óœ   • U[         ;   a  S[         U   -   nOUn[        R                  " U R                  XbX4US9nU R	                  U5        U$ )z„
Floating-point unordered comparison:
    name = lhs <cmpop> rhs

where cmpop can be '==', '!=', '<', '<=', '>', '>=', 'ord', 'uno'
rY  r^  r_  ra  s           r   Úfcmp_unorderedÚIRBuilder.fcmp_unorderede  rd  r"   c           	      ój   • [         R                  " U R                  XX4US9nU R                  U5        U$ )z6
Ternary select operator:
    name = cond ? lhs : rhs
r^  )r   ÚSelectInstrr   r   )r   Úcondr8   r9   r   r   r   s          r   ÚselectÚIRBuilder.selectu  s2   € ô
 ×(Ò(¨¯©°TÀØ/4ñ6ˆà�‰�UÔØˆr"   Útruncc                 ó   • g)zG
Truncating integer downcast to a smaller type:
    name = (typ) value
Nr%   ©r   r?  rƒ   r   s       r   rm  ÚIRBuilder.truncƒ  rì   r"   Úzextc                 ó   • g)zH
Zero-extending integer upcast to a larger type:
    name = (typ) value
Nr%   ro  s       r   rq  ÚIRBuilder.zextŠ  rì   r"   Úsextc                 ó   • g)zH
Sign-extending integer upcast to a larger type:
    name = (typ) value
Nr%   ro  s       r   rt  ÚIRBuilder.sext‘  rì   r"   Úfptruncc                 ó   • g)zH
Floating-point downcast to a less precise type:
    name = (typ) value
Nr%   ro  s       r   rw  ÚIRBuilder.fptrunc˜  rì   r"   Úfpextc                 ó   • g)zF
Floating-point upcast to a more precise type:
    name = (typ) value
Nr%   ro  s       r   rz  ÚIRBuilder.fpextŸ  rì   r"   Úbitcastc                 ó   • g)zB
Pointer cast to a different pointer type:
    name = (typ) value
Nr%   ro  s       r   r}  ÚIRBuilder.bitcast¦  rì   r"   Úaddrspacecastc                 ó   • g)zC
Pointer cast to a different address space:
    name = (typ) value
Nr%   ro  s       r   r€  ÚIRBuilder.addrspacecast­  rì   r"   Úfptouic                 ó   • g)zD
Convert floating-point to unsigned integer:
    name = (typ) value
Nr%   ro  s       r   rƒ  ÚIRBuilder.fptoui´  rì   r"   Úuitofpc                 ó   • g)zD
Convert unsigned integer to floating-point:
    name = (typ) value
Nr%   ro  s       r   r†  ÚIRBuilder.uitofp»  rì   r"   Úfptosic                 ó   • g)zB
Convert floating-point to signed integer:
    name = (typ) value
Nr%   ro  s       r   r‰  ÚIRBuilder.fptosiÂ  rì   r"   Úsitofpc                 ó   • g)zB
Convert signed integer to floating-point:
    name = (typ) value
Nr%   ro  s       r   rŒ  ÚIRBuilder.sitofpÉ  rì   r"   Úptrtointc                 ó   • g)z1
Cast pointer to integer:
    name = (typ) value
Nr%   ro  s       r   r�  ÚIRBuilder.ptrtointÐ  rì   r"   Úinttoptrc                 ó   • g)z1
Cast integer to pointer:
    name = (typ) value
Nr%   ro  s       r   r’  ÚIRBuilder.inttoptr×  rì   r"   c                 ó€  • Uc  O†[        U[        R                  [        R                  45      (       a,  [        UR                  [
        R                  5      (       d   eO+[        R                  " [
        R                  " S5      U5      n[        R                  " U R                  XU5      nU R                  U5        U$ )zT
Stack-allocate a slot for *size* elements of the given type.
(default one element)
é    )rB   r   ÚValuer=  r   r   rC   r   ÚAllocaInstrr   r   )r   rƒ   Úsizer   Úals        r   ÚallocaÚIRBuilder.allocaâ  s…   € ð
 ‰<ØÜ˜œvŸ|™|¬V¯_©_Ð=×>Ñ>Ü˜dŸi™i¬¯©×7Ñ7Ð7Ñ7ô —?’?¤5§=¢=°Ó#4°dÓ;ˆDä×%Ò% d§j¡j°#¸TÓBˆØ�‰�RÔØˆ	r"   c                 ó  • [        UR                  [        R                  5      (       d$  Sn[	        XQR                  [        U5      4-  5      e[        R                  " U R                  XUS9nX6l	        U R                  U5        U$ ©zN
Load value from pointer, with optional guaranteed alignment:
    name = *ptr
z5cannot load from value of type %s (%r): not a pointer)rƒ   )rB   r   r   ÚPointerTyperD   Ústrr   Ú	LoadInstrr   Úalignr   )r   Úptrr   r¢  rƒ   ÚmsgÚlds          r   ÚloadÚIRBuilder.loadô  si   € ô
 ˜#Ÿ(™(¤E×$5Ñ$5×6Ñ6ØIˆCÜ˜C§8¡8¬S°«XÐ"6Ñ6Ó7Ð7Ü×#Ò# D§J¡J°¸sÑCˆØŒØ�‰�RÔØˆ	r"   c                 óÞ  • [        UR                  [        R                  5      (       d$  Sn[	        XBR                  [        U5      4-  5      eUR                  R                  (       dL  UR                  R                  UR                  :w  a(  [	        SUR                  < SUR                  < S35      e[        R                  " U R                  X5      nX5l        U R                  U5        U$ ©zM
Store value to pointer, with optional guaranteed alignment:
    *ptr = name
z4cannot store to value of type %s (%r): not a pointerzcannot store z to z: mismatching types)rB   r   r   rŸ  rD   r   Ú	is_opaqueÚpointeer   Ú
StoreInstrr   r¢  r   )r   r?  r£  r¢  r¤  Ústs         r   ÚstoreÚIRBuilder.store  s¨   € ô
 ˜#Ÿ(™(¤E×$5Ñ$5×6Ñ6ØHˆCÜ˜C§8¡8¬S°«XÐ"6Ñ6Ó7Ð7Ø�x‰x×!×! c§h¡h×&6Ñ&6¸%¿*¹*Ó&DÝØ$Ÿzœz¨3¯8¬8ð5ó 6ð 6ä×$Ò$ T§Z¡Z°Ó<ˆØŒØ�‰�RÔØˆ	r"   c           	      ó  • [        UR                  [        R                  5      (       d$  Sn[	        XaR                  [        U5      4-  5      e[        R                  " U R                  XX4US9nU R                  U5        U$ rž  )
rB   r   r   rŸ  rD   r   r   ÚLoadAtomicInstrr   r   )r   r£  Úorderingr¢  r   rƒ   r¤  r¥  s           r   Úload_atomicÚIRBuilder.load_atomic  si   € ô
 ˜#Ÿ(™(¤E×$5Ñ$5×6Ñ6ØIˆCÜ˜C§8¡8¬S°«XÐ"6Ñ6Ó7Ð7Ü×)Ò)Ø�J‰J˜ u¸ñ=ˆà�‰�RÔØˆ	r"   c                 óž  • [        UR                  [        R                  5      (       d$  Sn[	        XRR                  [        U5      4-  5      eUR                  R                  UR                  :w  a(  [	        SUR                  < SUR                  < S35      e[        R                  " U R                  XX45      nU R                  U5        U$ r©  )rB   r   r   rŸ  rD   r   r«  r   ÚStoreAtomicInstrr   r   )r   r?  r£  r²  r¢  r¤  r­  s          r   Ústore_atomicÚIRBuilder.store_atomic  sœ   € ô
 ˜#Ÿ(™(¤E×$5Ñ$5×6Ñ6ØHˆCÜ˜C§8¡8¬S°«XÐ"6Ñ6Ó7Ð7Ø�8‰8×Ñ˜uŸz™zÓ)ÝØ$Ÿzœz¨3¯8¬8ð5ó 6ð 6ä×*Ò*Ø�J‰J˜ Hó5ˆà�‰�RÔØˆ	r"   c                 ól   • [         R                  " U R                  SX5      nU R                  U5        U$ )z6
Create a switch-case with a single *default* target.
Úswitch)r   ÚSwitchInstrr   ræ   )r   r?  ÚdefaultÚswts       r   rº  ÚIRBuilder.switch2  s/   € ô ×&Ò& t§z¡z°8¸UÓLˆØ×Ñ˜SÔ!Øˆ
r"   c                 ón   • [         R                  " U R                  SU/5      nU R                  U5        U$ )z#
Unconditional branch to *target*.
rÖ   ©r   ÚBranchr   ræ   )r   ÚtargetrÖ   s      r   rÅ   ÚIRBuilder.branch:  s1   € ô × Ò  §¡¨T°F°8Ó<ˆØ×Ñ˜RÔ Øˆ	r"   c                 óp   • [         R                  " U R                  SXU/5      nU R                  U5        U$ )zF
Conditional branch to *truebr* if *cond* is true, else to *falsebr*.
rÖ   )r   ÚConditionalBranchr   ræ   )r   rj  ÚtruebrÚfalsebrrÖ   s        r   rÏ   ÚIRBuilder.cbranchB  s8   € ô ×+Ò+¨D¯J©J¸Ø-1¸7Ð,CóEˆà×Ñ˜RÔ Øˆ	r"   c                 ól   • [         R                  " U R                  SU5      nU R                  U5        U$ )z#
Indirect branch to target *addr*.
Ú
indirectbr)r   ÚIndirectBranchr   ræ   )r   ÚaddrrÖ   s      r   Úbranch_indirectÚIRBuilder.branch_indirectK  s/   € ô ×(Ò(¨¯©°\À4ÓHˆØ×Ñ˜RÔ Øˆ	r"   c                 ób   • U R                  [        R                  " U R                  S5      5      $ )z'
Return from function without a value.
zret void©ræ   r   ÚRetr   r›   s    r   Úret_voidÚIRBuilder.ret_voidS  s+   € ð ×#Ñ#Ü×Ò˜TŸZ™Z¨Ó4ó6ð 	6r"   c                 ód   • U R                  [        R                  " U R                  SU5      5      $ )z.
Return from function with the given *value*.
rN   rÐ  )r   r?  s     r   rN   ÚIRBuilder.retZ  s-   € ð ×#Ñ#Ü×Ò˜TŸZ™Z¨°Ó6ó8ð 	8r"   c                 ón   • [         R                  " U R                  SU/5      nU R                  U5        U$ )z 
Resume an in-flight exception.
ÚresumerÀ  )r   Ú
landingpadrÖ   s      r   r×  ÚIRBuilder.resumea  s1   € ô × Ò  §¡¨X¸
°|ÓDˆØ×Ñ˜RÔ Øˆ	r"   c	                 ón   • [         R                  " U R                  XUXEUXxS9	n	U R                  U	5        U	$ )z8
Call function *fn* with *args*:
    name = fn(args...)
)r   ÚcconvÚtailÚfastmathÚattrsÚ	arg_attrs)r   Ú	CallInstrr   r   )
r   r*   Úargsr   rÛ  rÜ  rÝ  rÞ  rß  Úinsts
             r   rI   ÚIRBuilder.callk  s:   € ô ×%Ò% d§j¡j°"ÀØ,1ÀxØ,1ñHˆð 	�‰�TÔØˆr"   c                 óT   • [         R                  " XX55      nU R                  X$U5      $ )z
Inline assembler.
)r   Ú	InlineAsmrI   )r   ÚftypeÚasmÚ
constraintrá  Úside_effectr   s          r   rç  ÚIRBuilder.asmw  s'   € ô ×$Ò$ U°ÓIˆØ�y‰y˜ DÓ)Ð)r"   c                 ób   • [         R                  " U/ 5      nU R                  USSU-  / SU5      $ )zW
Load a register value into an LLVM value.
  Example: v = load_reg(IntType(32), "eax")
r$   z={%s}F)r   rF   rç  )r   Úreg_typeÚreg_namer   ræ  s        r   Úload_regÚIRBuilder.load_reg~  s4   € ô
 ×"Ò" 8¨RÓ0ˆØ�x‰x˜˜r 7¨XÑ#5°r¸5À$ÓGÐGr"   c                 óŒ   • [         R                  " [         R                  " 5       U/5      nU R                  USSU-  U/SU5      $ )zs
Store an LLVM value inside a register
Example:
  store_reg(Constant(IntType(32), 0xAAAAAAAA), IntType(32), "eax")
r$   z{%s}T)r   rF   ÚVoidTyperç  )r   r?  rì  rí  r   ræ  s         r   Ú	store_regÚIRBuilder.store_reg†  s?   € ô ×"Ò"¤5§>¢>Ó#3°h°ZÓ@ˆØ�x‰x˜˜r 6¨HÑ#4°u°g¸tÀTÓJÐJr"   c
                 óp   • [         R                  " U R                  XUXEUXxU	S9
n
U R                  U
5        U
$ )N)r   rÛ  rÝ  rÞ  rß  )r   ÚInvokeInstrr   ræ   )r   r*   rá  Ú	normal_toÚ	unwind_tor   rÛ  rÝ  rÞ  rß  râ  s              r   ÚinvokeÚIRBuilder.invoke�  s<   € ä×'Ò'¨¯
©
°B¸iØ(1ÀEØ19Ø2;ñ=ˆð 	×Ñ˜TÔ"Øˆr"   c           	      ój   • [         R                  " U R                  XX4US9nU R                  U5        U$ )zW
Compute effective address (getelementptr):
    name = getelementptr ptr, <indices...>
)Úinboundsr   Úsource_etype)r   ÚGEPInstrr   r   )r   r£  Úindicesrû  r   rü  r   s          r   ÚgepÚIRBuilder.gepš  s6   € ô
 ×%Ò% d§j¡j°#Ø/7Ø3?ñAˆð 	�‰�UÔØˆr"   c                 óh   • [         R                  " U R                  XUS9nU R                  U5        U$ )z$
Returns the value at position idx.
rA   )r   ÚExtractElementr   r   )r   Úvectorr·   r   r   s        r   Úextract_elementÚIRBuilder.extract_element§  s-   € ô ×+Ò+¨D¯J©J¸È$ÑOˆØ�‰�UÔØˆr"   c                 ój   • [         R                  " U R                  XUUS9nU R                  U5        U$ )z}
Returns vector with vector[idx] replaced by value.
The result is undefined if the idx is larger or equal the vector length.
rA   )r   ÚInsertElementr   r   )r   r  r?  r·   r   r   s         r   Úinsert_elementÚIRBuilder.insert_element¯  s2   € ô
 ×*Ò*¨4¯:©:°vÀcØ04ñ6ˆà�‰�UÔØˆr"   c                 ój   • [         R                  " U R                  XUUS9nU R                  U5        U$ )zè
Constructs a permutation of elements from *vector1* and *vector2*.
Returns a new vector in the same length of *mask*.

* *vector1* and *vector2* must have the same element type.
* *mask* must be a constant vector of integer types.
rA   )r   ÚShuffleVectorr   r   )r   Úvector1Úvector2Úmaskr   r   s         r   Úshuffle_vectorÚIRBuilder.shuffle_vector¹  s2   € ô ×*Ò*¨4¯:©:°wÈØ04ñ6ˆà�‰�UÔØˆr"   c                 ó¤   • [        U[        [        45      (       d  U/n[        R                  " U R
                  XUS9nU R                  U5        U$ )z-
Extract member number *idx* from aggregate.
rA   )rB   ÚtupleÚlistr   ÚExtractValuer   r   )r   Úaggr·   r   r   s        r   Úextract_valueÚIRBuilder.extract_valueÈ  sE   € ô ˜#¤¤t˜}×-Ñ-Ø�%ˆCÜ×)Ò)¨$¯*©*°cÀTÑJˆØ�‰�UÔØˆr"   c                 ó¤   • [        U[        [        45      (       d  U/n[        R                  " U R
                  XX4S9nU R                  U5        U$ )z9
Insert *value* into member number *idx* from aggregate.
rA   )rB   r  r  r   ÚInsertValuer   r   )r   r  r?  r·   r   r   s         r   Úinsert_valueÚIRBuilder.insert_valueÒ  sE   € ô ˜#¤¤t˜}×-Ñ-Ø�%ˆCÜ×(Ò(¨¯©°SÀÑPˆØ�‰�UÔØˆr"   c                 óh   • [         R                  " U R                  XUS9nU R                  U5        U$ )Nr^  )r   ÚPhiInstrr   r   )r   rƒ   r   r   râ  s        r   ÚphiÚIRBuilder.phiÞ  s+   € Ü×$Ò$ T§Z¡Z°ÀuÑMˆØ�‰�TÔØˆr"   c                 óh   • [         R                  " U R                  5      nU R                  U5        U$ r   )r   ÚUnreachabler   ræ   )r   râ  s     r   ÚunreachableÚIRBuilder.unreachableå  s)   € Ü×'Ò'¨¯
©
Ó3ˆØ×Ñ˜TÔ"Øˆr"   c           	      ój   • [         R                  " U R                  XX4US9nU R                  U5        U$ )NrA   )r   Ú	AtomicRMWr   r   )r   rN  r£  r‚   r²  r   râ  s          r   Ú
atomic_rmwÚIRBuilder.atomic_rmwê  s0   € Ü×%Ò%Ø�J‰J˜ °Tñ;ˆà�‰�TÔØˆr"   c           
      óx   • Uc  UOUn[         R                  " U R                  XX4XVS9nU R                  U5        U$ )zè
Atomic compared-and-set:
    atomic {
        old = *ptr
        success = (old == cmp)
        if (success)
            *ptr = val
        }
    name = { old, success }

If failordering is `None`, the value of `ordering` is used.
rA   )r   ÚCmpXchgr   r   )r   r£  Úcmpr‚   r²  Úfailorderingr   râ  s           r   ÚcmpxchgÚIRBuilder.cmpxchgð  s>   € ð $0Ñ#7‘x¸\ˆÜ×#Ò# D§J¡J°¸#Ø$0ñ=ˆà�‰�TÔØˆr"   c                 ól   • [         R                  " U R                  XU5      nU R                  U5        U$ r   )r   ÚLandingPadInstrr   r   )r   rƒ   r   Úcleanuprâ  s        r   rØ  ÚIRBuilder.landingpad  s+   € Ü×+Ò+¨D¯J©J¸À7ÓKˆØ�‰�TÔØˆr"   c                 ó\   • U R                   R                  S5      nU R                  X!/5      $ )z/
Optimizer hint: assume *cond* is always true.
zllvm.assume)rE   rH   rI   )r   rj  r*   s      r   ÚassumeÚIRBuilder.assume  s)   € ð �[‰[×*Ñ*¨=Ó9ˆØ�y‰y˜˜VÓ$Ð$r"   c                 óh   • [         R                  " U R                  XUS9nU R                  U5        U$ )z‚
Add a memory barrier, preventing certain reorderings of load and/or
store accesses with
respect to other processors and devices.
rA   )r   ÚFencer   r   )r   r²  Útargetscoper   râ  s        r   ÚfenceÚIRBuilder.fence  s-   € ô ×!Ò! $§*¡*¨hÈ$ÑOˆØ�‰�TÔØˆr"   c                 ój   • [         R                  " U R                  U5      nU R                  U5        U$ )zï
Puts a single-line comment into the generated IR. This will be ignored
by LLVM, but can be useful for debugging the output of a compiler. Adds
a comment to the source file.

* *text* is a string that does not contain new line characters.
)r   ÚCommentr   r   )r   Útextrâ  s      r   ÚcommentÚIRBuilder.comment  s+   € ô ×#Ò# D§J¡J°Ó5ˆØ�‰�TÔØˆr"   z
llvm.bswapc                 ó   • g)z^
Used to byte swap integer values with an even number of bytes (positive
multiple of 16 bits)
Nr%   ©r   rj  s     r   ÚbswapÚIRBuilder.bswap%  rì   r"   zllvm.bitreversec                 ó   • g)zX
Reverse the bitpattern of an integer value; for example 0b10110110
becomes 0b01101101.
Nr%   r@  s     r   Ú
bitreverseÚIRBuilder.bitreverse,  rì   r"   z
llvm.ctpopc                 ó   • g)z+
Counts the number of bits set in a value.
Nr%   r@  s     r   ÚctpopÚIRBuilder.ctpop3  rì   r"   z	llvm.ctlzc                 ó   • g)zh
Counts leading zero bits in *value*. Boolean *flag* indicates whether
the result is defined for ``0``.
Nr%   ©r   rj  rq   s      r   ÚctlzÚIRBuilder.ctlz9  rì   r"   z	llvm.cttzc                 ó   • g)zi
Counts trailing zero bits in *value*. Boolean *flag* indicates whether
the result is defined for ``0``.
Nr%   rJ  s      r   ÚcttzÚIRBuilder.cttz@  rì   r"   zllvm.fmac                 ó   • g)z+
Perform the fused multiply-add operation.
Nr%   )r   ry   rz   r{   s       r   ÚfmaÚIRBuilder.fmaG  rì   r"   c                 ó¸  • U(       d  [        S5      e[        U[        R                  [        R                  45      (       d  [        SU-  5      e[        UR
                  [        R                  5      (       a  UR
                  R                  S:X  d  [        SUR
                  -  5      eSnU R                  R                  XB/5      nU R                  XQ/U5      $ )z*
Convert from an i16 to the given FP type
zexpected a float return typerg   é   zexpected an i16 type, got %szllvm.convert.from.fp16)rD   rB   r   rh   ri   r   rC   rp   rE   rH   rI   )r   ry   Útor   r   r*   s         r   Úconvert_from_fp16ÚIRBuilder.convert_from_fp16M  s§   € ö ÜÐ:Ó;Ð;Ü˜"œuŸ™´×0@Ñ0@ÐA×BÑBÜÐ;¸bÑ@ÓAÐAÜ˜1Ÿ6™6¤5§=¡=×1Ñ1°a·f±f·l±lÀbÓ6HÜÐ:¸Q¿V¹VÑCÓDÐDà)ˆØ�[‰[×*Ñ*¨6°4Ó8ˆØ�y‰y˜˜S $Ó'Ð'r"   zllvm.convert.to.fp16c                 ó   • g)z'
Convert the given FP number to an i16
Nr%   )r   ry   s     r   Úconvert_to_fp16ÚIRBuilder.convert_to_fp16\  rì   r"   )r•   r”   r–   r   rP   r#   )Nr$   )r$   NN)r$   N)r$   NFr%   r%   N)r$   Nr%   r%   N)Fr$   N)r$   F)wÚ__name__Ú
__module__Ú__qualname__Ú__firstlineno__r˜   Úpropertyr   r»   rŸ   rE   r§   rª   r­   r°   r³   r¸   Ú
contextlibÚcontextmanagerr¾   rÂ   rÈ   r×   rÝ   r   ræ   r<   rè   rí   rð   ró   rö   rù   rü   rÿ   r  r  r  r  r  r  r  r  r  r  rS   r$  r(  r,  r0  r4  r8  r@  rC  r/   rE  rO  rU  rZ  rb  rf  rk  r†   rm  rq  rt  rw  rz  r}  r€  rƒ  r†  r‰  rŒ  r�  r’  r›  r¦  r®  r³  r·  rº  rÅ   rÏ   rÍ  rÒ  rN   r×  rI   rç  rî  rò  rø  rÿ  r  r  r  r  r  r  r"  r&  r,  rØ  r3  r8  r=  rc   rA  rD  rG  rt   rK  rN  r~   rQ  rV  rl   rY  Ú__static_attributes__r%   r"   r   r‘   r‘   ½   s!  † ô#ð
 ñó ðð €Kàñ!ó ð!ð ñ(ó ð(ò=òAòò/ô6òð ×Ññ,ó ð,ð  ×Ññó ðð ×Ññ ó ð ð ×Ñó$ó ð$ð, ×Ñó$ó ð$ò<òñ ˆEƒ]óó ðñ ˆFƒ^óó ðñ ˆFƒ^óó ðñ ˆEƒ]óó ðñ ˆFƒ^óó ðñ ˆEƒ]óó ðñ ˆFƒ^óó ðñ ˆEƒ]óó ðñ ˆFƒ^óó ðñ ˆFƒ^óó ðñ ˆFƒ^óó ðñ ˆFƒ^óó ðñ ˆFƒ^óó ðñ ˆFƒ^óó ðñ ˆFƒ^óó ðñ ˆDƒ\óó ðñ ˆEƒ]óó ðñ ˆEƒ]óó ðñ ˜&Ó!óó "ðñ ˜&Ó!óó "ðñ ˜&Ó!óó "ðñ ˜&Ó!óó "ðñ ˜&Ó!óó "ðñ ˜&Ó!óó "ðô	/ôJñ ˆ6ƒ]óó ðò	ô6ô6ôô ô ñ ˆWÓóó ðñ ˆVƒ_óó ðñ ˆVƒ_óó ðñ ˆYÓóó ðñ ˆWÓóó ðñ ˆYÓóó ðñ ˆ_Óóó ðñ ˆXÓóó ðñ ˆXÓóó ðñ ˆXÓóó ðñ ˆXÓóó ðñ ˆZÓóó ðñ ˆZÓóó ðôô$ôô òò(òòòò6ò8òð HJØ!%ô
ô*ôHôKð FJôô	ôôôôôôòô
ôô&ò
%ôò
ñ ˜,Ó'ñó (ðñ Ð+Ó,ñó -ðñ ˜,Ó'ñó (ðñ
   Ó,ñó -ðñ   Ó,ñó -ðñ �jÓ!ñó "ðô
(ñ Ð2Ó3ñó 4ór"   r‘   )r`  r'   Úllvmlite.irr   r   r   rI  ÚInstructionr/   r<   rS   rZ   rc   rl   rt   r~   Ú	CastInstrr†   r�   Úobjectr‘   r%   r"   r   Ú<module>rg     s£   ðÛ Û ç 3Ñ 3ð 
Ø	Ø
Ø
Ø
Ø
ñ€ð #×.Ñ.ô 
ð $×/Ñ/ô ð  &2×%=Ñ%=ô ð2 $×/Ñ/ô 
òò òò(ð0 %×.Ñ.ô òô c�õ cr"   