
    sh                        S r SSKJr  SSKJrJrJrJrJrJ	r	J
r
JrJrJr  SSKJr   " S S\\5      r " S S\5      r\" / S	Q5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\\5      r " S S\\5      r " S S\\5      r " S S\5      r " S  S!\5      r " S" S#\5      r  " S$ S%\ 5      r! " S& S'\ 5      r" " S( S)\5      r# " S* S+\5      r$ " S, S-\5      r% " S. S/\5      r& " S0 S1\5      r' " S2 S3\5      r( " S4 S5\5      r) " S6 S7\5      r* " S8 S9\5      r+ " S: S;\5      r, " S< S=\5      r- " S> S?\5      r. " S@ SA\5      r/ " SB SC\5      r0 " SD SE\15      r2 " SF SG\5      r3 " SH SI\5      r4 " SJ SK\15      r5 " SL SM\55      r6 " SN SO\55      r7 " SP SQ\5      r8 " SR SS\5      r9 " ST SU\5      r:gV)Wz)
Implementation of LLVM IR instructions.
    )types)
BlockFunctionValue
NamedValueConstantMetaDataArgumentMetaDataStringAttributeSet	UndefinedArgumentAttributes)_HasMetadatac                   ^   ^  \ rS rSrS	U 4S jjr\S 5       r\S 5       rS rS r	S r
SrU =r$ )
Instruction   c                    > [         [        U ]  XUS9  [        U[        5      (       d   e[        U[
        [        45      (       d   eX0l        X@l        [        U5      U l	        0 U l
        g Nname)superr   __init__
isinstancer   tuplelistopnameoperandsflagsmetadata)selfparenttypr   r   r   r   	__class__s          l/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/llvmlite/ir/instructions.pyr   Instruction.__init__   s]    k4)&D)A&%((((%%//// %[
    c                 .    U R                   R                  $ N)r    functionr   s    r#   r(   Instruction.function   s    {{###r%   c                 B    U R                   R                  R                  $ r'   )r    r(   moduler)   s    r#   r,   Instruction.module   s    {{##***r%   c                 p   U R                   nU R                  (       a  SR                  U/U R                  -   5      nSR                  U R                   Vs/ s H  o3R	                  5       PM     sn5      nU R
                  nU R                  SS9nUR                  SR                  X%XF5      5        g s  snf )N , Tleading_comma{0} {1} {2}{3}
)	r   r   joinr   get_referencetype_stringify_metadataappendformat)r   bufr   opr   r!   r   s          r#   descrInstruction.descr   s    ::XXvh34F994==I=R..0=IJii++$+?

%F6;	= Js   B3c                     XR                   ;   aM  / nU R                    H  nUR                  XAL a  UOU5        M     [        U5      U l         U R                  5         g g r'   )r   r8   r   _clear_string_cache)r   oldnewopsr;   s        r#   replace_usageInstruction.replace_usage(   sM    --Cmm

")34 $!#JDM$$&  r%   c                     SU R                   R                  < SU R                  < SU R                  < SU R                  < SU R
                  < S3$ )Nz<ir.r/   z
 of type 'z
', opname z, operands >)r"   __name__r   r6   r   r   r)   s    r#   __repr__Instruction.__repr__0   s2    NN##TYY		KK( 	(r%   )r   r   r   r     )rG   
__module____qualname____firstlineno__r   propertyr(   r,   r<   rC   rH   __static_attributes____classcell__r"   s   @r#   r   r      sD     $ $ + +='( (r%   r   c                   (    \ rS rSr\" / SQ5      rSrg)CallInstrAttributes6   )
convergentnoreturnnounwindreadonlyreadnonenoinlinealwaysinlinerL   NrG   rM   rN   rO   	frozenset_knownrQ   rL   r%   r#   rU   rU   6   s     @ AFr%   rU   )tailmusttailnotailc                   (    \ rS rSr\" / SQ5      rSrg)FastMathFlags>   )fastnnanninfnszarcpcontractafnreassocrL   Nr^   rL   r%   r#   re   re   >   s     * +Fr%   re   c                      ^  \ rS rSr  SU 4S jjr\S 5       r\R                  S 5       r\S 5       rS r	\S 5       r
S rS	 rS
rU =r$ )	CallInstrC   c
           	        > Uc!  [        U[        5      (       a  UR                  OUU l        [        U[        5      (       a  U[
        ;   a  OU(       a  SnOSnX`l        [        U5      U l        [        U5      U l
        0 U l        U	(       ac  U	R                  5        HO  u  pSU
s=::  a  [        U5      :  d  O  [        SR                  U
5      5      e[!        U5      U R                  U
'   MQ     [#        U5      n[%        [        UR&                  R(                  5      5       H  nX;   nUR&                  R(                  U   n[        U[*        R,                  5      (       a  UR.                  U:w  a  [1        U5      nUR.                  U:w  a*  SR                  SU-   XR.                  5      n[3        U5      eXU'   M     [4        [6        U ]s  XR&                  R:                  SU/[#        U5      -   US9  g )	Nra   rK   r   zInvalid argument index {}z%Type of #{0} arg mismatch: {1} != {2}   callr   )r   r   calling_conventioncconvstrTailMarkerOptionsra   re   fastmathrU   
attributesarg_attributesitemslen
ValueErrorr9   r   r   rangefunction_typeargsr   MetaDataTyper6   r	   	TypeErrorr   rp   r   return_type)r   r    funcr   r   rv   ra   ry   attrs	arg_attrsidxiargexpected_typemsgr"   s                  r#   r   CallInstr.__init__D   s    :dH+E+E --  	
 dC  T->%>DD	%h/-e4 'oo/
S,3t9,$%@&,fSk3 3+=e+D##C(	 0 Dzs4--2234A'C ..33A6M=%*<*<==HH-&s+xx=(>q1umXX> n$G 5 	i'0B0B0N0N(.d0C$ 	( 	Pr%   c                      U R                   S   $ Nr   r   r)   s    r#   calleeCallInstr.calleeo       }}Qr%   c                      XR                   S'   g r   r   )r   	newcallees     r#   r   r   s   s    $ar%   c                      U R                   SS  $ Nrs   r   r)   s    r#   r   CallInstr.argsw   s    }}QR  r%   c                 n    UR                   U R                  R                   :w  a  [        S5      eXl        g )Nz"New function has incompatible type)r   r   r   )r   newfuncs     r#   replace_calleeCallInstr.replace_callee{   s+      DKK$=$==@AAr%   c                     U R                   $ )zThe callee function)r   r)   s    r#   called_functionCallInstr.called_function   s     {{r%   c                   ^  U 4S jnSR                  [        T R                  5       VVs/ s H  u  pEU" XE5      PM     snn5      nT R                  R                  nUR
                  (       a  UnOUR                  nSR                  UT R                  R                  5       5      n	T R                  (       a  SR                  T R                  U	5      n	Sn
T R                  (       a  SR                  T R                  5      n
T R                  (       a7  SSR                  T R                  R                  UR                  5      5      -   OSnT R                  (       a7  SSR                  T R                  R                  UR                  5      5      -   OSnUR                  SR                  U
T R                  U	UUUU(       a  T R!                  SS	9OSS
95        g s  snnf )Nc                    > U TR                   ;   a;  SR                  TR                   U    R                  UR                  5      5      S-   nOSnSR	                  UR                  X!R                  5       5      $ )Nr/   rK   
{0} {1}{2})r{   r4   _to_listr6   r9   r5   )r   ar   r   s      r#   	descr_arg#CallInstr._descr.<locals>.descr_arg   sa    D'''!4!4Q!7!@!@!HICO&&qvvuoo6GHHr%   r0   {0} {1}rK   z{0} r/   z2{tail}{op}{fastmath} {callee}({args}){attr}{meta}
Tr1   )ra   r;   r   ry   r   attrmeta)r4   	enumerater   r   r   var_argr   r9   r5   rv   ra   rz   r   ry   r8   r   r7   )r   r:   add_metadatar   r   r   r   fntyty
callee_reftail_markerfn_attrsfm_attrss   `            r#   _descrCallInstr._descr   s   	I yyi		6JK6Jda)A/6JKL{{((<<B !!B%%b$++*C*C*EF
::"))$**jAJ99 --		2K  $//":":4;K;K"LMM$& 	 }} $--"8"89I9I"JKK"$ 	 	

HOO{{! ***>') P 	
 		1 Ls   G
c                 $    U R                  USS9  g )NTr   )r   r   r:   s     r#   r<   CallInstr.descr   s    Cd+r%   )r{   rz   r   rv   ry   ra   )rK   NNrL   rL   N)rG   rM   rN   rO   r   rP   r   setterr   r   r   r   r<   rQ   rR   rS   s   @r#   rp   rp   C   sy    EI26)PV     ]]% % ! !
  (T, ,r%   rp   c                   <   ^  \ rS rSr  SU 4S jjrU 4S jrSrU =r$ )InvokeInstr   c                    > [        U[        5      (       d   e[        U[        5      (       d   e[        [        U ]  XX6USUXS9	  SU l        X@l        XPl        g )NF)ra   ry   r   r   invoke)r   r   r   r   r   r   	normal_to	unwind_to)r   r    r   r   r   r   r   rv   ry   r   r   r"   s              r#   r   InvokeInstr.__init__   s_    )U++++)U++++k4)&E/4x05 	* 	L ""r%   c           
         > [         [        U ]  USS9  UR                  SR	                  U R
                  R                  5       U R                  R                  5       U R                  SS9S95        g )NFr   z.      to label {0} unwind label {1}{metadata}
Tr1   )r   )	r   r   r   r8   r9   r   r5   r   r7   )r   r:   r"   s     r#   r<   InvokeInstr.descr   sh    k4'%'@

DKKNN((*NN((*--D-A L 
 	r%   )r   r   r   )rK   NrL   rL   NrG   rM   rN   rO   r   r<   rQ   rR   rS   s   @r#   r   r      s    FH>B	# r%   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )
Terminator   c                 X   > [         [        U ]  U[        R                  " 5       UU5        g r'   )r   r   r   r   VoidType)r   r    r   r   r"   s       r#   r   Terminator.__init__   s"    j$(1A6)1	3r%   c           
      .   U R                   nSR                  U R                   Vs/ s H-  nSR                  UR                  UR                  5       5      PM/     sn5      nU R                  SS9nUR                  SR                  X$U5      5        g s  snf )Nr0   r   Tr1   r   )r   r4   r   r9   r6   r5   r7   r8   )r   r:   r   r;   r   r   s         r#   r<   Terminator.descr   s    99(,7(5" (..rww8H8H8JK(57 8++$+?

<&&vBC7s   4BrL   r   rS   s   @r#   r   r      s    3D Dr%   r   c                       \ rS rSrS rSrg)PredictableInstr   c                    [        U R                  S5      /nU HC  nUS:  a  [        S5      eUR                  [	        [
        R                  " S5      U5      5        ME     U R                  R                  U5      nU R                  SU5        g )Nbranch_weightsr   z(branch weight must be a positive integer    prof)	r
   r,   r~   r8   r   r   IntTyper   set_metadata)r   weightsr   wmds        r#   set_weightsPredictableInstr.set_weights   su    "4;;0@ABA1u !KLLOOHU]]2%6:;  [[%%h/&"%r%   rL   N)rG   rM   rN   rO   r   rQ   rL   r%   r#   r   r      s    &r%   r   c                   B   ^  \ rS rSrSU 4S jjr\S 5       rS rSrU =r	$ )Ret   c                 >   > Ub  U/O/ n[         [        U ]  XU5        g r'   )r   r   r   )r   r    r   return_valuer   r"   s        r#   r   Ret.__init__   s"    %1%=L>2c4!&(;r%   c                 D    U R                   (       a  U R                   S   $ g r   r   r)   s    r#   r   Ret.return_value   s    ====##r%   c                 "   U R                   nU R                  SS9nUbF  UR                  SR                  U R                  UR
                  UR                  5       U5      5        g UR                  SR                  U R                  U5      5        g )NTr1   r3   z{0}{1}
)r   r7   r8   r9   r   r6   r5   )r   r:   r   r   s       r#   r<   	Ret.descr   s{    ((++$+?#JJ)t{{L,=,=+99;')*
 JJz((h?@r%   rL   r'   )
rG   rM   rN   rO   r   rP   r   r<   rQ   rR   rS   s   @r#   r   r      s(    <  	A 	Ar%   r   c                       \ rS rSrSrg)Branch   rL   NrG   rM   rN   rO   rQ   rL   r%   r#   r   r          r%   r   c                       \ rS rSrSrg)ConditionalBranch   rL   Nr   rL   r%   r#   r   r      r   r%   r   c                   D   ^  \ rS rSrU 4S jr\S 5       rS rS rSr	U =r
$ )IndirectBranchi  c                 >   > [         [        U ]  XU/5        / U l        g r'   )r   r   r   destinations)r   r    r   addrr"   s       r#   r   IndirectBranch.__init__  s    nd,VdVDr%   c                      U R                   S   $ r   r   r)   s    r#   addressIndirectBranch.address  r   r%   c                 h    [        U[        5      (       d   eU R                  R                  U5        g r'   )r   r   r   r8   )r   blocks     r#   add_destinationIndirectBranch.add_destination
  s)    %''''  'r%   c                 V   U R                    Vs/ s H"  nSR                  UR                  5       5      PM$     nnUR                  SR                  U R                  R
                  U R                  R                  5       SR                  U5      U R                  SS95      5        g s  snf )Nz	label {0}zindirectbr {0} {1}, [{2}]  {3}
r0   Tr1   )r   r9   r5   r8   r   r6   r4   r7   )r   r:   blkr   s       r#   r<   IndirectBranch.descr  s    #'#4#46#4C $**3+<+<+>?#4 	 6

5<<LLLL&&(IIl#$$4$8	
 	6s   )B&)r   )rG   rM   rN   rO   r   rP   r   r   r<   rQ   rR   rS   s   @r#   r   r     s+        ( r%   r   c                   D   ^  \ rS rSrU 4S jr\S 5       rS rS rSr	U =r
$ )SwitchInstri  c                 J   > [         [        U ]  XU/5        X@l        / U l        g r'   )r   r   r   defaultcases)r   r    r   valr   r"   s        r#   r   SwitchInstr.__init__  s"    k4)&3%@
r%   c                      U R                   S   $ r   r   r)   s    r#   valueSwitchInstr.value   r   r%   c                     [        U[        5      (       d   e[        U[        5      (       d   [        U R                  R
                  U5      nU R                  R                  X45        g r'   )r   r   r   r   r  r6   r  r8   )r   r  r   s      r#   add_caseSwitchInstr.add_case$  sJ    %''''#u%%4::??C0C

3,'r%   c                    U R                    VVs/ s H>  u  p#SR                  UR                  UR                  5       UR                  5       5      PM@     nnnUR	                  SR                  U R
                  R                  U R
                  R                  5       U R                  R                  5       SR                  U5      U R                  SS95      5        g s  snnf )Nz{0} {1}, label {2}z%switch {0} {1}, label {2} [{3}]  {4}
r/   Tr1   )	r  r9   r6   r5   r8   r  r   r4   r7   )r   r:   r  r   r  s        r#   r<   SwitchInstr.descr*  s     "&-!+XS &,,SXXs7H7H7J-0->->-@B!+ 	 - 	

;BBJJOOJJ$$&LL&&(HHUO$$4$8
 	-s   AC)r  r   )rG   rM   rN   rO   r   rP   r  r  r<   rQ   rR   rS   s   @r#   r   r     s+    
    (
 
r%   r   c                       \ rS rSrSrg)Resumei7  rL   Nr   rL   r%   r#   r  r  7  r   r%   r  c                   b   ^  \ rS rSrSU 4S jjr\S 5       r\S 5       r\S 5       rS r	Sr
U =r$ )	SelectInstri;  rL   c           	         > UR                   UR                   :X  d   e[        [        U ]  XR                   SX#U/UUS9  g )Nselectr   r   )r6   r   r  r   )r   r    condlhsrhsr   r   r"   s          r#   r   SelectInstr.__init__<  sB    xx388###k4)&((H+/c*:05 	* 	7r%   c                      U R                   S   $ r   r   r)   s    r#   r  SelectInstr.condB  r   r%   c                      U R                   S   $ r   r   r)   s    r#   r  SelectInstr.lhsF  r   r%   c                      U R                   S   $ )N   r   r)   s    r#   r  SelectInstr.rhsJ  r   r%   c                    UR                  SR                  SR                  U R                  5      U R                  R
                  U R                  R                  5       U R                  R
                  U R                  R                  5       U R                  R
                  U R                  R                  5       U R                  SS95      5        g )Nz)select {0} {1} {2}, {3} {4}, {5} {6} {7}
r/   Tr1   )
r8   r9   r4   r   r  r6   r5   r  r  r7   r   s     r#   r<   SelectInstr.descrN  s    

?FFHHTZZ IINNDII335HHMM488113HHMM488113$$4$8
 	r%   rJ   )rG   rM   rN   rO   r   rP   r  r  r  r<   rQ   rR   rS   s   @r#   r  r  ;  sN    7             r%   r  c                   >   ^  \ rS rSrSr0 rS/ 4U 4S jjrS rSrU =r	$ )CompareInstriX  zinvalid-comparerK   c           	        > X R                   ;  a  [        SU< SU R                  < 35      eU H/  nXpR                  ;  d  M  [        SU< SU R                  < 35      e   U R                  n[	        UR
                  [        R                  5      (       a@  [        R                  " [        R                  " S5      UR
                  R                  5      n	O[        R                  " S5      n	[        [        U ]3  XXU/UUS9  X l        g )Nzinvalid comparison z for zinvalid flag rs   )r   r   )VALID_OPr~   OPNAME
VALID_FLAGr   r6   r   
VectorTyper   countr   r!  r   r;   )r   r    r;   r  r  r   r   flagr   r!   r"   s             r#   r   CompareInstr.__init__]  s    ]]"r4;;OPPD??* T4;;!OPP  chh 0 011""5==#3SXX^^DC--"ClD*6+1:U04 	+ 	6 r%   c                 h   UR                  SR                  U R                  SR                  S U R                   5       5      U R
                  U R                  S   R                  U R                  S   R                  5       U R                  S   R                  5       U R                  SS9S95        g )	Nz.{opname}{flags} {op} {ty} {lhs}, {rhs} {meta}
rK   c              3   ,   #    U  H
  nS U-   v   M     g7f)r/   NrL   ).0its     r#   	<genexpr>%CompareInstr.descr.<locals>.<genexpr>p  s     8Zr#(Zs   r   rs   Tr1   )r   r   r;   r   r  r  r   )
r8   r9   r   r4   r   r;   r   r6   r5   r7   r   s     r#   r<   CompareInstr.descrm  s    

DKK;;''8TZZ88ww}}Q$$a ..0a ..0)))= L 
 	r%   )r;   )
rG   rM   rN   rO   r$  r#  r   r<   rQ   rR   rS   s   @r#   r!  r!  X  s!    FH24B  	 	r%   r!  c                   @    \ rS rSrSrSSSSSSS	S
SSS.
r\" 5       rSrg)	ICMPInstriy  icmpequalz	not equalzunsigned greater thanzunsigned greater or equalzunsigned less thanzunsigned less or equalzsigned greater thanzsigned greater or equalzsigned less thanzsigned less or equal)
eqneugtugeultulesgtsgesltslerL   N)	rG   rM   rN   rO   r$  r#  setr%  rQ   rL   r%   r#   r2  r2  y  s5    F&*#'$(!%H Jr%   r2  c                       \ rS rSrSr0 SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_r1 S#krS$rg%)&	FCMPInstri  fcmpfalsez#no comparison, always returns falseoeqzordered and equalogtzordered and greater thanogez!ordered and greater than or equaloltzordered and less thanolezordered and less than or equalonezordered and not equalordzordered (no nans)ueqzunordered or equalr7  zunordered or greater thanr8  z"unordered or greater than or equalr9  zunordered or less thanr:  zunordered or less than or equalunezunordered or not equalunozunordered (either nans)truez"no comparison, always returns true>   rm   rj   rk   rg   ri   rh   rn   rl   rL   N)rG   rM   rN   rO   r$  r#  r%  rQ   rL   r%   r#   rA  rA    s    F6" 	) 	2	
 	& 	/ 	& 	" 	# 	* 	3 	' 	0 	' 	(  	4!H$Jr%   rA  c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )	CastInstri  c                 .   > [         [        U ]  XX#/US9  g r   )r   rP  r   )r   r    r;   r  r!   r   r"   s         r#   r   CastInstr.__init__  s    i'RT'Jr%   c                     UR                  SR                  U R                  U R                  S   R                  U R                  S   R                  5       U R                  U R                  SS95      5        g )Nz{0} {1} {2} to {3} {4}
r   Tr1   )r8   r9   r   r   r6   r5   r7   r   s     r#   r<   CastInstr.descr  sb    

-44KKMM!!!MM!**,II$$4$8
 	r%   rL   rK   r   rS   s   @r#   rP  rP    s    K r%   rP  c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )	LoadInstri  c                   > Uc_  [        U[        5      (       a  UR                  nO=UR                  R                  (       d  UR                  R
                  nO[        S5      e[        [        U ]'  XSU/US9  S U l
        g )NzLoad lacks type.loadr   )r   AllocaInstrallocated_typer6   	is_opaquepointeer~   r   rW  r   align)r   r    ptrr   r!   r"   s        r#   r   LoadInstr.__init__  sk    ;#{++(( XX''hh&& !344i'VcU'N
r%   c                    U R                   u  nU R                  b  SU R                  -  nOSnUR                  SR                  U R                  UR                  UR                  5       UU R                  SS95      5        g )N
, align %drK   zload {0}, {1} {2}{3}{4}
Tr1   r   r^  r8   r9   r6   r5   r7   )r   r:   r  r^  s       r#   r<   LoadInstr.descr  sr    ::! DJJ/EE

.55IIHH$$4$8
 	r%   )r^  rK   Nr   rS   s   @r#   rW  rW    s     r%   rW  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )
StoreInstri  c                 Z   > [         [        U ]  U[        R                  " 5       SX#/5        g )Nstore)r   rg  r   r   r   )r   r    r  r_  r"   s       r#   r   StoreInstr.__init__  s$    j$(1A7*-	5r%   c                 "   U R                   u  p#U R                  b  SU R                  -  nOSnUR                  SR                  UR                  UR                  5       UR                  UR                  5       UU R                  SS95      5        g )Nrb  rK   zstore {0} {1}, {2} {3}{4}{5}
Tr1   rc  )r   r:   r  r_  r^  s        r#   r<   StoreInstr.descr  s~    ==::! DJJ/EE

3::HHHH$$4$8
 	r%   rL   r   rS   s   @r#   rg  rg    s    5 r%   rg  c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )LoadAtomicInstri  c                   > Uc_  [        U[        5      (       a  UR                  nO=UR                  R                  (       d  UR                  R
                  nO[        S5      e[        [        U ]'  XSU/US9  X0l
        X@l        g )NzLoad atomic lacks type.zload atomicr   )r   rZ  r[  r6   r\  r]  r~   r   rn  r   orderingr^  )r   r    r_  rp  r^  r   r!   r"   s          r#   r   LoadAtomicInstr.__init__  st    ;#{++(( XX''hh&& !:;;ot-f=/2e$ 	. 	@ 
r%   c                     U R                   u  nUR                  SR                  U R                  UR                  UR	                  5       U R
                  U R                  U R                  SS95      5        g )Nz+load atomic {0}, {1} {2} {3}, align {4}{5}
Tr1   r   r8   r9   r6   r5   rp  r^  r7   )r   r:   r  s      r#   r<   LoadAtomicInstr.descr  s`    

AHHIIHHMMJJ$$4$8
 	r%   r^  rp  re  r   rS   s   @r#   rn  rn    s    	 	r%   rn  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )StoreAtomicInstri  c                 r   > [         [        U ]  U[        R                  " 5       SX#/5        X@l        XPl        g )Nzstore atomic)r   rw  r   r   r   rp  r^  )r   r    r  r_  rp  r^  r"   s         r#   r   StoreAtomicInstr.__init__   s0    .vu~~7G/=z	K 
r%   c                    U R                   u  p#UR                  SR                  UR                  UR	                  5       UR                  UR	                  5       U R
                  U R                  U R                  SS95      5        g )Nz0store atomic {0} {1}, {2} {3} {4}, align {5}{6}
Tr1   rs  )r   r:   r  r_  s       r#   r<   StoreAtomicInstr.descr  sl    ==

FMMHHHHMMJJ$$4$8
 	r%   ru  r   rS   s   @r#   rw  rw    s    
 
r%   rw  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )rZ  i  c                 ~   > U(       a  U/OSn[         [        U ]  XR                  5       SXT5        X l        S U l        g )NrL   alloca)r   rZ  r   
as_pointerr[  r^  )r   r    r!   r'  r   r   r"   s         r#   r   AllocaInstr.__init__  s8    #E7k4)&..2BH*2	:!
r%   c                    UR                  SR                  U R                  U R                  5      5        U R                  (       aG  U R                  u  nUR                  SR                  UR
                  UR                  5       5      5        U R                  b*  UR                  SR                  U R                  5      5        U R                  (       a  UR                  U R                  SS95        g g )Nr   z	, {0} {1}z, align {0}Tr1   )
r8   r9   r   r[  r   r6   r5   r^  r   r7   )r   r:   r;   s      r#   r<   AllocaInstr.descr  s    

9##DKK1D1DEF==--CBJJ{))"''23C3C3EFG::!JJ}++DJJ78==JJt//d/CD r%   )r^  r[  r   rS   s   @r#   rZ  rZ    s    E Er%   rZ  c                   4   ^  \ rS rSr SU 4S jjrS rSrU =r$ )GEPInstri&  c           	      n  > Ub  UR                   nX`l        OUR                   R                  (       d  UR                   nS nSn	U HA  n
XwR                  U
5      px[	        U[
        R                  5      (       d  M5  UR                  n	MC     [	        U[
        R                  5      (       d"  [	        U[
        R                  5      (       a  UnOUR                  U	5      nUR                   R                  U l        O[        S5      e[        [        U ]7  XSU/[        U5      -   US9  X l        X0l        X@l        g )Nr   zGEP lacks type.getelementptrr   )r6   source_etyper\  gepr   r   PointerType	addrspacer  r]  r~   r   r  r   r   pointerindicesinbounds)r   r    r_  r  r  r   r  r!   lasttyplastaddrspacer   r"   s              r#   r   GEPInstr.__init__'  s    #((C , ##((CGM"GGAJgu'8'899$+$5$5M	  sE$5$566w(9(9::nn]3 # 0 0D.//h&vO(+utG}'<4 	' 	I r%   c                    U R                    Vs/ s H-  nSR                  UR                  UR                  5       5      PM/     nnU R                  (       a  SOSnUR                  SR                  UU R                  U R                  R                  U R                  R                  5       SR                  U5      U R                  SS95      5        g s  snf )Nr   zgetelementptr inboundsr  z{0} {1}, {2} {3}, {4} {5}
r0   Tr1   )
r  r9   r6   r5   r  r8   r  r  r4   r7   )r   r:   r   r  r;   s        r#   r<   GEPInstr.descrF  s     LL*(q ##AFFAOO,=>( 	 *)-%O

077$$<<$$<<--/99W%++$+? 	*s   4C)r  r  r  r  r'   r   rS   s   @r#   r  r  &  s    "!> r%   r  c                   >   ^  \ rS rSrSU 4S jjrS rS rS rSrU =r	$ )PhiInstriT  c           	      >   > [         [        U ]  XSSUUS9  / U l        g )NphirL   r  )r   r  r   	incomings)r   r    r!   r   r   r"   s        r#   r   PhiInstr.__init__U  s)    h&vE2D-2 	' 	4r%   c                     SR                  S U R                   5       5      nUR                  SR                  SR                  U R                  5      U R
                  UU R                  SS95      5        g )Nr0   c              3      #    U  H5  u  pS R                  UR                  5       UR                  5       5      v   M7     g7f)z
[{0}, {1}]N)r9   r5   )r,  vbs      r#   r.  !PhiInstr.descr.<locals>.<genexpr>[  s>      5%3TQ &,,Q__->-.__->@ @%3s   =?zphi {0} {1} {2} {3}
r/   Tr1   )r4   r  r8   r9   r   r6   r7   )r   r:   incss      r#   r<   PhiInstr.descrZ  sh    yy 5%)^^5 5 	

*1188DJJ'99++$+?	 	r%   c                 j    [        U[        5      (       d   eU R                  R                  X45        g r'   )r   r   r  r8   )r   r  r   s      r#   add_incomingPhiInstr.add_incominge  s)    %''''un-r%   c                 l    U R                    VVs/ s H  u  p4X1L a  UOUU4PM     snnU l         g s  snnf r'   r  )r   r@   rA   r  r   s        r#   rC   PhiInstr.replace_usagei  s7    ,0NN<,:js $':C3=,:< <s   0r  )rL   )
rG   rM   rN   rO   r   r<   r  rC   rQ   rR   rS   s   @r#   r  r  T  s    
	.< <r%   r  c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )ExtractElementin  c                 ,  > [        UR                  [        R                  5      (       d  [	        S5      e[        UR                  [        R
                  5      (       d  [	        S5      eUR                  R                  n[        [        U ]'  XSX#/US9  g )N!vector needs to be of VectorType.index needs to be of IntType.extractelementr   )
r   r6   r   r&  r   r   elementr   r  r   )r   r    vectorindexr   r!   r"   s         r#   r   ExtractElement.__init__o  sw    &++u'7'788?@@%**emm44;<<kk!!nd,V:J.4_4 	- 	Ir%   c                     SR                  S U R                   5       5      nUR                  SR                  U R                  US95        g )Nr0   c              3   v   #    U  H/  nS R                  UR                  UR                  5       5      v   M1     g7fr   Nr9   r6   r5   r,  r;   s     r#   r.  'ExtractElement.descr.<locals>.<genexpr>y  :      I:GB '--77B,,.0 0:G   79{opname} {operands}
r   r   r4   r   r8   r9   r   r   r:   r   s      r#   r<   ExtractElement.descrx  L    99 I:>--I I

*11++ 2 : 	;r%   rL   rU  r   rS   s   @r#   r  r  n  s    I; ;r%   r  c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )InsertElementi  c                   > [        UR                  [        R                  5      (       d  [	        S5      eUR                  UR                  R
                  :X  d9  [	        SR                  UR                  R
                  UR                  5      5      e[        UR                  [        R                  5      (       d  [	        S5      eUR                  n[        [        U ]+  XSX#U/US9  g )Nr  z$value needs to be of type {} not {}.r  insertelementr   )r   r6   r   r&  r   r  r9   r   r   r  r   )r   r    r  r  r  r   r!   r"   s          r#   r   InsertElement.__init__  s    &++u'7'788?@@zzV[[0006==KK''56 6 %**emm44;<<kkmT+F-3E,B 	, 	Or%   c                     SR                  S U R                   5       5      nUR                  SR                  U R                  US95        g )Nr0   c              3   v   #    U  H/  nS R                  UR                  UR                  5       5      v   M1     g7fr  r  r  s     r#   r.  &InsertElement.descr.<locals>.<genexpr>  r  r  r  r  r  r  s      r#   r<   InsertElement.descr  r  r%   rL   rU  r   rS   s   @r#   r  r    s    O; ;r%   r  c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )ShuffleVectori  c                   >^ [        UR                  [        R                  5      (       d  [	        S5      eU[
        :w  a%  UR                  UR                  :w  a  [	        S5      e[        U[        5      (       a  [        UR                  [        R                  5      (       aW  [        UR                  R                  [        R                  5      (       a$  UR                  R                  R                  S:X  d  [	        S5      e[        R                  " UR                  R                  UR                  R                  5      n[        U[
        :X  a  UR                  R                  OSUR                  R                  -  5      m[        U4S jUR                   5       5      (       d  [        SR                  T5      5      e[         ["        U ]K  XSX#U/US	9  g )
Nz"vector1 needs to be of VectorType.z=vector2 needs to be Undefined or of the same type as vector1.r   z'mask needs to be a constant i32 vector.r  c              3   @   >#    U  H  oR                   T;   v   M     g 7fr'   )constant)r,  iiindex_ranges     r#   r.  )ShuffleVector.__init__.<locals>.<genexpr>  s     F";;+-s   zmask values need to be in {0}shufflevectorr   )r   r6   r   r&  r   r   r   r  r   widthr'  r   allr  
IndexErrorr9   r   r  r   )	r   r    vector1vector2maskr   r!   r  r"   s	          @r#   r   ShuffleVector.__init__  sd   ',,(8(899@AAi||w||+ !L M M4**499e&6&677DII--u}}==""((B.EFFw||33TYY__E&)3 $LL..!"W\\%7%7!79 FFFF/66{C  	mT+F-4t,D4 	, 	Qr%   c           	          UR                  SR                  SR                  S U R                   5       5      U R	                  SS95      5        g )Nzshufflevector {0} {1}
r0   c              3   v   #    U  H/  nS R                  UR                  UR                  5       5      v   M1     g7fr  r  r  s     r#   r.  &ShuffleVector.descr.<locals>.<genexpr>  s4      6'4 '--bggr7G7G7IJJ'4r  Tr1   )r8   r9   r4   r   r7   r   s     r#   r<   ShuffleVector.descr  sJ    

,3399 6'+}}6 6++$+? 	r%   rL   rU  r   rS   s   @r#   r  r    s    Q. r%   r  c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )ExtractValuei  c                   > UR                   n U H  nUR                  U   nM     [        [        U ]#  XSU/US9  X l	        X0l
        g ! [        [        4 a'    [	        S[        U5      < SUR                   < 35      ef = f)NCan't index at  in extractvaluer   )r6   elementsAttributeErrorr  r   r   r   r  r   	aggregater  )r   r    aggr  r   r!   r   r"   s          r#   r   ExtractValue.__init__  s    hh	9ll1o  	lD*6,/5t 	+ 	=  
+ 	9#G}chh8 9 9	9s   A	 	7B c                 .   U R                    Vs/ s H  n[        U5      PM     nnUR                  SR                  U R                  R
                  U R                  R                  5       SR                  U5      U R                  SS95      5        g s  snf )Nzextractvalue {0} {1}, {2} {3}
r0   Tr1   )	r  rw   r8   r9   r  r6   r5   r4   r7   r   r:   r   r  s       r#   r<   ExtractValue.descr  sw    #'<<0<a3q6<0

4;;>>&&>>//199W%++$+?	 	 1s   B)r  r  rU  r   rS   s   @r#   r  r    s     r%   r  c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )InsertValuei  c           
        > UR                   n U H  nUR                  U   nM     UR                   U:w  a8  [	        SU< S[        U5      < SUR                   < SUR                   < 35      e[        [        U ]#  XR                   SX#/US9  X l	        X0l
        X@l        g ! [        [        4 a'    [	        S[        U5      < SUR                   < 35      ef = f)Nr  r  zCan only insert z at z: got insertvaluer   )r6   r  r  r  r   r   r   r  r   r  r  r  )	r   r    r  elemr  r   r!   r   r"   s	           r#   r   InsertValue.__init__  s    hh	9ll1o 
 99"DM388TYYH I Ik4)&((M+.+D 	* 	B 
 
+ 	9#G}chh8 9 9	9s   B! !7Cc                    U R                    Vs/ s H  n[        U5      PM     nnUR                  SR                  U R                  R
                  U R                  R                  5       U R                  R
                  U R                  R                  5       SR                  U5      U R                  SS95      5        g s  snf )Nz&insertvalue {0} {1}, {2} {3}, {4} {5}
r0   Tr1   )
r  rw   r8   r9   r  r6   r5   r  r4   r7   r  s       r#   r<   InsertValue.descr  s    #'<<0<a3q6<0

<CC>>&&(D(D(F::??DJJ$<$<$>99W%++$+?	 	 1s   C )r  r  r  rU  r   rS   s   @r#   r  r    s    $ r%   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )Unreachablei  c                 V   > [         [        U ]  U[        R                  " 5       SSSS9  g )NunreachablerL   rK   r   )r   r  r   r   r   )r   r    r"   s     r#   r   Unreachable.__init__  s*    k4)&%..2B*7" 	* 	Fr%   c                 $    XR                   S4-  ng )N
)r   r   s     r#   r<   Unreachable.descr  s    T""r%   rL   r   rS   s   @r#   r  r    s    F# #r%   r  c                   0    \ rS rSrSS jrS rS rS rSrg)		InlineAsmi  c                 V    UR                   U l        Xl        X l        X0l        X@l        g r'   )r   r6   r   asm
constraintside_effect)r   ftyper  r  r  s        r#   r   InlineAsm.__init__  s%    %%	"$&r%   c                     U R                   (       a  SOSnSnUR                  UR                  X R                  U R                  S95        g )N
sideeffectrK   z)asm {sideeffect} "{asm}", "{constraint}"
)r  r  r  )r  r8   r9   r  r  )r   r:   r  fmts       r#   r<   InlineAsm.descr  s?    %)%5%5\2
:

3::)-  : 	;r%   c                 J    / nU R                  U5        SR                  U5      $ NrK   )r<   r4   r   s     r#   r5   InlineAsm.get_reference  s     

3wws|r%   c                 V    SR                  U R                  U R                  5       5      $ )Nr   r  r)   s    r#   __str__InlineAsm.__str__	  s"    		4+=+=+?@@r%   )r  r  r   r  r6   N)F)	rG   rM   rN   rO   r   r<   r5   r	  rQ   rL   r%   r#   r  r    s    ';
Ar%   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )	AtomicRMWi  c                 \   > [         [        U ]  XR                  SX44US9  X l        XPl        g )N	atomicrmwr   )r   r  r   r6   	operationrp  )r   r    r;   r_  r  rp  r   r"   s          r#   r   AtomicRMW.__init__  s0    i'+),
 	( 	? r%   c                    U R                   u  p#SnUR                  UR                  U R                  UR                  UR                  5       UR                  UR                  5       U R                  U R                  SS9S95        g )NzBatomicrmw {op} {ptrty} {ptr}, {valty} {val} {ordering} {metadata}
Tr1   )r;   ptrtyr_  valtyr  rp  r   )r   r8   r9   r  r6   r5   rp  r7   )r   r:   r_  r  r  s        r#   r<   AtomicRMW.descr  sz    ==

3::$'HH"%"3"3"5$'HH"%"3"3"5'+}}'+'?'?04 (@ (6    	!r%   )r  rp  r   rS   s   @r#   r  r    s    !! !r%   r  c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )CmpXchgi#  z\This instruction has changed since llvm3.5.  It is not compatible with
older llvm versions.
c                    > [         R                  " UR                  [         R                  " S5      /5      n[        [
        U ]  XSX#U4US9  XPl        X`l        g )Nrs   cmpxchgr   )	r   LiteralStructTyper6   r   r   r  r   rp  failordering)
r   r    r_  cmpr  rp  r  r   outtyper"   s
            r#   r   CmpXchg.__init__(  sR    ))388U]]15E*FGgt%fy'*oD 	& 	B (r%   c                 .   U R                   u  p#nSnUR                  UR                  UR                  UR	                  5       UR                  UR	                  5       UR	                  5       U R
                  U R                  U R                  SS9S95        g )NzScmpxchg {ptrty} {ptr}, {ty} {cmp}, {ty} {val} {ordering} {failordering} {metadata}
Tr1   )r  r_  r   r  r  rp  r  r   )r   r8   r9   r6   r5   rp  r  r7   )r   r:   r_  cmpvalr  r  s         r#   r<   CmpXchg.descr/  s    ==S,

3::CHH"%"3"3"5!'"("6"6"8"%"3"3"5'+}}+/+<+<'+'?'?04 (@ (6  	  		!r%   )r  rp  	rG   rM   rN   rO   __doc__r   r<   rQ   rR   rS   s   @r#   r  r  #  s    )! !r%   r  c                        \ rS rSrS rS rSrg)_LandingPadClausei?  c                     Xl         g r'   r  )r   r  s     r#   r   _LandingPadClause.__init__@  s    
r%   c                     SR                  U R                  U R                  R                  U R                  R	                  5       S9$ )Nz{kind} {type} {value})kindr6   r  )r9   r)  r  r6   r5   r)   s    r#   r	  _LandingPadClause.__str__C  s<    &--****, . . 	.r%   r&  N)rG   rM   rN   rO   r   r	  rQ   rL   r%   r#   r$  r$  ?  s    .r%   r$  c                       \ rS rSrSrSrg)CatchClauseiJ  catchrL   N)rG   rM   rN   rO   r)  rQ   rL   r%   r#   r,  r,  J  s    Dr%   r,  c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )FilterClauseiN  filterc                    > [        U[        5      (       d   e[        UR                  [        R                  5      (       d   e[
        [        U ]  U5        g r'   )r   r   r6   r   	ArrayTyper   r/  r   )r   r  r"   s     r#   r   FilterClause.__init__Q  s@    %****%**eoo6666lD*51r%   rL   )rG   rM   rN   rO   r)  r   rQ   rR   rS   s   @r#   r/  r/  N  s    D2 2r%   r/  c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )LandingPadInstriW  c                 H   > [         [        U ]  XS/ US9  X@l        / U l        g )N
landingpadr   )r   r5  r   cleanupclauses)r   r    r!   r   r8  r"   s        r#   r   LandingPadInstr.__init__X  s,    ot-f<37 	. 	9r%   c                 h    [        U[        5      (       d   eU R                  R                  U5        g r'   )r   r$  r9  r8   )r   clauses     r#   
add_clauseLandingPadInstr.add_clause^  s(    &"34444F#r%   c                     SnUR                  UR                  U R                  U R                  (       a  SOSSR	                  U R
                   Vs/ s H  nSR                  U5      PM     sn5      S95        g s  snf )Nz$landingpad {type}{cleanup}{clauses}
z cleanuprK   z

      {0})r6   r8  r9  )r8   r9   r6   r8  r4   r9  )r   r:   r  r<  s       r#   r<   LandingPadInstr.descrb  ss    5

3::49948LLjb&(gg=A\\/K=I6 0=/C/CF/K=I/K 'L    	!/Ks   A:)r9  r8  )rK   F)	rG   rM   rN   rO   r   r=  r<   rQ   rR   rS   s   @r#   r5  r5  W  s    $! !r%   r5  c                   >   ^  \ rS rSrSr1 SkrSU 4S jjrS rSrU =r	$ )Fenceik  zl
The `fence` instruction.

As of LLVM 5.0.1:

fence [syncscope("<target-scope>")] <ordering>  ; yields void
>   acq_relacquirereleaseseq_cstc                    > [         [        U ]  U[        R                  " 5       SSUS9  X R
                  ;  a6  Sn[        UR                  USR                  U R
                  5      5      5      eX l	        X0l
        g )NfencerL   r   z3Invalid fence ordering "{0}"! Should be one of {1}.r0   )r   rB  r   r   r   VALID_FENCE_ORDERINGSr~   r9   r4   rp  targetscope)r   r    rp  rJ  r   r   r"   s         r#   r   Fence.__init__v  st    eT#FENN,<gr)- 	$ 	/555ICS[[)-43M3M)NP Q Q &r%   c                     U R                   c  SnOSR                  U R                   5      nSnUR                  UR                  UU R                  S95        g )NrK   zsyncscope("{0}") zfence {syncscope}{ordering}
)	syncscoperp  )rJ  r9   r8   rp  )r   r:   rM  r  s       r#   r<   Fence.descr  sS    #I+2243C3CDI-

3::	'+}}    	!r%   )rp  rJ  r  )
rG   rM   rN   rO   r"  rI  r   r<   rQ   rR   rS   s   @r#   rB  rB  k  s      I'	! 	!r%   rB  c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )Commenti  z
A line comment.
c                 |   > [         [        U ]  U[        R                  " 5       SSSS9  SU;  d   S5       eX l        g )N;rL   rK   r   r  zComment cannot contain new line)r   rP  r   r   r   text)r   r    rS  r"   s      r#   r   Comment.__init__  sB    gt%fenn.>R+- 	& 	/4B!BB	r%   c                 @    UR                  SU R                   35        g )Nz; )r8   rS  r   s     r#   r<   Comment.descr  s    

R		{#$r%   )rS  r!  rS   s   @r#   rP  rP    s    % %r%   rP  N);r"  llvmlite.irr   llvmlite.ir.valuesr   r   r   r   r   r	   r
   r   r   r   llvmlite.ir._utilsr   r   rU   r_   rx   re   rp   r   r   r   r   r   r   r   r   r  r  r!  r2  rA  rP  rW  rg  rn  rw  rZ  r  r  r  r  r  r  r  r  objectr  r  r  r$  r,  r/  r5  rB  rP  rL   r%   r#   <module>r[     s0   ? ? ? ,'(*l '(TA, A
 <= +L +
m, m,`) *
D 
D	&{ 	&A* A0	Z 		(* 	%z 0"J <	Z 	+ :; B " 0  < *k 8{ (E+ E&+{ +\<{ <4;[ ;";K ;*K @; 6+ <#+ #A A.! !,!k !8. .# 2$ 2!k !(!K !B%k %r%   