§
    .@Äjâˆ  ã                   óÚ   — d dl Z d dlZd dlmZmZmZ ddddddd	œZej        fd
„Zej        fd„Z	ej        fd„Z
ej        fd„Zd„ Zd„ Zd„ Zd„ Zej        fd„Zd„ Z G d„ de¦  «        ZdS )é    N)ÚinstructionsÚtypesÚvaluesÚgtÚltÚeqÚneÚgeÚle)ú>ú<ú==ú!=z>=z<=c                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 óJ   •— t          j        | ¦  «        dˆˆfd„	¦   «         }|S )NÚ © c                 óh   •—  ‰| j         |j        ‰|g||¦  «        }|                      |¦  «         |S ©N©ÚblockÚtypeÚ_insert)ÚselfÚargÚnameÚflagsÚinstrÚclsÚopnames        €€úDC:\Projects\Historical\venv\Lib\site-packages\llvmlite/ir/builder.pyÚwrappedz$_unop.<locals>.wrap.<locals>.wrapped   s9   ø€ à�C˜œ
 C¤H¨f°s°e¸TÀ5ÑIÔIˆEØ�LŠL˜ÑÔÐØˆLó    ©r   r   ©Ú	functoolsÚwraps©Úfnr"   r   r    s     €€r!   Úwrapz_unop.<locals>.wrap   óB   ø€ Ý	Œ˜Ñ	Ô	ð	ð 	ð 	ð 	ð 	ð 	ñ 
Ô	ð	ð
 ˆr#   r   ©r    r   r*   s   `` r!   Ú_unopr-      ó)   øø€ ðð ð ð ð ð ð €Kr#   c                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 óJ   •— t          j        | ¦  «        dˆˆfd„	¦   «         }|S )Nr   r   c                 óÊ   •— |j         |j         k    r t          d|j         ›d|j         ›d�¦  «        ‚ ‰| j        |j         ‰||f||¦  «        }|                      |¦  «         |S )Nú%Operands must be the same type, got (ú, ú))r   Ú
ValueErrorr   r   )r   ÚlhsÚrhsr   r   r   r   r    s         €€r!   r"   z%_binop.<locals>.wrap.<locals>.wrapped   st   ø€ àŒx˜3œ8Ò#Ð#Ý �jØ$'¤H H H¨c¬h¨h¨hð"8ñ 9ô 9ð 9à�C˜œ
 C¤H¨f°s¸C°jÀ$ÈÑNÔNˆEØ�LŠL˜ÑÔÐØˆLr#   r$   r%   r(   s     €€r!   r*   z_binop.<locals>.wrap   sB   ø€ Ý	Œ˜Ñ	Ô	ð	ð 	ð 	ð 	ð 	ð 	ñ 
Ô	ð	ð ˆr#   r   r,   s   `` r!   Ú_binopr8      s)   øø€ ð
ð 
ð 
ð 
ð 
ð 
ð €Kr#   c                 ó   ‡ — ˆ fd„}|S )Nc                 óH   •— t          j        | ¦  «        dˆfd„	¦   «         }|S )Nr   c                 óÆ  •— |j         |j         k    r t          d|j         ›d|j         ›d�¦  «        ‚|j         }t          |t          j        ¦  «        st          d|›�¦  «        ‚t          j        d¦  «        }| j        }t          j        t          j        ||g¦  «        ||g¦  «        }| 	                    d‰
›d�|g|¦  «        }|  
                    |||g|¬¦  «        }	|	S )	Nr2   r3   r4   zexpected an integer type, got é   zllvm.z.with.overflow©r   )r   r5   Ú
isinstancer   ÚIntTypeÚ	TypeErrorÚmoduleÚFunctionTypeÚLiteralStructTypeÚdeclare_intrinsicÚcall)r   r6   r7   r   ÚtyÚbool_tyÚmodÚfntyr)   Úretr    s             €r!   r"   z3_binop_with_overflow.<locals>.wrap.<locals>.wrapped/   sõ   ø€ àŒx˜3œ8Ò#Ð#Ý �jØ$'¤H H H¨c¬h¨h¨hð"8ñ 9ô 9ð 9à”ˆBÝ˜b¥%¤-Ñ0Ô0ð LÝ�iÀbÀbÐ JÑKÔKÐKÝ”m AÑ&Ô&ˆGà”+ˆCÝÔ%¥eÔ&=¸rÀ7¸mÑ&LÔ&LØ')¨2 hñ0ô 0ˆDà×&Ò&Ð&À&À&À&Ð'JØ(* t¨Tñ3ô 3ˆBà—)’)˜B  c 
°�)Ñ6Ô6ˆCØˆJr#   ©r   r%   ©r)   r"   r    s     €r!   r*   z"_binop_with_overflow.<locals>.wrap.   s=   ø€ Ý	Œ˜Ñ	Ô	ð	ð 	ð 	ð 	ð 	ñ 
Ô	ð	ð" ˆr#   r   r,   s   `  r!   Ú_binop_with_overflowrM   -   s#   ø€ ðð ð ð ð ð* €Kr#   c                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 óJ   •— t          j        | ¦  «        dˆˆfd„	¦   «         }|S )Nr   c                 óf   •—  ‰| j         |j        ‰|g|¦  «        }|                      |¦  «         |S r   r   )r   Úoperandr   r   r   r    s       €€r!   r"   z%_uniop.<locals>.wrap.<locals>.wrappedH   s7   ø€ à�C˜œ
 G¤L°&¸7¸)ÀTÑJÔJˆEØ�LŠL˜ÑÔÐØˆLr#   rK   r%   r(   s     €€r!   r*   z_uniop.<locals>.wrapG   r+   r#   r   r,   s   `` r!   Ú_unioprR   F   r.   r#   c                 ó   ‡ — ˆ fd„}|S )Nc                 óH   •— t          j        | ¦  «        dˆfd„	¦   «         }|S )Nr   c                 óâ   •— t          |j        t          j        ¦  «        st	          d|j        z  ¦  «        ‚| j                             ‰|j        g¦  «        }|                      ||g|¦  «        S )Nú expected an integer type, got %s)r>   r   r   r?   r@   rA   rD   rE   ©r   rQ   r   r)   r    s       €r!   r"   z3_uniop_intrinsic_int.<locals>.wrap.<locals>.wrappedU   sm   ø€ å˜gœl­E¬MÑ:Ô:ð "ÝØ6Ø”Lñ!ñ"ô "ð "ð ”×.Ò.¨v¸¼°~ÑFÔFˆBØ—9’9˜R ' ¨DÑ1Ô1Ð1r#   rK   r%   rL   s     €r!   r*   z"_uniop_intrinsic_int.<locals>.wrapT   s=   ø€ Ý	Œ˜Ñ	Ô	ð	2ð 	2ð 	2ð 	2ð 	2ñ 
Ô	ð	2ð ˆr#   r   ©r    r*   s   ` r!   Ú_uniop_intrinsic_intrY   S   s#   ø€ ð
ð 
ð 
ð 
ð 
ð €Kr#   c                 ó   ‡ — ˆ fd„}|S )Nc                 óH   •— t          j        | ¦  «        dˆfd„	¦   «         }|S )Nr   c                 óú   •— t          |j        t          j        t          j        f¦  «        st          d|j        z  ¦  «        ‚| j                             ‰|j        g¦  «        }|                      ||g|¦  «        S )Núexpected a float type, got %s)	r>   r   r   Ú	FloatTypeÚ
DoubleTyper@   rA   rD   rE   rW   s       €r!   r"   z5_uniop_intrinsic_float.<locals>.wrap.<locals>.wrappede   sr   ø€ åØ”L¥5¤?µEÔ4DÐ"EñGô Gð PåÐ ?À'Ä,Ñ NÑOÔOÐOØ”×.Ò.¨v¸¼°~ÑFÔFˆBØ—9’9˜R ' ¨DÑ1Ô1Ð1r#   rK   r%   rL   s     €r!   r*   z$_uniop_intrinsic_float.<locals>.wrapd   s=   ø€ Ý	Œ˜Ñ	Ô	ð	2ð 	2ð 	2ð 	2ð 	2ñ 
Ô	ð	2ð ˆr#   r   rX   s   ` r!   Ú_uniop_intrinsic_floatr`   c   s#   ø€ ð	ð 	ð 	ð 	ð 	ð €Kr#   c                 ó   ‡ — ˆ fd„}|S )Nc                 óH   •— t          j        | ¦  «        dˆfd„	¦   «         }|S )Nr   c                 ó|  •— t          |j        t          j        ¦  «        st	          d|j        z  ¦  «        ‚t          |j        t          j        ¦  «        r|j        j        dk    st	          d|j        z  ¦  «        ‚| j                             ‰|j        |j        g¦  «        }|                      |||g|¦  «        S )NrV   r<   zexpected an i1 type, got %s)	r>   r   r   r?   r@   ÚwidthrA   rD   rE   )r   rQ   Úflagr   r)   r    s        €r!   r"   z9_uniop_intrinsic_with_flag.<locals>.wrap.<locals>.wrappedt   sµ   ø€ å˜gœl­E¬MÑ:Ô:ð "ÝØ6Ø”Lñ!ñ"ô "ð "õ ˜tœy­%¬-Ñ8Ô8ð KØ”I”O qÒ(Ð(ÝÐ =ÀÄ	Ñ IÑJÔJÐJØ”×.Ò.Ø˜œ t¤yÐ1ñ3ô 3ˆBà—9’9˜R '¨4 °$Ñ7Ô7Ð7r#   rK   r%   rL   s     €r!   r*   z(_uniop_intrinsic_with_flag.<locals>.wraps   s=   ø€ Ý	Œ˜Ñ	Ô	ð
	8ð 
	8ð 
	8ð 
	8ð 
	8ñ 
Ô	ð
	8ð ˆr#   r   rX   s   ` r!   Ú_uniop_intrinsic_with_flagrf   r   s#   ø€ ðð ð ð ð ð  €Kr#   c                 ó   ‡ — ˆ fd„}|S )Nc                 óH   •— t          j        | ¦  «        dˆfd„	¦   «         }|S )Nr   c                 óº  •— |j         |j         k    s|j         |j         k    r't          d|j         ›d|j         ›d|j         ›�¦  «        ‚t          |j         t          j        t          j        t          j        f¦  «        st          d|j         z  ¦  «        ‚| j                             ‰|j         |j         |j         g¦  «        }|  	                    ||||g|¦  «        S )Nz#expected types to be the same, got r3   z'expected an floating point type, got %s)
r   r@   r>   r   ÚHalfTyper^   r_   rA   rD   rE   )r   ÚaÚbÚcr   r)   r    s         €r!   r"   z/_triop_intrinsic.<locals>.wrap.<locals>.wrappedˆ   sá   ø€ àŒv˜œÒÐ 1¤6¨Q¬VÒ#3Ð#3Ý�iàœ˜˜Øœ˜˜Øœ˜ð ñ!ô !ð !õ
  Ø”FÝ”^¥U¤_µeÔ6FÐGñIô Ið õ  Ø=Ø”Fññô ð ð ”×.Ò.¨v¸¼ÀÄÈÌÐ7OÑPÔPˆBØ—9’9˜R ! Q¨ ¨DÑ1Ô1Ð1r#   rK   r%   rL   s     €r!   r*   z_triop_intrinsic.<locals>.wrap‡   s=   ø€ Ý	Œ˜Ñ	Ô	ð	2ð 	2ð 	2ð 	2ð 	2ñ 
Ô	ð	2ð  ˆr#   r   rX   s   ` r!   Ú_triop_intrinsicrn   †   s#   ø€ ðð ð ð ð ð( €Kr#   c                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 óJ   •— t          j        | ¦  «        dˆˆfd„	¦   «         }|S )Nr   c                 ót   •— |j         |k    r|S  ‰| j        ‰|||¦  «        }|                      |¦  «         |S r   )r   r   r   )r   ÚvalÚtypr   r   r   r    s        €€r!   r"   z&_castop.<locals>.wrap.<locals>.wrapped    sC   ø€ àŒx˜3ŠˆØ�
Ø�C˜œ
 F¨C°°dÑ;Ô;ˆEØ�LŠL˜ÑÔÐØˆLr#   rK   r%   r(   s     €€r!   r*   z_castop.<locals>.wrapŸ   sB   ø€ Ý	Œ˜Ñ	Ô	ð	ð 	ð 	ð 	ð 	ð 	ñ 
Ô	ð	ð ˆr#   r   r,   s   `` r!   Ú_castoprt   ž   s)   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð €Kr#   c                 óv   — t          | ¦  «        dk    r"d}d                     | d|…         d|g¦  «        S | |z   S )z­Returns (label + suffix) or a truncated version if it's too long.
    Parameters
    ----------
    label : str
        Label name
    suffix : str
        Label suffix
    é2   é   r   Nz..)ÚlenÚjoin)ÚlabelÚsuffixÚnheads      r!   Ú_label_suffixr}   ­   sC   € õ ˆ5�z„z�B‚€ØˆØ�wŠw˜˜f˜u˜fœ t¨VÐ4Ñ5Ô5Ð5à�v‰~Ðr#   c                   ó´	  — e Zd Zd˜d„Zed„ ¦   «         ZeZed„ ¦   «         Zed„ ¦   «         Zd„ Z	d„ Z
d„ Zd	„ Zd™d„Zd„ Zej        d„ ¦   «         Zej        d„ ¦   «         Zej        d„ ¦   «         Zej        d˜d„¦   «         Zej        d˜d„¦   «         Zd„ Zd„ Z ed¦  «        d™d„¦   «         Z ed¦  «        d™d„¦   «         Z ed¦  «        d™d„¦   «         Z ed¦  «        d™d„¦   «         Z ed¦  «        d™d„¦   «         Z ed¦  «        d™d„¦   «         Z ed ¦  «        d™d!„¦   «         Z ed"¦  «        d™d#„¦   «         Z  ed$¦  «        d™d%„¦   «         Z! ed&¦  «        d™d'„¦   «         Z" ed(¦  «        d™d)„¦   «         Z# ed*¦  «        d™d+„¦   «         Z$ ed,¦  «        d™d-„¦   «         Z% ed.¦  «        d™d/„¦   «         Z& ed0¦  «        d™d1„¦   «         Z' ed2¦  «        d™d3„¦   «         Z( ed4¦  «        d™d5„¦   «         Z) ed6¦  «        d™d7„¦   «         Z* e+d8¦  «        d™d9„¦   «         Z, e+d:¦  «        d™d;„¦   «         Z- e+d<¦  «        d™d=„¦   «         Z. e+d>¦  «        d™d?„¦   «         Z/ e+d@¦  «        d™dA„¦   «         Z0 e+dB¦  «        d™dC„¦   «         Z1d™dD„Z2d™dE„Z3 e4dF¦  «        dšdH„¦   «         Z5dI„ Z6d™dJ„Z7d™dK„Z8dšdL„Z9dšdM„Z:dšdN„Z; e<dO¦  «        d™dP„¦   «         Z= e<dQ¦  «        d™dR„¦   «         Z> e<dS¦  «        d™dT„¦   «         Z? e<dU¦  «        d™dV„¦   «         Z@ e<dW¦  «        d™dX„¦   «         ZA e<dY¦  «        d™dZ„¦   «         ZB e<d[¦  «        d™d\„¦   «         ZC e<d]¦  «        d™d^„¦   «         ZD e<d_¦  «        d™d`„¦   «         ZE e<da¦  «        d™db„¦   «         ZF e<dc¦  «        d™dd„¦   «         ZG e<de¦  «        d™df„¦   «         ZH e<dg¦  «        d™dh„¦   «         ZId›di„ZJdœdj„ZKd˜dk„ZLd�dl„ZMdm„ ZNdn„ ZOdo„ ZPdp„ ZQdq„ ZRdr„ ZSds„ ZTdt„ ZU	 	 dždv„ZVd™dw„ZWd™dx„ZXd™dy„ZY	 dŸdz„ZZd d{„Z[d™d|„Z\d™d}„Z]d™d~„Z^d™d„Z_d™d€„Z`dšd�„Zad‚„ Zbd™dƒ„Zcd›d„„Zdd¡d…„Zed†„ Zfd›d‡„Zgdˆ„ Zh eid‰¦  «        dŠ„ ¦   «         Zj eid‹¦  «        dŒ„ ¦   «         Zk eid�¦  «        dŽ„ ¦   «         Zl emd�¦  «        d�„ ¦   «         Zn emd‘¦  «        d’„ ¦   «         Zo epd“¦  «        d”„ ¦   «         Zqd›d•„Zr esd–¦  «        d—„ ¦   «         ZtdS )¢Ú	IRBuilderNc                 ó\   — || _         |rt          |j        ¦  «        nd| _        d | _        d S )Nr   )Ú_blockrx   r   Ú_anchorÚdebug_metadata©r   r   s     r!   Ú__init__zIRBuilder.__init__¾   s3   € ØˆŒØ27Ð>•s˜5Ô-Ñ.Ô.Ð.¸QˆŒØ"ˆÔÐÐr#   c                 ó   — | j         S )z*
        The current basic block.
        )r�   ©r   s    r!   r   zIRBuilder.blockÃ   s   € ð
 Œ{Ðr#   c                 ó   — | j         j        S )z'
        The current function.
        )r   Úparentr‡   s    r!   ÚfunctionzIRBuilder.functionÌ   s   € ð
 ŒzÔ Ð r#   c                 ó$   — | j         j        j        S )z%
        The current module.
        )r   r‰   rA   r‡   s    r!   rA   zIRBuilder.moduleÓ   s   € ð
 ŒzÔ Ô'Ð'r#   c                 óf   — |j         | _        | j        j                             |¦  «        | _        dS )z‘
        Position immediately before the given instruction.  The current block
        is also changed to the instruction's basic block.
        N©r‰   r�   r   Úindexr‚   ©r   r   s     r!   Úposition_beforezIRBuilder.position_beforeÚ   s+   € ð
 ”lˆŒØ”{Ô/×5Ò5°eÑ<Ô<ˆŒˆˆr#   c                 ól   — |j         | _        | j        j                             |¦  «        dz   | _        dS )z�
        Position immediately after the given instruction.  The current block
        is also changed to the instruction's basic block.
        r<   Nr�   r�   s     r!   Úposition_afterzIRBuilder.position_afterâ   s0   € ð
 ”lˆŒØ”{Ô/×5Ò5°eÑ<Ô<¸qÑ@ˆŒˆˆr#   c                 ó"   — || _         d| _        dS )z=
        Position at the start of the basic *block*.
        r   N)r�   r‚   r„   s     r!   Úposition_at_startzIRBuilder.position_at_startê   s   € ð ˆŒØˆŒˆˆr#   c                 óF   — || _         t          |j        ¦  «        | _        dS )z;
        Position at the end of the basic *block*.
        N)r�   rx   r   r‚   r„   s     r!   Úposition_at_endzIRBuilder.position_at_endñ   s!   € ð ˆŒÝ˜5Ô-Ñ.Ô.ˆŒˆˆr#   r   c                 ó6   — | j                              |¦  «        S )z§
        Append a basic block, with the given optional *name*, to the current
        function.  The current block is not changed.  The new block is returned.
        )rŠ   Úappend_basic_block)r   r   s     r!   r˜   zIRBuilder.append_basic_blockø   s   € ð
 Œ}×/Ò/°Ñ5Ô5Ð5r#   c                 óÐ   — | j         j                             |¦  «        }| j         j        |= | j         j        |k    rd| j         _        | j        |k    r| xj        dz  c_        dS dS )zRemove the given instruction.Nr<   )r�   r   rŽ   Ú
terminatorr‚   )r   r   Úidxs      r!   ÚremovezIRBuilder.removeÿ   sj   € àŒkÔ&×,Ò,¨UÑ3Ô3ˆØŒKÔ$ SÐ)ØŒ;Ô! UÒ*Ð*Ø%)ˆDŒKÔ"ØŒ<˜#ÒÐØˆLŒL˜AÑˆLŒLˆLˆLð Ðr#   c              #   óè   K  — | j         }|j        }|�|                      |¦  «         n|                      |¦  «         	 dV — |                      |¦  «         dS # |                      |¦  «         w xY w)z�
        A context manager which temporarily positions the builder at the end
        of basic block *bb* (but before any terminator).
        N)Úbasic_blockrš   r�   r–   )r   r   Ú	old_blockÚterms       r!   Ú
goto_blockzIRBuilder.goto_block  s‹   è è € ð Ô$ˆ	ØÔˆØÐØ× Ò  Ñ&Ô&Ð&Ð&à× Ò  Ñ'Ô'Ð'ð	,ØˆEˆEˆEà× Ò  Ñ+Ô+Ð+Ð+Ð+øˆD× Ò  Ñ+Ô+Ð+Ð+øøøs   ¿A ÁA1c              #   ó‚   K  — |                       | j        j        ¦  «        5  dV — ddd¦  «         dS # 1 swxY w Y   dS )z}
        A context manager which temporarily positions the builder at the
        end of the function's entry block.
        N)r¡   rŠ   Úentry_basic_blockr‡   s    r!   Úgoto_entry_blockzIRBuilder.goto_entry_block  sŒ   è è € ð �_Š_˜Tœ]Ô<Ñ=Ô=ð 	ð 	ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ¢4´8»8c              #   ó‚   K  — |                       |¦  «         |V — | j        j        €|                      |¦  «         d S d S r   )r–   rž   rš   Úbranch)r   ÚbbenterÚbbexits      r!   Ú_branch_helperzIRBuilder._branch_helper"  sO   è è € à×Ò˜WÑ%Ô%Ð%ØˆˆˆØÔÔ&Ð.Ø�KŠK˜ÑÔÐÐÐð /Ð.r#   c              #   ó¶  K  — | j         }|                      t          |j        d¦  «        ¬¦  «        }|                      t          |j        d¦  «        ¬¦  «        }|                      |||¦  «        }|�|                     |rddgnddg¦  «         |                      ||¦  «        5  |V — ddd¦  «         n# 1 swxY w Y   |                      |¦  «         dS )a¯  
        A context manager which sets up a conditional basic block based
        on the given predicate (a i1 value).  If the conditional block
        is not explicitly terminated, a branch will be added to the next
        block.
        If *likely* is given, its boolean value indicates whether the
        predicate is likely to be true or not, and metadata is issued
        for LLVM's optimizers to account for that.
        ú.ifr=   ú.endifNéc   r<   ©rž   r˜   r}   r   ÚcbranchÚset_weightsr©   r–   )r   ÚpredÚlikelyÚbbÚbbifÚbbendÚbrs          r!   Úif_thenzIRBuilder.if_then)  s"  è è € ð ÔˆØ×&Ò&­M¸"¼'À5Ñ,IÔ,IÐ&ÑJÔJˆØ×'Ò'­]¸2¼7ÀHÑ-MÔ-MÐ'ÑNÔNˆØ�\Š\˜$  eÑ,Ô,ˆØÐØ�NŠN fÐ9˜B ˜7˜7°1°b°'Ñ:Ô:Ð:à× Ò   uÑ-Ô-ð 	ð 	ØˆKˆKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜UÑ#Ô#Ð#Ð#Ð#s   Â(B9Â9B=Ã B=c              #   ó  K  — | j         }|                      t          |j        d¦  «        ¬¦  «        }|                      t          |j        d¦  «        ¬¦  «        }|                      t          |j        d¦  «        ¬¦  «        }|                      |||¦  «        }|�|                     |rddgnddg¦  «         |                      ||¦  «        }|                      ||¦  «        }	||	fV — |                      |¦  «         dS )a@  
        A context manager which sets up two conditional basic blocks based
        on the given predicate (a i1 value).
        A tuple of context managers is yield'ed.  Each context manager
        acts as a if_then() block.
        *likely* has the same meaning as in if_then().

        Typical use::
            with builder.if_else(pred) as (then, otherwise):
                with then:
                    # emit instructions for when the predicate is true
                with otherwise:
                    # emit instructions for when the predicate is false
        r«   r=   z.elser¬   Nr­   r<   r®   )
r   r±   r²   r³   r´   Úbbelserµ   r¶   ÚthenÚ	otherwises
             r!   Úif_elsezIRBuilder.if_else@  s  è è € ð  ÔˆØ×&Ò&­M¸"¼'À5Ñ,IÔ,IÐ&ÑJÔJˆØ×(Ò(­m¸B¼GÀWÑ.MÔ.MÐ(ÑNÔNˆØ×'Ò'­]¸2¼7ÀHÑ-MÔ-MÐ'ÑNÔNˆØ�\Š\˜$  fÑ-Ô-ˆØÐØ�NŠN fÐ9˜B ˜7˜7°1°b°'Ñ:Ô:Ð:à×"Ò" 4¨Ñ/Ô/ˆØ×'Ò'¨°Ñ6Ô6ˆ	à�IˆoÐÐÐà×Ò˜UÑ#Ô#Ð#Ð#Ð#r#   c                 ó®   — | j         �d|j        vr| j         |j        d<   | j        j                             | j        |¦  «         | xj        dz  c_        d S )NÚdbgr<   )rƒ   Úmetadatar�   r   Úinsertr‚   r�   s     r!   r   zIRBuilder._insert_  sW   € ØÔÐ*¨u¸E¼NÐ/JÐ/JØ$(Ô$7ˆEŒN˜5Ñ!ØŒÔ ×'Ò'¨¬°eÑ<Ô<Ð<ØˆŒ˜ÑˆŒˆˆr#   c                 ód   — | j         j        rJ ‚|                      |¦  «         || j         _        |S r   )r   Úis_terminatedr   rš   )r   r    s     r!   Ú_set_terminatorzIRBuilder._set_terminatore  s4   € Ø”:Ô+Ð+Ð+Ð+Ø�Š�TÑÔÐØ $ˆŒ
ÔØˆr#   Úshlc                 ó   — dS )zC
        Left integer shift:
            name = lhs << rhs
        Nr   ©r   r6   r7   r   s       r!   rÄ   zIRBuilder.shlo  ó   € € € r#   Úlshrc                 ó   — dS )zW
        Logical (unsigned) right integer shift:
            name = lhs >> rhs
        Nr   rÆ   s       r!   rÈ   zIRBuilder.lshrv  rÇ   r#   Úashrc                 ó   — dS )zX
        Arithmetic (signed) right integer shift:
            name = lhs >> rhs
        Nr   rÆ   s       r!   rÊ   zIRBuilder.ashr}  rÇ   r#   Úaddc                 ó   — dS )z@
        Integer addition:
            name = lhs + rhs
        Nr   rÆ   s       r!   rÌ   zIRBuilder.add„  rÇ   r#   Úfaddc                 ó   — dS )zG
        Floating-point addition:
            name = lhs + rhs
        Nr   rÆ   s       r!   rÎ   zIRBuilder.fadd‹  rÇ   r#   Úsubc                 ó   — dS )zC
        Integer subtraction:
            name = lhs - rhs
        Nr   rÆ   s       r!   rÐ   zIRBuilder.sub’  rÇ   r#   Úfsubc                 ó   — dS )zJ
        Floating-point subtraction:
            name = lhs - rhs
        Nr   rÆ   s       r!   rÒ   zIRBuilder.fsub™  rÇ   r#   Úmulc                 ó   — dS )zF
        Integer multiplication:
            name = lhs * rhs
        Nr   rÆ   s       r!   rÔ   zIRBuilder.mul   rÇ   r#   Úfmulc                 ó   — dS )zM
        Floating-point multiplication:
            name = lhs * rhs
        Nr   rÆ   s       r!   rÖ   zIRBuilder.fmul§  rÇ   r#   Úudivc                 ó   — dS )zI
        Unsigned integer division:
            name = lhs / rhs
        Nr   rÆ   s       r!   rØ   zIRBuilder.udiv®  rÇ   r#   Úsdivc                 ó   — dS )zG
        Signed integer division:
            name = lhs / rhs
        Nr   rÆ   s       r!   rÚ   zIRBuilder.sdivµ  rÇ   r#   Úfdivc                 ó   — dS )zG
        Floating-point division:
            name = lhs / rhs
        Nr   rÆ   s       r!   rÜ   zIRBuilder.fdiv¼  rÇ   r#   Úuremc                 ó   — dS )zJ
        Unsigned integer remainder:
            name = lhs % rhs
        Nr   rÆ   s       r!   rÞ   zIRBuilder.uremÃ  rÇ   r#   Úsremc                 ó   — dS )zH
        Signed integer remainder:
            name = lhs % rhs
        Nr   rÆ   s       r!   rà   zIRBuilder.sremÊ  rÇ   r#   Úfremc                 ó   — dS )zH
        Floating-point remainder:
            name = lhs % rhs
        Nr   rÆ   s       r!   râ   zIRBuilder.fremÑ  rÇ   r#   Úorc                 ó   — dS )zB
        Bitwise integer OR:
            name = lhs | rhs
        Nr   rÆ   s       r!   Úor_zIRBuilder.or_Ø  rÇ   r#   Úandc                 ó   — dS )zC
        Bitwise integer AND:
            name = lhs & rhs
        Nr   rÆ   s       r!   Úand_zIRBuilder.and_ß  rÇ   r#   Úxorc                 ó   — dS )zC
        Bitwise integer XOR:
            name = lhs ^ rhs
        Nr   rÆ   s       r!   rê   zIRBuilder.xoræ  rÇ   r#   Úsaddc                 ó   — dS )zn
        Signed integer addition with overflow:
            name = {result, overflow bit} = lhs + rhs
        Nr   rÆ   s       r!   Úsadd_with_overflowzIRBuilder.sadd_with_overflowí  rÇ   r#   Úsmulc                 ó   — dS )zt
        Signed integer multiplication with overflow:
            name = {result, overflow bit} = lhs * rhs
        Nr   rÆ   s       r!   Úsmul_with_overflowzIRBuilder.smul_with_overflowô  rÇ   r#   Ússubc                 ó   — dS )zq
        Signed integer subtraction with overflow:
            name = {result, overflow bit} = lhs - rhs
        Nr   rÆ   s       r!   Ússub_with_overflowzIRBuilder.ssub_with_overflowû  rÇ   r#   Úuaddc                 ó   — dS )zp
        Unsigned integer addition with overflow:
            name = {result, overflow bit} = lhs + rhs
        Nr   rÆ   s       r!   Úuadd_with_overflowzIRBuilder.uadd_with_overflow  rÇ   r#   Úumulc                 ó   — dS )zv
        Unsigned integer multiplication with overflow:
            name = {result, overflow bit} = lhs * rhs
        Nr   rÆ   s       r!   Úumul_with_overflowzIRBuilder.umul_with_overflow	  rÇ   r#   Úusubc                 ó   — dS )zs
        Unsigned integer subtraction with overflow:
            name = {result, overflow bit} = lhs - rhs
        Nr   rÆ   s       r!   Úusub_with_overflowzIRBuilder.usub_with_overflow  rÇ   r#   c                 óô   — t          |j        t          j        ¦  «        r(t	          j        |j        d|j        j        z  ¦  «        }nt	          j        |j        d¦  «        }|                      |||¬¦  «        S )zG
        Bitwise integer complement:
            name = ~value
        )éÿÿÿÿrÿ   r=   )r>   r   r   Ú
VectorTyper   ÚConstantÚcountrê   )r   Úvaluer   r7   s       r!   Únot_zIRBuilder.not_  se   € õ
 �e”j¥%Ô"2Ñ3Ô3ð 	2Ý”/ %¤*¨e°e´jÔ6FÑ.FÑGÔGˆCˆCå”/ %¤*¨bÑ1Ô1ˆCØ�xŠx˜˜s¨ˆxÑ.Ô.Ð.r#   c                 ób   — |                       t          j        |j        d¦  «        ||¬¦  «        S )z=
        Integer negative:
            name = -value
        r   r=   )rÐ   r   r  r   )r   r  r   s      r!   ÚnegzIRBuilder.neg&  s*   € ð
 �xŠx�œ¨¬
°AÑ6Ô6¸ÀDˆxÑIÔIÐIr#   Úfnegr   c                 ó   — dS )zB
        Floating-point negative:
            name = -arg
        Nr   )r   r   r   r   s       r!   r  zIRBuilder.fneg-  rÇ   r#   c                 óÞ   — 	 t           |         }n!# t          $ r t          d|›d�¦  «        ‚w xY w|dvr||z   }t          j        | j        ||||¬¦  «        }|                      |¦  «         |S )Nzinvalid comparison z	 for icmp)r   r   r=   )Ú_CMP_MAPÚKeyErrorr5   r   Ú	ICMPInstrr   r   )r   ÚprefixÚcmpopr6   r7   r   Úopr   s           r!   Ú_icmpzIRBuilder._icmp8  s‘   € ð	JÝ˜%”ˆBˆBøÝð 	Jð 	Jð 	JÝ�*ÀÀÀÐHÑIÔIÐIð	Jøøøà˜Ð$Ð$Ø˜"‘ˆBÝÔ& t¤z°2°s¸CÀdÐKÑKÔKˆØ�Š�UÑÔÐØˆs   ‚ �.c                 ó4   — |                       d||||¦  «        S )zŒ
        Signed integer comparison:
            name = lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>='
        Ús©r  ©r   r  r6   r7   r   s        r!   Úicmp_signedzIRBuilder.icmp_signedC  ó   € ð �zŠz˜#˜u c¨3°Ñ5Ô5Ð5r#   c                 ó4   — |                       d||||¦  «        S )z›
        Unsigned integer (or pointer) comparison:
            name = lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>='
        Úur  r  s        r!   Úicmp_unsignedzIRBuilder.icmp_unsignedL  r  r#   c                 ó¦   — |t           v rdt           |         z   }n|}t          j        | j        |||||¬¦  «        }|                      |¦  «         |S )z¢
        Floating-point ordered comparison:
            name = lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>=', 'ord', 'uno'
        Úo©r   r   ©r
  r   Ú	FCMPInstrr   r   ©r   r  r6   r7   r   r   r  r   s           r!   Úfcmp_orderedzIRBuilder.fcmp_orderedU  óa   € ð •HÐÐØ•x ”Ñ&ˆBˆBàˆBÝÔ&ØŒJ˜˜C ¨4°uð>ñ >ô >ˆà�Š�UÑÔÐØˆr#   c                 ó¦   — |t           v rdt           |         z   }n|}t          j        | j        |||||¬¦  «        }|                      |¦  «         |S )z¤
        Floating-point unordered comparison:
            name = lhs <cmpop> rhs

        where cmpop can be '==', '!=', '<', '<=', '>', '>=', 'ord', 'uno'
        r  r  r  r  s           r!   Úfcmp_unorderedzIRBuilder.fcmp_unorderede  r!  r#   c                 ón   — t          j        | j        |||||¬¦  «        }|                      |¦  «         |S )zN
        Ternary select operator:
            name = cond ? lhs : rhs
        r  )r   ÚSelectInstrr   r   )r   Úcondr6   r7   r   r   r   s          r!   ÚselectzIRBuilder.selectu  sA   € õ
 Ô(¨¬°T¸3ÀÈ$Ø/4ð6ñ 6ô 6ˆà�Š�UÑÔÐØˆr#   Útruncc                 ó   — dS )z_
        Truncating integer downcast to a smaller type:
            name = (typ) value
        Nr   ©r   r  rs   r   s       r!   r(  zIRBuilder.truncƒ  rÇ   r#   Úzextc                 ó   — dS )z`
        Zero-extending integer upcast to a larger type:
            name = (typ) value
        Nr   r*  s       r!   r+  zIRBuilder.zextŠ  rÇ   r#   Úsextc                 ó   — dS )z`
        Sign-extending integer upcast to a larger type:
            name = (typ) value
        Nr   r*  s       r!   r-  zIRBuilder.sext‘  rÇ   r#   Úfptruncc                 ó   — dS )z`
        Floating-point downcast to a less precise type:
            name = (typ) value
        Nr   r*  s       r!   r/  zIRBuilder.fptrunc˜  rÇ   r#   Úfpextc                 ó   — dS )z^
        Floating-point upcast to a more precise type:
            name = (typ) value
        Nr   r*  s       r!   r1  zIRBuilder.fpextŸ  rÇ   r#   Úbitcastc                 ó   — dS )zZ
        Pointer cast to a different pointer type:
            name = (typ) value
        Nr   r*  s       r!   r3  zIRBuilder.bitcast¦  rÇ   r#   Úaddrspacecastc                 ó   — dS )z[
        Pointer cast to a different address space:
            name = (typ) value
        Nr   r*  s       r!   r5  zIRBuilder.addrspacecast­  rÇ   r#   Úfptouic                 ó   — dS )z\
        Convert floating-point to unsigned integer:
            name = (typ) value
        Nr   r*  s       r!   r7  zIRBuilder.fptoui´  rÇ   r#   Úuitofpc                 ó   — dS )z\
        Convert unsigned integer to floating-point:
            name = (typ) value
        Nr   r*  s       r!   r9  zIRBuilder.uitofp»  rÇ   r#   Úfptosic                 ó   — dS )zZ
        Convert floating-point to signed integer:
            name = (typ) value
        Nr   r*  s       r!   r;  zIRBuilder.fptosiÂ  rÇ   r#   Úsitofpc                 ó   — dS )zZ
        Convert signed integer to floating-point:
            name = (typ) value
        Nr   r*  s       r!   r=  zIRBuilder.sitofpÉ  rÇ   r#   Úptrtointc                 ó   — dS )zÙ
        Cast pointer to integer:
            name = (typ) value

        Warning: Since LLVM 22, this is affected by changes in pointer
        provenance behavior. See docs :ref:`llvm22-pointer-provenance`.
        Nr   r*  s       r!   r?  zIRBuilder.ptrtointÐ  rÇ   r#   Úinttoptrc                 ó   — dS )zÙ
        Cast integer to pointer:
            name = (typ) value

        Warning: Since LLVM 22, this is affected by changes in pointer
        provenance behavior. See docs :ref:`llvm22-pointer-provenance`.
        Nr   r*  s       r!   rA  zIRBuilder.inttoptrÚ  rÇ   r#   c                 óL  — |€not          |t          j        t          j        f¦  «        r"t          |j        t
          j        ¦  «        sJ ‚n't          j        t          j        d¦  «        |¦  «        }t          j        | j	        |||¦  «        }|  
                    |¦  «         |S )zl
        Stack-allocate a slot for *size* elements of the given type.
        (default one element)
        Né    )r>   r   ÚValuer  r   r   r?   r   ÚAllocaInstrr   r   )r   rs   Úsizer   Úals        r!   ÚallocazIRBuilder.allocaè  s�   € ð
 ˆ<ØÝ˜�vœ|­V¬_Ð=Ñ>Ô>ð 	<Ý˜dœi­¬Ñ7Ô7Ð7Ð7Ð7Ð7õ ”?¥5¤=°Ñ#4Ô#4°dÑ;Ô;ˆDåÔ% d¤j°#°t¸TÑBÔBˆØ�Š�RÑÔÐØˆ	r#   c                 ó  — t          |j        t          j        ¦  «        s(d}t	          ||j        t          |¦  «        fz  ¦  «        ‚t          j        | j        |||¬¦  «        }||_	        |  
                    |¦  «         |S ©zf
        Load value from pointer, with optional guaranteed alignment:
            name = *ptr
        z5cannot load from value of type %s (%r): not a pointer)rs   )r>   r   r   ÚPointerTyper@   Ústrr   Ú	LoadInstrr   Úalignr   )r   Úptrr   rO  rs   ÚmsgÚlds          r!   ÚloadzIRBuilder.loadú  sy   € õ
 ˜#œ(¥EÔ$5Ñ6Ô6ð 	8ØIˆCÝ˜C 3¤8­S°©X¬XÐ"6Ñ6Ñ7Ô7Ð7ÝÔ# D¤J°°T¸sÐCÑCÔCˆØˆŒØ�Š�RÑÔÐØˆ	r#   c                 ó„  — t          |j        t          j        ¦  «        s(d}t	          ||j        t          |¦  «        fz  ¦  «        ‚|j        j        s5|j        j        |j        k    r t	          d|j        ›d|j        ›d�¦  «        ‚t          j	        | j
        ||¦  «        }||_        |                      |¦  «         |S ©ze
        Store value to pointer, with optional guaranteed alignment:
            *ptr = name
        z4cannot store to value of type %s (%r): not a pointerzcannot store z to z: mismatching types)r>   r   r   rL  r@   rM  Ú	is_opaqueÚpointeer   Ú
StoreInstrr   rO  r   )r   r  rP  rO  rQ  Ústs         r!   ÚstorezIRBuilder.store  s¼   € õ
 ˜#œ(¥EÔ$5Ñ6Ô6ð 	8ØHˆCÝ˜C 3¤8­S°©X¬XÐ"6Ñ6Ñ7Ô7Ð7ØŒxÔ!ð 	6 c¤hÔ&6¸%¼*Ò&DÐ&DÝ�)Ø$œz˜z˜z¨3¬8¨8¨8ð5ñ 6ô 6ð 6åÔ$ T¤Z°¸Ñ<Ô<ˆØˆŒØ�Š�RÑÔÐØˆ	r#   c                 óü   — t          |j        t          j        ¦  «        s(d}t	          ||j        t          |¦  «        fz  ¦  «        ‚t          j        | j        |||||¬¦  «        }|  	                    |¦  «         |S rK  )
r>   r   r   rL  r@   rM  r   ÚLoadAtomicInstrr   r   )r   rP  ÚorderingrO  r   rs   rQ  rR  s           r!   Úload_atomiczIRBuilder.load_atomic  s}   € õ
 ˜#œ(¥EÔ$5Ñ6Ô6ð 	8ØIˆCÝ˜C 3¤8­S°©X¬XÐ"6Ñ6Ñ7Ô7Ð7ÝÔ)ØŒJ˜˜X u¨d¸ð=ñ =ô =ˆà�Š�RÑÔÐØˆ	r#   c                 ób  — t          |j        t          j        ¦  «        s(d}t	          ||j        t          |¦  «        fz  ¦  «        ‚|j        j        |j        k    r t	          d|j        ›d|j        ›d�¦  «        ‚t          j        | j	        ||||¦  «        }|  
                    |¦  «         |S rU  )r>   r   r   rL  r@   rM  rW  r   ÚStoreAtomicInstrr   r   )r   r  rP  r]  rO  rQ  rY  s          r!   Ústore_atomiczIRBuilder.store_atomic$  s²   € õ
 ˜#œ(¥EÔ$5Ñ6Ô6ð 	8ØHˆCÝ˜C 3¤8­S°©X¬XÐ"6Ñ6Ñ7Ô7Ð7ØŒ8Ô˜uœzÒ)Ð)Ý�)Ø$œz˜z˜z¨3¬8¨8¨8ð5ñ 6ô 6ð 6åÔ*ØŒJ˜˜s H¨eñ5ô 5ˆà�Š�RÑÔÐØˆ	r#   c                 óh   — t          j        | j        d||¦  «        }|                      |¦  «         |S )zF
        Create a switch-case with a single *default* target.
        Úswitch)r   ÚSwitchInstrr   rÃ   )r   r  ÚdefaultÚswts       r!   rc  zIRBuilder.switch8  s5   € õ Ô& t¤z°8¸UÀGÑLÔLˆØ×Ò˜SÑ!Ô!Ð!Øˆ
r#   c                 óh   — t          j        | j        d|g¦  «        }|                      |¦  «         |S )z3
        Unconditional branch to *target*.
        r¶   ©r   ÚBranchr   rÃ   )r   Útargetr¶   s      r!   r¦   zIRBuilder.branch@  s5   € õ Ô  ¤¨T°F°8Ñ<Ô<ˆØ×Ò˜RÑ Ô Ð Øˆ	r#   c                 ól   — t          j        | j        d|||g¦  «        }|                      |¦  «         |S )zV
        Conditional branch to *truebr* if *cond* is true, else to *falsebr*.
        r¶   )r   ÚConditionalBranchr   rÃ   )r   r&  ÚtruebrÚfalsebrr¶   s        r!   r¯   zIRBuilder.cbranchH  sA   € õ Ô+¨D¬J¸Ø-1°6¸7Ð,CñEô Eˆà×Ò˜RÑ Ô Ð Øˆ	r#   c                 óf   — t          j        | j        d|¦  «        }|                      |¦  «         |S )z3
        Indirect branch to target *addr*.
        Ú
indirectbr)r   ÚIndirectBranchr   rÃ   )r   Úaddrr¶   s      r!   Úbranch_indirectzIRBuilder.branch_indirectQ  s3   € õ Ô(¨¬°\À4ÑHÔHˆØ×Ò˜RÑ Ô Ð Øˆ	r#   c                 ó\   — |                       t          j        | j        d¦  «        ¦  «        S )z7
        Return from function without a value.
        zret void©rÃ   r   ÚRetr   r‡   s    r!   Úret_voidzIRBuilder.ret_voidY  s.   € ð ×#Ò#ÝÔ˜TœZ¨Ñ4Ô4ñ6ô 6ð 	6r#   c                 ó^   — |                       t          j        | j        d|¦  «        ¦  «        S )z>
        Return from function with the given *value*.
        rJ   ru  )r   r  s     r!   rJ   zIRBuilder.ret`  s0   € ð ×#Ò#ÝÔ˜TœZ¨°Ñ6Ô6ñ8ô 8ð 	8r#   c                 óh   — t          j        | j        d|g¦  «        }|                      |¦  «         |S )z0
        Resume an in-flight exception.
        Úresumerh  )r   Ú
landingpadr¶   s      r!   rz  zIRBuilder.resumeg  s5   € õ Ô  ¤¨X¸
°|ÑDÔDˆØ×Ò˜RÑ Ô Ð Øˆ	r#   Fc	                 ót   — t          j        | j        ||||||||¬¦	  «	        }	|                      |	¦  «         |	S )zP
        Call function *fn* with *args*:
            name = fn(args...)
        )r   ÚcconvÚtailÚfastmathÚattrsÚ	arg_attrs)r   Ú	CallInstrr   r   )
r   r)   Úargsr   r}  r~  r  r€  r�  Úinsts
             r!   rE   zIRBuilder.callq  sM   € õ Ô% d¤j°"°dÀØ,1¸ÀxØ,1¸YðHñ Hô Hˆð 	�Š�TÑÔÐØˆr#   c                 ó^   — t          j        ||||¦  «        }|                      |||¦  «        S )z#
        Inline assembler.
        )r   Ú	InlineAsmrE   )r   ÚftypeÚasmÚ
constraintrƒ  Úside_effectr   s          r!   rˆ  zIRBuilder.asm}  s0   € õ Ô$ U¨C°¸[ÑIÔIˆØ�yŠy˜˜d DÑ)Ô)Ð)r#   c                 óf   — t          j        |g ¦  «        }|                      |dd|z  g d|¦  «        S )zo
        Load a register value into an LLVM value.
          Example: v = load_reg(IntType(32), "eax")
        r   z={%s}F)r   rB   rˆ  )r   Úreg_typeÚreg_namer   r‡  s        r!   Úload_regzIRBuilder.load_reg„  s7   € õ
 Ô" 8¨RÑ0Ô0ˆØ�xŠx˜˜r 7¨XÑ#5°r¸5À$ÑGÔGÐGr#   c                 óŒ   — t          j        t          j        ¦   «         |g¦  «        }|                      |dd|z  |gd|¦  «        S )z“
        Store an LLVM value inside a register
        Example:
          store_reg(Constant(IntType(32), 0xAAAAAAAA), IntType(32), "eax")
        r   z{%s}T)r   rB   ÚVoidTyperˆ  )r   r  rŒ  r�  r   r‡  s         r!   Ú	store_regzIRBuilder.store_regŒ  sC   € õ Ô"¥5¤>Ñ#3Ô#3°h°ZÑ@Ô@ˆØ�xŠx˜˜r 6¨HÑ#4°u°g¸tÀTÑJÔJÐJr#   c
                 óv   — t          j        | j        |||||||||	¬¦
  «
        }
|                      |
¦  «         |
S )N)r   r}  r  r€  r�  )r   ÚInvokeInstrr   rÃ   )r   r)   rƒ  Ú	normal_toÚ	unwind_tor   r}  r  r€  r�  r„  s              r!   ÚinvokezIRBuilder.invoke•  sM   € åÔ'¨¬
°B¸¸iØ(1¸ÀEØ19ÀØ2;ð=ñ =ô =ˆð 	×Ò˜TÑ"Ô"Ð"Øˆr#   c                 ón   — t          j        | j        |||||¬¦  «        }|                      |¦  «         |S )zo
        Compute effective address (getelementptr):
            name = getelementptr ptr, <indices...>
        )Úinboundsr   Úsource_etype)r   ÚGEPInstrr   r   )r   rP  Úindicesr˜  r   r™  r   s          r!   ÚgepzIRBuilder.gep   sG   € õ
 Ô% d¤j°#°wØ/7¸dØ3?ðAñ Aô Aˆð 	�Š�UÑÔÐØˆr#   c                 ój   — t          j        | j        |||¬¦  «        }|                      |¦  «         |S )z4
        Returns the value at position idx.
        r=   )r   ÚExtractElementr   r   )r   Úvectorr›   r   r   s        r!   Úextract_elementzIRBuilder.extract_element­  s6   € õ Ô+¨D¬J¸ÀÈ$ÐOÑOÔOˆØ�Š�UÑÔÐØˆr#   c                 ól   — t          j        | j        ||||¬¦  «        }|                      |¦  «         |S )z•
        Returns vector with vector[idx] replaced by value.
        The result is undefined if the idx is larger or equal the vector length.
        r=   )r   ÚInsertElementr   r   )r   rŸ  r  r›   r   r   s         r!   Úinsert_elementzIRBuilder.insert_elementµ  s?   € õ
 Ô*¨4¬:°v¸uÀcØ04ð6ñ 6ô 6ˆà�Š�UÑÔÐØˆr#   c                 ól   — t          j        | j        ||||¬¦  «        }|                      |¦  «         |S )a  
        Constructs a permutation of elements from *vector1* and *vector2*.
        Returns a new vector in the same length of *mask*.

        * *vector1* and *vector2* must have the same element type.
        * *mask* must be a constant vector of integer types.
        r=   )r   ÚShuffleVectorr   r   )r   Úvector1Úvector2Úmaskr   r   s         r!   Úshuffle_vectorzIRBuilder.shuffle_vector¿  s?   € õ Ô*¨4¬:°wÀÈØ04ð6ñ 6ô 6ˆà�Š�UÑÔÐØˆr#   c                 ó¨   — t          |t          t          f¦  «        s|g}t          j        | j        |||¬¦  «        }|                      |¦  «         |S )z=
        Extract member number *idx* from aggregate.
        r=   )r>   ÚtupleÚlistr   ÚExtractValuer   r   )r   Úaggr›   r   r   s        r!   Úextract_valuezIRBuilder.extract_valueÎ  sS   € õ ˜#¥¥t˜}Ñ-Ô-ð 	Ø�%ˆCÝÔ)¨$¬*°c¸3ÀTÐJÑJÔJˆØ�Š�UÑÔÐØˆr#   c                 óª   — t          |t          t          f¦  «        s|g}t          j        | j        ||||¬¦  «        }|                      |¦  «         |S )zI
        Insert *value* into member number *idx* from aggregate.
        r=   )r>   r«  r¬  r   ÚInsertValuer   r   )r   r®  r  r›   r   r   s         r!   Úinsert_valuezIRBuilder.insert_valueØ  sU   € õ ˜#¥¥t˜}Ñ-Ô-ð 	Ø�%ˆCÝÔ(¨¬°S¸%ÀÈ4ÐPÑPÔPˆØ�Š�UÑÔÐØˆr#   c                 ój   — t          j        | j        |||¬¦  «        }|                      |¦  «         |S )Nr  )r   ÚPhiInstrr   r   )r   rs   r   r   r„  s        r!   ÚphizIRBuilder.phiä  s4   € ÝÔ$ T¤Z°¸4ÀuÐMÑMÔMˆØ�Š�TÑÔÐØˆr#   c                 ób   — t          j        | j        ¦  «        }|                      |¦  «         |S r   )r   ÚUnreachabler   rÃ   )r   r„  s     r!   ÚunreachablezIRBuilder.unreachableë  s-   € ÝÔ'¨¬
Ñ3Ô3ˆØ×Ò˜TÑ"Ô"Ð"Øˆr#   c                 ón   — t          j        | j        |||||¬¦  «        }|                      |¦  «         |S )Nr=   )r   Ú	AtomicRMWr   r   )r   r  rP  rr   r]  r   r„  s          r!   Ú
atomic_rmwzIRBuilder.atomic_rmwð  s?   € ÝÔ%ØŒJ˜˜C  h°Tð;ñ ;ô ;ˆà�Š�TÑÔÐØˆr#   c           	      ó|   — |€|n|}t          j        | j        ||||||¬¦  «        }|                      |¦  «         |S )a8  
        Atomic compared-and-set:
            atomic {
                old = *ptr
                success = (old == cmp)
                if (success)
                    *ptr = val
                }
            name = { old, success }

        If failordering is `None`, the value of `ordering` is used.
        Nr=   )r   ÚCmpXchgr   r   )r   rP  Úcmprr   r]  Úfailorderingr   r„  s           r!   ÚcmpxchgzIRBuilder.cmpxchgö  sQ   € ð $0Ð#7�x�x¸\ˆÝÔ# D¤J°°S¸#¸xØ$0°tð=ñ =ô =ˆà�Š�TÑÔÐØˆr#   c                 óh   — t          j        | j        |||¦  «        }|                      |¦  «         |S r   )r   ÚLandingPadInstrr   r   )r   rs   r   Úcleanupr„  s        r!   r{  zIRBuilder.landingpad	  s1   € ÝÔ+¨D¬J¸¸TÀ7ÑKÔKˆØ�Š�TÑÔÐØˆr#   c                 ód   — | j                              d¦  «        }|                      ||g¦  «        S )z?
        Optimizer hint: assume *cond* is always true.
        zllvm.assume)rA   rD   rE   )r   r&  r)   s      r!   ÚassumezIRBuilder.assume  s/   € ð Œ[×*Ò*¨=Ñ9Ô9ˆØ�yŠy˜˜d˜VÑ$Ô$Ð$r#   c                 ój   — t          j        | j        |||¬¦  «        }|                      |¦  «         |S )z¢
        Add a memory barrier, preventing certain reorderings of load and/or
        store accesses with
        respect to other processors and devices.
        r=   )r   ÚFencer   r   )r   r]  Útargetscoper   r„  s        r!   ÚfencezIRBuilder.fence  s6   € õ Ô! $¤*¨h¸È$ÐOÑOÔOˆØ�Š�TÑÔÐØˆr#   c                 ód   — t          j        | j        |¦  «        }|                      |¦  «         |S )a  
        Puts a single-line comment into the generated IR. This will be ignored
        by LLVM, but can be useful for debugging the output of a compiler. Adds
        a comment to the source file.

        * *text* is a string that does not contain new line characters.
        )r   ÚCommentr   r   )r   Útextr„  s      r!   ÚcommentzIRBuilder.comment  s/   € õ Ô# D¤J°Ñ5Ô5ˆØ�Š�TÑÔÐØˆr#   z
llvm.bswapc                 ó   — dS )zv
        Used to byte swap integer values with an even number of bytes (positive
        multiple of 16 bits)
        Nr   ©r   r&  s     r!   ÚbswapzIRBuilder.bswap+  rÇ   r#   zllvm.bitreversec                 ó   — dS )zp
        Reverse the bitpattern of an integer value; for example 0b10110110
        becomes 0b01101101.
        Nr   rÏ  s     r!   Ú
bitreversezIRBuilder.bitreverse2  rÇ   r#   z
llvm.ctpopc                 ó   — dS )z;
        Counts the number of bits set in a value.
        Nr   rÏ  s     r!   ÚctpopzIRBuilder.ctpop9  rÇ   r#   z	llvm.ctlzc                 ó   — dS )z€
        Counts leading zero bits in *value*. Boolean *flag* indicates whether
        the result is defined for ``0``.
        Nr   ©r   r&  re   s      r!   ÚctlzzIRBuilder.ctlz?  rÇ   r#   z	llvm.cttzc                 ó   — dS )z�
        Counts trailing zero bits in *value*. Boolean *flag* indicates whether
        the result is defined for ``0``.
        Nr   rÖ  s      r!   ÚcttzzIRBuilder.cttzF  rÇ   r#   zllvm.fmac                 ó   — dS )z;
        Perform the fused multiply-add operation.
        Nr   )r   rk   rl   rm   s       r!   ÚfmazIRBuilder.fmaM  rÇ   r#   c                 óŒ  — |st          d¦  «        ‚t          |t          j        t          j        f¦  «        st          d|z  ¦  «        ‚t          |j        t          j        ¦  «        r|j        j        dk    st          d|j        z  ¦  «        ‚d}| j         	                    ||g¦  «        }|  
                    ||g|¦  «        S )z:
        Convert from an i16 to the given FP type
        zexpected a float return typer]   é   zexpected an i16 type, got %szllvm.convert.from.fp16)r@   r>   r   r^   r_   r   r?   rd   rA   rD   rE   )r   rk   Útor   r    r)   s         r!   Úconvert_from_fp16zIRBuilder.convert_from_fp16S  s½   € ð ð 	<ÝÐ:Ñ;Ô;Ð;Ý˜"�uœµÔ0@ÐAÑBÔBð 	BÝÐ;¸bÑ@ÑAÔAÐAÝ˜1œ6¥5¤=Ñ1Ô1ð 	E°a´f´lÀbÒ6HÐ6HÝÐ:¸Q¼VÑCÑDÔDÐDà)ˆØŒ[×*Ò*¨6°B°4Ñ8Ô8ˆØ�yŠy˜˜a˜S $Ñ'Ô'Ð'r#   zllvm.convert.to.fp16c                 ó   — dS )z7
        Convert the given FP number to an i16
        Nr   )r   rk   s     r!   Úconvert_to_fp16zIRBuilder.convert_to_fp16b  rÇ   r#   r   rK   r$   )Nr   )r   NN)r   N)r   NFr   r   N)r   Nr   r   N)Fr   N)r   F)uÚ__name__Ú
__module__Ú__qualname__r…   Úpropertyr   rž   rŠ   rA   r�   r’   r”   r–   r˜   rœ   Ú
contextlibÚcontextmanagerr¡   r¤   r©   r·   r¼   r   rÃ   r8   rÄ   rÈ   rÊ   rÌ   rÎ   rÐ   rÒ   rÔ   rÖ   rØ   rÚ   rÜ   rÞ   rà   râ   ræ   ré   rê   rM   rî   rñ   rô   r÷   rú   rý   r  r  r-   r  r  r  r  r   r#  r'  rt   r(  r+  r-  r/  r1  r3  r5  r7  r9  r;  r=  r?  rA  rI  rS  rZ  r^  ra  rc  r¦   r¯   rs  rw  rJ   rz  rE   rˆ  rŽ  r‘  r–  rœ  r   r£  r©  r¯  r²  rµ  r¸  r»  rÀ  r{  rÅ  rÉ  rÍ  rY   rÐ  rÒ  rÔ  rf   r×  rÙ  rn   rÛ  rß  r`   rá  r   r#   r!   r   r   ½   sà  € € € € € ð#ð #ð #ð #ð
 ðð ñ „Xðð €Kàð!ð !ñ „Xð!ð ð(ð (ñ „Xð(ð=ð =ð =ðAð Að Aðð ð ð/ð /ð /ð6ð 6ð 6ð 6ðð ð ð Ôð,ð ,ñ Ôð,ð  Ôðð ñ Ôðð Ôð ð  ñ Ôð ð Ôð$ð $ð $ñ Ôð$ð, Ôð$ð $ð $ñ Ôð$ð<ð ð ðð ð ð €VˆE�]„]ðð ð ñ „]ðð €VˆF�^„^ðð ð ñ „^ðð €VˆF�^„^ðð ð ñ „^ðð €VˆE�]„]ðð ð ñ „]ðð €VˆF�^„^ðð ð ñ „^ðð €VˆE�]„]ðð ð ñ „]ðð €VˆF�^„^ðð ð ñ „^ðð €VˆE�]„]ðð ð ñ „]ðð €VˆF�^„^ðð ð ñ „^ðð €VˆF�^„^ðð ð ñ „^ðð €VˆF�^„^ðð ð ñ „^ðð €VˆF�^„^ðð ð ñ „^ðð €VˆF�^„^ðð ð ñ „^ðð €VˆF�^„^ðð ð ñ „^ðð €VˆF�^„^ðð ð ñ „^ðð €VˆD�\„\ðð ð ñ „\ðð €VˆE�]„]ðð ð ñ „]ðð €VˆE�]„]ðð ð ñ „]ðð Ð˜&Ñ!Ô!ðð ð ñ "Ô!ðð Ð˜&Ñ!Ô!ðð ð ñ "Ô!ðð Ð˜&Ñ!Ô!ðð ð ñ "Ô!ðð Ð˜&Ñ!Ô!ðð ð ñ "Ô!ðð Ð˜&Ñ!Ô!ðð ð ñ "Ô!ðð Ð˜&Ñ!Ô!ðð ð ñ "Ô!ðð	/ð 	/ð 	/ð 	/ðJð Jð Jð Jð €Uˆ6�]„]ðð ð ñ „]ðð	ð 	ð 	ð6ð 6ð 6ð 6ð6ð 6ð 6ð 6ðð ð ð ð ð ð ð ð ð ð ð ð €WˆWÑÔðð ð ñ Ôðð €WˆV�_„_ðð ð ñ „_ðð €WˆV�_„_ðð ð ñ „_ðð €WˆYÑÔðð ð ñ Ôðð €WˆWÑÔðð ð ñ Ôðð €WˆYÑÔðð ð ñ Ôðð €Wˆ_ÑÔðð ð ñ Ôðð €WˆXÑÔðð ð ñ Ôðð €WˆXÑÔðð ð ñ Ôðð €WˆXÑÔðð ð ñ Ôðð €WˆXÑÔðð ð ñ Ôðð €WˆZÑÔðð ð ñ Ôðð €WˆZÑÔðð ð ñ Ôððð ð ð ð$ð ð ð ðð ð ð ð ð ð ð ðð ð ð(ð ð ðð ð ðð ð ðð ð ð6ð 6ð 6ð8ð 8ð 8ðð ð ð HJØ!%ð
ð 
ð 
ð 
ð*ð *ð *ð *ðHð Hð Hð HðKð Kð Kð Kð FJðð ð ð ð	ð 	ð 	ð 	ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð
ð ð ð ðð ð ð ð&ð ð ð ð
%ð %ð %ðð ð ð ð
ð 
ð 
ð Ð˜,Ñ'Ô'ðð ñ (Ô'ðð ÐÐ+Ñ,Ô,ðð ñ -Ô,ðð Ð˜,Ñ'Ô'ðð ñ (Ô'ðð
  Ð Ñ,Ô,ðð ñ -Ô,ðð  Ð Ñ,Ô,ðð ñ -Ô,ðð Ð�jÑ!Ô!ðð ñ "Ô!ðð
(ð (ð (ð (ð ÐÐ2Ñ3Ô3ðð ñ 4Ô3ðð ð r#   r   )ræ  r&   Úllvmlite.irr   r   r   r
  ÚInstructionr-   r8   rM   rR   rY   r`   rf   rn   Ú	CastInstrrt   r}   Úobjectr   r   r#   r!   ú<module>rì     sp  ðØ Ð Ð Ð Ø Ð Ð Ð à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ð 
Ø	Ø
Ø
Ø
Ø
ðð €ð #Ô.ð 
ð 
ð 
ð 
ð $Ô/ð ð ð ð ð  &2Ô%=ð ð ð ð ð2 $Ô/ð 
ð 
ð 
ð 
ðð ð ð ð ð ðð ð ð(ð ð ð0 %Ô.ð ð ð ð ðð ð ð ið ið ið ið i�ñ iô ið ið ið ir#   