Ë
    øÇ:j�  ã                   óÜ  — d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZ  G d„ dee«      Z G d„ de«      Z eg d	¢«      Z G d
„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ dee«      Z G d„ dee«      Z G d„ dee«      Z G d„ de«      Z G d „ d!e«      Z G d"„ d#e«      Z  G d$„ d%e «      Z! G d&„ d'e «      Z" G d(„ d)e«      Z# G d*„ d+e«      Z$ G d,„ d-e«      Z% G d.„ d/e«      Z& G d0„ d1e«      Z' G d2„ d3e«      Z( G d4„ d5e«      Z) G d6„ d7e«      Z* G d8„ d9e«      Z+ G d:„ d;e«      Z, G d<„ d=e«      Z- G d>„ d?e«      Z. G d@„ dAe«      Z/ G dB„ dCe«      Z0 G dD„ dEe1«      Z2 G dF„ dGe«      Z3 G dH„ dIe«      Z4 G dJ„ dKe1«      Z5 G dL„ dMe5«      Z6 G dN„ dOe5«      Z7 G dP„ dQe«      Z8 G dR„ dSe«      Z9 G dT„ dUe«      Z:yV)Wz)
Implementation of LLVM IR instructions.
é    )Útypes)
ÚBlockÚFunctionÚValueÚ
NamedValueÚConstantÚMetaDataArgumentÚMetaDataStringÚAttributeSetÚ	UndefinedÚArgumentAttributes)Ú_HasMetadatac                   óR   ‡ — e Zd Zdˆ fd„	Zed„ «       Zed„ «       Zd„ Zd„ Zd„ Z	ˆ xZ
S )ÚInstructionc                 óÐ   •— t         t        | �  |||¬«       t        |t        «      sJ ‚t        |t
        t        f«      sJ ‚|| _        || _        t        |«      | _	        i | _
        y ©N©Úname)Úsuperr   Ú__init__Ú
isinstancer   ÚtupleÚlistÚopnameÚoperandsÚflagsÚmetadata)ÚselfÚparentÚtypr   r   r   r   Ú	__class__s          €úm/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/llvmlite/ir/instructions.pyr   zInstruction.__init__   s]   ø€ ÜŒk˜4Ñ)¨&°#¸DÐ)ÔAÜ˜&¤%Ô(Ð(Ð(Ü˜%¤%¬ Ô/Ð/Ð/ØˆŒØ ˆŒÜ˜%“[ˆŒ
Øˆ�ó    c                 ó.   — | j                   j                  S ©N)r   Úfunction©r   s    r"   r&   zInstruction.function   s   € à�{‰{×#Ñ#Ð#r#   c                 óB   — | j                   j                  j                  S r%   )r   r&   Úmoduler'   s    r"   r)   zInstruction.module   s   € à�{‰{×#Ñ#×*Ñ*Ð*r#   c                 ól  — | j                   }| j                  rdj                  |g| j                  z   «      }dj                  | j                  D �cg c]  }|j	                  «       ‘Œ c}«      }| j
                  }| j                  d¬«      }|j                  dj                  ||||«      «       y c c}w )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"   ÚdescrzInstruction.descr   s’   € Ø—‘ˆØ�:Š:Ø—X‘X˜v˜h¨¯©Ñ3Ó4ˆFØ—9‘9¸4¿=¹=ÖI°R˜b×.Ñ.Õ0ÒIÓJˆØ�i‰iˆØ×+Ñ+¸$Ð+Ó?ˆØ�
‰
Ð%ß‘F˜6 3¨°(Ó;õ	=ùò Js   ÁB1c                 ó¶   — || j                   v rKg }| j                   D ]  }|j                  ||u r|n|«       Œ t        |«      | _         | j                  «        y y r%   )r   r4   r   Ú_clear_string_cache)r   ÚoldÚnewÚopsr7   s        r"   Úreplace_usagezInstruction.replace_usage(   sV   € Ø�$—-‘-ÑØˆCØ—m‘mò 5�Ø—
‘
 "¨¡)™3°Õ4ð5ä! #›JˆDŒMØ×$Ñ$Õ&ð  r#   c                 óž   — d| j                   j                  ›d| j                  ›d| j                  ›d| j                  ›d| j
                  ›d�S )Nz<ir.r+   z
 of type 'z
', opname z, operands ú>)r!   Ú__name__r   r2   r   r   r'   s    r"   Ú__repr__zInstruction.__repr__0   s2   � à�N‰N×#Ó# T§Y£Y°·	³	Ø�K‹K˜Ÿ›ð(ð 	(r#   ©Ú © )rA   Ú
__module__Ú__qualname__r   Úpropertyr&   r)   r8   r>   rB   Ú__classcell__©r!   s   @r"   r   r      s?   ø„ õð ñ$ó ð$ð ñ+ó ð+ò=ò'ö(r#   r   c                   ó    — e Zd Z eg d¢«      Zy)ÚCallInstrAttributes)Ú
convergentÚnoreturnÚnounwindÚreadonlyÚreadnoneÚnoinlineÚalwaysinlineN©rA   rF   rG   Ú	frozensetÚ_knownrE   r#   r"   rL   rL   6   s   „ Ùò @ó A�Fr#   rL   )ÚtailÚmusttailÚnotailc                   ó    — e Zd Z eg d¢«      Zy)ÚFastMathFlags)ÚfastÚnnanÚninfÚnszÚarcpÚcontractÚafnÚreassocNrT   rE   r#   r"   r[   r[   >   s   „ Ùò *ó +�Fr#   r[   c                   óŠ   ‡ — e Zd Z	 	 d	ˆ fd„	Zed„ «       Zej                  d„ «       Zed„ «       Zd„ Zed„ «       Z	d„ Z
d„ Zˆ xZS )
Ú	CallInstrc
           	      ó´  •— |€t        |t        «      r|j                  n|| _        t        |t        «      r	|t
        v rn|rd}nd}|| _        t        |«      | _        t        |«      | _
        i | _        |	r`|	j                  «       D ]M  \  }
}d|
cxk  rt        |«      k  sn t        dj                  |
«      «      ‚t!        |«      | j                  |
<   ŒO t#        |«      }t%        t        |j&                  j(                  «      «      D ]“  }||   }|j&                  j(                  |   }t        |t*        j,                  «      r|j.                  |k7  rt1        |«      }|j.                  |k7  r+dj                  d|z   ||j.                  «      }t3        |«      ‚|||<   Œ• t4        t6        | �s  ||j&                  j:                  d|gt#        |«      z   |¬«       y )	NrW   rD   r   zInvalid argument index {}z%Type of #{0} arg mismatch: {1} != {2}é   Úcallr   )r   r   Úcalling_conventionÚcconvÚstrÚTailMarkerOptionsrW   r[   ÚfastmathrL   Ú
attributesÚarg_attributesÚitemsÚlenÚ
ValueErrorr5   r   r   ÚrangeÚfunction_typeÚargsr   ÚMetaDataTyper2   r	   Ú	TypeErrorr   re   r   Úreturn_type)r   r   Úfuncru   r   rj   rW   rm   ÚattrsÚ	arg_attrsÚidxÚiÚargÚexpected_typeÚmsgr!   s                  €r"   r   zCallInstr.__init__D   s¼  ø€ ð ˜¬:°d¼HÔ+Eð ×-Ò-à ð 	Œ
ô �dœCÔ  TÔ->Ñ%>ØÙØ‰DàˆDàˆŒ	Ü% hÓ/ˆŒÜ-¨eÓ4ˆŒØ ˆÔÙØ'Ÿo™oÓ/ò E‘
��UØ˜SÔ,¤3 t£9Ô,Ü$Ð%@ß&,¡f¨S£kó3ð 3ä+=¸eÓ+D�×#Ñ# CÒ(ð	Eô �D‹zˆÜ”s˜4×-Ñ-×2Ñ2Ó3Ó4ò 
	ˆAØ�q‘'ˆCØ ×.Ñ.×3Ñ3°AÑ6ˆMÜ˜=¬%×*<Ñ*<Ô=Ø—H‘H Ò-Ü& sÓ+�Ø�x‰x˜=Ò(Ø>ß™˜q 1™u m°S·X±XÓ>ð ä “nÐ$ØˆD�ŠGð
	ô 	Œi˜Ñ'¨°×0BÑ0B×0NÑ0NØ(.°°¼¸d»Ñ0CÈ$ð 	(õ 	Pr#   c                 ó    — | j                   d   S ©Nr   ©r   r'   s    r"   ÚcalleezCallInstr.calleeo   ó   € à�}‰}˜QÑÐr#   c                 ó"   — || j                   d<   y r‚   rƒ   )r   Ú	newcallees     r"   r„   zCallInstr.callees   s   € à$ˆ�‰�aÒr#   c                 ó    — | j                   dd  S ©Nrg   rƒ   r'   s    r"   ru   zCallInstr.argsw   s   € à�}‰}˜Q˜RÐ Ð r#   c                 ón   — |j                   | j                  j                   k7  rt        d«      ‚|| _        y )Nz"New function has incompatible type)rt   r„   rw   )r   Únewfuncs     r"   Úreplace_calleezCallInstr.replace_callee{   s-   € Ø× Ñ  D§K¡K×$=Ñ$=Ò=ÜÐ@ÓAÐAØˆ�r#   c                 ó   — | j                   S )zThe callee function)r„   r'   s    r"   Úcalled_functionzCallInstr.called_function€   s   € ð �{‰{Ðr#   c                 óŽ  ‡ — ˆ fd„}dj                  t        ‰ j                  «      D ��cg c]  \  }} |||«      ‘Œ c}}«      }‰ j                  j                  }|j
                  r|}n|j                  }dj                  |‰ j                  j                  «       «      }	‰ j                  rdj                  ‰ j                  |	«      }	d}
‰ j                  rdj                  ‰ j                  «      }
‰ j                  r7ddj                  ‰ j                  j                  |j                  «      «      z   nd}‰ j                  r7ddj                  ‰ j                  j                  |j                  «      «      z   nd}|j                  dj                  |
‰ j                  |	||||r‰ j!                  d¬	«      nd¬
«      «       y c c}}w )Nc                 óð   •— | ‰j                   v r;dj                  ‰j                   |    j                  |j                  «      «      dz   }nd}dj	                  |j                  ||j                  «       «      S )Nr+   rD   ú
{0} {1}{2})ro   r0   Ú_to_listr2   r5   r1   )r}   Úarz   r   s      €r"   Ú	descr_argz#CallInstr._descr.<locals>.descr_arg†   sc   ø€ Ø�D×'Ñ'Ñ'ØŸ™ ×!4Ñ!4°QÑ!7×!@Ñ!@ÀÇÁÓ!HÓIÈCÑO‘à�Ø×&Ñ& q§v¡v¨u°a·o±oÓ6GÓHÐHr#   r,   ú{0} {1}rD   z{0} r+   z2{tail}{op}{fastmath} {callee}({args}){attr}{meta}
Tr-   )rW   r7   r„   rm   ru   ÚattrÚmeta)r0   Ú	enumerateru   r„   rt   Úvar_argrx   r5   r1   rj   rW   rn   r’   rm   r4   r   r3   )r   r6   Úadd_metadatar”   r}   r“   ru   ÚfntyÚtyÚ
callee_refÚtail_markerÚfn_attrsÚfm_attrss   `            r"   Ú_descrzCallInstr._descr…   s‚  ø€ ô	Ið �y‰y´iÀÇ	Á	Ó6J×K©d¨a°™) A q�/ÓKÓLˆà�{‰{×(Ñ(ˆà�<Š<Ø‰Bð ×!Ñ!ˆBØ×%Ñ% b¨$¯+©+×*CÑ*CÓ*EÓFˆ
Ø�:Š:Ø"×)Ñ)¨$¯*©*°jÓAˆJàˆØ�9Š9Ø Ÿ-™-¨¯	©	Ó2ˆKð �Šð ˜Ÿ™ $§/¡/×":Ñ":¸4×;KÑ;KÓ"LÓMÒMØ$&ð 	ð �}Š}ð ˜Ÿ™ $§-¡-×"8Ñ"8¸×9IÑ9IÓ"JÓKÒKØ"$ð 	ð 	�
‰
ÐH×OÑOØØ�{‰{ØØØØá!ð ×*Ñ*¸Ð*Ô>Ø')ð Pó 	
õ 		ùó1 Ls   ªG
c                 ó*   — | j                  |d¬«       y )NT©rš   )r¡   ©r   r6   s     r"   r8   zCallInstr.descr¯   s   € Ø�‰�C dˆÕ+r#   )rD   NNrE   rE   N)rA   rF   rG   r   rH   r„   Úsetterru   rŒ   rŽ   r¡   r8   rI   rJ   s   @r"   re   re   C   st   ø„ ØEIØ26õ)PðV ñ ó ð ð ‡]�]ñ%ó ð%ð ñ!ó ð!òð
 ñó ðò(öT,r#   re   c                   ó.   ‡ — e Zd Z	 	 dˆ fd„	Zˆ fd„Zˆ xZS )ÚInvokeInstrc                 ó°   •— t        |t        «      sJ ‚t        |t        «      sJ ‚t        t        | �  |||||d||	|
¬«	       d| _        || _        || _        y )NF)rW   rm   rz   r{   Úinvoke)r   r   r   r§   r   r   Ú	normal_toÚ	unwind_to)r   r   ry   ru   rª   r«   r   rj   rm   rz   r{   r!   s              €r"   r   zInvokeInstr.__init__´   sc   ø€ ä˜)¤UÔ+Ð+Ð+Ü˜)¤UÔ+Ð+Ð+ÜŒk˜4Ñ)¨&°$¸¸dÀEØ/4¸xØ05Àð 	*ô 	Lð ˆŒØ"ˆŒØ"ˆ�r#   c           	      óö   •— t         t        | �  |d¬«       |j                  dj	                  | j
                  j                  «       | j                  j                  «       | j                  d¬«      ¬«      «       y )NFr£   z.      to label {0} unwind label {1}{metadata}
Tr-   )r   )	r   r§   r¡   r4   r5   rª   r1   r«   r3   )r   r6   r!   s     €r"   r8   zInvokeInstr.descr¿   sh   ø€ ÜŒk˜4Ñ'¨¸%Ð'Ô@Ø�
‰
ÐD×KÑKØ�N‰N×(Ñ(Ó*Ø�N‰N×(Ñ(Ó*Ø×-Ñ-¸DÐ-ÓAð Ló 
õ 	r#   )rD   NrE   rE   N©rA   rF   rG   r   r8   rI   rJ   s   @r"   r§   r§   ³   s   ø„ ØFHØ>Bõ	#÷ð r#   r§   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú
Terminatorc                 óV   •— t         t        | �  |t        j                  «       ||«       y r%   )r   r¯   r   r   ÚVoidType)r   r   r   r   r!   s       €r"   r   zTerminator.__init__É   s"   ø€ ÜŒj˜$Ñ(¨´·±Ó1AÀ6Ø)1õ	3r#   c           
      ó0  — | j                   }dj                  | j                  D �cg c],  }dj                  |j                  |j                  «       «      ‘Œ. c}«      }| j                  d¬«      }|j                  dj                  |||«      «       y c c}w )Nr,   r•   Tr-   r‘   )r   r0   r   r5   r2   r1   r3   r4   )r   r6   r   r7   r   r   s         r"   r8   zTerminator.descrÍ   s€   € Ø—‘ˆØ—9‘9Ø(,¯©ö7Ø"$ð (×.Ñ.¨r¯w©w¸×8HÑ8HÓ8JÕKò 7ó 8ˆà×+Ñ+¸$Ð+Ó?ˆØ�
‰
�<×&Ñ& v¨x¸ÓBÕCùò7s   ¦1Br­   rJ   s   @r"   r¯   r¯   È   s   ø„ ô3öDr#   r¯   c                   ó   — e Zd Zd„ Zy)ÚPredictableInstrc                 ó  — t        | j                  d«      g}|D ]@  }|dk  rt        d«      ‚|j                  t	        t        j                  d«      |«      «       ŒB | j                  j                  |«      }| j                  d|«       y )NÚbranch_weightsr   z(branch weight must be a positive integeré    Úprof)	r
   r)   rr   r4   r   r   ÚIntTyperš   Úset_metadata)r   Úweightsr   ÚwÚmds        r"   Úset_weightszPredictableInstr.set_weights×   sz   € Ü" 4§;¡;Ð0@ÓAÐBˆØò 	<ˆAØ�1ŠuÜ Ð!KÓLÐLØ�O‰OœH¤U§]¡]°2Ó%6¸Ó:Õ;ð	<ð �[‰[×%Ñ% hÓ/ˆØ×Ñ˜& "Õ%r#   N)rA   rF   rG   r¾   rE   r#   r"   r´   r´   Õ   s   „ ó&r#   r´   c                   ó6   ‡ — e Zd Zdˆ fd„	Zed„ «       Zd„ Zˆ xZS )ÚRetc                 ó>   •— |�|gng }t         t        | �  |||«       y r%   )r   rÀ   r   )r   r   r   Úreturn_valuer   r!   s        €r"   r   zRet.__init__â   s$   ø€ Ø%1Ð%=�L‘>À2ˆÜŒc�4Ñ! &¨&°(Õ;r#   c                 ó:   — | j                   r| j                   d   S y r‚   rƒ   r'   s    r"   rÂ   zRet.return_valueæ   s   € à�=Š=Ø—=‘= Ñ#Ð#àr#   c                 ó&  — | j                   }| j                  d¬«      }|�F|j                  dj                  | j                  |j
                  |j                  «       |«      «       y |j                  dj                  | j                  |«      «       y )NTr-   r/   z{0}{1}
)rÂ   r3   r4   r5   r   r2   r1   )r   r6   rÂ   r   s       r"   r8   z	Ret.descrí   s{   € Ø×(Ñ(ˆØ×+Ñ+¸$Ð+Ó?ˆØÐ#Ø�J‰JÐ)ß™˜tŸ{™{¨L×,=Ñ,=Ø+×9Ñ9Ó;Ø'ó)õ*ð
 �J‰J�z×(Ñ(¨¯©°hÓ?Õ@r#   r%   )rA   rF   rG   r   rH   rÂ   r8   rI   rJ   s   @r"   rÀ   rÀ   á   s"   ø„ õ<ð ñó ðö	Ar#   rÀ   c                   ó   — e Zd Zy)ÚBranchN©rA   rF   rG   rE   r#   r"   rÆ   rÆ   ù   ó   „ Ør#   rÆ   c                   ó   — e Zd Zy)ÚConditionalBranchNrÇ   rE   r#   r"   rÊ   rÊ   ý   rÈ   r#   rÊ   c                   ó:   ‡ — e Zd Zˆ fd„Zed„ «       Zd„ Zd„ Zˆ xZS )ÚIndirectBranchc                 ó@   •— t         t        | �  |||g«       g | _        y r%   )r   rÌ   r   Údestinations)r   r   r   Úaddrr!   s       €r"   r   zIndirectBranch.__init__  s    ø€ ÜŒn˜dÑ,¨V°V¸d¸VÔDØˆÕr#   c                 ó    — | j                   d   S r‚   rƒ   r'   s    r"   ÚaddresszIndirectBranch.address  r…   r#   c                 ó^   — t        |t        «      sJ ‚| j                  j                  |«       y r%   )r   r   rÎ   r4   )r   Úblocks     r"   Úadd_destinationzIndirectBranch.add_destination
  s&   € Ü˜%¤Ô'Ð'Ð'Ø×Ñ× Ñ  Õ'r#   c           
      óV  — | j                   D �cg c]!  }dj                  |j                  «       «      ‘Œ# }}|j                  dj                  | j                  j
                  | j                  j                  «       dj                  |«      | j                  d¬«      «      «       y c c}w )Nz	label {0}zindirectbr {0} {1}, [{2}]  {3}
r,   Tr-   )rÎ   r5   r1   r4   rÑ   r2   r0   r3   )r   r6   ÚblkrÎ   s       r"   r8   zIndirectBranch.descr  s’   € à#'×#4Ñ#4ö6Øð $×*Ñ*¨3×+<Ñ+<Ó+>Õ?ð 6ˆð 6à�
‰
Ð5×<Ñ<Ø�L‰L×ÑØ�L‰L×&Ñ&Ó(Ø�I‰I�lÓ#Ø×$Ñ$°4Ð$Ó8ó	
õ 	ùò6s   �&B&)	rA   rF   rG   r   rH   rÑ   rÔ   r8   rI   rJ   s   @r"   rÌ   rÌ     s&   ø„ ôð ñ ó ð ò(ör#   rÌ   c                   ó:   ‡ — e Zd Zˆ fd„Zed„ «       Zd„ Zd„ Zˆ xZS )ÚSwitchInstrc                 óN   •— t         t        | �  |||g«       || _        g | _        y r%   )r   rØ   r   ÚdefaultÚcases)r   r   r   ÚvalrÚ   r!   s        €r"   r   zSwitchInstr.__init__  s&   ø€ ÜŒk˜4Ñ)¨&°&¸3¸%Ô@ØˆŒØˆ�
r#   c                 ó    — | j                   d   S r‚   rƒ   r'   s    r"   ÚvaluezSwitchInstr.value   r…   r#   c                 óÂ   — t        |t        «      sJ ‚t        |t        «      s t        | j                  j
                  |«      }| j                  j                  ||f«       y r%   )r   r   r   r   rÞ   r2   rÛ   r4   )r   rÜ   rÓ   s      r"   Úadd_casezSwitchInstr.add_case$  sF   € Ü˜%¤Ô'Ð'Ð'Ü˜#œuÔ%Ü˜4Ÿ:™:Ÿ?™?¨CÓ0ˆCØ�
‰
×Ñ˜3 ˜,Õ'r#   c                 óÈ  — | j                   D ��cg c]>  \  }}dj                  |j                  |j                  «       |j                  «       «      ‘Œ@ }}}|j	                  dj                  | j
                  j                  | j
                  j                  «       | j                  j                  «       dj                  |«      | j                  d¬«      «      «       y c c}}w )Nz{0} {1}, label {2}z%switch {0} {1}, label {2} [{3}]  {4}
r+   Tr-   )	rÛ   r5   r2   r1   r4   rÞ   rÚ   r0   r3   )r   r6   rÜ   rÖ   rÛ   s        r"   r8   zSwitchInstr.descr*  sº   € ð "&§¡÷-á�S˜#ð &×,Ñ,¨S¯X©X°s×7HÑ7HÓ7JØ-0×->Ñ->Ó-@õBð -ˆñ -ð 	�
‰
Ð;×BÑBØ�J‰J�O‰OØ�J‰J×$Ñ$Ó&Ø�L‰L×&Ñ&Ó(Ø�H‰H�U‹OØ×$Ñ$°4Ð$Ó8ó
õ 	ùó-s   �AC)	rA   rF   rG   r   rH   rÞ   rà   r8   rI   rJ   s   @r"   rØ   rØ     s&   ø„ ôð
 ñ ó ð ò(ö
r#   rØ   c                   ó   — e Zd Zy)ÚResumeNrÇ   rE   r#   r"   rã   rã   7  rÈ   r#   rã   c                   óV   ‡ — e Zd Zdˆ fd„	Zed„ «       Zed„ «       Zed„ «       Zd„ Zˆ xZ	S )ÚSelectInstrc                 óˆ   •— |j                   |j                   k(  sJ ‚t        t        | �  ||j                   d|||g||¬«       y )NÚselect©r   r   )r2   r   rå   r   )r   r   ÚcondÚlhsÚrhsr   r   r!   s          €r"   r   zSelectInstr.__init__<  sF   ø€ Ø�x‰x˜3Ÿ8™8Ò#Ð#Ð#ÜŒk˜4Ñ)¨&°#·(±(¸HØ+/°°cÐ*:ÀØ05ð 	*õ 	7r#   c                 ó    — | j                   d   S r‚   rƒ   r'   s    r"   ré   zSelectInstr.condB  r…   r#   c                 ó    — | j                   d   S r‰   rƒ   r'   s    r"   rê   zSelectInstr.lhsF  r…   r#   c                 ó    — | j                   d   S )Né   rƒ   r'   s    r"   rë   zSelectInstr.rhsJ  r…   r#   c                 ó¬  — |j                  dj                  dj                  | j                  «      | j                  j
                  | j                  j                  «       | j                  j
                  | j                  j                  «       | j                  j
                  | j                  j                  «       | j                  d¬«      «      «       y )Nz)select {0} {1} {2}, {3} {4}, {5} {6} {7}
r+   Tr-   )
r4   r5   r0   r   ré   r2   r1   rê   rë   r3   r¤   s     r"   r8   zSelectInstr.descrN  s‹   € Ø�
‰
Ð?×FÑFØ�H‰H�T—Z‘ZÓ Ø�I‰I�N‰N˜DŸI™I×3Ñ3Ó5Ø�H‰H�M‰M˜4Ÿ8™8×1Ñ1Ó3Ø�H‰H�M‰M˜4Ÿ8™8×1Ñ1Ó3Ø×$Ñ$°4Ð$Ó8ó
õ 	r#   rC   )
rA   rF   rG   r   rH   ré   rê   rë   r8   rI   rJ   s   @r"   rå   rå   ;  sI   ø„ õ7ð ñ ó ð ð ñ ó ð ð ñ ó ð ör#   rå   c                   ó2   ‡ — e Zd ZdZi Zdg fˆ fd„	Zd„ Zˆ xZS )ÚCompareInstrzinvalid-comparerD   c                 ó  •— || j                   vrt        d|›d| j                  ›�«      ‚|D ]+  }|| j                  vsŒt        d|›d| j                  ›�«      ‚ | j                  }t	        |j
                  t        j                  «      r>t        j                  t        j                  d«      |j
                  j                  «      }	nt        j                  d«      }	t        t        | �3  ||	|||g||¬«       || _        y )Nzinvalid comparison z for zinvalid flag rg   )r   r   )ÚVALID_OPrr   ÚOPNAMEÚ
VALID_FLAGr   r2   r   Ú
VectorTyper¹   Úcountr   rò   r   r7   )r   r   r7   rê   rë   r   r   Úflagr   r    r!   s             €r"   r   zCompareInstr.__init__]  sÓ   ø€ Ø�T—]‘]Ñ"ÝºrÀ4Ç;Â;ÐOÓPÐPØò 	QˆDØ˜4Ÿ?™?Ò*Ý ºTÀ4Ç;Â;Ð!OÓPÐPð	Qð —‘ˆÜ�c—h‘h¤× 0Ñ 0Ô1Ü×"Ñ"¤5§=¡=°Ó#3°S·X±X·^±^ÓD‰Cä—-‘- Ó"ˆCÜŒl˜DÑ*¨6°3Ø+1°C¸°:ÀUØ04ð 	+ô 	6ð ˆ�r#   c                 ót  — |j                  dj                  | j                  dj                  d„ | j                  D «       «      | j
                  | j                  d   j                  | j                  d   j                  «       | j                  d   j                  «       | j                  d¬«      ¬«      «       y )	Nz.{opname}{flags} {op} {ty} {lhs}, {rhs} {meta}
rD   c              3   ó&   K  — | ]	  }d |z   –— Œ y­w)r+   NrE   )Ú.0Úits     r"   ú	<genexpr>z%CompareInstr.descr.<locals>.<genexpr>p  s   è ø€ Ò8 r˜# �(Ñ8ùs   ‚r   rg   Tr-   )r   r   r7   rœ   rê   rë   r—   )
r4   r5   r   r0   r   r7   r   r2   r1   r3   r¤   s     r"   r8   zCompareInstr.descrm  s“   € Ø�
‰
ÐD×KÑKØ—;‘;Ø—'‘'Ñ8¨T¯Z©ZÔ8Ó8Ø�w‰wØ�}‰}˜QÑ×$Ñ$Ø—‘˜aÑ ×.Ñ.Ó0Ø—‘˜aÑ ×.Ñ.Ó0Ø×)Ñ)¸Ð)Ó=ð Ló 
õ 	r#   )rA   rF   rG   rõ   rô   r   r8   rI   rJ   s   @r"   rò   rò   X  s   ø„ à€FØ€Hà24¸Bõ ö 	r#   rò   c                   ó8   — e Zd ZdZdddddddd	d
ddœ
Z e«       Zy)Ú	ICMPInstrÚ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ÚsleN)rA   rF   rG   rõ   rô   Úsetrö   rE   r#   r"   r   r   y  s5   „ Ø€FàØØ&Ø*Ø#Ø'Ø$Ø(Ø!Ø%ñ€Hñ “�Jr#   r   c                   ó|   — e Zd ZdZi dd“dd“dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“Zh d"£Zy#)$Ú	FCMPInstrÚ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 equalr  zunordered or greater thanr  z"unordered or greater than or equalr  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>   rb   r_   r`   r\   r^   r]   rc   ra   N)rA   rF   rG   rõ   rô   rö   rE   r#   r"   r  r  Š  sá   „ Ø€FðØÐ6ðàÐ"ðð 	Ð)ðð 	Ð2ð	ð
 	Ð&ðð 	Ð/ðð 	Ð&ðð 	Ð"ðð 	Ð#ðð 	Ð*ðð 	Ð3ðð 	Ð'ðð 	Ð0ðð 	Ð'ðð 	Ð(ðð  	Ð4ð!€Hò$�Jr#   r  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )Ú	CastInstrc                 ó8   •— t         t        | �  ||||g|¬«       y r   )r   r  r   )r   r   r7   rÜ   r    r   r!   s         €r"   r   zCastInstr.__init__£  s   ø€ ÜŒi˜Ñ'¨°°R¸#¸ÀTÐ'ÕJr#   c                 óø   — |j                  dj                  | j                  | j                  d   j                  | j                  d   j                  «       | j                  | j                  d¬«      «      «       y )Nz{0} {1} {2} to {3} {4}
r   Tr-   )r4   r5   r   r   r2   r1   r3   r¤   s     r"   r8   zCastInstr.descr¦  sb   € Ø�
‰
Ð-×4Ñ4Ø�K‰KØ�M‰M˜!Ñ×!Ñ!Ø�M‰M˜!Ñ×*Ñ*Ó,Ø�I‰IØ×$Ñ$°4Ð$Ó8ó
õ 	r#   ©rD   r­   rJ   s   @r"   r  r  ¢  s   ø„ õKör#   r  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )Ú	LoadInstrc                 óô   •— |€Ut        |t        «      r|j                  }n8|j                  j                  s|j                  j
                  }nt        d«      ‚t        t        | �'  ||d|g|¬«       d | _
        y )NzLoad lacks type.Úloadr   )r   ÚAllocaInstrÚallocated_typer2   Ú	is_opaqueÚpointeerr   r   r#  r   Úalign)r   r   Úptrr   r    r!   s        €r"   r   zLoadInstr.__init__²  sj   ø€ Øˆ;Ü˜#œ{Ô+Ø×(Ñ(‘ð —X‘X×'Ò'Ø—h‘h×&Ñ&‘ä Ð!3Ó4Ð4ÜŒi˜Ñ'¨°°V¸c¸UÈÐ'ÔNØˆ�
r#   c                 ó  — | j                   \  }| j                  �d| j                  z  }nd}|j                  dj                  | j                  |j                  |j                  «       || j                  d¬«      «      «       y )Nú
, align %drD   zload {0}, {1} {2}{3}{4}
Tr-   ©r   r*  r4   r5   r2   r1   r3   )r   r6   rÜ   r*  s       r"   r8   zLoadInstr.descr¿  sr   € Ø—‘‰ˆØ�:‰:Ð!Ø  D§J¡JÑ/‰EàˆEØ�
‰
Ð.×5Ñ5Ø�I‰IØ�H‰HØ×ÑÓØØ×$Ñ$°4Ð$Ó8ó
õ 	r#   ©rD   Nr­   rJ   s   @r"   r#  r#  °  s   ø„ õör#   r#  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú
StoreInstrc                 óZ   •— t         t        | �  |t        j                  «       d||g«       y )NÚstore)r   r1  r   r   r±   )r   r   rÜ   r+  r!   s       €r"   r   zStoreInstr.__init__Ï  s&   ø€ ÜŒj˜$Ñ(¨´·±Ó1AÀ7Ø*-¨s¨õ	5r#   c                 ó(  — | j                   \  }}| j                  �d| j                  z  }nd}|j                  dj                  |j                  |j                  «       |j                  |j                  «       || j                  d¬«      «      «       y )Nr-  rD   zstore {0} {1}, {2} {3}{4}{5}
Tr-   r.  )r   r6   rÜ   r+  r*  s        r"   r8   zStoreInstr.descrÓ  s€   € Ø—=‘=‰ˆˆSØ�:‰:Ð!Ø  D§J¡JÑ/‰EàˆEØ�
‰
Ð3×:Ñ:Ø�H‰HØ×ÑÓØ�H‰HØ×ÑÓØØ×$Ñ$°4Ð$Ó8ó
õ 	r#   r­   rJ   s   @r"   r1  r1  Î  s   ø„ ô5ör#   r1  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚLoadAtomicInstrc                 ó  •— |€Ut        |t        «      r|j                  }n8|j                  j                  s|j                  j
                  }nt        d«      ‚t        t        | �'  ||d|g|¬«       || _
        || _        y )NzLoad atomic lacks type.zload atomicr   )r   r&  r'  r2   r(  r)  rr   r   r6  r   Úorderingr*  )r   r   r+  r8  r*  r   r    r!   s          €r"   r   zLoadAtomicInstr.__init__ä  sw   ø€ Øˆ;Ü˜#œ{Ô+Ø×(Ñ(‘ð —X‘X×'Ò'Ø—h‘h×&Ñ&‘ä Ð!:Ó;Ð;ÜŒo˜tÑ-¨f°c¸=Ø/2¨e¸$ð 	.ô 	@à ˆŒØˆ�
r#   c                 óö   — | j                   \  }|j                  dj                  | j                  |j                  |j	                  «       | j
                  | j                  | j                  d¬«      «      «       y )Nz+load atomic {0}, {1} {2} {3}, align {4}{5}
Tr-   ©r   r4   r5   r2   r1   r8  r*  r3   )r   r6   rÜ   s      r"   r8   zLoadAtomicInstr.descró  s`   € Ø—‘‰ˆØ�
‰
ÐA×HÑHØ�I‰IØ�H‰HØ×ÑÓØ�M‰MØ�J‰JØ×$Ñ$°4Ð$Ó8ó
õ 	r#   r/  r­   rJ   s   @r"   r6  r6  ã  s   ø„ õö	r#   r6  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚStoreAtomicInstrc                 óv   •— t         t        | �  |t        j                  «       d||g«       || _        || _        y )Nzstore atomic)r   r<  r   r   r±   r8  r*  )r   r   rÜ   r+  r8  r*  r!   s         €r"   r   zStoreAtomicInstr.__init__   s6   ø€ ÜÔ Ñ.¨v´u·~±~Ó7GØ/=ÀÀS¸zô	Kà ˆŒØˆ�
r#   c                 ó  — | j                   \  }}|j                  dj                  |j                  |j	                  «       |j                  |j	                  «       | j
                  | j                  | j                  d¬«      «      «       y )Nz0store atomic {0} {1}, {2} {3} {4}, align {5}{6}
Tr-   r:  )r   r6   rÜ   r+  s       r"   r8   zStoreAtomicInstr.descr  sn   € Ø—=‘=‰ˆˆSØ�
‰
ÐF×MÑMØ�H‰HØ×ÑÓØ�H‰HØ×ÑÓØ�M‰MØ�J‰JØ×$Ñ$°4Ð$Ó8ó
õ 	r#   r­   rJ   s   @r"   r<  r<  ÿ  s   ø„ ôö
r#   r<  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r&  c                 óz   •— |r|gnd}t         t        | �  ||j                  «       d||«       || _        d | _        y )NrE   Úalloca)r   r&  r   Ú
as_pointerr'  r*  )r   r   r    rø   r   r   r!   s         €r"   r   zAllocaInstr.__init__  s>   ø€ Ù#�E‘7¨ˆÜŒk˜4Ñ)¨&°#·.±.Ó2BÀHØ*2°Dô	:à!ˆÔØˆ�
r#   c                 óÜ  — |j                  dj                  | j                  | j                  «      «       | j                  rG| j                  \  }|j                  dj                  |j
                  |j                  «       «      «       | j                  �*|j                  dj                  | j                  «      «       | j                  r"|j                  | j                  d¬«      «       y y )Nr•   z	, {0} {1}z, align {0}Tr-   )
r4   r5   r   r'  r   r2   r1   r*  r   r3   )r   r6   r7   s      r"   r8   zAllocaInstr.descr  s¨   € Ø�
‰
�9×#Ñ# D§K¡K°×1DÑ1DÓEÔFØ�=Š=Ø—-‘-‰CˆBØ�J‰J�{×)Ñ)¨"¯'©'°2×3CÑ3CÓ3EÓFÔGØ�:‰:Ð!Ø�J‰J�}×+Ñ+¨D¯J©JÓ7Ô8Ø�=Š=Ø�J‰J�t×/Ñ/¸dÐ/ÓCÕDð r#   r­   rJ   s   @r"   r&  r&    s   ø„ ôöEr#   r&  c                   ó(   ‡ — e Zd Z	 dˆ fd„	Zd„ Zˆ xZS )ÚGEPInstrc           	      óR  •— |�|j                   }|| _        nÖ|j                   j                  sµ|j                   }d }d}	|D ]<  }
||j                  |
«      }}t	        |t
        j                  «      sŒ1|j                  }	Œ> t	        |t
        j                  «      st	        |t
        j                  «      r|}n|j                  |	«      }|j                   j                  | _        nt        d«      ‚t        t        | �7  ||d|gt        |«      z   |¬«       || _        || _        || _        y )Nr   zGEP lacks type.Úgetelementptrr   )r2   Úsource_etyper(  Úgepr   r   ÚPointerTypeÚ	addrspacerB  r)  rr   r   rE  r   r   ÚpointerÚindicesÚinbounds)r   r   r+  rM  rN  r   rH  r    ÚlasttypÚlastaddrspacer}   r!   s              €r"   r   zGEPInstr.__init__'  s
  ø€ àÐ#Ø—(‘(ˆCØ ,ˆDÕð —‘×#Ò#Ø—(‘(ˆCØˆGØˆMØò 6�Ø" C§G¡G¨A£J˜�ä˜g¤u×'8Ñ'8Õ9Ø$+×$5Ñ$5‘Mð	6ô ˜s¤E×$5Ñ$5Ô6Ü˜w¬×(9Ñ(9Ô:Ø‘à—n‘n ]Ó3�Ø #§¡× 0Ñ 0ˆDÕäÐ.Ó/Ð/ÜŒh˜Ñ& v¨s°OØ(+ u¬t°G«}Ñ'<À4ð 	'ô 	IàˆŒØˆŒØ ˆ�r#   c                 ó¤  — | j                   D �cg c],  }dj                  |j                  |j                  «       «      ‘Œ. }}| j                  rdnd}|j                  dj                  || j                  | j                  j                  | j                  j                  «       dj                  |«      | j                  d¬«      «      «       y c c}w )Nr•   zgetelementptr inboundsrG  z{0} {1}, {2} {3}, {4} {5}
r,   Tr-   )
rM  r5   r2   r1   rN  r4   rH  rL  r0   r3   )r   r6   r}   rM  r7   s        r"   r8   zGEPInstr.descrF  s®   € à ŸL™Lö*Øð ×#Ñ# A§F¡F¨A¯O©OÓ,=Õ>ð *ˆð *à)-¯ªÑ%¸OˆØ�
‰
Ð0×7Ñ7ØØ×$Ñ$Ø—<‘<×$Ñ$Ø—<‘<×-Ñ-Ó/Ø—9‘9˜WÓ%Ø×+Ñ+¸$Ð+Ó?óõ 	ùò*s   �1Cr%   r­   rJ   s   @r"   rE  rE  &  s   ø„ à"õ!ö>r#   rE  c                   ó2   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zd„ Zˆ xZS )ÚPhiInstrc                 óF   •— t         t        | �  ||dd||¬«       g | _        y )NÚphirE   rè   )r   rS  r   Ú	incomings)r   r   r    r   r   r!   s        €r"   r   zPhiInstr.__init__U  s+   ø€ ÜŒh˜Ñ& v¨s°E¸2ÀDØ-2ð 	'ô 	4àˆ�r#   c           
      óô   — dj                  d„ | j                  D «       «      }|j                  dj                  dj                  | j                  «      | j
                  || j                  d¬«      «      «       y )Nr,   c              3   ó~   K  — | ]5  \  }}d j                  |j                  «       |j                  «       «      –— Œ7 y­w)z
[{0}, {1}]N)r5   r1   )rü   ÚvÚbs      r"   rþ   z!PhiInstr.descr.<locals>.<genexpr>[  s;   è ø€ ò 5á!˜Q ð &×,Ñ,¨Q¯_©_Ó->Ø-.¯_©_Ó->÷@ñ 5ùs   ‚;=zphi {0} {1} {2} {3}
r+   Tr-   )r0   rV  r4   r5   r   r2   r3   )r   r6   Úincss      r"   r8   zPhiInstr.descrZ  sh   € Ø�y‰yñ 5à%)§^¡^ô5ó 5ˆð 	�
‰
Ð*×1Ñ1Ø—8‘8˜DŸJ™JÓ'Ø—9‘9ØØ×+Ñ+¸$Ð+Ó?ó	õ 	r#   c                 ób   — t        |t        «      sJ ‚| j                  j                  ||f«       y r%   )r   r   rV  r4   )r   rÞ   rÓ   s      r"   Úadd_incomingzPhiInstr.add_incominge  s(   € Ü˜%¤Ô'Ð'Ð'Ø�‰×Ñ˜u e˜nÕ-r#   c                 óh   — | j                   D ��cg c]  \  }}||u r|n||f‘Œ c}}| _         y c c}}w r%   )rV  )r   r;   r<   rÜ   rÖ   s        r"   r>   zPhiInstr.replace_usagei  s6   € à,0¯N©N÷<Ù(˜s Cð $'¨#¡:™C°3¸Ò=ó <ˆ�ùó <s   �.)rE   )rA   rF   rG   r   r8   r]  r>   rI   rJ   s   @r"   rS  rS  T  s   ø„ õò
	ò.ö<r#   rS  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚExtractElementc                 ó"  •— t        |j                  t        j                  «      st	        d«      ‚t        |j                  t        j
                  «      st	        d«      ‚|j                  j                  }t        t        | �'  ||d||g|¬«       y )Nú!vector needs to be of VectorType.úindex needs to be of IntType.Úextractelementr   )
r   r2   r   r÷   rw   r¹   Úelementr   r`  r   )r   r   ÚvectorÚindexr   r    r!   s         €r"   r   zExtractElement.__init__o  su   ø€ Ü˜&Ÿ+™+¤u×'7Ñ'7Ô8ÜÐ?Ó@Ð@Ü˜%Ÿ*™*¤e§m¡mÔ4ÜÐ;Ó<Ð<Ø�k‰k×!Ñ!ˆÜŒn˜dÑ,¨V°SÐ:JØ.4°e¨_À4ð 	-õ 	Ir#   c                 ó    — dj                  d„ | j                  D «       «      }|j                  dj                  | j                  |¬«      «       y )Nr,   c              3   óp   K  — | ].  }d j                  |j                  |j                  «       «      –— Œ0 y­w©r•   N©r5   r2   r1   ©rü   r7   s     r"   rþ   z'ExtractElement.descr.<locals>.<genexpr>y  ó7   è ø€ ò IØ46ð '×-Ñ-Ø—7‘7˜B×,Ñ,Ó.÷0ñ Iùó   ‚46ú{opname} {operands}
©r   r   ©r0   r   r4   r5   r   ©r   r6   r   s      r"   r8   zExtractElement.descrx  óL   € Ø—9‘9ñ IØ:>¿-¹-ôIó Iˆà�
‰
Ð*×1Ñ1ØŸ+™+°ð 2ó :õ 	;r#   r!  r­   rJ   s   @r"   r`  r`  n  s   ø„ õIö;r#   r`  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚInsertElementc                 óÈ  •— t        |j                  t        j                  «      st	        d«      ‚|j                  |j                  j
                  k(  s9t	        dj                  |j                  j
                  |j                  «      «      ‚t        |j                  t        j                  «      st	        d«      ‚|j                  }t        t        | �+  ||d|||g|¬«       y )Nrb  z$value needs to be of type {} not {}.rc  Úinsertelementr   )r   r2   r   r÷   rw   re  r5   r¹   r   ru  r   )r   r   rf  rÞ   rg  r   r    r!   s          €r"   r   zInsertElement.__init__€  s·   ø€ Ü˜&Ÿ+™+¤u×'7Ñ'7Ô8ÜÐ?Ó@Ð@Ø�z‰z˜VŸ[™[×0Ñ0Ò0ÜØ6×=Ñ=Ø—K‘K×'Ñ'¨¯©ó5ó6ð 6ô ˜%Ÿ*™*¤e§m¡mÔ4ÜÐ;Ó<Ð<Ø�k‰kˆÜŒm˜TÑ+¨F°C¸Ø-3°U¸EÐ,BÈð 	,õ 	Or#   c                 ó    — dj                  d„ | j                  D «       «      }|j                  dj                  | j                  |¬«      «       y )Nr,   c              3   óp   K  — | ].  }d j                  |j                  |j                  «       «      –— Œ0 y­wrj  rk  rl  s     r"   rþ   z&InsertElement.descr.<locals>.<genexpr>Ž  rm  rn  ro  rp  rq  rr  s      r"   r8   zInsertElement.descr�  rs  r#   r!  r­   rJ   s   @r"   ru  ru    s   ø„ õOö;r#   ru  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚShuffleVectorc                 ó„  •‡— t        |j                  t        j                  «      st	        d«      ‚|t
        k7  r$|j                  |j                  k7  rt	        d«      ‚t        |t        «      rut        |j                  t        j                  «      rQt        |j                  j                  t        j                  «      r#|j                  j                  j                  dk(  st	        d«      ‚t        j                  |j                  j                  |j                  j                  «      }t        |t
        k(  r|j                  j                  nd|j                  j                  z  «      Št        ˆfd„|j                  D «       «      st        dj                  ‰«      «      ‚t         t"        | �K  ||d|||g|¬	«       y )
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   ó:   •K  — | ]  }|j                   ‰v –— Œ y ­wr%   )Úconstant)rü   ÚiiÚindex_ranges     €r"   rþ   z)ShuffleVector.__init__.<locals>.<genexpr>¥  s   øè ø€ ÒF°"�2—;‘; +Ô-ÑFùs   ƒzmask values need to be in {0}Úshufflevectorr   )r   r2   r   r÷   rw   r   r   re  r¹   Úwidthrø   rs   Úallr~  Ú
IndexErrorr5   r   r{  r   )	r   r   Úvector1Úvector2Úmaskr   r    r€  r!   s	          @€r"   r   zShuffleVector.__init__•  sY  ù€ Ü˜'Ÿ,™,¬×(8Ñ(8Ô9ÜÐ@ÓAÐAØ”iÒØ�|‰|˜wŸ|™|Ò+Üð !Ló Mð Mä˜4¤Ô*Ü˜4Ÿ9™9¤e×&6Ñ&6Ô7Ü˜DŸI™I×-Ñ-¬u¯}©}Ô=Ø—‘×"Ñ"×(Ñ(¨BÒ.ÜÐEÓFÐFÜ×Ñ˜wŸ|™|×3Ñ3°T·Y±Y·_±_ÓEˆÜØ&¬)Ò3ð $ŸL™L×.Ò.à!" W§\¡\×%7Ñ%7Ñ!7ó9ˆô ÓF¸¿¹ÔFÔFÜØ/×6Ñ6°{ÓCóð ô 	Œm˜TÑ+¨F°C¸Ø-4°g¸tÐ,DÈ4ð 	,õ 	Qr#   c                 ó¦   — |j                  dj                  dj                  d„ | j                  D «       «      | j	                  d¬«      «      «       y )Nzshufflevector {0} {1}
r,   c              3   óp   K  — | ].  }d j                  |j                  |j                  «       «      –— Œ0 y­wrj  rk  rl  s     r"   rþ   z&ShuffleVector.descr.<locals>.<genexpr>®  s2   è ø€ ò 6Ø!#ð '×-Ñ-¨b¯g©g°r×7GÑ7GÓ7I×Jñ 6ùrn  Tr-   )r4   r5   r0   r   r3   r¤   s     r"   r8   zShuffleVector.descr¬  sJ   € Ø�
‰
Ð,×3Ñ3Ø—9‘9ñ 6Ø'+§}¡}ô6ó 6à×+Ñ+¸$Ð+Ó?óõ 	r#   r!  r­   rJ   s   @r"   r{  r{  ”  s   ø„ õQö.r#   r{  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚExtractValuec                 ó
  •— |j                   }	 |D ]  }|j                  |   }Œ 	 t        t        | �#  ||d|g|¬«       || _	        || _
        y # t        t        f$ r% t	        dt        |«      ›d|j                   ›�«      ‚w xY w)NúCan't index at ú in Úextractvaluer   )r2   ÚelementsÚAttributeErrorr„  rw   r   r   r‹  r   Ú	aggregaterM  )r   r   ÚaggrM  r   r    r}   r!   s          €r"   r   zExtractValue.__init__µ  s•   ø€ Ø�h‰hˆð	9Øò &�Ø—l‘l 1‘o‘ñ&ô 	Œl˜DÑ*¨6°3¸Ø,/¨5°tð 	+ô 	=ð ˆŒØˆ�øô ¤
Ð+ò 	9ÝÜ# G�}¨c¯hªhð8ó 9ð 9ð	9ús   �A Á4Bc           
      ó.  — | j                   D �cg c]  }t        |«      ‘Œ }}|j                  dj                  | j                  j
                  | j                  j                  «       dj                  |«      | j                  d¬«      «      «       y c c}w )Nzextractvalue {0} {1}, {2} {3}
r,   Tr-   )	rM  rk   r4   r5   r’  r2   r1   r0   r3   ©r   r6   r}   rM  s       r"   r8   zExtractValue.descrÄ  sv   € Ø#'§<¡<Ö0˜a”3�q•6Ð0ˆÐ0à�
‰
Ð4×;Ñ;Ø—>‘>×&Ñ&Ø—>‘>×/Ñ/Ó1Ø—9‘9˜WÓ%Ø×+Ñ+¸$Ð+Ó?ó	õ 	ùò 1s   �Br!  r­   rJ   s   @r"   r‹  r‹  ´  s   ø„ õör#   r‹  c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚInsertValuec           
      ó´  •— |j                   }	 |D ]  }|j                  |   }Œ 	 |j                   |k7  r4t	        d|›dt        |«      ›d|j                   ›d|j                   ›�«      ‚t        t        | �#  ||j                   d||g|¬«       || _	        || _
        || _        y # t        t        f$ r% t	        dt        |«      ›d|j                   ›�«      ‚w xY w)Nr�  rŽ  zCan only insert z at z: got Úinsertvaluer   )r2   r�  r‘  r„  rw   r   r   r—  r   r’  rÞ   rM  )	r   r   r“  ÚelemrM  r   r    r}   r!   s	           €r"   r   zInsertValue.__init__Ð  sÙ   ø€ Ø�h‰hˆð	9Øò &�Ø—l‘l 1‘o‘ñ&ð
 �9‰9˜ÒÝÚ"¤D¨¥M°3·8³8¸T¿YºYðHó Ið IäŒk˜4Ñ)¨&°#·(±(¸MØ+.°¨+¸Dð 	*ô 	Bð ˆŒØˆŒ
Øˆ�øô ¤
Ð+ò 	9ÝÜ# G�}¨c¯hªhð8ó 9ð 9ð	9ús   �B# Â#4Cc                 óŠ  — | j                   D �cg c]  }t        |«      ‘Œ }}|j                  dj                  | j                  j
                  | j                  j                  «       | j                  j
                  | j                  j                  «       dj                  |«      | j                  d¬«      «      «       y c c}w )Nz&insertvalue {0} {1}, {2} {3}, {4} {5}
r,   Tr-   )
rM  rk   r4   r5   r’  r2   r1   rÞ   r0   r3   r•  s       r"   r8   zInsertValue.descrâ  s�   € Ø#'§<¡<Ö0˜a”3�q•6Ð0ˆÐ0à�
‰
Ð<×CÑCØ—>‘>×&Ñ&¨¯©×(DÑ(DÓ(FØ—:‘:—?‘? D§J¡J×$<Ñ$<Ó$>Ø—9‘9˜WÓ%Ø×+Ñ+¸$Ð+Ó?ó	õ 	ùò 1s   �C r!  r­   rJ   s   @r"   r—  r—  Ï  s   ø„ õö$r#   r—  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚUnreachablec                 óZ   •— t         t        | �  |t        j                  «       ddd¬«       y )NÚunreachablerE   rD   r   )r   r�  r   r   r±   )r   r   r!   s     €r"   r   zUnreachable.__init__î  s*   ø€ ÜŒk˜4Ñ)¨&´%·.±.Ó2BØ*7¸À"ð 	*õ 	Fr#   c                 ó&   — || j                   dfz  }y )Nú
)r   r¤   s     r"   r8   zUnreachable.descrò  s   € Ø�—‘˜TÐ"Ñ"‰r#   r­   rJ   s   @r"   r�  r�  í  s   ø„ ôFö#r#   r�  c                   ó&   — e Zd Zdd„Zd„ Zd„ Zd„ Zy)Ú	InlineAsmc                 ó^   — |j                   | _        || _        || _        || _        || _        y r%   )rx   r2   rt   ÚasmÚ
constraintÚside_effect)r   Úftyper¥  r¦  r§  s        r"   r   zInlineAsm.__init__÷  s-   € Ø×%Ñ%ˆŒ	Ø"ˆÔØˆŒØ$ˆŒØ&ˆÕr#   c                 ó–   — | j                   rdnd}d}|j                  |j                  || j                  | j                  ¬«      «       y )NÚ
sideeffectrD   z(asm {sideeffect} "{asm}", "{constraint}")rª  r¥  r¦  )r§  r4   r5   r¥  r¦  )r   r6   rª  Úfmts       r"   r8   zInlineAsm.descrþ  sA   € Ø%)×%5Ò%5‘\¸2ˆ
Ø8ˆØ�
‰
�3—:‘:¨¸¿¹Ø)-¯©ð ó :õ 	;r#   c                 óJ   — g }| j                  |«       dj                  |«      S ©NrD   )r8   r0   r¤   s     r"   r1   zInlineAsm.get_reference  s    € ØˆØ�
‰
�3ŒØ�w‰w�s‹|Ðr#   c                 óV   — dj                  | j                  | j                  «       «      S )Nr•   rk  r'   s    r"   Ú__str__zInlineAsm.__str__	  s"   € Ø×Ñ §	¡	¨4×+=Ñ+=Ó+?Ó@Ð@r#   N)F)rA   rF   rG   r   r8   r1   r¯  rE   r#   r"   r£  r£  ö  s   „ ó'ò;òó
Ar#   r£  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú	AtomicRMWc                 ój   •— t         t        | �  ||j                  d||f|¬«       || _        || _        y )NÚ	atomicrmwr   )r   r±  r   r2   Ú	operationr8  )r   r   r7   r+  rÜ   r8  r   r!   s          €r"   r   zAtomicRMW.__init__  s8   ø€ ÜŒi˜Ñ'¨°·±¸+Ø),¨c¨
¸ð 	(ô 	?àˆŒØ ˆ�r#   c                 ó  — | j                   \  }}d}|j                  |j                  | j                  |j                  |j                  «       |j                  |j                  «       | j                  | j                  d¬«      ¬«      «       y )NzBatomicrmw {op} {ptrty} {ptr}, {valty} {val} {ordering} {metadata}
Tr-   )r7   Úptrtyr+  ÚvaltyrÜ   r8  r   )r   r4   r5   r´  r2   r1   r8  r3   )r   r6   r+  rÜ   r«  s        r"   r8   zAtomicRMW.descr  s|   € Ø—=‘=‰ˆˆSðˆà�
‰
�3—:‘: §¡Ø$'§H¡HØ"%×"3Ñ"3Ó"5Ø$'§H¡HØ"%×"3Ñ"3Ó"5Ø'+§}¡}Ø'+×'?Ñ'?Ø04ð (@ó (6ð ó  õ 	!r#   r­   rJ   s   @r"   r±  r±    s   ø„ ô!ö!r#   r±  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚCmpXchgzdThis instruction has changed since llvm3.5.  It is not compatible with
    older llvm versions.
    c                 óÀ   •— t        j                  |j                  t        j                  d«      g«      }t        t
        | �  ||d|||f|¬«       || _        || _        y )Nrg   Úcmpxchgr   )	r   ÚLiteralStructTyper2   r¹   r   r¹  r   r8  Úfailordering)
r   r   r+  ÚcmprÜ   r8  r½  r   Úouttyper!   s
            €r"   r   zCmpXchg.__init__(  sZ   ø€ Ü×)Ñ)¨3¯8©8´U·]±]À1Ó5EÐ*FÓGˆÜŒg�tÑ% f¨g°yØ'*¨C° o¸Dð 	&ô 	Bà ˆŒØ(ˆÕr#   c                 ó<  — | j                   \  }}}d}|j                  |j                  |j                  |j	                  «       |j                  |j	                  «       |j	                  «       | j
                  | j                  | j                  d¬«      ¬«      «       y )NzScmpxchg {ptrty} {ptr}, {ty} {cmp}, {ty} {val} {ordering} {failordering} {metadata}
Tr-   )r¶  r+  rœ   r¾  rÜ   r8  r½  r   )r   r4   r5   r2   r1   r8  r½  r3   )r   r6   r+  ÚcmpvalrÜ   r«  s         r"   r8   zCmpXchg.descr/  s�   € ØŸ=™=ÑˆˆV�Sð,ˆà�
‰
�3—:‘: C§H¡HØ"%×"3Ñ"3Ó"5Ø!'§¡Ø"(×"6Ñ"6Ó"8Ø"%×"3Ñ"3Ó"5Ø'+§}¡}Ø+/×+<Ñ+<Ø'+×'?Ñ'?Ø04ð (@ó (6ð ó 	 õ 		!r#   ©rA   rF   rG   Ú__doc__r   r8   rI   rJ   s   @r"   r¹  r¹  #  s   ø„ ñô)ö!r#   r¹  c                   ó   — e Zd Zd„ Zd„ Zy)Ú_LandingPadClausec                 ó   — || _         y r%   )rÞ   )r   rÞ   s     r"   r   z_LandingPadClause.__init__@  s	   € Øˆ�
r#   c                 ó–   — dj                  | j                  | j                  j                  | j                  j	                  «       ¬«      S )Nz{kind} {type} {value})Úkindr2   rÞ   )r5   rÈ  rÞ   r2   r1   r'   s    r"   r¯  z_LandingPadClause.__str__C  s<   € Ø&×-Ñ-Ø—‘Ø—‘—‘Ø—*‘*×*Ñ*Ó,ð .ó .ð 	.r#   N)rA   rF   rG   r   r¯  rE   r#   r"   rÅ  rÅ  ?  s   „ òó.r#   rÅ  c                   ó   — e Zd ZdZy)ÚCatchClauseÚcatchN)rA   rF   rG   rÈ  rE   r#   r"   rÊ  rÊ  J  s   „ Ø�Dr#   rÊ  c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚFilterClauseÚfilterc                 óœ   •— t        |t        «      sJ ‚t        |j                  t        j                  «      sJ ‚t
        t        | �  |«       y r%   )r   r   r2   r   Ú	ArrayTyper   rÍ  r   )r   rÞ   r!   s     €r"   r   zFilterClause.__init__Q  s:   ø€ Ü˜%¤Ô*Ð*Ð*Ü˜%Ÿ*™*¤e§o¡oÔ6Ð6Ð6ÜŒl˜DÑ*¨5Õ1r#   )rA   rF   rG   rÈ  r   rI   rJ   s   @r"   rÍ  rÍ  N  s   ø„ Ø€D÷2ð 2r#   rÍ  c                   ó,   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zˆ xZS )ÚLandingPadInstrc                 óR   •— t         t        | �  ||dg |¬«       || _        g | _        y )NÚ
landingpadr   )r   rÒ  r   ÚcleanupÚclauses)r   r   r    r   rÕ  r!   s        €r"   r   zLandingPadInstr.__init__X  s0   ø€ ÜŒo˜tÑ-¨f°c¸<ÈØ37ð 	.ô 	9àˆŒØˆ�r#   c                 ó^   — t        |t        «      sJ ‚| j                  j                  |«       y r%   )r   rÅ  rÖ  r4   )r   Úclauses     r"   Ú
add_clausezLandingPadInstr.add_clause^  s%   € Ü˜&Ô"3Ô4Ð4Ð4Ø�‰×Ñ˜FÕ#r#   c                 óô   — d}|j                  |j                  | j                  | j                  rdnddj	                  | j
                  D �cg c]  }dj                  |«      ‘Œ c}«      ¬«      «       y c c}w )Nz$landingpad {type}{cleanup}{clauses}
z cleanuprD   z

      {0})r2   rÕ  rÖ  )r4   r5   r2   rÕ  r0   rÖ  )r   r6   r«  rØ  s       r"   r8   zLandingPadInstr.descrb  sn   € Ø5ˆØ�
‰
�3—:‘: 4§9¡9Ø48·L²L¡jÀbØ&(§g¡gØ=A¿\¹\ö/KØ39ð 0=×/CÑ/CÀFÕ/Kò /Kó 'Lð ó  õ 	!ùò/Ks   ÁA5)rD   F)rA   rF   rG   r   rÙ  r8   rI   rJ   s   @r"   rÒ  rÒ  W  s   ø„ õò$ö!r#   rÒ  c                   ó2   ‡ — e Zd ZdZh d£Zdˆ fd„	Zd„ Zˆ xZS )ÚFencez|
    The `fence` instruction.

    As of LLVM 5.0.1:

    fence [syncscope("<target-scope>")] <ordering>  ; yields void
    >   Úacq_relÚacquireÚreleaseÚseq_cstc                 óþ   •— t         t        | �  |t        j                  «       dd|¬«       || j
                  vr6d}t        |j                  |dj                  | j
                  «      «      «      ‚|| _	        || _
        y )NÚfencerE   r   z3Invalid fence ordering "{0}"! Should be one of {1}.r,   )r   rÜ  r   r   r±   ÚVALID_FENCE_ORDERINGSrr   r5   r0   r8  Útargetscope)r   r   r8  rä  r   r€   r!   s         €r"   r   zFence.__init__v  sz   ø€ ÜŒe�TÑ# F¬E¯N©NÓ,<¸gÀrØ)-ð 	$ô 	/à˜4×5Ñ5Ñ5ØIˆCÜ˜SŸ[™[¨Ø)-¯©°4×3MÑ3MÓ)NóPó Qð Qà ˆŒØ&ˆÕr#   c                 ó´   — | j                   €d}ndj                  | j                   «      }d}|j                  |j                  || j                  ¬«      «       y )NrD   zsyncscope("{0}") zfence {syncscope}{ordering}
)Ú	syncscoper8  )rä  r5   r4   r8  )r   r6   ræ  r«  s       r"   r8   zFence.descr€  sS   € Ø×ÑÐ#Ø‰Ià+×2Ñ2°4×3CÑ3CÓDˆIà-ˆØ�
‰
�3—:‘:¨	Ø'+§}¡}ð ó  õ 	!r#   r­  )rA   rF   rG   rÃ  rã  r   r8   rI   rJ   s   @r"   rÜ  rÜ  k  s   ø„ ñò IÐõ'ö	!r#   rÜ  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚCommentz
    A line comment.
    c                 ó~   •— t         t        | �  |t        j                  «       ddd¬«       d|vsJ d«       ‚|| _        y )Nú;rE   rD   r   r¡  zComment cannot contain new line)r   rè  r   r   r±   Útext)r   r   rë  r!   s      €r"   r   zComment.__init__‘  sD   ø€ ÜŒg�tÑ% f¬e¯n©nÓ.>ÀÀRØ+-ð 	&ô 	/à˜4ÑÐBÐ!BÓBÐØˆ�	r#   c                 ó@   — |j                  d| j                  › �«       y )Nz; )r4   rë  r¤   s     r"   r8   zComment.descr—  s   € Ø�
‰
�R˜Ÿ	™	�{Ð#Õ$r#   rÂ  rJ   s   @r"   rè  rè  Œ  s   ø„ ñôö%r#   rè  N);rÃ  Úllvmlite.irr   Úllvmlite.ir.valuesr   r   r   r   r   r	   r
   r   r   r   Úllvmlite.ir._utilsr   r   rL   rU   rl   r[   re   r§   r¯   r´   rÀ   rÆ   rÊ   rÌ   rØ   rã   rå   rò   r   r  r  r#  r1  r6  r<  r&  rE  rS  r`  ru  r{  r‹  r—  r�  Úobjectr£  r±  r¹  rÅ  rÊ  rÍ  rÒ  rÜ  rè  rE   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#   