Ë
    æÿæiïì ã                   ó¨  — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddl	mZ ddl	mZ  e
j                  d«      Z e
j                  d«      Z e
j                  d	«      Z e
j                  d
«      Z e
j                  d«      Z e
j(                  «       Z e
j,                  «       Z e
j0                  «       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!d„ Z" G d„ de«      Z# G d„ d e«      Z$ G d!„ d"e«      Z%e&d#k(  r ejN                  «        yy)$z
IR Construction Tests
é    Né   )ÚTestCase)Úir)Úbinding)Úir_layer_typed_pointers_enabledé   é   é    é@   c                   ót   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zdd„Z	dd	„Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestBasez!
    Utilities for IR tests.
    c                 ó’   — d„ }dj                  t        ||«      «      }t        j                  dd|«      }| j	                  ||«       y)zr
        Assert *pattern* is in *text*, ignoring any whitespace differences
        (including newlines).
        c                 óP   — | j                  «       s| j                  «       sd| z   S | S )NÚ\)ÚisalnumÚisspace)Úcs    úk/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/llvmlite/tests/test_ir.pyÚescapez%TestBase.assertInText.<locals>.escape'   s!   € Ø—9‘9”; q§y¡y¤{Ø˜a‘x�ØˆHó    Ú z\s+z\\s*N)ÚjoinÚmapÚreÚsubÚassertRegex)ÚselfÚpatternÚtextr   Úregexs        r   ÚassertInTextzTestBase.assertInText!   s@   € ò	ð
 —'‘'œ#˜f gÓ.Ó/ˆÜ—‘�v˜w¨Ó0ˆØ×Ñ˜˜uÕ%r   c                 óš   — t        |«      j                  «       D �cg c]  }|j                  «       ‘Œ }}| j                  |«       y c c}w ©N)ÚstrÚ
splitlinesÚstripÚassertIn)r   ÚlineÚmodÚliness       r   Úassert_ir_linezTestBase.assert_ir_line0   s?   € Ü*-¨c«(×*=Ñ*=Ô*?Ó@Ñ*? $�—‘•Ð*?ˆÐ@Ø�‰�d˜EÕ"ùò As   œAc                 ó@   — t        j                  t        |«      «       y r#   )ÚllvmÚparse_assemblyr$   ©r   r)   s     r   Úassert_valid_irzTestBase.assert_valid_ir4   s   € Ü×ÑœC ›HÕ%r   c                 óî   — t        j                  t        j                  |d¬«      «      }| j                  |j                  |j                  «       | j                  t        |«      t        |«      «       |S )zAssert that the IR object pickles and unpickles correctly.
        The IR string is equal and that their type is equal
        éÿÿÿÿ)Úprotocol)ÚpickleÚloadsÚdumpsÚassertIsÚ	__class__ÚassertEqualr$   )r   ÚirobjectÚ	newobjects      r   Úassert_pickle_correctlyz TestBase.assert_pickle_correctly7   sU   € ô —L‘L¤§¡¨hÀÔ!DÓEˆ	Ø�‰�h×(Ñ(¨)×*=Ñ*=Ô>Ø×Ñœ˜X›¬¨I«Ô7ØÐr   c                 ó*   — t        j                  «       S r#   )r   ÚModule©r   s    r   ÚmodulezTestBase.module@   s   € Ü�y‰y‹{Ðr   Nc           	      óÚ   — |xs | j                  «       }t        j                  t        t        t        t        t        j
                  t        «      f«      }t        j                  |||«      S r#   )r@   r   ÚFunctionTypeÚint32ÚdblÚPointerTypeÚFunction)r   r@   ÚnameÚfntys       r   ÚfunctionzTestBase.functionC   sL   € ØÒ(˜4Ÿ;™;›=ˆÜ�‰œu¤u¬e´SÜ')§~¡~´eÓ'<ð'>ó ?ˆä�{‰{˜6 4¨Ó.Ð.r   c                 óL   — |xs | j                  «       }|j                  |«      S r#   )rI   Úappend_basic_block)r   ÚfuncrG   s      r   ÚblockzTestBase.blockI   s#   € ØÒ&�t—}‘}“ˆØ×&Ñ& tÓ,Ð,r   c                 óJ   — g }|j                  |«       dj                  |«      S ©Nr   )Údescrr   )r   ÚthingÚbufs      r   rP   zTestBase.descrM   s!   € ØˆØ�‰�CÔØ�w‰w�s‹|Ðr   c                 óT   — t        j                  |«      }|j                  dd«      }|S )Nz
    z
  )ÚtextwrapÚdedentÚreplace)r   Úasms     r   Ú_normalize_asmzTestBase._normalize_asmR   s%   € Ü�o‰o˜cÓ"ˆà�k‰k˜( FÓ+ˆØˆ
r   c                 óJ   — | j                  |«      }| j                  ||«       y r#   )rX   r   ©r   rP   rW   Úexpecteds       r   Úcheck_descr_regexzTestBase.check_descr_regexX   ó"   € Ø×&Ñ& sÓ+ˆØ×Ñ˜ Õ)r   c                 óJ   — | j                  |«      }| j                  ||«       y r#   )rX   r9   rZ   s       r   Úcheck_descrzTestBase.check_descr\   r]   r   c                 óF   — | j                  | j                  |«      |«       y r#   )r_   rP   ©r   rM   rW   s      r   Úcheck_blockzTestBase.check_block`   s   € Ø×Ñ˜Ÿ™ EÓ*¨CÕ0r   c                 óF   — | j                  | j                  |«      |«       y r#   )r\   rP   ra   s      r   Úcheck_block_regexzTestBase.check_block_regexc   s   € Ø×Ñ˜tŸz™z¨%Ó0°#Õ6r   c                 ó¢   — | j                  |«      }|j                  «       }| j                  |j                  «       |j                  «       «       y r#   )rX   Ú_stringify_bodyr9   r&   ©r   r@   rW   r[   Úactuals        r   Úcheck_module_bodyzTestBase.check_module_bodyf   s=   € Ø×&Ñ& sÓ+ˆØ×'Ñ'Ó)ˆØ×Ñ˜Ÿ™›¨¯©Ó)9Õ:r   c                 ó¢   — | j                  |«      }|j                  «       }| j                  |j                  «       |j                  «       «       y)z6
        Check module metadata against *asm*.
        N)rX   Ú_stringify_metadatar9   r&   rg   s        r   Úcheck_metadatazTestBase.check_metadatak   s?   € ð ×&Ñ& sÓ+ˆØ×+Ñ+Ó-ˆØ×Ñ˜Ÿ™›¨¯©Ó)9Õ:r   c                 óð   — | j                  |«      }| j                  |«      }|j                  d«      d   j                  d«      d   }| j	                  |j                  «       |j                  «       «       y )NÚ{é   Ú}r   )rX   rP   Ú	partitionÚ
rpartitionr9   r&   )r   rL   rW   r[   rh   s        r   Úcheck_func_bodyzTestBase.check_func_bodys   sb   € Ø×&Ñ& sÓ+ˆØ—‘˜DÓ!ˆØ×!Ñ! #Ó& qÑ)×4Ñ4°SÓ9¸!Ñ<ˆØ×Ñ˜Ÿ™›¨¯©Ó)9Õ:r   )NÚmy_funcrO   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r+   r0   r<   r@   rI   rM   rP   rX   r\   r_   rb   rd   ri   rl   rs   © r   r   r   r      sW   „ ñò&ò#ò&òòó/ó-òò
ò*ò*ò1ò7ò;ò
;ó;r   r   c                   ór   — e Zd ZesdndZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestFunctionz=i32 @"my_func"(i32 %".1", i32 %".2", double %".3", ptr %".4")z>i32 @"my_func"(i32 %".1", i32 %".2", double %".3", i32* %".4")c                 ó¼   — | j                  «       }| j                  |«      j                  «       }| j                  |j                  «       d| j                  z  «       y )Nz
declare %s)rI   rP   r&   r9   Úproto©r   rL   rW   s      r   Útest_declarezTestFunction.test_declare�   sC   € à�}‰}‹ˆØ�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ÿ™› l°T·Z±ZÑ&?Õ@r   c                 óv  — | j                  «       }|j                  j                  d«       |j                  j                  d«       |j                  j                  d«       d|j                  _        t	        j
                  t        dd¬«      }t	        j                  | j                  «       |d«      }||j                  _	        | j                  |«      j                  «       }t        s | j                  |d	| j                  z  «       n| j                  |d
| j                  z  «       | j                  |«       y )NÚoptsizeÚalwaysinlineÚ
convergentr	   ry   T©Úvar_argÚ__gxx_personality_v0zadeclare %s alwaysinline convergent optsize alignstack(16) personality ptr @"__gxx_personality_v0"zgdeclare %s alwaysinline convergent optsize alignstack(16) personality i8 (...)* @"__gxx_personality_v0")rI   Ú
attributesÚaddÚ
alignstackr   rB   Úint8rF   r@   ÚpersonalityrP   r&   r   r9   r}   r<   )r   rL   Útp_persÚpersrW   s        r   Útest_declare_attributesz$TestFunction.test_declare_attributes‡   sú   € à�}‰}‹ˆØ�‰×Ñ˜IÔ&Ø�‰×Ñ˜NÔ+Ø�‰×Ñ˜LÔ)Ø%'ˆ�‰Ô"Ü—/‘/¤$¨°DÔ9ˆÜ�{‰{˜4Ÿ;™;›=¨'Ð3IÓJˆØ&*ˆ�‰Ô#Ø�j‰j˜Ó×$Ñ$Ó&ˆÝ.Ø×Ñ˜SðJð "ŸZ™Zñ(õ)ð ×Ñ˜SðDð "ŸZ™Zñ(ô)ð 	×$Ñ$ TÕ*r   c                 ó<  — | j                  «       }|j                  d   j                  d«       d|j                  d   j                  _        d|j                  d   j                  _        d|j                  d   j                  _        |j                  d   j                  d«       |j                  j                  d	«       | j                  |«      j                  «       }t        s| j                  |d
«       n| j                  |d«       | j                  |«       y )Nr   Úzeroexté   r   é
   é   é   ÚnonnullÚnoaliasz”declare noalias i32 @"my_func"(i32 zeroext %".1", i32 dereferenceable(5) dereferenceable_or_null(10) %".2", double %".3", ptr nonnull align 4 %".4")z•declare noalias i32 @"my_func"(i32 zeroext %".1", i32 dereferenceable(5) dereferenceable_or_null(10) %".2", double %".3", i32* nonnull align 4 %".4"))rI   ÚargsÚadd_attributer‡   ÚdereferenceableÚdereferenceable_or_nullÚalignÚreturn_valuerP   r&   r   r9   r<   r~   s      r   Útest_function_attributesz%TestFunction.test_function_attributes¡   sç   € à�}‰}‹ˆØ�	‰	�!‰×"Ñ" 9Ô-Ø23ˆ�	‰	�!‰×ÑÔ/Ø:<ˆ�	‰	�!‰×ÑÔ7Ø()ˆ�	‰	�!‰×ÑÔ%Ø�	‰	�!‰×"Ñ" 9Ô-Ø×Ñ×'Ñ'¨	Ô2Ø�j‰j˜Ó×$Ñ$Ó&ˆÝ.Ø×Ñ˜Sð xõð ×Ñ˜Sð yôð 	×$Ñ$ TÕ*r   c                 ó(  — | j                  «       }| j                  |«      }|j                  d|j                  g «      «       | j	                  |«      j                  «       }| j                  |d| j                  › d�«       | j                  |«       y )NÚdbgúdeclare z !dbg !0)	r@   rI   Úset_metadataÚadd_metadatarP   r&   r9   r}   r<   ©r   r@   rL   rW   s       r   Útest_function_metadataz#TestFunction.test_function_metadata¶   s}   € à—‘“ˆØ�}‰}˜VÓ$ˆØ×Ñ˜% ×!4Ñ!4°RÓ!8Ô9Ø�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <¨xÐ8ô	ð 	×$Ñ$ TÕ*r   c                 óÒ   — | j                  «       }d|_        | j                  |«      j                  «       }| j	                  |d| j
                  › d�«       | j                  |«       y )NÚ	a_sectionr    z section "a_section")rI   ÚsectionrP   r&   r9   r}   r<   r~   s      r   Útest_function_sectionz"TestFunction.test_function_sectionÂ   s\   € à�}‰}‹ˆØ"ˆŒØ�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/CÐDô	ð 	×$Ñ$ TÕ*r   c                 ó6  — | j                  «       }| j                  |«      }d|_        |j                  d|j	                  g «      «       | j                  |«      j                  «       }| j                  |d| j                  › d�«       | j                  |«       y )Nr¦   rŸ   r    z section "a_section" !dbg !0)
r@   rI   r§   r¡   r¢   rP   r&   r9   r}   r<   r£   s       r   Útest_function_section_metaz'TestFunction.test_function_section_metaÍ   s…   € à—‘“ˆØ�}‰}˜VÓ$ˆØ"ˆŒØ×Ñ˜% ×!4Ñ!4°RÓ!8Ô9Ø�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/KÐLô	ð 	×$Ñ$ TÕ*r   c                 ó^  — | j                  «       }| j                  |«      }|j                  j                  d«       |j	                  d|j                  g «      «       | j                  |«      j                  «       }| j                  |d| j                  › d�«       | j                  |«       y )Nr‚   rŸ   r    z alwaysinline !dbg !0)r@   rI   r‡   rˆ   r¡   r¢   rP   r&   r9   r}   r<   r£   s       r   Útest_function_attr_metaz$TestFunction.test_function_attr_metaÚ   s�   € à—‘“ˆØ�}‰}˜VÓ$ˆØ�‰×Ñ˜NÔ+Ø×Ñ˜% ×!4Ñ!4°RÓ!8Ô9Ø�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/DÐEô	ð 	×$Ñ$ TÕ*r   c                 ó  — | j                  «       }|j                  j                  d«       d|_        | j	                  |«      j                  «       }| j                  |d| j                  › d�«       | j                  |«       y )Nr�   r¦   r    z optsize section "a_section")	rI   r‡   rˆ   r§   rP   r&   r9   r}   r<   r~   s      r   Útest_function_attr_sectionz'TestFunction.test_function_attr_sectionç   so   € à�}‰}‹ˆØ�‰×Ñ˜IÔ&Ø"ˆŒØ�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/KÐLô	Nð 	×$Ñ$ TÕ*r   c                 ól  — | j                  «       }| j                  |«      }|j                  j                  d«       d|_        |j                  d|j                  g «      «       | j                  |«      j                  «       }| j                  |d| j                  › d�«       | j                  |«       y )Nr‚   r¦   rŸ   r    z) alwaysinline section "a_section" !dbg !0)r@   rI   r‡   rˆ   r§   r¡   r¢   rP   r&   r9   r}   r<   r£   s       r   Útest_function_attr_section_metaz,TestFunction.test_function_attr_section_metaò   s—   € à—‘“ˆØ�}‰}˜VÓ$ˆØ�‰×Ñ˜NÔ+Ø"ˆŒØ×Ñ˜% ×!4Ñ!4°RÓ!8Ô9Ø�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/XÐYô	ð 	×$Ñ$ TÕ*r   c                 ó@  — | j                  «       }|j                  j                  d«       |j                  d«      }t	        j
                  |«      }|j                  «        | j                  |«      }| j                  |dj                  | j                  ¬«      «       y )Nr‚   Úmy_blockz�            define {proto} alwaysinline
            {{
            my_block:
                ret void
            }}
            )r}   )rI   r‡   rˆ   rK   r   Ú	IRBuilderÚret_voidrP   r_   Úformatr}   )r   rL   rM   ÚbuilderrW   s        r   Útest_definezTestFunction.test_define   s~   € à�}‰}‹ˆØ�‰×Ñ˜NÔ+Ø×'Ñ'¨
Ó3ˆÜ—,‘,˜uÓ%ˆØ×ÑÔØ�j‰j˜ÓˆØ×Ñ˜ð ÷ ‘˜TŸZ™Z�Ó(õ	*r   c                 ó@  — | j                  «       }t        j                  «       }|j                  dt        g«      }|j                  d|t
        g«      }|j                  d||t
        g«      }|j                  d«      }| j                  | j                  |«      j                  «       d«       t        s_| j                  | j                  |«      j                  «       d«       | j                  | j                  |«      j                  «       d«       n^| j                  | j                  |«      j                  «       d«       | j                  | j                  |«      j                  «       d	«       | j                  | j                  |«      j                  «       d
«       y )Nú	llvm.powizllvm.memsetzllvm.memcpyzllvm.assumezD            declare double @"llvm.powi.f64"(double %".1", i32 %".2")z\                declare void @"llvm.memset.p0.i32"(ptr %".1", i8 %".2", i32 %".3", i1 %".4")z`                declare void @"llvm.memcpy.p0.p0.i32"(ptr %".1", ptr %".2", i32 %".3", i1 %".4")z^                declare void @"llvm.memset.p0i8.i32"(i8* %".1", i8 %".2", i32 %".3", i1 %".4")zd                declare void @"llvm.memcpy.p0i8.p0i8.i32"(i8* %".1", i8* %".2", i32 %".3", i1 %".4")z1            declare void @"llvm.assume"(i1 %".1"))
r@   rŠ   Ú
as_pointerÚdeclare_intrinsicrD   rC   r_   rP   r&   r   )r   r@   Úpint8ÚpowiÚmemsetÚmemcpyÚassumes          r   Útest_declare_intrinsicsz$TestFunction.test_declare_intrinsics  se  € Ø—‘“ˆÜ—‘Ó!ˆà×'Ñ'¨´c°UÓ;ˆØ×)Ñ)¨-¸%Ä¸ÓHˆØ×)Ñ)¨-¸%ÀÌÐ9NÓOˆØ×)Ñ)¨-Ó8ˆØ×Ñ˜Ÿ™ DÓ)×/Ñ/Ó1ð 4Hô 	Iå.Ø×Ñ˜TŸZ™Z¨Ó/×5Ñ5Ó7ð :`ô aà×Ñ˜TŸZ™Z¨Ó/×5Ñ5Ó7ð :dõ eð ×Ñ˜TŸZ™Z¨Ó/×5Ñ5Ó7ð :bô cà×Ñ˜TŸZ™Z¨Ó/×5Ñ5Ó7ð :hô ià×Ñ˜Ÿ™ FÓ+×1Ñ1Ó3ð 65õ 	6r   c                 ó¤   — | j                  «       }|j                  dt        g«      }|j                  dt        g«      }| j                  ||«       y )Nr¹   )r@   r»   rD   r7   )r   r@   r½   Úpowi2s       r   Útest_redeclare_intrinsicz%TestFunction.test_redeclare_intrinsic'  sC   € Ø—‘“ˆØ×'Ñ'¨´c°UÓ;ˆØ×(Ñ(¨´s°eÓ<ˆØ�‰�d˜EÕ"r   c                 óF   — | j                  «       }| j                  |«       y r#   )rI   r<   )r   Úfns     r   Útest_picklingzTestFunction.test_pickling-  s   € Ø�]‰]‹_ˆØ×$Ñ$ RÕ(r   c                 ó  — | j                  «       }| j                  |«      }|j                  j                  d«       d}| j	                  t
        |«      5  |j                  j                  d«       d d d «       y # 1 sw Y   y xY w)Nr‚   ú$Can't have alwaysinline and noinlineÚnoinline©r@   rI   r‡   rˆ   ÚassertRaisesRegexÚ
ValueError©r   r@   rL   Úmsgs       r   Ú%test_alwaysinline_noinline_disallowedz2TestFunction.test_alwaysinline_noinline_disallowed1  s`   € Ø—‘“ˆØ�}‰}˜VÓ$ˆØ�‰×Ñ˜NÔ+à4ˆØ×#Ñ#¤J°Õ4Ø�O‰O×Ñ 
Ô+÷ 5×4Ñ4úó   ÁA:Á:Bc                 ó  — | j                  «       }| j                  |«      }|j                  j                  d«       d}| j	                  t
        |«      5  |j                  j                  d«       d d d «       y # 1 sw Y   y xY w)NrÊ   rÉ   r‚   rË   rÎ   s       r   Ú%test_noinline_alwaysinline_disallowedz2TestFunction.test_noinline_alwaysinline_disallowed:  s`   € Ø—‘“ˆØ�}‰}˜VÓ$ˆØ�‰×Ñ˜JÔ'à4ˆØ×#Ñ#¤J°Õ4Ø�O‰O×Ñ Ô/÷ 5×4Ñ4úrÑ   N)ru   rv   rw   r   r}   r   rŽ   r�   r¤   r¨   rª   r¬   r®   r°   r·   rÁ   rÄ   rÇ   rÐ   rÓ   ry   r   r   r{   r{   z   sa   „ ñ /ñ 	LàLð 
ò
Aò+ò4+ò*
+ò	+ò+ò+ò	+ò+ò*ò 6ò.#ò)ò,ó0r   r{   c                   ór   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestIRc                 ó´   — | j                  «       }|j                  t        d«      t        d«      g«       | j	                  d|«       | j                  |«       y )Né{   é*   z!0 = !{ i32 123, i8 42 })r@   r¢   rC   rŠ   r+   r0   r/   s     r   Útest_unnamed_metadatazTestIR.test_unnamed_metadataF  sG   € à�k‰k‹mˆØ×Ñœ% ›*¤d¨2£hÐ/Ô0Ø×ÑÐ6¸Ô<Ø×Ñ˜SÕ!r   c                 ó„  — | j                  «       }|j                  t        d«      dg«      }|j                  t        d«      |g«      }|j                  t        d«      |g«      }| j	                  ||«       |j                  |||g«       | j                  d|«       | j                  d|«       | j                  d|«       y )Nr×   ÚkerneléÈ  z!0 = !{ i32 123, !"kernel" }z!1 = !{ i64 456, !0 }z!2 = !{ !0, !1, !1 })r@   r¢   rC   Úint64r7   r+   )r   r)   Úm0Úm1Úm2s        r   Útest_unnamed_metadata_2zTestIR.test_unnamed_metadata_2M  s­   € à�k‰k‹mˆà×Ñœu S›z¨8Ð4Ó5ˆà×Ñœu S›z¨2Ð.Ó/ˆà×Ñœu S›z¨2Ð.Ó/ˆØ�‰�b˜"Ôà×Ñ˜"˜b "˜Ô&Ø×ÑÐ:¸CÔ@Ø×ÑÐ3°SÔ9Ø×ÑÐ2°CÕ8r   c                 ó  — | j                  «       }|j                  t        d«      t        d«      gt        d«      gt        d«      gg«       | j                  d|«       | j                  d|«       | j                  d|«       y )Nr×   rÜ   i  z!0 = !{ i32 456 }z!1 = !{ i32 789 }z!2 = !{ i32 123, !0, !1, !0 })r@   r¢   rC   r+   r/   s     r   Útest_unnamed_metadata_3zTestIR.test_unnamed_metadata_3]  sm   € à�k‰k‹mˆØ×Ñœ% ›*¤u¨S£z l´U¸3³Z°LÄ5ÈÃ:À,ÐOÔPØ×ÑÐ/°Ô5Ø×ÑÐ/°Ô5Ø×ÑÐ;¸SÕAr   c                 ól   — | j                  «       }|j                  dg«       | j                  d|«       y )Nz"\$z!0 = !{ !"\22\5c$" })r@   r¢   r+   r/   s     r   Útest_metadata_stringzTestIR.test_metadata_stringe  s.   € à�k‰k‹mˆØ×Ñ˜'˜Ô#Ø×ÑÐ4°cÕ:r   c                 ó  — | j                  «       }|j                  t        d«      g«      }|j                  t        d«      g«      }|j	                  d«      }|j                  |«       |j                  |«       |j                  |«       | j                  d|«       | j                  |«       | j                  ||j                  d«      «       | j                  t        «      5  |j                  d«       d d d «       y # 1 sw Y   y xY w)Nr×   rÜ   Úfooz!foo = !{ !0, !1, !0 }Úbar)r@   r¢   rC   rÝ   Úadd_named_metadatarˆ   r+   r0   r7   Úget_named_metadataÚassertRaisesÚKeyError)r   r)   rÞ   rß   Únmds        r   Útest_named_metadatazTestIR.test_named_metadatak  sÊ   € à�k‰k‹mˆØ×Ñœu S›z˜lÓ+ˆØ×Ñœu S›z˜lÓ+ˆØ×$Ñ$ UÓ+ˆØ�‰�ŒØ�‰�ŒØ�‰�ŒØ×ÑÐ4°cÔ:Ø×Ñ˜SÔ!à�‰�c˜3×1Ñ1°%Ó8Ô9Ø×ÑœxÕ(Ø×"Ñ" 5Ô)÷ )×(Ñ(ús   Ã$C?Ã?Dc                 óú  — | j                  «       }|j                  t        d«      g«      }|j                  d|«       |j                  dt	        d«      g«       |j                  ddg«       |j                  dg «       | j                  d|«       | j                  d|«       | j                  d|«       | j                  d	|«       | j                  d
|«       | j                  d|«       | j                  |«       y )Nr×   rç   rÜ   rÛ   rè   z!foo = !{ !0, !1, !2 }z!0 = !{ i32 123 }z!1 = !{ i64 456 }z!2 = !{ !"kernel" }z!bar = !{ !3 }z
!3 = !{  })r@   r¢   rC   ré   rÝ   r+   r0   )r   r)   rÞ   s      r   Útest_named_metadata_2zTestIR.test_named_metadata_2{  sÞ   € à�k‰k‹mˆØ×Ñœu S›z˜lÓ+ˆØ×Ñ˜u bÔ)Ø×Ñ˜u¤u¨S£z lÔ3Ø×Ñ˜u x jÔ1Ø×Ñ˜u bÔ)Ø×ÑÐ4°cÔ:Ø×ÑÐ/°Ô5Ø×ÑÐ/°Ô5Ø×ÑÐ1°3Ô7Ø×ÑÐ,¨cÔ2Ø×Ñ˜L¨#Ô.Ø×Ñ˜SÕ!r   c                 óŒ  — | j                  «       }|j                  t        j                  «       d «      g«       t        s| j                  d|«       n| j                  d|«       | j                  |«       | j                  «       }|j                  d t        d«      g«       | j                  d|«       | j                  |«       y )Nz!0 = !{ ptr null }z!0 = !{ i32* null }r×   z!0 = !{ null, i32 123 })r@   r¢   rC   rº   r   r+   r0   r/   s     r   Útest_metadata_nullzTestIR.test_metadata_null‹  s    € à�k‰k‹mˆØ×Ñœ%×*Ñ*Ó,¨TÓ2Ð3Ô4Ý.Ø×ÑÐ 4°cÕ:à×ÑÐ 5°sÔ;Ø×Ñ˜SÔ!à�k‰k‹mˆØ×Ñ˜$¤ c£
Ð+Ô,Ø×ÑÐ5°sÔ;Ø×Ñ˜SÕ!r   c           
      ó  — | j                  «       }|j                  ddddœ«      }|j                  dd|j                  d g«      i«      }|j                  dt        j                  d«      |d	d
ddœd¬«      }|j                  dd|d|d|dœd¬«       t        |«      }| j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       | j                  |«       y )NÚDIFilerç   rè   ©ÚfilenameÚ	directoryÚDISubroutineTypeÚtypesÚDICompileUnitÚDW_LANG_PythonÚARTIQr   T)ÚlanguageÚfileÚproducerÚruntimeVersionÚisOptimized©Úis_distinctÚDISubprogramrt   é   F)rG   rþ   r(   ÚtypeÚisLocalÚunitú/!0 = !DIFile(directory: "bar", filename: "foo")z!1 = !{ null }z!!2 = !DISubroutineType(types: !1)zy!3 = distinct !DICompileUnit(file: !0, isOptimized: true, language: DW_LANG_Python, producer: "ARTIQ", runtimeVersion: 0)zd!4 = distinct !DISubprogram(file: !0, isLocal: false, line: 11, name: "my_func", type: !2, unit: !3))r@   Úadd_debug_infor¢   r   ÚDITokenr$   r+   r0   )r   r)   Údi_fileÚdi_func_typeÚdi_compileunitÚstrmods         r   Útest_debug_infozTestIR.test_debug_infoš  sK  € ð �k‰k‹mˆØ×$Ñ$ XØØñ0
ó ˆð ×)Ñ)Ð*<à�S×%Ñ% t fÓ-ð?
ó ˆð ×+Ñ+¨OÜŸ
™
Ð#3Ó4ØØØØñ>
ð ð ,ó ˆð 	×Ñ˜>ØØØØ ØØ"ñ,
ð ð 	ô 	ô �S“ˆØ×ÑÐMØ"ô	$à×ÑÐ,¨fÔ5Ø×ÑÐ?ÀÔHà×Ñð Dð #ô	$ð 	×Ñð "ð #ô	$ð 	×Ñ˜SÕ!r   c                 óÖ  — | j                  «       }|j                  ddddœ«      }|j                  ddddœ«      }|j                  ddddœ«      }|j                  ddddœd¬«      }| j                  ||«       | j                  t	        ||||h«      d«       t        |«      }| j                  d|«       | j                  d	|«       | j                  d
|«       | j                  |«       y )Nrô   rç   rè   rõ   Tr  r”   r	  z/!1 = !DIFile(directory: "foo", filename: "bar")z8!2 = distinct !DIFile(directory: "bar", filename: "foo"))r@   r
  r7   r9   Úlenr$   r+   r0   )r   r)   Údi1Údi2Údi3Údi4r  s          r   Útest_debug_info_2zTestIR.test_debug_info_2Ç  s  € à�k‰k‹mˆØ× Ñ  Ø.3Ø/4ñ"$ó%ˆð × Ñ  Ø.3Ø/4ñ"$ó%ˆð × Ñ  Ø.3Ø/4ñ"$ó%ˆð × Ñ  Ø.3Ø/4ñ"$à15ð !ó 7ˆð 	�‰�c˜3ÔØ×Ñœ˜c 3¨¨SÐ1Ó2°AÔ6ä�S“ˆØ×ÑÐMØ"ô	$à×ÑÐMØ"ô	$à×Ñð %Ø&,ô	.à×Ñ˜SÕ!r   c                 óÊ  — | j                  «       }|j                  dddt        j                  d«      dœ«      }|j                  dddt        j                  d«      dœ«      }|j                  dddt        j                  d«      dœ«      }|j                  dddt        j                  d«      dœ«      }|j                  dddt        j                  d«      dœ«      }|j                  dddt        j                  d«      dœ«      }|j                  ddd	t        j                  d
«      dœ«      }|j                  ddd	t        j                  d
«      dœ«      }	|j                  ddd	t        j                  d
«      dœ«      }
| j	                  ||«       | j	                  ||«       | j	                  ||«       | j	                  ||«       | j	                  ||	«       | j	                  ||
«       | j                  t        ||||||||	|
h	«      d«       t        |«      }| j                  d|«       | j                  d|«       | j                  d|«       | j                  |«       y )NÚDIBasicTypeÚi8r   ÚDW_ATE_unsigned©rG   ÚsizeÚencodingÚi32r
   Úi64r   ÚDW_ATE_signedr”   zA!0 = !DIBasicType(encoding: DW_ATE_unsigned, name: "i8", size: 8)zC!1 = !DIBasicType(encoding: DW_ATE_unsigned, name: "i32", size: 32)zA!2 = !DIBasicType(encoding: DW_ATE_signed, name: "i64", size: 64))
r@   r
  r   r  r7   r9   r  r$   r+   r0   )r   r)   r  r  r  r  Údi5Údi6Údi7Údi8Údi9r  s               r   Útest_debug_info_3zTestIR.test_debug_info_3æ  sk  € à�k‰k‹mˆØ× Ñ  ØØÜŸ
™
Ð#4Ó5ñ1
ó ˆð
 × Ñ  ØØÜŸ
™
Ð#4Ó5ñ1
ó ˆð
 × Ñ  ØØÜŸ
™
Ð#4Ó5ñ1
ó ˆð
 × Ñ  ØØÜŸ
™
Ð#4Ó5ñ1
ó ˆð
 × Ñ  ØØÜŸ
™
Ð#4Ó5ñ1
ó ˆð
 × Ñ  ØØÜŸ
™
Ð#4Ó5ñ1
ó ˆð
 × Ñ  ØØÜŸ
™
 ?Ó3ñ1
ó ˆð
 × Ñ  ØØÜŸ
™
 ?Ó3ñ1
ó ˆð
 × Ñ  ØØÜŸ
™
 ?Ó3ñ1
ó ˆð
 	�‰�c˜3ÔØ�‰�c˜3ÔØ�‰�c˜3ÔØ�‰�c˜3ÔØ�‰�c˜3ÔØ�‰�c˜3ÔØ×Ñœ˜c 3¨¨S°#°s¸CÀÀcÐJÓKÈQÔOä�S“ˆØ×Ñð 3Ø4:ô	<à×Ñð 5Ø6<ô	>à×Ñð 5Ø6<ô	>à×Ñ˜SÕ!r   c                 ó   — | j                  «       }|j                  dddt        j                  d«      dœ«      }|j                  dddt        j                  d«      dœ«      }|j                  dt        j                  d	«      d
|d t        j                  d«      d«      dœ«       |j                  dt        j                  d	«      d|d t        j                  d«      d«      dœ«       t        |«      }| j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       | j                  |«       y )Nr  rC   r
   r!  r  rŠ   r   ÚDIDerivedTypeÚDW_TAG_memberÚ	field_i32r   )ÚtagrG   ÚbaseTyper  Ú	extraDataÚfield_i8ro   zC!0 = !DIBasicType(encoding: DW_ATE_signed, name: "int32", size: 32)zA!1 = !DIBasicType(encoding: DW_ATE_signed, name: "int8", size: 8)zd!2 = !DIDerivedType(baseType: !0, extraData: i32 1, name: "field_i32", size: 32, tag: DW_TAG_member)za!3 = !DIDerivedType(baseType: !1, extraData: i8 2, name: "field_i8", size: 8, tag: DW_TAG_member))r@   r
  r   r  ÚIntTyper$   r+   r0   )r   r)   Údi_base_i32Ú
di_base_i8r  s        r   Útest_debug_info_4zTestIR.test_debug_info_4'  sU  € à�k‰k‹mˆà×(Ñ(¨ØØÜŸ
™
 ?Ó3ñ9
ó ˆð
 ×'Ñ'¨ØØÜŸ
™
 ?Ó3ñ8
ó ˆ
ð 	×Ñ˜?Ü—:‘:˜oÓ.ØØ#ØØ'œŸ™ B›¨Ó*ñ-
ô 	ð 	×Ñ˜?Ü—:‘:˜oÓ.ØØ"ØØ&œŸ™ A› qÓ)ñ-
ô 	ô �S“ˆØ×Ñð 7Ø8>ô	@à×Ñð 5Ø6<ô	>à×Ñð?Ø@Fô	Hð 	×Ñð=Ø>Dô	Fð 	×Ñ˜SÕ!r   c                 ó  — | j                  «       }t        j                  |t        j                  «       d«      }t        j                  t        j                  «       d«      |_        |j                  dddt        j                  d«      dœ«      }|j                  d|j                  d	i «      |j                  d
|j                  |ddœd¬«      dœ«      }|j                  d|«       t        |«      }| j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«        t        j                  d«      d«      d t        j                  d«      d«      g} t        j                  d«      d«      d t        j                  d«      d«      g}|j                  |«      }|j                  |«      }|j                  d«      }|j                  |«       |j                  |«       |j                  ddddœ«      }	|j                  dt        j                  d «      |	t        j                  d!«      |j                  |g«      d"œd¬«      }
|j                  d#|
«       y )$NÚgvarrØ   r  Úfloatr
   ÚDW_ATE_floatr  ÚDIGlobalVariableExpressionÚDIExpressionÚDIGlobalVariableT)rG   r  ÚisDefinitionr  )ÚexprÚvarrŸ   zB!0 = !DIBasicType(encoding: DW_ATE_float, name: "float", size: 32)z!1 = !DIExpression()zK!2 = distinct !DIGlobalVariable(isDefinition: true, name: "gvar", type: !0)z3!3 = !DIGlobalVariableExpression(expr: !1, var: !2)z2@"gvar" = global float 0x4045000000000000, !dbg !3ro   zDwarf Versionr“   zDebug Info Versionr”   zllvm.module.flagsrô   rç   rè   rõ   rú   rû   Ú	FullDebug)rý   rþ   ÚemissionKindÚglobalszllvm.dbg.cu)r@   r   ÚGlobalVariableÚ	FloatTypeÚConstantÚinitializerr
  r  rG   r¡   r$   r+   r0  r¢   ré   rˆ   )r   r)   r5  Údi_floatÚdi_gvarr  ÚdverÚdiverÚflagsr  Údi_cus              r   Útest_debug_info_gvarzTestIR.test_debug_info_gvarR  sh  € ð �k‰k‹mˆä× Ñ  ¤b§l¡l£n°fÓ=ˆÜŸ;™;¤r§|¡|£~°rÓ:ˆÔà×%Ñ% mØØÜŸ
™
 >Ó2ñ6
ó ˆð
 ×$Ñ$Ð%AØ×&Ñ& ~°rÓ:Ø×%Ñ%Ð&8ØŸ	™	Ø Ø $ñ;ð  ð	 &ó !ñD
ó ˆð 	×Ñ˜% Ô)ô �S“ˆØ×Ñð 7Ø8>ô	@à×ÑÐ2°FÔ;Ø×Ñð <Ø=Cô	Eà×Ñð 'Ø(.ô	0à×Ñð &Ø'-ô	/ð ”—
‘
˜2“˜qÓ! ?°N´B·J±J¸r³NÀ1Ó4EÐFˆØ”—‘˜B“ Ó"Ð$8¸.¼"¿*¹*ÀR».ÈÓ:KÐLˆØ×Ñ Ó%ˆØ× Ñ  Ó'ˆØ×&Ñ&Ð':Ó;ˆØ�	‰	�$ŒØ�	‰	�%Ôà×$Ñ$ XØØñ0
ó ˆð ×"Ñ" ?ÜŸ
™
Ð#3Ó4ØÜŸJ™J {Ó3Ø×'Ñ'¨¨	Ó2ñ	5
ð
 ð #ó ˆð 	×Ñ˜}¨eÕ4r   c                 óâ   — | j                  «       }|j                  dddi«       t        |«      }dj                  t	        d„ dj                  «       «      «      }| j                  d|› d�|«       y )	NÚDILocalVariablerG   u   aâˆ†r   c                 ó   — d| d›�S )Nr   Ú02xry   )Úxs    r   Ú<lambda>z7TestIR.test_debug_info_unicode_string.<locals>.<lambda>œ  s   €  r¨!¨C¨¡\r   u   âˆ†z!0 = !DILocalVariable(name: "az"))r@   r
  r$   r   r   Úencoder+   )r   r)   r  rG   s       r   Útest_debug_info_unicode_stringz%TestIR.test_debug_info_unicode_string–  sb   € Ø�k‰k‹mˆØ×ÑÐ,¨v°vÐ.>Ô?ä�S“ˆà�w‰w”sÑ1°5·<±<³>ÓBÓCˆØ×ÑÐ<¸T¸FÀ"ÐEÀvÕNr   c                 ó
  — | j                  «       }t        j                  |t        j                  t        j                  «       g «      d«      }t        j
                  |j                  d«      «      }t        j                  t        t        g«      }t        j                  |ddd¬«      }|j                  |t        d«      g«       |j                  «        d}| j                  |t        |«      «       | j                  |«       y )	Nrç   r   ú
mov $1, $2ú=r,rT©Úside_effectr×   z7call i32 asm sideeffect "mov $1, $2", "=r,r"( i32 123 ))r@   r   rF   rB   ÚVoidTyper³   rK   rC   Ú	InlineAsmÚcallr´   r!   r$   r0   )r   r)   rç   r¶   ÚasmtyrW   Úpats          r   Útest_inline_assemblyzTestIR.test_inline_assemblyŸ  s¶   € Ø�k‰k‹mˆÜ�k‰k˜#œrŸ™¬r¯{©{«}¸bÓAÀ5ÓIˆÜ—,‘,˜s×5Ñ5°bÓ9Ó:ˆÜ—‘¤¬ wÓ/ˆÜ�l‰l˜5 ,°ÀDÔIˆØ�‰�Sœ5 ›:˜,Ô'Ø×ÑÔØGˆØ×Ñ˜#œs 3›xÔ(Ø×Ñ˜SÕ!r   c                 óà  — | j                  «       }t        j                  |t        j                  t        j                  «       g «      d«      }t        j
                  |j                  d«      «      }t        j                  t        t        g«      }|j                  |ddt        d«      gd¬«       |j                  «        d}| j                  |t        |«      «       | j                  |«       y )	Nrç   r   rU  rV  r×   TrW  z8call i32 asm sideeffect "mov $1, $2", "=r,r" ( i32 123 ))r@   r   rF   rB   rY  r³   rK   rC   rW   r´   r!   r$   r0   )r   r)   rç   r¶   r\  r]  s         r   Útest_builder_asmzTestIR.test_builder_asm«  sª   € Ø�k‰k‹mˆÜ�k‰k˜#œrŸ™¬r¯{©{«}¸bÓAÀ5ÓIˆÜ—,‘,˜s×5Ñ5°bÓ9Ó:ˆÜ—‘¤¬ wÓ/ˆØ�‰�E˜<¨´%¸³*°È4ˆÔPØ×ÑÔØHˆØ×Ñ˜#œs 3›xÔ(Ø×Ñ˜SÕ!r   c                 ó¬  — | j                  «       }t        j                  |t        j                  t        j                  «       g «      d«      }t        j
                  |j                  d«      «      }|j                  t        j                  d«      d«       |j                  «        d}| j                  |t        |«      «       | j                  |«       y )Nrç   r   r   Úraxzcall i64 asm "", "={rax}")r@   r   rF   rB   rY  r³   rK   Úload_regr0  r´   r!   r$   r0   ©r   r)   rç   r¶   r]  s        r   Útest_builder_load_regzTestIR.test_builder_load_reg¶  s”   € Ø�k‰k‹mˆÜ�k‰k˜#œrŸ™¬r¯{©{«}¸bÓAÀ5ÓIˆÜ—,‘,˜s×5Ñ5°bÓ9Ó:ˆØ×ÑœŸ™ B›¨Ô/Ø×ÑÔØ)ˆØ×Ñ˜#œs 3›xÔ(Ø×Ñ˜SÕ!r   c                 óÀ  — | j                  «       }t        j                  |t        j                  t        j                  «       g «      d«      }t        j
                  |j                  d«      «      }|j                  t        d«      t        j                  d«      d«       |j                  «        d}| j                  |t        |«      «       | j                  |«       y )Nrç   r   r×   r   rb  z0call void asm sideeffect "", "{rax}" ( i64 123 ))r@   r   rF   rB   rY  r³   rK   Ú	store_regrÝ   r0  r´   r!   r$   r0   rd  s        r   Útest_builder_store_regzTestIR.test_builder_store_regÀ  sš   € Ø�k‰k‹mˆÜ�k‰k˜#œrŸ™¬r¯{©{«}¸bÓAÀ5ÓIˆÜ—,‘,˜s×5Ñ5°bÓ9Ó:ˆØ×Ñœ% ›*¤b§j¡j°£n°eÔ<Ø×ÑÔØ@ˆØ×Ñ˜#œs 3›xÔ(Ø×Ñ˜SÕ!r   N)ru   rv   rw   rÙ   rá   rã   rå   rî   rð   rò   r  r  r'  r3  rK  rS  r^  r`  re  rh  ry   r   r   rÕ   rÕ   D  s^   „ ò"ò9ò Bò;ò*ò "ò "ò+"òZ"ò>?"òB)"òVB5òHOò
"ò	"ò"ó"r   rÕ   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTestGlobalValuesc                 óÞ  — | j                  «       }t        j                  |t        j                  t        j                  «       g «      d«      }t        j                  |t        j                  t        j                  «       g «      d«       t        j
                  |t        j                  «       d«      }| j                  |j                  d«      |«       | j                  |j                  d«      |«       | j                  t        «      5  |j                  d«       d d d «       t        s| j                  t        |«      d«       y | j                  t        |«      d«       y # 1 sw Y   ŒGxY w)Nrç   rè   Ú
globdoubleÚkkkz.<ir.GlobalVariable 'globdouble' of type 'ptr'>z2<ir.GlobalVariable 'globdouble' of type 'double*'>)r@   r   rF   rB   rY  rA  Ú
DoubleTyper9   Ú
get_globalrë   rì   r   Úrepr)r   r)   rç   rl  s       r   Útest_globals_accessz$TestGlobalValues.test_globals_accessÍ  sÿ   € Ø�k‰k‹mˆÜ�k‰k˜#œrŸ™¬r¯{©{«}¸bÓAÀ5ÓIˆÜ
�‰�CœŸ™¬¯©«¸Ó;¸UÔCÜ×&Ñ& s¬B¯M©M«O¸\ÓJˆ
Ø×Ñ˜Ÿ™¨Ó.°Ô4Ø×Ñ˜Ÿ™¨Ó5°zÔBØ×ÑœxÕ(Ø�N‰N˜5Ô!÷ )õ /Ø×ÑœT *Ó-ØMõOð ×ÑÜ�ZÓ ØDõF÷ )Ð(ús   ÄE#Å#E,c                 óä  — | j                  «       }t        j                  t        j                  «       g «      }t        j                  ||d«      }t        j                  ||d«      }t        j
                  |t        j                  «       d«      }| j                  t        |j                  «      t        ||f«      «       | j                  t        |j                  «      t        |||f«      «       y)zr
        Accessing functions and global values through Module.functions
        and Module.global_values.
        rç   rè   rl  N)r@   r   rB   rY  rF   rA  rn  r9   ÚsetÚ	functionsÚglobal_values)r   r)   Úftyrç   rè   rl  s         r   Ú#test_functions_global_values_accessz4TestGlobalValues.test_functions_global_values_accessß  s«   € ð
 �k‰k‹mˆÜ�o‰oœbŸk™k›m¨RÓ0ˆÜ�k‰k˜#˜s EÓ*ˆÜ�k‰k˜#˜s EÓ*ˆÜ×&Ñ& s¬B¯M©M«O¸\ÓJˆ
Ø×Ñœ˜SŸ]™]Ó+¬S°#°s°«_Ô=Ø×Ñœ˜S×.Ñ.Ó/´°c¸3À
Ð5KÓ1LÕMr   c                 óB  — | j                  «       }t        j                  |t        d«      }t        j                  |t        dd¬«      }t        j                  |t        d«      }t	        d«      |_        t        j                  |t        d«      }d|_        t        j                  |t        d	«      }d
|_        t        j                  |t        dd¬«      }d|_        t        j                  |t        d«      }d
|_        t	        d«      |_        d|_	        t        j                  |t        d«      }	d
|	_        t	        d«      |	_        d|	_
        t        j                  |t        d«      }
d
|
_        t	        d«      |
_        d|
_	        d|
_
        | j                  |d«       y)z7
        IR serialization of global variables.
        ÚaÚbrØ   ©Ú	addrspacer   r×   ÚdTÚeÚinternalÚfrÜ   Úgr	   ÚhÚ	h_sectionÚir   Ú	i_sectionaß              @"a" = external global i8
            @"b" = external addrspace(42) global i8
            @"c" = global i32 123
            @"d" = external constant i32
            @"e" = internal global i32 undef
            @"f" = external unnamed_addr addrspace(456) global i32
            @"g" = internal global i32 123, align 16
            @"h" = internal global i32 123, section "h_section"
            @"i" = internal global i32 456, section "i_section", align 8
            N)r@   r   rA  rŠ   rC   rD  Úglobal_constantÚlinkageÚunnamed_addrr›   r§   ri   )r   r)   ry  rz  r   r}  r~  r€  r�  r‚  r„  s              r   Útest_global_variables_irz)TestGlobalValues.test_global_variables_irì  sO  € ð �k‰k‹mˆä×Ñ˜c¤4¨Ó-ˆÜ×Ñ˜c¤4¨¸Ô;ˆä×Ñ˜c¤5¨#Ó.ˆÜ˜c›
ˆŒÜ×Ñ˜c¤5¨#Ó.ˆØ ˆÔä×Ñ˜c¤5¨#Ó.ˆØˆŒ	Ü×Ñ˜c¤5¨#¸Ô=ˆØˆŒÜ×Ñ˜c¤5¨#Ó.ˆØˆŒ	Ü˜c›
ˆŒØˆŒÜ×Ñ˜c¤5¨#Ó.ˆØˆŒ	Ü˜c›
ˆŒØˆŒ	Ü×Ñ˜c¤5¨#Ó.ˆØˆŒ	Ü˜c›
ˆŒØˆŒØˆŒ	Ø×Ñ˜sð 
%õ 
	r   c                 óF   — | j                  «       }| j                  |«       y r#   )r@   r<   r/   s     r   Útest_picklezTestGlobalValues.test_pickle  s   € Ø�k‰k‹mˆØ×$Ñ$ SÕ)r   N)ru   rv   rw   rq  rw  r‰  r‹  ry   r   r   rj  rj  Ë  s   „ òFò$Nò)óV*r   rj  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)Ú	TestBlockc                 óÀ   — | j                  «       }t        j                  |d¬«      }| j                  |j                  |«       | j                  |j                  «       y )NÚstart©ÚparentrG   )rI   r   ÚBlockr7   r‘  ÚassertFalseÚis_terminated©r   rL   rM   s      r   Útest_attributeszTestBlock.test_attributes  sC   € Ø�}‰}‹ˆÜ—‘ ¨7Ô3ˆØ�‰�e—l‘l DÔ)Ø×Ñ˜×,Ñ,Õ-r   c                 óæ   — | j                  d¬«      }| j                  | j                  |«      d«       |j                  j	                  ddg«       | j                  | j                  |«      d«       y )Nr²   ©rG   z
my_block:
ry  rz  zmy_block:
  a
  b
)rM   r9   rP   ÚinstructionsÚextend)r   rM   s     r   Ú
test_descrzTestBlock.test_descr$  s]   € Ø—
‘
 
�
Ó+ˆØ×Ñ˜Ÿ™ EÓ*¨MÔ:Ø×Ñ×!Ñ! 3¨ *Ô-Ø×Ñ˜Ÿ™ EÓ*Ð,CÕDr   c                 ó²  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  ||d«      }|j                  ||d«      }|j                  ||d«       t        j                  ||j                  d||fd«      }| j                  |d	«       |j                  ||«       | j                  |d
«       y )Nr²   r˜  ro   r   r}  r~  Úsdivr€  z¥            my_block:
                %"c" = add i32 %".1", %".2"
                %"d" = sub i32 %".1", %".2"
                %"e" = mul i32 %"d", %".2"
            z¥            my_block:
                %"c" = add i32 %".1", %".2"
                %"f" = sdiv i32 %"c", %".2"
                %"e" = mul i32 %"f", %".2"
            )rM   r   r³   rI   r—   rˆ   r   ÚmulÚInstructionr  rb   rV   )r   rM   r¶   ry  rz  r   r}  r€  s           r   Útest_replacezTestBlock.test_replace*  sÈ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø�K‰K˜˜1˜cÓ"ˆØ�K‰K˜˜1˜cÓ"ˆØ�‰�A�q˜#ÔÜ�N‰N˜5 !§&¡&¨&°1°a°&¸#Ó>ˆØ×Ñ˜ð !ô 	ð 	�‰�a˜ÔØ×Ñ˜ð !õ 	r   c                 óˆ   — | j                  «       }t        j                  |d¬«      }| j                  t	        |«      d«       y)z4
        Blocks should have a useful repr()
        r�  r�  z"<ir.Block 'start' of type 'label'>N)rI   r   r’  r9   rp  r•  s      r   Ú	test_reprzTestBlock.test_repr@  s4   € ð �}‰}‹ˆÜ—‘ ¨7Ô3ˆØ×Ñœ˜e›Ð&JÕKr   N)ru   rv   rw   r–  r›  r   r¢  ry   r   r   r�  r�    s   „ ò.òEòó,Lr   r�  c                   ó^  — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d „ Z"d!„ Z#d"„ Z$d#„ Z%d$„ Z&d%„ Z'd&„ Z(d'„ Z)d(„ Z*d)„ Z+d*„ Z,d+„ Z-d,„ Z.d-„ Z/d.„ Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;y:);ÚTestBuildInstructionszN
    Test IR generation of LLVM instructions through the IRBuilder class.
    i   c                 ó
  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  ||d«      }| j                  |d«       | j                  t        |«      d«       y )Nr²   r˜  ro   ÚreszP            my_block:
                %"res" = add i32 %".1", %".2"
            z}<ir.Instruction 'res' of type 'i32', opname 'add', operands (<ir.Argument '.1' of type i32>, <ir.Argument '.2' of type i32>)>)	rM   r   r³   rI   r—   rˆ   rb   r9   rp  )r   rM   r¶   ry  rz  Úinsts         r   Útest_simplez!TestBuildInstructions.test_simpleP  s~   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø�{‰{˜1˜a Ó'ˆØ×Ñ˜ð !ô 	ð
 	×Ñœ˜d›ð<õ	=r   c                 óT  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}}|j                  ||d«       |j                  ||d«       |j                  ||d«       |j                  ||d«       |j                  ||d«       |j                  ||d	«       |j                  ||d
«       |j                  ||d«       |j                  ||d«       |j                  ||d«       |j                  ||d«       |j!                  ||d«       |j#                  ||d«       |j%                  ||d«       |j'                  ||d«       |j)                  ||d«       |j+                  ||d«       |j-                  ||d«       | j/                  t0        «      5 }|j                  ||«       d d d «       | j3                  t5        j6                  «      d«       | j9                  |j:                  «       | j=                  |d«       y # 1 sw Y   Œ\xY w)Nr²   r˜  r”   r   r}  r~  r€  r�  r‚  r„  ÚjÚkÚlÚmÚnÚoÚpÚqÚrÚsÚtz1Operands must be the same type, got (i32, double)aD              my_block:
                %"c" = add i32 %".1", %".2"
                %"d" = fadd i32 %".1", %".2"
                %"e" = sub i32 %".1", %".2"
                %"f" = fsub i32 %".1", %".2"
                %"g" = mul i32 %".1", %".2"
                %"h" = fmul i32 %".1", %".2"
                %"i" = udiv i32 %".1", %".2"
                %"j" = sdiv i32 %".1", %".2"
                %"k" = fdiv i32 %".1", %".2"
                %"l" = urem i32 %".1", %".2"
                %"m" = srem i32 %".1", %".2"
                %"n" = frem i32 %".1", %".2"
                %"o" = or i32 %".1", %".2"
                %"p" = and i32 %".1", %".2"
                %"q" = xor i32 %".1", %".2"
                %"r" = shl i32 %".1", %".2"
                %"s" = ashr i32 %".1", %".2"
                %"t" = lshr i32 %".1", %".2"
            )rM   r   r³   rI   r—   rˆ   Úfaddr   Úfsubrž  ÚfmulÚudivr�  ÚfdivÚuremÚsremÚfremÚor_Úand_ÚxorÚshlÚashrÚlshrrë   rÍ   r9   r$   Ú	exceptionr“  r”  rb   )r   rM   r¶   ry  rz  ÚffÚcms          r   Útest_binopsz!TestBuildInstructions.test_binops_  sÐ  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×#Ñ#×(Ñ(¨¨!Ð,‰ˆˆ1ˆbØ�‰�A�q˜#ÔØ�‰�Q˜˜3ÔØ�‰�A�q˜#ÔØ�‰�Q˜˜3ÔØ�‰�A�q˜#ÔØ�‰�Q˜˜3ÔØ�‰�Q˜˜3ÔØ�‰�Q˜˜3ÔØ�‰�Q˜˜3ÔØ�‰�Q˜˜3ÔØ�‰�Q˜˜3ÔØ�‰�Q˜˜3ÔØ�‰�A�q˜#ÔØ�‰�Q˜˜3ÔØ�‰�A�q˜#ÔØ�‰�A�q˜#ÔØ�‰�Q˜˜3ÔØ�‰�Q˜˜3ÔØ×ÑœzÔ*¨bØ�K‰K˜˜2Ô÷ +à×Ñœ˜RŸ\™\Ó*ØLô	Nà×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	÷ +Ð*ús   Æ0HÈH'c                 ó  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  ||dd¬«       |j                  ||ddd	g¬«       | j                  |d
«       y )Nr²   r˜  ro   r   )Únuw©rI  r}  rÈ  Únswz†            my_block:
                %"c" = add nuw i32 %".1", %".2"
                %"d" = sub nuw nsw i32 %".1", %".2"
            )rM   r   r³   rI   r—   rˆ   r   rb   ©r   rM   r¶   ry  rz  s        r   Útest_binop_flagsz&TestBuildInstructions.test_binop_flags�  s}   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1à�‰�A�q˜# XˆÔ.à�‰�A�q˜# e¨U ^ˆÔ4Ø×Ñ˜ð !õ 	r   c                 ó  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  ||dd¬«       |j                  ||ddd	g¬«       | j                  |d
«       y )Nr²   r˜  ro   r   ©ÚfastrÉ  r}  ÚninfÚnszzŠ            my_block:
                %"c" = fadd fast i32 %".1", %".2"
                %"d" = fsub ninf nsz i32 %".1", %".2"
            )rM   r   r³   rI   r—   rµ  r¶  rb   rË  s        r   Útest_binop_fastmath_flagsz/TestBuildInstructions.test_binop_fastmath_flagsž  s}   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1à�‰�Q˜˜3 iˆÔ0à�‰�Q˜˜3 v¨u oˆÔ6Ø×Ñ˜ð !õ 	r   c                 ó’  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  ||d«       |j                  ||d«       |j                  ||d«       |j                  ||d«       |j                  ||d«       |j                  ||d	«       | j                  |d
«       y )Nr²   r˜  ro   r   r}  r~  r€  r�  r‚  að  my_block:
    %"c" = call {i32, i1} @"llvm.sadd.with.overflow.i32"(i32 %".1", i32 %".2")
    %"d" = call {i32, i1} @"llvm.smul.with.overflow.i32"(i32 %".1", i32 %".2")
    %"e" = call {i32, i1} @"llvm.ssub.with.overflow.i32"(i32 %".1", i32 %".2")
    %"f" = call {i32, i1} @"llvm.uadd.with.overflow.i32"(i32 %".1", i32 %".2")
    %"g" = call {i32, i1} @"llvm.umul.with.overflow.i32"(i32 %".1", i32 %".2")
    %"h" = call {i32, i1} @"llvm.usub.with.overflow.i32"(i32 %".1", i32 %".2")
            )rM   r   r³   rI   r—   Úsadd_with_overflowÚsmul_with_overflowÚssub_with_overflowÚuadd_with_overflowÚumul_with_overflowÚusub_with_overflowrb   rË  s        r   Útest_binops_with_overflowz/TestBuildInstructions.test_binops_with_overflow¬  s½   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø×"Ñ" 1 a¨Ô-Ø×"Ñ" 1 a¨Ô-Ø×"Ñ" 1 a¨Ô-Ø×"Ñ" 1 a¨Ô-Ø×"Ñ" 1 a¨Ô-Ø×"Ñ" 1 a¨Ô-Ø×Ñ˜ð !õ 	r   c                 óR  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}}|j                  |d«       |j                  |d«       |j                  |d«       | j                  |j                  «       | j                  |d«       y )Nr²   r˜  r”   r}  r~  r€  zœ            my_block:
                %"d" = sub i32 0, %".1"
                %"e" = xor i32 %".2", -1
                %"f" = fneg double %".3"
            )rM   r   r³   rI   r—   ÚnegÚnot_Úfnegr“  r”  rb   ©r   rM   r¶   ry  rz  r   s         r   Útest_unary_opsz$TestBuildInstructions.test_unary_opsÀ  s‘   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×"Ñ"×'Ñ'¨¨Ð+‰ˆˆ1ˆaØ�‰�A�sÔØ�‰�Q˜ÔØ�‰�Q˜ÔØ×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	r   c                 ó  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}t        j
                  t        j                  d«      t        j                  «      }t        j
                  t        j                  d«      t        j                  «      }|j                  ||d«      }| j                  |d«       |j                  ||«       |j                  ||«       | j                  |d«       y )Nr²   r˜  ro   r
   r   zN            my_block:
                %"c" = add i32 undef, undef
            zN            my_block:
                %"c" = add i32 %".1", %".2"
            )rM   r   r³   rI   r—   rC  r0  Ú	Undefinedrˆ   rb   Úreplace_usage)r   rM   r¶   ry  rz  Úundef1Úundef2r   s           r   Útest_replace_operandz*TestBuildInstructions.test_replace_operandÏ  sÎ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ü—‘œRŸZ™Z¨›^¬R¯\©\Ó:ˆÜ—‘œRŸZ™Z¨›^¬R¯\©\Ó:ˆØ�K‰K˜ ¨Ó,ˆØ×Ñ˜ð !ô 	ð 	
�‰˜ Ô"Ø	�‰˜ Ô"Ø×Ñ˜ð !õ 	r   c                 ó¼  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  d||d«       |j                  d||d«       |j                  d||d	«       |j                  d
||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d
||d«       |j                  d||d«       |j                  d||d«       | j                  t        «      5  |j                  d||d«       d d d «       | j                  t        «      5  |j                  d||d«       d d d «       | j                  |j                  «       | j                  |d«       y # 1 sw Y   ŒixY w# 1 sw Y   ŒCxY w)Nr²   r˜  ro   ú==r   ú!=r}  Ú<r~  ú<=r€  Ú>r�  ú>=r‚  r„  rª  r«  r¬  r­  r®  ÚunoÚzzrç   aj              my_block:
                %"c" = icmp eq i32 %".1", %".2"
                %"d" = icmp ne i32 %".1", %".2"
                %"e" = icmp ult i32 %".1", %".2"
                %"f" = icmp ule i32 %".1", %".2"
                %"g" = icmp ugt i32 %".1", %".2"
                %"h" = icmp uge i32 %".1", %".2"
                %"i" = icmp eq i32 %".1", %".2"
                %"j" = icmp ne i32 %".1", %".2"
                %"k" = icmp slt i32 %".1", %".2"
                %"l" = icmp sle i32 %".1", %".2"
                %"m" = icmp sgt i32 %".1", %".2"
                %"n" = icmp sge i32 %".1", %".2"
            )rM   r   r³   rI   r—   Úicmp_unsignedÚicmp_signedrë   rÍ   r“  r”  rb   rË  s        r   Útest_integer_comparisonsz.TestBuildInstructions.test_integer_comparisonsá  s³  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø×Ñ˜d A q¨#Ô.Ø×Ñ˜d A q¨#Ô.Ø×Ñ˜c 1 a¨Ô-Ø×Ñ˜d A q¨#Ô.Ø×Ñ˜c 1 a¨Ô-Ø×Ñ˜d A q¨#Ô.Ø×Ñ˜D ! Q¨Ô,Ø×Ñ˜D ! Q¨Ô,Ø×Ñ˜C  A sÔ+Ø×Ñ˜D ! Q¨Ô,Ø×Ñ˜C  A sÔ+Ø×Ñ˜D ! Q¨Ô,Ø×ÑœzÕ*Ø×Ñ  q¨!¨TÔ2÷ +à×ÑœzÕ*Ø×Ñ  q¨!¨TÔ2÷ +à×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	÷ +Ð*úç*Ð*ús   Å	GÅ;GÇGÇGc                 ó”  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  d||d«       |j                  d||d«       |j                  d||d	«       |j                  d
||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d
||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d||d«       |j                  d||dg d¢¬«       | j                  |j                  «       | j                  |d «       y )!Nr²   r˜  ro   rè  r   ré  r}  rê  r~  rë  r€  rì  r�  rí  r‚  r„  rª  r«  r¬  r­  r®  ÚordÚurî  ÚvÚwrP  ÚoltÚy)ÚnnanrÐ  rÑ  ÚarcprÏ  rÉ  a{              my_block:
                %"c" = fcmp oeq i32 %".1", %".2"
                %"d" = fcmp one i32 %".1", %".2"
                %"e" = fcmp olt i32 %".1", %".2"
                %"f" = fcmp ole i32 %".1", %".2"
                %"g" = fcmp ogt i32 %".1", %".2"
                %"h" = fcmp oge i32 %".1", %".2"
                %"i" = fcmp ueq i32 %".1", %".2"
                %"j" = fcmp une i32 %".1", %".2"
                %"k" = fcmp ult i32 %".1", %".2"
                %"l" = fcmp ule i32 %".1", %".2"
                %"m" = fcmp ugt i32 %".1", %".2"
                %"n" = fcmp uge i32 %".1", %".2"
                %"u" = fcmp ord i32 %".1", %".2"
                %"v" = fcmp uno i32 %".1", %".2"
                %"w" = fcmp ord i32 %".1", %".2"
                %"x" = fcmp uno i32 %".1", %".2"
                %"y" = fcmp nnan ninf nsz arcp fast olt i32 %".1", %".2"
            )
rM   r   r³   rI   r—   Úfcmp_orderedÚfcmp_unorderedr“  r”  rb   rË  s        r   Útest_float_comparisonsz,TestBuildInstructions.test_float_comparisons  sÄ  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø×Ñ˜T 1 a¨Ô-Ø×Ñ˜T 1 a¨Ô-Ø×Ñ˜S ! Q¨Ô,Ø×Ñ˜T 1 a¨Ô-Ø×Ñ˜S ! Q¨Ô,Ø×Ñ˜T 1 a¨Ô-Ø×Ñ˜t Q¨¨3Ô/Ø×Ñ˜t Q¨¨3Ô/Ø×Ñ˜s A q¨#Ô.Ø×Ñ˜t Q¨¨3Ô/Ø×Ñ˜s A q¨#Ô.Ø×Ñ˜t Q¨¨3Ô/à×Ñ˜U A q¨#Ô.Ø×Ñ˜U A q¨#Ô.Ø×Ñ˜u a¨¨CÔ0Ø×Ñ˜u a¨¨CÔ0Ø×Ñ˜u a¨¨CÚ%Lð 	ô 	Nà×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	r   c                 óš  — | j                  d¬«      }t        j                  t        d«      }t        j                  |«      }|j
                  j                  d d \  }}|j                  |||dd¬«       | j                  |j                  «       |j                  «        | j                  |j                  «       | j                  |d«       y )	Nr²   r˜  Tro   r   )rû  rú  rÉ  z„            my_block:
                %"c" = select arcp nnan i1 true, i32 %".1", i32 %".2"
                unreachable
            )rM   r   rC  Úint1r³   rI   r—   Úselectr“  r”  ÚunreachableÚ
assertTruerb   )r   rM   r´  r¶   ry  rz  s         r   Útest_misc_opsz#TestBuildInstructions.test_misc_ops3  sª   € Ø—
‘
 
�
Ó+ˆÜ�K‰Kœ˜dÓ#ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø�‰�q˜!˜Q Ð+;ˆÔ<Ø×Ñ˜×,Ñ,Ô-Ø×ÑÔØ�‰˜×+Ñ+Ô,Ø×Ñ˜ð !õ 	r   c                 óÈ  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  j                  d«      }|j                  j                  d«      }|j                  t        dd¬«      }|j                  ||«       |j                  ||«       | j                  |j                  «       | j                  |d	«       y )
Nr²   r˜  ro   Úb2Úb3Úmy_phirÎ  rÉ  zj            my_block:
                %"my_phi" = phi fast i32 [%".1", %"b2"], [%".2", %"b3"]
            )rM   r   r³   rI   r—   rK   ÚphirC   Úadd_incomingr“  r”  rb   )r   rM   r¶   ry  rz  Úbb2Úbb3r	  s           r   Útest_phizTestBuildInstructions.test_phiB  sÅ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø×Ñ×1Ñ1°$Ó7ˆØ×Ñ×1Ñ1°$Ó7ˆØ�k‰kœ% °ˆkÓ;ˆØ×Ñ˜˜CÔ Ø×Ñ˜˜CÔ Ø×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	r   c                 ó*  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}}|j                  t        d¬«      }|j                  t        dd¬«      }|j                  t        |d¬«      }d	|_        | j                  |j                  t        j                  t        «      «       |j                  ||«      }	| j                  |	j                  t        j                  «       «       |j                  ||«      }
| j                  |
j                  t        j                  «       «       |j                  |d
«      }| j                  |j                  t        «       |j                  ||d¬«      }| j                  |j                  t        j                  «       «       |j                  |dd¬«      }| j                  |j                  t        «       |j                  ||dd¬«      }| j                  |j                  t        j                  «       «       |j!                  |ddd¬«      }| j                  |j                  t        «       t"        s)t        j$                  t        j                  «       d «      }n-t        j$                  t        j                  t        «      d «      }|j                  t        j$                  t        d«      |«       | j'                  t(        «      5  |j                  ||«       d d d «       | j'                  t(        «      5  |j                  |«       d d d «       | j'                  t(        «      5 }|j                  ||«       d d d «       t"        s8| j                  t+        j,                  «      d«       | j/                  |d«       y | j                  t+        j,                  «      d«       | j/                  |d«       y # 1 sw Y   ŒÞxY w# 1 sw Y   Œ»xY w# 1 sw Y   Œ—xY w)Nr²   r˜  r”   r   rØ   r}  )r  rG   r~  r   r�  r   )r›   r„  Úseq_cstr“   )Úorderingr›   r«  )r  r›   rG   r‘   z*cannot store i32 to ptr: mismatching typesal                  my_block:
                    %"c" = alloca i32
                    %"d" = alloca i32, i32 42
                    %"e" = alloca double, i32 %".1", align 8
                    store double %".3", ptr %"e"
                    store i32 %".2", ptr %"c"
                    %"g" = load i32, ptr %"c"
                    store i32 %".2", ptr %"c", align 1
                    %"i" = load i32, ptr %"c", align 1
                    store atomic i32 %".2", ptr %"c" seq_cst, align 4
                    %"k" = load atomic i32, ptr %"c" seq_cst, align 4
                    store i32 5, ptr null
                z.cannot store i32 to double*: mismatching typesaw                  my_block:
                    %"c" = alloca i32
                    %"d" = alloca i32, i32 42
                    %"e" = alloca double, i32 %".1", align 8
                    store double %".3", double* %"e"
                    store i32 %".2", i32* %"c"
                    %"g" = load i32, i32* %"c"
                    store i32 %".2", i32* %"c", align 1
                    %"i" = load i32, i32* %"c", align 1
                    store atomic i32 %".2", i32* %"c" seq_cst, align 4
                    %"k" = load atomic i32, i32* %"c" seq_cst, align 4
                    store i32 5, i32* null
                )rM   r   r³   rI   r—   ÚallocarC   rD   r›   r9   r  rE   ÚstorerY  ÚloadÚstore_atomicÚload_atomicr   rC  rë   Ú	TypeErrorr$   rÃ  rb   )r   rM   r¶   ry  rz  Úzr   r}  r~  Úeer€  r�  r‚  r„  rª  r«  ÚptrrÅ  s                     r   Útest_mem_opsz"TestBuildInstructions.test_mem_opsQ  sþ  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×"Ñ"×'Ñ'¨¨Ð+‰ˆˆ1ˆaØ�N‰Nœ5 sˆNÓ+ˆØ�N‰Nœ5 r°ˆNÓ4ˆØ�N‰Nœ3 Q¨SˆNÓ1ˆØˆŒØ×Ñ˜Ÿ™¤§¡´Ó!4Ô5Ø�]‰]˜1˜aÓ ˆØ×Ñ˜Ÿ™¤"§+¡+£-Ô0Ø�M‰M˜!˜QÓˆØ×Ñ˜Ÿ™¤§¡£Ô/Ø�L‰L˜˜CÓ ˆØ×Ñ˜Ÿ™¤Ô'à�M‰M˜!˜Q aˆMÓ(ˆØ×Ñ˜Ÿ™¤§¡£Ô/Ø�L‰L˜˜C qˆLÓ)ˆØ×Ñ˜Ÿ™¤Ô'à× Ñ   A°	ÀÐ ÓCˆØ×Ñ˜Ÿ™¤§¡£Ô/Ø×Ñ ¨I¸QÀSÐÓIˆØ×Ñ˜Ÿ™¤Ô'Ý.Ü—+‘+œbŸn™nÓ.°Ó5‰Cä—+‘+œbŸn™n¬UÓ3°TÓ:ˆCØ�‰”b—k‘k¤%¨Ó+¨SÔ1à×ÑœyÕ)Ø�M‰M˜!˜QÔ÷ *à×ÑœyÕ)Ø�L‰L˜ŒO÷ *ð ×ÑœyÔ)¨RØ�M‰M˜!˜QÔ÷ *õ /Ø×ÑœS §¡Ó.ØIôKà×Ñ˜Uð %õ ð ×ÑœS §¡Ó.ØMôOà×Ñ˜Uð %õ ÷9 *Ð)úç)Ð)ú÷ *Ð)ús$   ÌO1Ì1O=Í P	Ï1O:Ï=PÐ	Pc                 óö  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  t        j                  t        «      d¬«      }|j                  |t        j                  t        d«      |gd¬«      }| j                  |j                  t        j                  t        «      «       t        s| j                  |d«       y | j                  |d«       y )	Nr²   r˜  ro   r   r‘   r}  z™                my_block:
                    %"c" = alloca ptr
                    %"d" = getelementptr ptr, ptr %"c", i32 5, i32 %".1"
                z�                my_block:
                    %"c" = alloca i32*
                    %"d" = getelementptr i32*, i32** %"c", i32 5, i32 %".1"
                )rM   r   r³   rI   r—   r  rE   rC   ÚgeprC  r9   r  r   rb   ©r   rM   r¶   ry  rz  r   r}  s          r   Útest_gepzTestBuildInstructions.test_gep›  sÇ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø�N‰Nœ2Ÿ>™>¬%Ó0°sˆNÓ;ˆØ�K‰K˜œBŸK™K¬¨qÓ1°1Ð5¸CˆKÓ@ˆØ×Ñ˜Ÿ™¤§¡´Ó!6Ô7Ý.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ r   c           
      ól  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}t
        j                  «       }t        j                  t        |||t        g«      }|j                  ||j                  «       d¬«      }|j                  |dD �cg c]  }t        j                  t        |«      ‘Œ c}d¬«      }	| j                  |	j                  t        j                  |«      «       t         s| j#                  |d«       y | j#                  |d«       y c c}w )	Nr²   r˜  ro   r}  ©r   r”   r~  z¹                my_block:
                    %"d" = bitcast i32 %".1" to ptr
                    %"e" = getelementptr {i64, ptr, ptr, ptr, i64}, ptr %"d", i32 0, i32 3
                zç                my_block:
                    %"d" = bitcast i32 %".1" to {i64, i8*, i8*, i8*, i64}*
                    %"e" = getelementptr {i64, i8*, i8*, i8*, i64}, {i64, i8*, i8*, i8*, i64}* %"d", i32 0, i32 3
                )rM   r   r³   rI   r—   rŠ   rº   ÚLiteralStructTyperÝ   Úbitcastr  rC  rC   r9   r  rE   r   rb   )
r   rM   r¶   ry  rz  Úint8ptrÚlsr}  rP  r~  s
             r   Útest_gep_castinstrz(TestBuildInstructions.test_gep_castinstr°  sÿ   € ð —
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ü—/‘/Ó#ˆÜ×!Ñ!¤5¨'°7¸GÄUÐ"KÓLˆØ�O‰O˜A˜rŸ}™}›°SˆOÓ9ˆØ�K‰K˜¹6ÓB¹6°aœBŸK™K¬¨qÕ1¸6ÑBÈˆKÓMˆØ×Ñ˜Ÿ™¤§¡°Ó!8Ô9Ý.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ ùò Cs   Â,!D1
c           
      óÄ  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}d}t
        j                  «       }t        j                  t        |||t        g«      }|j                  ||j                  |¬«      d¬«      }|j                  |dD �	cg c]  }	t        j                  t        |	«      ‘Œ c}	d¬«      }
| j                  |
j                  j                  |«       | j                  |
j                  t        j                   ||¬«      «       t"        s| j%                  |d	«       y | j%                  |d
«       y c c}	w )Nr²   r˜  ro   r“   r{  r}  r   r~  zÓ                my_block:
                    %"d" = bitcast i32 %".1" to ptr addrspace(4)
                    %"e" = getelementptr {i64, ptr, ptr, ptr, i64}, ptr addrspace(4) %"d", i32 0, i32 3
                a                  my_block:
                    %"d" = bitcast i32 %".1" to {i64, i8*, i8*, i8*, i64} addrspace(4)*
                    %"e" = getelementptr {i64, i8*, i8*, i8*, i64}, {i64, i8*, i8*, i8*, i64} addrspace(4)* %"d", i32 0, i32 3
                )rM   r   r³   rI   r—   rŠ   rº   r!  rÝ   r"  r  rC  rC   r9   r  r|  rE   r   rb   )r   rM   r¶   ry  rz  r|  r#  r$  r}  rP  r~  s              r   Útest_gep_castinstr_addrspacez2TestBuildInstructions.test_gep_castinstr_addrspaceÈ  s%  € ð —
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Øˆ	Ü—/‘/Ó#ˆÜ×!Ñ!¤5¨'°7¸GÄUÐ"KÓLˆØ�O‰O˜A˜rŸ}™}°y˜}ÓAÈˆOÓLˆØ�K‰K˜¹6ÓB¹6°aœBŸK™K¬¨qÕ1¸6ÑBÈˆKÓMˆØ×Ñ˜Ÿ™×)Ñ)¨9Ô5Ø×Ñ˜Ÿ™¤§¡°À9Ô!MÔNÝ.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ ùò Cs   Â0!E
c                 óŒ  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}d}|j                  t        j                  t        |¬«      d¬«      }t        s&| j                  t        |j                  «      d«       n%| j                  t        |j                  «      d«       | j                  |j                  j                  j                  |«       |j                  |t        j                  t        d	«      |gd
¬«      }| j                  |j                  j                  |«       |j                  |t        j                  t        d«      gd¬«      }| j                  |j                  j                  |«       t        s| j!                  |d«       y | j!                  |d«       y )Nr²   r˜  ro   r“   r{  r   r  zi32 addrspace(4)**r‘   r}  r’   r~  zÿ                my_block:
                    %"c" = alloca ptr addrspace(4)
                    %"d" = getelementptr ptr addrspace(4), ptr %"c", i32 5, i32 %".1"
                    %"e" = getelementptr i32, ptr addrspace(4) %"d", i32 10
                a                  my_block:
                    %"c" = alloca i32 addrspace(4)*
                    %"d" = getelementptr i32 addrspace(4)*, i32 addrspace(4)** %"c", i32 5, i32 %".1"
                    %"e" = getelementptr i32, i32 addrspace(4)* %"d", i32 10
                )rM   r   r³   rI   r—   r  rE   rC   r   r9   r$   r  Úpointeer|  r  rC  rb   )	r   rM   r¶   ry  rz  r|  r   r}  r~  s	            r   Útest_gep_addrspacez(TestBuildInstructions.test_gep_addrspaceâ  sY  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Øˆ	Ø�N‰Nœ2Ÿ>™>¬%¸9ÔEÈCˆNÓPˆÝ.Ø×ÑœS §¡›[¨%Õ0à×ÑœS §¡›[Ð*>Ô?Ø×Ñ˜Ÿ™Ÿ™×1Ñ1°9Ô=Ø�K‰K˜œBŸK™K¬¨qÓ1°1Ð5¸CˆKÓ@ˆØ×Ñ˜Ÿ™×)Ñ)¨9Ô5Ø�K‰K˜œBŸK™K¬¨rÓ2Ð3¸#ˆKÓ>ˆØ×Ñ˜Ÿ™×)Ñ)¨9Ô5Ý.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ r   c                 ó  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}t        j
                  t        t        g«      }t        j
                  t        |g«      }t        j                  |t        j                  t        d«      t        j                  t        d«      f«      }|j                  |dd¬«      }|j                  ||dd¬«      }	|j                  |	t        j                  t        d	«      d
d¬«      }
| j                  |	j                  |«       | j                  |
j                  |«       |j                  |d¬«      }|j                  |d¬«      }|j                  |dd¬«      }|j                  |d
d¬«      }|j                  |dd¬«      }|j                  |dd¬«      }|j                  ||d
d¬«      }|j                  ||dd¬«      }| j                  |j                  t        «       | j                  |j                  |«       | j                  |j                  t        «       | j                  |j                  t        «       | j                  |j                  |«       | j                  |j                  |«       | j!                  t"        «      5  |j                  |d«       d d d «       | j!                  t"        «      5  |j                  |d«       d d d «       | j!                  t"        «      5  |j                  |d«       d d d «       | j!                  t"        «      5  |j                  ||d«       d d d «       | j!                  t"        «      5  |j                  ||d
«       d d d «       t$        s| j'                  |d«       y | j'                  |d«       y # 1 sw Y   Œ÷xY w# 1 sw Y   ŒÓxY w# 1 sw Y   Œ¯xY w# 1 sw Y   ŒŠxY w# 1 sw Y   ŒexY w)Nr²   r˜  ro   r“   Tr   r   r}  Fr   r~  r  rª  r«  r¬  )r   r   r­  )r   r   r®  r¯  r°  )r   r   r‘   a                  my_block:
                    %"c" = extractvalue {i32, i1} {i32 4, i1 true}, 0
                    %"d" = insertvalue {i32, i1} {i32 4, i1 true}, i32 %".1", 0
                    %"e" = insertvalue {i32, i1} %"d", i1 false, 1
                    %"ptr" = alloca {i8, {i32, i1}}
                    %"j" = load {i8, {i32, i1}}, ptr %"ptr"
                    %"k" = extractvalue {i8, {i32, i1}} %"j", 0
                    %"l" = extractvalue {i8, {i32, i1}} %"j", 1
                    %"m" = extractvalue {i8, {i32, i1}} %"j", 1, 0
                    %"n" = extractvalue {i8, {i32, i1}} %"j", 1, 1
                    %"o" = insertvalue {i8, {i32, i1}} %"j", {i32, i1} %"l", 1
                    %"p" = insertvalue {i8, {i32, i1}} %"j", i32 %".1", 1, 0
                a"                  my_block:
                    %"c" = extractvalue {i32, i1} {i32 4, i1 true}, 0
                    %"d" = insertvalue {i32, i1} {i32 4, i1 true}, i32 %".1", 0
                    %"e" = insertvalue {i32, i1} %"d", i1 false, 1
                    %"ptr" = alloca {i8, {i32, i1}}
                    %"j" = load {i8, {i32, i1}}, {i8, {i32, i1}}* %"ptr"
                    %"k" = extractvalue {i8, {i32, i1}} %"j", 0
                    %"l" = extractvalue {i8, {i32, i1}} %"j", 1
                    %"m" = extractvalue {i8, {i32, i1}} %"j", 1, 0
                    %"n" = extractvalue {i8, {i32, i1}} %"j", 1, 1
                    %"o" = insertvalue {i8, {i32, i1}} %"j", {i32, i1} %"l", 1
                    %"p" = insertvalue {i8, {i32, i1}} %"j", i32 %".1", 1, 0
                )rM   r   r³   rI   r—   r!  rC   r   rŠ   rC  Úextract_valueÚinsert_valuer9   r  r  r  rë   r  r   rb   )r   rM   r¶   ry  rz  Útp_innerÚtp_outerÚc_innerr   r}  r~  Úp_outerrª  r«  r¬  r­  r®  r¯  r°  s                      r   Útest_extract_insert_valuez/TestBuildInstructions.test_extract_insert_value   sY  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ü×'Ñ'¬´¨Ó6ˆÜ×'Ñ'¬¨xÐ(8Ó9ˆÜ—+‘+˜h¬¯©´U¸AÓ)>Ü)+¯©´T¸4Ó)@ð)Bó Cˆð ×!Ñ! '¨1°3Ð!Ó7ˆØ× Ñ  ¨!¨Q°SÐ Ó9ˆØ× Ñ  ¤B§K¡K´°eÓ$<¸aÀcÐ ÓJˆØ×Ñ˜Ÿ™ Ô*Ø×Ñ˜Ÿ™ Ô*à—.‘. °�.Ó6ˆØ�L‰L˜ sˆLÓ+ˆØ×!Ñ! ! Q¨SÐ!Ó1ˆØ×!Ñ! ! Q¨SÐ!Ó1ˆØ×!Ñ! ! V°#Ð!Ó6ˆØ×!Ñ! ! V°#Ð!Ó6ˆØ× Ñ   A q¨sÐ Ó3ˆØ× Ñ   A v°CÐ Ó8ˆØ×Ñ˜Ÿ™¤Ô&Ø×Ñ˜Ÿ™ Ô*Ø×Ñ˜Ÿ™¤Ô'Ø×Ñ˜Ÿ™¤Ô&Ø×Ñ˜Ÿ™ Ô*Ø×Ñ˜Ÿ™ Ô*à×ÑœyÕ)à×!Ñ! '¨1Ô-÷ *ð ×ÑœyÕ)à×!Ñ! '¨6Ô2÷ *ð ×ÑœyÕ)à×!Ñ! '¨1Ô-÷ *ð ×ÑœyÕ)à× Ñ   A qÔ)÷ *ð ×ÑœyÕ)à× Ñ  ¨!¨QÔ/÷ *õ /Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ ÷A *Ð)ú÷ *Ð)ú÷ *Ð)ú÷ *Ð)ú÷ *Ð)ús<   Ê=OË-OÌOÍO*Í>O6ÏOÏOÏO'Ï*O3Ï6O?c                 ón  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}}}|j                  |t        d¬«      }|j                  |t        d¬«      }|j                  |t        d¬«      }	|j                  |t        d«      }
|j                  |
t        d«      }|j                  |t        d	«      }|j                  |t        d
«      }|j!                  |t        d«      }|j#                  |t        d«      }|j%                  |t        d«      }|j'                  |t        j(                  t        «      d«      }|j+                  |t        d«      }| j-                  |j.                  «       t0        s| j3                  |d«       y | j3                  |d«       y )Nr²   r˜  r“   r   r}  r~  ÚfbÚfcr�  r‚  ÚfdÚfer„  rª  r«  aŸ                  my_block:
                    %"c" = trunc i32 %".1" to i8
                    %"d" = zext i8 %"c" to i32
                    %"e" = sext i8 %"c" to i32
                    %"fb" = fptrunc double %".3" to float
                    %"fc" = fpext float %"fb" to double
                    %"g" = fptoui double %".3" to i32
                    %"h" = fptosi double %".3" to i8
                    %"fd" = uitofp i32 %"g" to float
                    %"fe" = sitofp i8 %"h" to double
                    %"i" = ptrtoint ptr %".4" to i32
                    %"j" = inttoptr i32 %"i" to ptr
                    %"k" = bitcast i32 %".1" to float
                a                   my_block:
                    %"c" = trunc i32 %".1" to i8
                    %"d" = zext i8 %"c" to i32
                    %"e" = sext i8 %"c" to i32
                    %"fb" = fptrunc double %".3" to float
                    %"fc" = fpext float %"fb" to double
                    %"g" = fptoui double %".3" to i32
                    %"h" = fptosi double %".3" to i8
                    %"fd" = uitofp i32 %"g" to float
                    %"fe" = sitofp i8 %"h" to double
                    %"i" = ptrtoint i32* %".4" to i32
                    %"j" = inttoptr i32 %"i" to i8*
                    %"k" = bitcast i32 %".1" to float
                )rM   r   r³   rI   r—   ÚtruncrŠ   ÚzextrC   ÚsextÚfptruncÚfltÚfpextrD   ÚfptouiÚfptosiÚuitofpÚsitofpÚptrtointÚinttoptrrE   r"  r“  r”  r   rb   )r   rM   r¶   ry  rz  Úfar  r   r}  r~  r4  r5  r�  r‚  r6  r7  r„  rª  r«  s                      r   Útest_cast_opsz#TestBuildInstructions.test_cast_opsM  sn  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×(Ñ(×-Ñ-¨b¨qÐ1‰ˆˆ1ˆb�#Ø�M‰M˜!œT¨ˆMÓ,ˆØ�L‰L˜œE¨ˆLÓ,ˆØ�L‰L˜œE¨ˆLÓ,ˆØ�_‰_˜R¤ dÓ+ˆØ�]‰]˜2œs DÓ)ˆØ�N‰N˜2œu cÓ*ˆØ�N‰N˜2œt SÓ)ˆØ�^‰^˜Aœs DÓ)ˆØ�^‰^˜Aœs DÓ)ˆØ×Ñ˜S¤%¨Ó-ˆØ×Ñ˜Q¤§¡¬tÓ 4°cÓ:ˆØ�O‰O˜Aœs CÓ(ˆØ×Ñ˜×,Ñ,Ô-Ý.Ø×Ñ˜Uð %õ ð  ×Ñ˜Uð %õ r   c                 óx  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  t        d¬«      }|j                  d||dd«      }| j                  |j                  t        «       t        s| j                  |d«       y | j                  |d	«       y )
Nr²   r˜  ro   r   rˆ   Ú	monotonicr}  z—                my_block:
                    %"c" = alloca i32
                    %"d" = atomicrmw add ptr %"c", i32 %".1" monotonic
                z˜                my_block:
                    %"c" = alloca i32
                    %"d" = atomicrmw add i32* %"c", i32 %".1" monotonic
                )rM   r   r³   rI   r—   r  rC   Ú
atomic_rmwr9   r  r   rb   r  s          r   Útest_atomicrmwz$TestBuildInstructions.test_atomicrmw  s©   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø�N‰Nœ5 sˆNÓ+ˆØ×Ñ˜u a¨¨K¸Ó=ˆØ×Ñ˜Ÿ™¤Ô'Ý.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ r   c                 ó  — | j                  d¬«      }t        j                  |«      }|j                  j	                  d¬«      }|j                  |«       | j                  |j                  «       | j                  |d«       y )Nr²   r˜  ÚtargetzE            my_block:
                br label %"target"
            )	rM   r   r³   rI   rK   Úbranchr  r”  rb   )r   rM   r¶   Ú	bb_targets       r   Útest_branchz!TestBuildInstructions.test_branch“  sl   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×$Ñ$×7Ñ7¸XÐ7ÓFˆ	Ø�‰�yÔ!Ø�‰˜×+Ñ+Ô,Ø×Ñ˜ð !õ 	r   c                 ór  — | j                  d¬«      }t        j                  |«      }|j                  j	                  d¬«      }|j                  j	                  d¬«      }|j                  t        j                  t        d«      ||«       | j                  |j                  «       | j                  |d«       y )Nr²   r˜  Úb_trueÚb_falseFza            my_block:
                br i1 false, label %"b_true", label %"b_false"
            )rM   r   r³   rI   rK   ÚcbranchrC  r   r  r”  rb   )r   rM   r¶   Úbb_trueÚbb_falses        r   Útest_cbranchz"TestBuildInstructions.test_cbranchž  s”   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×"Ñ"×5Ñ5¸8Ð5ÓDˆØ×#Ñ#×6Ñ6¸IÐ6ÓFˆØ�‰œŸ™¤D¨%Ó0°'¸8ÔDØ�‰˜×+Ñ+Ô,Ø×Ñ˜ð !õ 	r   c                 óÐ  — | j                  d¬«      }t        j                  |«      }|j                  j	                  d¬«      }|j                  j	                  d¬«      }|j                  t        j                  t        d«      ||«      }|j                  ddg«       | j                  |j                  «       | j                  |d«       | j                  |j                  d	«       y )
Nr²   r˜  rP  rQ  Fr‘   rØ   zk            my_block:
                br i1 false, label %"b_true", label %"b_false", !prof !0
            zC            !0 = !{ !"branch_weights", i32 5, i32 42 }
            )rM   r   r³   rI   rK   rR  rC  r   Úset_weightsr  r”  rb   rl   r@   )r   rM   r¶   rS  rT  Úbrs         r   Útest_cbranch_weightsz*TestBuildInstructions.test_cbranch_weightsª  sÁ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×"Ñ"×5Ñ5¸8Ð5ÓDˆØ×#Ñ#×6Ñ6¸IÐ6ÓFˆØ�_‰_œRŸ[™[¬¨uÓ5°wÀÓIˆØ
�‰˜˜2�wÔØ�‰˜×+Ñ+Ô,Ø×Ñ˜ð !ô 	ð 	×Ñ˜GŸN™Nð -õ 	r   c                 óð  — | j                  d¬«      }t        j                  |«      }|j                  j	                  d¬«      }|j                  j	                  d¬«      }|j                  t        j                  |j                  |«      «      }|j                  |«       |j                  |«       | j                  |j                  «       t        s| j                  |d«       y | j                  |d«       y )Nr²   r˜  Úb_1Úb_2zŒ                my_block:
                    indirectbr ptr blockaddress(@"my_func", %"b_1"), [label %"b_1", label %"b_2"]
                zŒ                my_block:
                    indirectbr i8* blockaddress(@"my_func", %"b_1"), [label %"b_1", label %"b_2"]
                )rM   r   r³   rI   rK   Úbranch_indirectÚBlockAddressÚadd_destinationr  r”  r   rb   )r   rM   r¶   Úbb_1Úbb_2Ú
indirectbrs         r   Útest_branch_indirectz*TestBuildInstructions.test_branch_indirectº  sÓ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×2Ñ2¸Ð2Ó>ˆØ×Ñ×2Ñ2¸Ð2Ó>ˆØ×,Ñ,Ü�O‰O˜G×,Ñ,¨dÓ3ó5ˆ
à×"Ñ" 4Ô(Ø×"Ñ" 4Ô(Ø�‰˜×+Ñ+Ô,Ý.Ø×Ñ˜Uð %õ ð
 ×Ñ˜Uð %õ r   c                 óä  ‡ — ˆ fd„}‰ j                  d¬«      }t        j                  |«      }|j                  «         ||d«       ‰ j                  d¬«      }t        j                  |«      }|j	                  t        d«      «        ||d«       ‰ j                  d¬«      }t        j                  |«      }|j                  «       }|j                  d|j                  j                  d	«      «        ||d
«       ‰ j                  d¬«      }t        j                  |«      }|j	                  t        d«      «      }|j                  d|j                  j                  d	«      «        ||d«       y )Nc                 ó`   •— ‰j                  | j                  «       ‰j                  | |«       y r#   )r  r”  rb   )rM   Úexpected_irr   s     €r   Úcheckz1TestBuildInstructions.test_returns.<locals>.checkÐ  s%   ø€ Ø�O‰O˜E×/Ñ/Ô0Ø×Ñ˜U KÕ0r   r²   r˜  z;            my_block:
                ret void
            Úother_blockr‘   z?            other_block:
                ret i32 5
            rŸ   ry   zD            my_block:
                ret void, !dbg !0
            é   zE            my_block:
                ret i32 6, !dbg !0
            )	rM   r   r³   r´   ÚretrC   r¡   r@   r¢   )r   rg  rM   r¶   r§  s   `    r   Útest_returnsz"TestBuildInstructions.test_returnsÏ  s>  ø€ ô	1ð —
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×ÑÔÙˆeð ô 	ð
 —
‘
 �
Ó.ˆÜ—,‘,˜uÓ%ˆØ�‰”E˜!“HÔÙˆeð ô 	ð —
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×ÑÓ!ˆØ×Ñ˜% §¡×!:Ñ!:¸2Ó!>Ô?Ùˆeð ô 	ð
 —
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ�{‰{œ5 ›8Ó$ˆØ×Ñ˜% §¡×!:Ñ!:¸2Ó!>Ô?Ùˆeð õ 	r   c                 ó´  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  j                  d¬«      }|j                  j                  d¬«      }|j                  j                  d¬«      }|j                  j                  d¬«      }|j                  ||«      }	|	j                  t        j                  t        d«      |«       |	j                  t        j                  t        d	«      |«       |	j                  d|«       | j                  |j                  «       | j                  |d
«       y )Nr²   r˜  ro   ÚonzeroÚononeÚontwoÚ	otherwiser   r   zœ            my_block:
                switch i32 %".1", label %"otherwise" [i32 0, label %"onzero" i32 1, label %"onone" i32 2, label %"ontwo"]
            )rM   r   r³   rI   r—   rK   ÚswitchÚadd_caserC  rC   r  r”  rb   )
r   rM   r¶   ry  rz  Ú	bb_onzeroÚbb_ononeÚbb_ontwoÚbb_elseÚsws
             r   Útest_switchz!TestBuildInstructions.test_switch÷  s  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø×$Ñ$×7Ñ7¸XÐ7ÓFˆ	Ø×#Ñ#×6Ñ6¸GÐ6ÓDˆØ×#Ñ#×6Ñ6¸GÐ6ÓDˆØ×"Ñ"×5Ñ5¸;Ð5ÓGˆØ�^‰^˜A˜wÓ'ˆØ
�‰”B—K‘K¤ qÓ)¨9Ô5Ø
�‰”B—K‘K¤ qÓ)¨8Ô4à
�‰�A�xÔ Ø�‰˜×+Ñ+Ô,Ø×Ñ˜ð !õ 	r   c                 ó¢  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}t        j
                  t        t        t        f«      }t        j
                  t        t        fd¬«      }t        j
                  t        t        t        f«      }t        j                  |j                  j                  |d«      }t        j                  |j                  j                  |d«      }	t        j                  |j                  j                  |d«      }
|j                  |||fd	«       |j                  |	||fd
«       |j                  |
||fd«       |j                  |||fdd¬«       |j                  |||fd«      }|j                  j                  d«       |j                  |||fdd¬«       |j                  |||fdd¬«       |j                  |||fdd¬«       |j                  |||fdd¬«       |j                  |||fdd¬«       |j                  |||fdd¬«       | j                  |d«       y ) Nr²   r˜  ro   Tr„   r€  r�  r‚  Úres_fÚres_gÚres_hÚ
res_f_fastÚfastcc)ÚcconvÚres_f_readonlyÚreadonlyÚres_fastrÏ  )ÚfastmathÚres_nnan_ninf)rú  rÐ  Úres_noinlinerÊ   )ÚattrsÚres_alwaysinliner‚   Úres_noinline_ro)rÊ   r�  Úres_convergentrƒ   aT          my_block:
            %"res_f" = call float @"f"(i32 %".1", i32 %".2")
            %"res_g" = call double (i32, ...) @"g"(i32 %".2", i32 %".1")
            %"res_h" = call half @"h"(i32 %".1", i32 %".2")
            %"res_f_fast" = call fastcc float @"f"(i32 %".1", i32 %".2")
            %"res_f_readonly" = call float @"f"(i32 %".1", i32 %".2") readonly
            %"res_fast" = call fast float @"f"(i32 %".1", i32 %".2")
            %"res_nnan_ninf" = call ninf nnan float @"f"(i32 %".1", i32 %".2")
            %"res_noinline" = call float @"f"(i32 %".1", i32 %".2") noinline
            %"res_alwaysinline" = call float @"f"(i32 %".1", i32 %".2") alwaysinline
            %"res_noinline_ro" = call float @"f"(i32 %".1", i32 %".2") noinline readonly
            %"res_convergent" = call float @"f"(i32 %".1", i32 %".2") convergent
        )rM   r   r³   rI   r—   rB   r<  rC   rD   ÚhlfrF   r@   r[  r‡   rˆ   rb   )r   rM   r¶   ry  rz  Útp_fÚtp_gÚtp_hr€  r�  r‚  r€  s               r   Ú	test_callzTestBuildInstructions.test_call
  s  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ü�‰œs¤U¬E NÓ3ˆÜ�‰œs¤U H°dÔ;ˆÜ�‰œs¤U¬E NÓ3ˆÜ�K‰K˜×(Ñ(×/Ñ/°°sÓ;ˆÜ�K‰K˜×(Ñ(×/Ñ/°°sÓ;ˆÜ�K‰K˜×(Ñ(×/Ñ/°°sÓ;ˆØ�‰�Q˜˜A˜ Ô(Ø�‰�Q˜˜A˜ Ô(Ø�‰�Q˜˜A˜ Ô(Ø�‰�Q˜˜A˜ °HˆÔ=Ø Ÿ™ a¨!¨Q¨Ð1AÓBˆØ×!Ñ!×%Ñ% jÔ1Ø�‰�Q˜˜A˜ 
°VˆÔ<Ø�‰�Q˜˜A˜ Ð:JˆÔKØ�‰�Q˜˜A˜ °jˆÔAØ�‰�Q˜˜A˜Ð 2¸.ˆÔIØ�‰�Q˜˜A˜Ð 1ð :Fˆô 	Gà�‰�Q˜˜A˜Ð 0¸ˆÔEØ×Ñ˜ð !õ 	r   c                 óô  — | j                  d¬«      }t        j                  |«      }t        j                  t        j                  «       t        j
                  «       gdz  «      }t        j                  |j                  |d«      }|j                  t        d¬«      }|j                  j                  d«      }|j                  ||||f«       t        s| j                  |d«       y	| j                  |d«       y	)
z9
        Function calls with metadata arguments.
        r²   r˜  r”   zllvm.dbg.declarery  ry   z¯                my_block:
                    %"a" = alloca i32
                    call void @"llvm.dbg.declare"(metadata ptr %"a", metadata !0, metadata !0)
                z°                my_block:
                    %"a" = alloca i32
                    call void @"llvm.dbg.declare"(metadata i32* %"a", metadata !0, metadata !0)
                N)rM   r   r³   rB   rY  ÚMetaDataTyperF   r@   r  rC   r¢   r[  r   rb   )r   rM   r¶   Údbg_declare_tyÚdbg_declarery  rz  s          r   Útest_call_metadataz(TestBuildInstructions.test_call_metadata0  sÍ   € ð —
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜŸ™¬¯©«¼¿¹Ó9JÐ8KÈaÑ8OÓPˆÜ—k‘kØ�N‰NØØó ˆð �N‰Nœ5 sˆNÓ+ˆØ�N‰N×'Ñ'¨Ó+ˆØ�‰�[ 1 a¨ )Ô,Ý.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ r   c                 ó   — | j                  d¬«      }t        j                  |«      }t        j                  t        j                  «       t
        j                  «       t
        t
        j                  «       f«      }t        j                  |j                  j                  |d«      }|j                  d   j                  d«       |j                  t
        d¬«      }|j                  t
        d¬«      }|j                  ||t        j                  t
        d«      |fd	d
dœ¬«       t        s| j!                  |d«       y | j!                  |d«       y )Nr²   r˜  Úfunr   ÚsretÚretvalÚotherrØ   ©r–  r–   r–   ©r   ro   ©Ú	arg_attrszÖ            my_block:
                %"retval" = alloca i32
                %"other" = alloca i32
                call void @"fun"\(ptr noalias sret(\(i32\))? %"retval", i32 42, ptr noalias %"other"\)
            zÚ            my_block:
                %"retval" = alloca i32
                %"other" = alloca i32
                call void @"fun"\(i32\* noalias sret(\(i32\))? %"retval", i32 42, i32\* noalias %"other"\)
            )rM   r   r³   rB   rY  rC   rº   rF   rI   r@   r—   r˜   r  r[  rC  r   rd   )r   rM   r¶   Úfun_tyr•  r—  r˜  s          r   Útest_call_attributesz*TestBuildInstructions.test_call_attributesK  s  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ—‘Ü�K‰K‹MœE×,Ñ,Ó.´´u×7GÑ7GÓ7IÐJóLˆä�k‰k˜'×*Ñ*×1Ñ1°6¸5ÓAˆØ�‰�‰×!Ñ! &Ô)Ø—‘¤¨H�Ó5ˆØ—‘œu¨7�Ó3ˆØ�‰ØØ”R—[‘[¤¨Ó+¨UÐ3à&Øñð 	ô 	
õ /Ø×"Ñ" 5ð +õ ð ×"Ñ" 5ð +õ r   c                 óX  — | j                  d¬«      }t        j                  |«      }t        j                  t        j                  «       d«      }t        j
                  |j                  j                  |d«      }|j                  |d«       |j                  |dd¬«       |j                  |dd¬«       |j                  |dd¬«       |j                  |dd	¬«       |j                  |dd
¬«       |j                  |dg ¬«       |j                  |dd¬«       | j                  |d«       y )Nr²   r˜  ry   Úmy_funF)ÚtailTr¡  ÚnotailÚmusttailznot a markeraI          my_block:
            call void @"my_fun"()
            call void @"my_fun"()
            tail call void @"my_fun"()
            tail call void @"my_fun"()
            notail call void @"my_fun"()
            musttail call void @"my_fun"()
            call void @"my_fun"()
            tail call void @"my_fun"()
        )
rM   r   r³   rB   rY  rF   rI   r@   r[  rb   ©r   rM   r¶   r�  r•  s        r   Útest_call_tailz$TestBuildInstructions.test_call_tailk  sõ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ—‘¤§¡£°Ó3ˆÜ�k‰k˜'×*Ñ*×1Ñ1°6¸8ÓDˆà�‰�S˜"ÔØ�‰�S˜" 5ˆÔ)Ø�‰�S˜" 4ˆÔ(Ø�‰�S˜" 6ˆÔ*Ø�‰�S˜" 8ˆÔ,Ø�‰�S˜" :ˆÔ.Ø�‰�S˜" 2ˆÔ&Ø�‰�S˜" >ˆÔ2à×Ñ˜ð 
!õ 
	r   c                 ót  — | j                  «       }t        j                  |«      }t        j                  t        j                  «       d«      }t        j
                  |j                  j                  |d«      }| j                  t        «      5  |j                  |dddi¬«       d d d «       y # 1 sw Y   y xY w)Nry   r•  r   r–  r›  )rM   r   r³   rB   rY  rF   rI   r@   rë   rÍ   r[  r¤  s        r   Útest_invalid_call_attributesz2TestBuildInstructions.test_invalid_call_attributes†  s   € Ø—
‘
“ˆÜ—,‘,˜uÓ%ˆÜ—‘¤§¡£°Ó3ˆÜ�k‰k˜'×*Ñ*×1Ñ1°6¸5ÓAˆØ×ÑœzÕ*à�L‰L˜˜b¨Q°¨KˆLÔ8÷ +×*Ñ*ús   ÂB.Â.B7c                 óê  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}t        j
                  t        t        t        f«      }t        j                  |j                  j                  |d«      }|j                  j                  d¬«      }|j                  j                  d¬«      }|j                  |||f||d«       | j                  |d«       y )	Nr²   r˜  ro   r€  ÚnormalÚunwindrz  z£            my_block:
                %"res_f" = invoke float @"f"(i32 %".1", i32 %".2")
                    to label %"normal" unwind label %"unwind"
            )rM   r   r³   rI   r—   rB   r<  rC   rF   r@   rK   Úinvokerb   )	r   rM   r¶   ry  rz  r‹  r€  Ú	bb_normalÚ	bb_unwinds	            r   Útest_invokez!TestBuildInstructions.test_invoke�  sÍ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ü�‰œs¤U¬E NÓ3ˆÜ�K‰K˜×(Ñ(×/Ñ/°°sÓ;ˆØ×$Ñ$×7Ñ7¸XÐ7ÓFˆ	Ø×$Ñ$×7Ñ7¸XÐ7ÓFˆ	Ø�‰�q˜1˜a˜& )¨Y¸Ô@Ø×Ñ˜ð !õ 	r   c                 ó(  — | j                  d¬«      }t        j                  |«      }t        j                  t        j                  «       t
        j                  «       t
        t
        j                  «       f«      }t        j                  |j                  j                  |d«      }d|_
        |j                  d   j                  d«       |j                  t
        d¬«      }|j                  t
        d¬«      }|j                  j                  d	¬«      }|j                  j                  d
¬«      }|j                  ||t        j                   t
        d«      |f||ddddddœ¬«       t"        s| j%                  |d«       y | j%                  |d«       y )Nr²   r˜  r•  r~  r   r–  r—  r˜  r©  rª  rØ   rÏ  rÊ   r™  r–   rš  )r  rƒ  r†  rœ  a+              my_block:
                %"retval" = alloca i32
                %"other" = alloca i32
                invoke fast fastcc void @"fun"\(ptr noalias sret(\(i32\))? %"retval", i32 42, ptr noalias %"other"\) noinline
                    to label %"normal" unwind label %"unwind"
            a/              my_block:
                %"retval" = alloca i32
                %"other" = alloca i32
                invoke fast fastcc void @"fun"\(i32\* noalias sret(\(i32\))? %"retval", i32 42, i32\* noalias %"other"\) noinline
                    to label %"normal" unwind label %"unwind"
            )rM   r   r³   rB   rY  rC   rº   rF   rI   r@   Úcalling_conventionr—   r˜   r  rK   r«  rC  r   rd   )	r   rM   r¶   r�  r•  r—  r˜  r¬  r­  s	            r   Útest_invoke_attributesz,TestBuildInstructions.test_invoke_attributesž  sY  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ—‘Ü�K‰K‹MœE×,Ñ,Ó.´´u×7GÑ7GÓ7IÐJóLˆä�k‰k˜'×*Ñ*×1Ñ1°6¸5ÓAˆØ!)ˆÔØ�‰�‰×!Ñ! &Ô)Ø—‘¤¨H�Ó5ˆØ—‘œu¨7�Ó3ˆØ×$Ñ$×7Ñ7¸XÐ7ÓFˆ	Ø×$Ñ$×7Ñ7¸XÐ7ÓFˆ	Ø�‰ØØ”R—[‘[¤¨Ó+¨UÐ3ØØØØØà&Øñð 	ô 	
õ /Ø×"Ñ" 5ð +õ ð ×"Ñ" 5ð +õ r   c           
      óÂ  — | j                  d¬«      }t        j                  |«      }|j                  t        j                  t
        t        j                  «       g«      d«      }t        j                  |j                  j                  t        j                  «       d«      }d|_        |j                  t        j                  |«      «       |j                  t        j                  t        j                  t        j                   |j"                  d«      |g«      «      «       |j%                  |«       t&        s| j)                  |d«       y | j)                  |d«       y )	Nr²   r˜  ÚlpÚ_ZTIiTr   zë                my_block:
                    %"lp" = landingpad {i32, ptr}
                        catch ptr @"_ZTIi"
                        filter [1 x ptr] [ptr @"_ZTIi"]
                    resume {i32, ptr} %"lp"
                zî                my_block:
                    %"lp" = landingpad {i32, i8*}
                        catch i8** @"_ZTIi"
                        filter [1 x i8**] [i8** @"_ZTIi"]
                    resume {i32, i8*} %"lp"
                )rM   r   r³   Ú
landingpadr!  rC   rŠ   rº   rA  rI   r@   r†  Ú
add_clauseÚCatchClauseÚFilterClauserC  Ú	ArrayTyper  Úresumer   rb   )r   rM   r¶   r³  Úint_typeinfos        r   Útest_landingpadz%TestBuildInstructions.test_landingpadÈ  s  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ¤× 4Ñ 4´eÜ6:·o±oÓ6Gð6Ió !JØKOóQˆä×(Ñ(¨×)9Ñ)9×)@Ñ)@Ü)-¯©Ó):¸GóEˆà'+ˆÔ$Ø
�‰”b—n‘n \Ó2Ô3Ø
�‰”b—o‘o¤b§k¡k´"·,±,Ø×Ñ˜qó3"Ø$0 >ó'3ó 4ô 	5à�‰�rÔÝ.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ r   c                 óú   — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  d||d¬«      }|j                  |«       | j                  |d«       y )Nr²   r˜  ro   rì  r   z…            my_block:
                %"c" = icmp sgt i32 %".1", %".2"
                call void @"llvm.assume"(i1 %"c")
            )rM   r   r³   rI   r—   rñ  rÀ   rb   rß  s         r   Útest_assumez!TestBuildInstructions.test_assumeå  sv   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø×Ñ  Q¨°ÐÓ4ˆØ�‰�qÔØ×Ñ˜ð !õ 	r   c                 óè  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}d|_        d|_        t        j                  |j                  d«      }t        j                  |t        j                  «      }t        j                  d«      }|j                  || |d«      d¬«      }|j                  || |d	«      d
¬«      }| j                  |d«       |j                  d«      }|j                  |«       |j                  |«       t        j                  |d	dg«      }|j!                  |||d¬«       | j                  |d«       |j                  d«      }|j                  |«       |j                  |«       |j#                  ||d¬«       | j                  |d«       |j                  d«      }|j                  |«       |j                  |«       |j%                  | |d«      d¬«      }	|j%                  | |d	«      d¬«      }
| j                  |d«       |j'                  |j#                  |	|
«      «       | j)                  |j*                  «       y )NÚinsert_blockr˜  ro   ry  rz  r
   r   Úvec1r   Úvec2z§insert_block:
    %"vec1" = insertelement <2 x i32> <i32 undef, i32 undef>, i32 %"a", i32 0
    %"vec2" = insertelement <2 x i32> %"vec1", i32 %"b", i32 1
            Úshuffle_blockÚshufzŽ            shuffle_block:
                %"shuf" = shufflevector <2 x i32> %"vec2", <2 x i32> %"vec2", <2 x i32> <i32 1, i32 0>
            Ú	add_blockÚsumz[            add_block:
                %"sum" = add <2 x i32> %"vec2", %"vec2"
            Úextract_blockÚex1Úex2z¥            extract_block:
              %"ex1" = extractelement <2 x i32> %"vec2", i32 0
              %"ex2" = extractelement <2 x i32> %"vec2", i32 1
            )rM   r   r³   rI   r—   rG   Ú
VectorTyper  rC  râ  r0  Úinsert_elementrb   rK   rL  Úposition_at_endÚshuffle_vectorrˆ   Úextract_elementrj  r0   r@   )r   rM   r¶   ry  rz  ÚvectyÚvecÚidxtyÚmaskr   r}  s              r   Útest_vector_opsz%TestBuildInstructions.test_vector_opsñ  s/  € Ø—
‘
 �
Ó/ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1ØˆŒØˆŒä—‘˜aŸf™f aÓ(ˆÜ�k‰k˜%¤§¡Ó.ˆÜ—
‘
˜2“ˆØ×$Ñ$ S¨!©U°1«X¸FÐ$ÓCˆØ×$Ñ$ S¨!©U°1«X¸FÐ$ÓCˆà×Ñ˜ð !ô 	ð ×*Ñ*¨?Ó;ˆØ�‰�uÔØ×Ñ Ô&ä�{‰{˜5 1 a &Ó)ˆØ×Ñ˜s C¨°FÐÔ;à×Ñ˜ð !ô 	ð
 ×*Ñ*¨;Ó7ˆØ�‰�uÔØ×Ñ Ô&à�‰�C˜ 5ˆÔ)à×Ñ˜ð !ô 	ð
 ×*Ñ*¨?Ó;ˆØ�‰�uÔØ×Ñ Ô&à×#Ñ# C©¨q«¸Ð#Ó>ˆØ×#Ñ# C©¨q«¸Ð#Ó>ˆà×Ñ˜ð !ô 	ð 	�‰�G—K‘K  1Ó%Ô&Ø×Ñ˜WŸ^™^Õ,r   c                 óò   — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  |d¬«      }|j                  |«       | j                  |d«       y )Nr²   r˜  r‘   r   z}            my_block:
                %"c" = call i64 @"llvm.bitreverse.i64"(i64 5)
                ret i64 %"c"
            )rM   r   r³   rC  rÝ   Ú
bitreverserj  rb   ©r   rM   r¶   ry  r   s        r   Útest_bitreversez%TestBuildInstructions.test_bitreverse+  se   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜qÓ!ˆØ×Ñ˜q sÐÓ+ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óJ  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }| j                  t        «      5 }|j                  |d¬«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr²   r˜  r‘   r   ú#expected an integer type, got float)rM   r   r³   rC  r<  rë   r  rÕ  r'   r$   rÃ  ©r   rM   r¶   ry  Úraisess        r   Útest_bitreverse_wrongtypez/TestBuildInstructions.test_bitreverse_wrongtype7  s~   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜QÓˆà×ÑœyÔ)¨VØ×Ñ˜q sÐÔ+÷ *à�‰Ø1Ü�× Ñ Ó!õ	#÷ *Ð)úó   ÁBÂB"c                 ó¨  — | j                  d¬«      }t        j                  |«      }| j                  t        «      5 }|j                  dd «       d d d «       | j                  dt        j                  «      «       | j                  t        «      5 }|j                  d d«       d d d «       | j                  dt        |j                  «      «       |j                  dd «       |j                  dd«       |j                  d	d«       |j                  d
«       |j                  «        | j                  |d«       y # 1 sw Y   ŒíxY w# 1 sw Y   Œ¤xY w)Nr²   r˜  rG  z#Invalid fence ordering "monotonic"!zInvalid fence ordering "None"!ÚacquireÚreleaseÚsinglethreadÚacq_relr  zç            my_block:
                fence acquire
                fence syncscope("singlethread") release
                fence syncscope("singlethread") acq_rel
                fence seq_cst
                ret void
            )rM   r   r³   rë   rÍ   Úfencer'   r$   rÃ  r´   rb   )r   rM   r¶   rÛ  s       r   Ú
test_fencez TestBuildInstructions.test_fenceB  s  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×ÑœzÔ*¨fØ�M‰M˜+ tÔ,÷ +à�‰Ø3Ü�× Ñ Ó!ô	#ð ×ÑœzÔ*¨fØ�M‰M˜$ Ô,÷ +à�‰Ø.Ü�× Ñ Ó!ô	#ð 	�‰�i Ô&Ø�‰�i Ô0Ø�‰�i Ô0Ø�‰�iÔ Ø×ÑÔØ×Ñ˜ð !õ 	÷ +Ð*ú÷
 +Ð*ús   ½D<ÂEÄ<EÅEc                 ó.  — | j                  d¬«      }t        j                  |«      }| j                  t        «      5  |j                  d«       d d d «       |j                  d«       |j                  «        | j                  |d«       y # 1 sw Y   Œ=xY w)Nr²   r˜  zso
many linesz
my commentzX            my_block:
                ; my comment
                ret void
            )rM   r   r³   rë   ÚAssertionErrorÚcommentr´   rb   ©r   rM   r¶   s      r   Útest_commentz"TestBuildInstructions.test_comment]  sv   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñœ~Õ.Ø�O‰OÐ,Ô-÷ /à�‰˜Ô%Ø×ÑÔØ×Ñ˜ð !õ 	÷	 /Ð.ús   ½BÂBc                 óò   — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  |d¬«      }|j                  |«       | j                  |d«       y )Nr²   r˜  r‘   r   zx            my_block:
                %"c" = call i32 @"llvm.bswap.i32"(i32 5)
                ret i32 %"c"
            )rM   r   r³   rC  rC   Úbswaprj  rb   rÖ  s        r   Ú
test_bswapz TestBuildInstructions.test_bswapj  ób   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜qÓ!ˆØ�M‰M˜! #ˆMÓ&ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óò   — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  |d¬«      }|j                  |«       | j                  |d«       y )Nr²   r˜  r‘   r   zx            my_block:
                %"c" = call i16 @"llvm.ctpop.i16"(i16 5)
                ret i16 %"c"
            )rM   r   r³   rC  Úint16Úctpoprj  rb   rÖ  s        r   Ú
test_ctpopz TestBuildInstructions.test_ctpopv  rí  r   c                 ó(  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }t        j                  t
        d«      }|j                  ||d¬«      }|j                  |«       | j                  |d«       y )Nr²   r˜  r‘   r   r   z}            my_block:
                %"c" = call i16 @"llvm.ctlz.i16"(i16 5, i1 1)
                ret i16 %"c"
            )	rM   r   r³   rC  rï  r   Úctlzrj  rb   rß  s         r   Ú	test_ctlzzTestBuildInstructions.test_ctlz‚  ót   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜qÓ!ˆÜ�K‰Kœ˜aÓ ˆØ�L‰L˜˜A CˆLÓ(ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óò   — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  |d¬«      }|j                  |«       | j                  |d«       y )Nr²   r˜  g      @rz  z•            my_block:
                %"b" = call i16 @"llvm.convert.to.fp16.f32"(float 0x4014000000000000)
                ret i16 %"b"
            )rM   r   r³   rC  r<  Úconvert_to_fp16rj  rb   rË  s        r   Útest_convert_to_fp16_f32z.TestBuildInstructions.test_convert_to_fp16_f32�  se   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜SÓ!ˆØ×#Ñ# A¨CÐ#Ó0ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óJ  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }| j                  t        «      5 }|j                  |d¬«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr²   r˜  r‘   rz  úexpected a float type, got i16)rM   r   r³   rC  rï  rë   r  r÷  r'   r$   rÃ  rÚ  s        r   Ú"test_convert_to_fp16_f32_wrongtypez8TestBuildInstructions.test_convert_to_fp16_f32_wrongtype›  s~   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜qÓ!ˆà×ÑœyÔ)¨VØ×#Ñ# A¨CÐ#Ô0÷ *à�‰Ø,Ü�× Ñ Ó!õ	#÷ *Ð)úrÝ  c                 óü   — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  |dt        ¬«      }|j                  |«       | j                  |d«       y )Nr²   r˜  r‘   rz  ©rG   Útozˆ            my_block:
                %"b" = call float @"llvm.convert.from.fp16.f32"(i16 5)
                ret float %"b"
            )	rM   r   r³   rC  rï  Úconvert_from_fp16r<  rj  rb   rË  s        r   Útest_convert_from_fp16_f32z0TestBuildInstructions.test_convert_from_fp16_f32¦  sg   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜qÓ!ˆØ×%Ñ% a¨c´cÐ%Ó:ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óJ  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }| j                  t        «      5 }|j                  |d¬«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr²   r˜  ç      @rz  zexpected a float return type©rM   r   r³   rC  r<  rë   r  rÿ  r'   r$   rÃ  rÚ  s        r   Ú!test_convert_from_fp16_f32_notypez7TestBuildInstructions.test_convert_from_fp16_f32_notype²  s~   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜SÓ!ˆà×ÑœyÔ)¨VØ×%Ñ% a¨cÐ%Ô2÷ *à�‰Ø*Ü�× Ñ Ó!õ	#÷ *Ð)úrÝ  c                 óT  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }| j                  t        «      5 }|j                  |dt        ¬«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr²   r˜  r  rz  rý  zexpected an i16 type, got floatr  rÚ  s        r   Ú$test_convert_from_fp16_f32_wrongtypez:TestBuildInstructions.test_convert_from_fp16_f32_wrongtype½  s€   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜SÓ!ˆà×ÑœyÔ)¨VØ×%Ñ% a¨c´cÐ%Ô:÷ *à�‰Ø-Ü�× Ñ Ó!õ	#÷ *Ð)úó   ÁBÂB'c                 óT  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }| j                  t        «      5 }|j                  |dt        ¬«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr²   r˜  r  rz  rý  rú  )rM   r   r³   rC  r<  rë   r  rÿ  rï  r'   r$   rÃ  rÚ  s        r   Ú%test_convert_from_fp16_f32_wrongtype2z;TestBuildInstructions.test_convert_from_fp16_f32_wrongtype2È  s€   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜SÓ!ˆà×ÑœyÔ)¨VØ×%Ñ% a¨c´eÐ%Ô<÷ *à�‰Ø,Ü�× Ñ Ó!õ	#÷ *Ð)úr  c                 ó(  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }t        j                  t
        d«      }|j                  ||d¬«      }|j                  |«       | j                  |d«       y )Nr²   r˜  r‘   r   r   z}            my_block:
                %"c" = call i64 @"llvm.cttz.i64"(i64 5, i1 1)
                ret i64 %"c"
            )	rM   r   r³   rC  rÝ   r   Úcttzrj  rb   rß  s         r   Ú	test_cttzzTestBuildInstructions.test_cttzÓ  rõ  r   c                 ó€  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }t        j                  t
        d«      }| j                  t        «      5 }|j                  ||d¬«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr²   r˜  r‘   r”   r   zexpected an i1 type, got i32)rM   r   r³   rC  rÝ   rC   rë   r  r  r'   r$   rÃ  ©r   rM   r¶   ry  rz  rÛ  s         r   Útest_cttz_wrongflagz)TestBuildInstructions.test_cttz_wrongflagà  s�   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜qÓ!ˆÜ�K‰Kœ˜qÓ!ˆà×ÑœyÔ)¨VØ�L‰L˜˜A CˆLÔ(÷ *à�‰Ø*Ü�× Ñ Ó!õ	#÷ *Ð)úó   Á1B4Â4B=c                 ó€  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }t        j                  t
        d«      }| j                  t        «      5 }|j                  ||d¬«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr²   r˜  r‘   r   r   rÙ  )rM   r   r³   rC  r<  r   rë   r  r  r'   r$   rÃ  r  s         r   Útest_cttz_wrongtypez)TestBuildInstructions.test_cttz_wrongtypeì  s�   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜QÓˆÜ�K‰Kœ˜aÓ ˆà×ÑœyÔ)¨VØ�L‰L˜˜A CˆLÔ(÷ *à�‰Ø1Ü�× Ñ Ó!õ	#÷ *Ð)úr  c                 ó^  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }t        j                  t        d«      }t        j                  t        d«      }|j                  |||d¬«      }|j                  |«       | j                  |d«       y )Nr²   r˜  r‘   r   ro   ÚfmazÅ            my_block:
                %"fma" = call float @"llvm.fma.f32"(float 0x4014000000000000, float 0x3ff0000000000000, float 0x4000000000000000)
                ret float %"fma"
            )rM   r   r³   rC  r<  r  rj  rb   )r   rM   r¶   ry  rz  r   r  s          r   Útest_fmazTestBuildInstructions.test_fmaø  s‡   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜QÓˆÜ�K‰Kœ˜QÓˆÜ�K‰Kœ˜QÓˆØ�k‰k˜!˜Q ¨ˆkÓ.ˆØ�‰�CÔØ×Ñ˜ð !õ 	r   c                 ó¶  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }t        j                  t        d«      }t        j                  t        d«      }| j                  t        «      5 }|j                  |||d¬«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr²   r˜  r‘   r   ro   r  z(expected an floating point type, got i32)rM   r   r³   rC  rC   rë   r  r  r'   r$   rÃ  ©r   rM   r¶   ry  rz  r   rÛ  s          r   Útest_fma_wrongtypez(TestBuildInstructions.test_fma_wrongtype  sŸ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜qÓ!ˆÜ�K‰Kœ˜qÓ!ˆÜ�K‰Kœ˜qÓ!ˆà×ÑœyÔ)¨VØ�K‰K˜˜1˜a eˆKÔ,÷ *à�‰Ø6Ü�× Ñ Ó!õ	#÷ *Ð)úó   ÂCÃCc                 ó¶  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }t        j                  t
        d«      }t        j                  t        d«      }| j                  t        «      5 }|j                  |||d¬«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr²   r˜  r‘   r   ro   r  z7expected types to be the same, got float, double, float)rM   r   r³   rC  r<  rD   rë   r  r  r'   r$   rÃ  r  s          r   Útest_fma_mixedtypesz)TestBuildInstructions.test_fma_mixedtypes  sŸ   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜QÓˆÜ�K‰Kœ˜QÓˆÜ�K‰Kœ˜QÓˆà×ÑœyÔ)¨VØ�K‰K˜˜1˜a eˆKÔ,÷ *à�‰ØEÜ�× Ñ Ó!õ	#÷ *Ð)úr  c                 óN   — d„ }dD ]  }t        j                   ||«      «       Œ y )Nc                 ó€  — t        j                  t        j                  d«      t        j                  d«      j                  «       t        j                  d«      g«      }t        j                  «       }t        j
                  ||d¬«      }|j                  «       }|j                  «       }|j                  «       }t        j                  «       }|j                  |«       |j                  |«       |j                  |«       |j                  t        j                  d«      «      }|j                  t        j                  |j                  d«      |«       |j                  t        j                  d«      «      }	|	j                  t        j                  |	j                  d«      |«       |j                  d   j                  | «       |j!                  |j                  d   |g«      }
|j#                  |
«      }|j%                  |	|«      }|	j                  ||«       |j%                  |t        j                  |j                  d«      «      }|j                  ||«       |j'                  d||j                  d   «      }|j)                  |||«       |j                  |«       |j+                  |«       t-        |«      S )Nr
   rÆ  r˜  r   r   rê  )r   rB   r0  rº   r>   rF   rK   r³   rÌ  rL  r	  r
  rC  r  r—   r˜   r  r  rˆ   rð  rR  rj  r$   )Ú	attr_namerH   r@   rL   Úbb_entryÚbb_loopÚbb_exitr¶   ÚindexÚaccumr  ÚvalueÚaddedÚindexp1Úconds                  r   Úgen_codez;TestBuildInstructions.test_arg_attributes.<locals>.gen_code!  s   € Ü—?‘?¤2§:¡:¨b£>´B·J±J¸r³N×4MÑ4MÓ4OÜ46·J±J¸r³Nð4Dó EˆDä—Y‘Y“[ˆFä—;‘;˜v t°%Ô8ˆDà×.Ñ.Ó0ˆHØ×-Ñ-Ó/ˆGØ×-Ñ-Ó/ˆGä—l‘l“nˆGØ×#Ñ# HÔ-à�N‰N˜7Ô#Ø×#Ñ# GÔ,à—K‘K¤§
¡
¨2£Ó/ˆEØ×ÑœrŸ{™{¨5¯:©:°qÓ9¸8ÔDØ—K‘K¤§
¡
¨2£Ó/ˆEØ×ÑœrŸ{™{¨5¯:©:°qÓ9¸8ÔDà�I‰I�a‰L×&Ñ& yÔ1Ø—+‘+˜dŸi™i¨™l¨U¨GÓ4ˆCØ—L‘L Ó%ˆEà—K‘K  uÓ-ˆEØ×Ñ˜u gÔ.à—k‘k %¬¯©°U·Z±ZÀÓ)CÓDˆGØ×Ñ˜w¨Ô0à×(Ñ(¨¨g°t·y±yÀ±|ÓDˆDØ�O‰O˜D '¨7Ô3à×#Ñ# GÔ,Ø�K‰K˜Ôä�v“;Ðr   )ÚbyrefÚbyvalÚelementtypeÚimmargÚinallocaÚinregÚnestr–   Ú	nocaptureÚnofreer•   ÚnoundefÚpreallocatedÚreturnedÚsignextÚ
swiftasyncÚ
swifterrorÚ	swiftselfr�   )r-   r.   )r   r(  r  s      r   Útest_arg_attributesz)TestBuildInstructions.test_arg_attributes   s)   € ò&	óP
ˆIô, ×Ñ¡¨Ó 3Õ4ñ-
r   N)<ru   rv   rw   rx   ÚmaxDiffr¨  rÆ  rÌ  rÒ  rÚ  rà  ræ  rò  rþ  r  r  r  r  r%  r'  r*  r2  rE  rI  rN  rU  rY  rc  rk  rx  rŽ  r“  rž  r¥  r§  r®  r±  r¼  r¾  rÓ  r×  rÜ  rä  ré  rì  rñ  rô  rø  rû  r   r  r  r	  r  r  r  r  r  r  r9  ry   r   r   r¤  r¤  I  s.  „ ñð €Gò=ò/òbòòò(òò$#òJ+òZòòHòTò*ò0ò4ò<KòZ0òdò(	ò
òò ò*&òPò&$òLò6ò@ò69òò(òTò:
ò8-òt
ò	#òò6ò
ò
òò
ò	#ò
ò	#ò	#ò	#òò
#ò
#òò#ò#ó?5r   r¤  c                   óR   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zy)ÚTestBuilderMiscz=
    Test various other features of the IRBuilder class.
    c                 ó¦  — | j                  d¬«      }t        j                  |«      }| j                  |j                  |j
                  «       | j                  |j                  t        j                  «       | j                  |j                  |j
                  j                  «       | j                  |j                  t        j                  «       y )Nr�  r˜  )
rM   r   r³   r7   rI   r‘  ÚassertIsInstancerF   r@   r>   rè  s      r   r–  zTestBuilderMisc.test_attributesh  s†   € Ø—
‘
 �
Ó(ˆÜ—,‘,˜uÓ%ˆØ�‰�g×&Ñ&¨¯©Ô5Ø×Ñ˜g×.Ñ.´·±Ô<Ø�‰�g—n‘n e§l¡l×&9Ñ&9Ô:Ø×Ñ˜gŸn™n¬b¯i©iÕ8r   c                 óÞ  — | j                  d¬«      }t        j                  |«      }|j                  j                  d d \  }}|j                  ||d«       |j                  d¬«      }|j                  |«      5  |j                  ||d«       |j                  «       5  |j                  ||d«       d d d «       |j                  ||d«       |j                  |«       d d d «       |j                  ||d	«       |j                  |«      5  |j                  ||d
«       d d d «       | j                  |d«       | j                  |d«       y # 1 sw Y   ŒšxY w# 1 sw Y   ŒzxY w# 1 sw Y   ŒFxY w)Nr²   r˜  ro   r   rç   r}  r~  r€  r�  r‚  z¦            my_block:
                %"c" = add i32 %".1", %".2"
                %"e" = sub i32 %".1", %".2"
                %"g" = mul i32 %".1", %".2"
            zÄ            foo:
                %"d" = fadd i32 %".1", %".2"
                %"f" = fsub i32 %".1", %".2"
                %"h" = fmul i32 %".1", %".2"
                br label %"foo"
            )rM   r   r³   rI   r—   rˆ   rK   Ú
goto_blockrµ  Úgoto_entry_blockr   r¶  rL  rž  r·  rb   )r   rM   r¶   ry  rz  Úbb_news         r   Útest_goto_blockzTestBuilderMisc.test_goto_blockp  s;  € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆˆ1Ø�‰�A�q˜#ÔØ×+Ñ+°Ð+Ó7ˆØ×Ñ Õ'Ø�L‰L˜˜A˜sÔ#Ø×)Ñ)Õ+Ø—‘˜A˜q #Ô&÷ ,à�L‰L˜˜A˜sÔ#Ø�N‰N˜6Ô"÷ (ð 	�‰�A�q˜#ÔØ×Ñ Õ'Ø�L‰L˜˜A˜sÔ#÷ (à×Ñ˜ð !ô 	ð 	×Ñ˜ð "õ 	÷ ,Ð+ú÷ (Ð'ú÷ (Ð'ús0   Á:$EÂEÂ2,EÄ
E#ÅE	ÅEÅE Å#E,c                 óH  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  ||d«      }|j                  |«      5 }|j                  ||d«       d d d «       | j                  |j                   «       |j                  ||d«      }|j                  |«      5  |j                  ||d«       |j                  |«       d d d «       | j                  |j                  d«       y # 1 sw Y   Œ“xY w# 1 sw Y   Œ2xY w)	NÚoner˜  r   ry  rz  r   r}  aÝ              one:
                %"a" = add i1 0, 0
                br i1 %"a", label %"one.if", label %"one.endif"
            one.if:
                %"b" = add i1 0, 0
                br label %"one.endif"
            one.endif:
                %"c" = add i1 0, 0
                br i1 %"c", label %"one.endif.if", label %"one.endif.endif"
            one.endif.if:
                %"d" = add i1 0, 0
                br label %"one"
            one.endif.endif:
            )rM   r   r³   rC  r   rˆ   Úif_thenr7   rL  rs   rI   )r   rM   r¶   r  ry  Úbbendr   s          r   Útest_if_thenzTestBuilderMisc.test_if_then�  sç   € Ø—
‘
 �
Ó&ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜aÓ ˆØ�K‰K˜˜1˜cÓ"ˆØ�_‰_˜QÔ 5Ø�K‰K˜˜1˜cÔ"÷  ð 	�‰�g—m‘m UÔ+Ø�K‰K˜˜1˜cÓ"ˆØ�_‰_˜QÕØ�K‰K˜˜1˜cÔ"Ø�N‰N˜5Ô!÷  ð 	×Ñ˜W×-Ñ-ð 0õ 	÷  Ðú÷
  Ðús   Á&DÃ%DÄDÄD!c                 óè  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  ||d«      }|j                  |«      5  |j                  ||d«      }|j                  |«      5  |j                  ||d«       d d d «       d d d «       |j                  «        | j                  |j                  d«       y # 1 sw Y   Œ>xY w# 1 sw Y   ŒBxY w)NrE  r˜  r   ry  rz  r   aÐ              one:
                %"a" = add i1 0, 0
                br i1 %"a", label %"one.if", label %"one.endif"
            one.if:
                %"b" = add i1 0, 0
                br i1 %"b", label %"one.if.if", label %"one.if.endif"
            one.endif:
                ret void
            one.if.if:
                %"c" = add i1 0, 0
                br label %"one.if.endif"
            one.if.endif:
                br label %"one.endif"
            )
rM   r   r³   rC  r   rˆ   rF  r´   rs   rI   )r   rM   r¶   r  ry  rz  s         r   Útest_if_then_nestedz#TestBuilderMisc.test_if_then_nested«  sÁ   € à—
‘
 �
Ó&ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜aÓ ˆØ�K‰K˜˜1˜cÓ"ˆØ�_‰_˜QÕØ—‘˜A˜q #Ó&ˆAØ—‘ Õ#Ø—‘˜A˜q #Ô&÷ $÷  ð 	×ÑÔØ×Ñ˜W×-Ñ-ð 0õ 	÷ $Ð#ú÷  Ðús$   Á&%C(ÂCÂC(ÃC%	Ã!C(Ã(C1c           	      ó  — d}| j                  |¬«      }t        j                  |«      }t        j                  t        d«      }|j                  ||d«      }|j                  |«      5  |j                  ||d«      }|j                  |«      5  |j                  ||d«       d d d «       d d d «       |j                  «        | j                  |j                  dj                  ||d d d	z   ¬
«      «       y # 1 sw Y   ŒUxY w# 1 sw Y   ŒYxY w)NÚPLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongr˜  r   ry  rz  r   a              {full_label}:
                %"a" = add i1 0, 0
                br i1 %"a", label %"{label}.if", label %"{label}.endif"
            {label}.if:
                %"b" = add i1 0, 0
                br i1 %"b", label %"{label}.if.if", label %"{label}.if.endif"
            {label}.endif:
                ret void
            {label}.if.if:
                %"c" = add i1 0, 0
                br label %"{label}.if.endif"
            {label}.if.endif:
                br label %"{label}.endif"
            é   z..)Ú
full_labelÚlabel)rM   r   r³   rC  r   rˆ   rF  r´   rs   rI   rµ   )r   rN  rM   r¶   r  ry  rz  s          r   Útest_if_then_long_labelz'TestBuilderMisc.test_if_then_long_labelÆ  sâ   € Ø ˆ
Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜aÓ ˆØ�K‰K˜˜1˜cÓ"ˆØ�_‰_˜QÕØ—‘˜A˜q #Ó&ˆAØ—‘ Õ#Ø—‘˜A˜q #Ô&÷ $÷  ð 	×ÑÔØ×Ñ˜W×-Ñ-ð 0÷ ‘ *°J¸sÀ°OÀdÑ4J�ÓKõ	M÷ $Ð#ú÷  Ðús$   Á(%DÂC5Â!DÃ5C>	Ã:DÄD
c                 ó    ‡ — ˆ fd„} |d«      }‰ j                  |j                  d«        |d«      }‰ j                  |j                  d«       y )Nc                 ó   •— ‰j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  || ¬«      5  	 d d d «       ‰j                  |d«       |S # 1 sw Y   ŒxY w)NrE  r˜  r   ©Úlikelyzp                one:
                    br i1 0, label %"one.if", label %"one.endif", !prof !0
                )rM   r   r³   rC  r   rF  rb   )rT  rM   r¶   r  r   s       €r   rg  z2TestBuilderMisc.test_if_then_likely.<locals>.checkâ  sn   ø€ Ø—J‘J E�JÓ*ˆEÜ—l‘l 5Ó)ˆGÜ—‘œD !Ó$ˆAØ—‘ ¨6�Õ2Ø÷ 3à×Ñ˜Uð %ô ð ˆN÷ 3Ð2ús   ÁA4Á4A=TúC            !0 = !{ !"branch_weights", i32 99, i32 1 }
            FúC            !0 = !{ !"branch_weights", i32 1, i32 99 }
            ©rl   r@   ©r   rg  r¶   s   `  r   Útest_if_then_likelyz#TestBuilderMisc.test_if_then_likelyá  sP   ø€ ô
	ñ ˜“+ˆØ×Ñ˜GŸN™Nð -ô 	ñ ˜“,ˆØ×Ñ˜GŸN™Nð -õ 	r   c                 óÎ  — | j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  ||d«      }|j                  |«      5 \  }}|5  |j                  ||d«       d d d «       |5  |j                  ||d«       d d d «       d d d «       |j                  |«      5 \  }}|5  |j                  |«       d d d «       |5  |j                  «        d d d «       d d d «       | j                  |j                  d«       y # 1 sw Y   Œ xY w# 1 sw Y   ŒŽxY w# 1 sw Y   Œ’xY w# 1 sw Y   ŒmxY w# 1 sw Y   Œ^xY w# 1 sw Y   ŒbxY w)NrE  r˜  r   ry  rz  r   a)              one:
                %"a" = add i1 0, 0
                br i1 %"a", label %"one.if", label %"one.else"
            one.if:
                %"b" = add i1 0, 0
                br label %"one.endif"
            one.else:
                %"c" = add i1 0, 0
                br label %"one.endif"
            one.endif:
                br i1 %"a", label %"one.endif.if", label %"one.endif.else"
            one.endif.if:
                br label %"one"
            one.endif.else:
                ret void
            one.endif.endif:
            )rM   r   r³   rC  r   rˆ   Úif_elserL  r´   rs   rI   )r   rM   r¶   r  ry  Úthenrp  s          r   Útest_if_elsezTestBuilderMisc.test_if_elseö  s  € Ø—
‘
 �
Ó&ˆÜ—,‘,˜uÓ%ˆÜ�K‰Kœ˜aÓ ˆØ�K‰K˜˜1˜cÓ"ˆØ�_‰_˜QÔÑ#4 D¨)ÚØ—‘˜A˜q #Ô&÷ âØ—‘˜A˜q #Ô&÷ ÷  ð �_‰_˜QÔÑ#4 D¨)ÚØ—‘˜uÔ%÷ âØ× Ñ Ô"÷ ÷  ð 	×Ñ˜W×-Ñ-ð 0õ 	÷ �úç�ú÷  Ðú÷ �úç�ú÷  Ðúsx   Á&D7Á,DÂ 
D7Â
D+ÂD7Â?EÃEÃ
EÃ!EÃ2EÄD(	Ä$D7Ä+D4	Ä0D7Ä7E ÅE	ÅEÅE	ÅEÅE$c                 ó    ‡ — ˆ fd„} |d«      }‰ j                  |j                  d«        |d«      }‰ j                  |j                  d«       y )Nc                 ó¶  •— ‰j                  d¬«      }t        j                  |«      }t        j                  t        d«      }|j                  || ¬«      5 \  }}|5  |j                  |«       d d d «       |5  |j                  «        d d d «       d d d «       ‰j                  |j                  d«       |S # 1 sw Y   ŒJxY w# 1 sw Y   Œ;xY w# 1 sw Y   Œ?xY w)NrE  r˜  r   rS  zý                one:
                    br i1 0, label %"one.if", label %"one.else", !prof !0
                one.if:
                    br label %"one"
                one.else:
                    ret void
                one.endif:
                )
rM   r   r³   rC  r   r[  rL  r´   rs   rI   )rT  rM   r¶   r  r\  rp  r   s         €r   rg  z2TestBuilderMisc.test_if_else_likely.<locals>.check	  s°   ø€ Ø—J‘J E�JÓ*ˆEÜ—l‘l 5Ó)ˆGÜ—‘œD !Ó$ˆAØ—‘ ¨6�Ô2Ñ6G°t¸YÚØ—N‘N 5Ô)÷ âØ×$Ñ$Ô&÷ ÷ 3ð
 × Ñ  ×!1Ñ!1ð 4ô ð ˆN÷ �Túç�Yú÷ 3Ð2ús<   ÁCÁB7Á.
CÁ8CÂ	CÂ7C 	Â<CÃC	ÃCÃCTrU  FrV  rW  rX  s   `  r   Útest_if_else_likelyz#TestBuilderMisc.test_if_else_likely	  sP   ø€ ô	ñ& ˜“+ˆØ×Ñ˜GŸN™Nð -ô 	ñ ˜“,ˆØ×Ñ˜GŸN™Nð -õ 	r   c                 óT  — | j                  «       }t        j                  «       }t        j                  t        d«      }|j                  d¬«      }|j                  d¬«      }|j                  d¬«      }|j                  |«       |j                  ||d«       |j                  |«       |j                  ||d«       |j                  ||d«       |j                  |«       |j                  ||d	«      }|j                  ||d
«       |j                  |«       |j                  ||d«      }|j                  |«       |j                  ||d«       |j                  |«       |j                  ||d«       | j                  |d«       | j                  |d«       | j                  |d«       y)zI
        Test IRBuilder.position_{before,after,at_start,at_end}.
        r   rE  r˜  ÚtwoÚthreery  r­  r®  r¯  r°  rz  r±  r   z‰            one:
                %"a" = add i32 0, 0
                %"c" = add i32 0, 0
                %"b" = add i32 0, 0
            zÑ            two:
                %"o" = add i32 0, 0
                %"q" = add i32 0, 0
                %"p" = add i32 0, 0
                %"m" = add i32 0, 0
                %"n" = add i32 0, 0
            z            three:
            N)rI   r   r³   rC  rC   rK   Úposition_at_startrˆ   rÌ  Úposition_afterÚposition_beforerb   )	r   rL   r¶   r  Úbb_oneÚbb_twoÚbb_threer¯  rz  s	            r   Útest_positioningz TestBuilderMisc.test_positioning7	  s~  € ð �}‰}‹ˆÜ—,‘,“.ˆÜ�K‰Kœ˜qÓ!ˆØ×(Ñ(¨eÐ(Ó4ˆØ×(Ñ(¨eÐ(Ó4ˆØ×*Ñ*°Ð*Ó8ˆà×!Ñ! &Ô)Ø�‰�A�q˜#Ôà×Ñ Ô'Ø�‰�A�q˜#ÔØ�‰�A�q˜#Ôà×!Ñ! &Ô)Ø�K‰K˜˜1˜cÓ"ˆØ�‰�A�q˜#Ôà×Ñ Ô'Ø�K‰K˜˜1˜cÓ"ˆà×Ñ˜qÔ!Ø�‰�A�q˜#Ôà×Ñ Ô"Ø�‰�A�q˜#ÔØ×Ñ˜ð "ô 	ð 	×Ñ˜ð "ô 	ð 	×Ñ˜ð $õ 	r   c                 ó‚  — | j                  «       }t        j                  «       }|j                  d¬«      }|j	                  |«       t        j
                  t        d«      }|j                  ||d«      }|j                  «       }| j                  |j                  «       |j                  |«       | j                  |j                  «       |j                  ||d«      }|j                  ||d«      }|j                  |«       |j                  «        | j                  |j                  «       | j                  |d«       y )NÚentryr˜  iÒ  ry  rz  r   zˆ            entry:
                %"a" = add i32 1234, 1234
                %"b" = mul i32 %"a", %"a"
                ret void
        )rI   r   r³   rK   rÌ  rC  rC   rˆ   r´   r  r”  Úremover“  rž  rb   )	r   rL   r¶   Úblkr«  ry  Úretvoidrz  r   s	            r   Útest_instruction_removalz(TestBuilderMisc.test_instruction_removalg	  sþ   € Ø�}‰}‹ˆÜ—,‘,“.ˆØ×%Ñ%¨7Ð%Ó3ˆØ×Ñ Ô$Ü�K‰Kœ˜tÓ$ˆØ�K‰K˜˜1˜cÓ"ˆØ×"Ñ"Ó$ˆØ�‰˜×)Ñ)Ô*Ø�‰�wÔØ×Ñ˜×*Ñ*Ô+Ø�K‰K˜˜1˜cÓ"ˆØ�K‰K˜˜1˜cÓ"ˆØ�‰�qÔØ×ÑÔØ�‰˜×)Ñ)Ô*Ø×Ñ˜ð õ 	r   c                 ó<  — | j                  d¬«      }t        j                  |«      }|j                  j	                  g «      |_        |j                  t        j                  t        «      d¬«       t        s| j                  |d«       y | j                  |d«       y )Nr²   r˜  r   zY                my_block:
                    %"c" = alloca ptr, !dbg !0
                zZ                my_block:
                    %"c" = alloca i32*, !dbg !0
                )rM   r   r³   r@   r¢   Údebug_metadatar  rE   rC   r   rb   rè  s      r   Útest_metadatazTestBuilderMisc.test_metadata~	  s   € Ø—
‘
 
�
Ó+ˆÜ—,‘,˜uÓ%ˆØ!(§¡×!<Ñ!<¸RÓ!@ˆÔØ�‰”r—~‘~¤eÓ,°3ˆÔ7Ý.Ø×Ñ˜Uð %õ ð
 ×Ñ˜Uð %õ r   N)ru   rv   rw   rx   r–  rC  rH  rJ  rP  rY  r]  r`  rj  rp  rs  ry   r   r   r<  r<  c  sA   „ ñò9òò:ò<ò6Mò6ò*"òHò:.ò`ó.r   r<  c                   ól   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú	TestTypesc                 óº   — t        |t        j                  «      r'|j                  }t        |t        j                  «      rŒ't        |t        j                  «       S r#   )Ú
isinstancer   rE   r)  Ú	LabelType)r   Útys     r   Úhas_logical_equalityzTestTypes.has_logical_equality‘	  s=   € Ü˜œRŸ^™^Ô,Ø—‘ˆBô ˜œRŸ^™^Õ,ä˜b¤"§,¡,Ó/Ð/Ð/r   c                 ó¦  — t        j                  «       }t        j                  «       t        j                  «       t        j                  t
        t        t        f«      t        j                  t
        t        f«      t        j                  t
        t        fd¬«      t        j                  t        t        f«      t
        t        t        t        t        t        j                  t        d«      t        j                  t        d«      t        j                  t        d«      t        j                  t
        t        f«      t        j                  t        t
        f«      |j                  d«      |j                  d«      g}||D �cg c]A  }t        |t         j                  t         j                  f«      st        j                  |«      ‘ŒC c}z  }|S c c}w )z3
        A bunch of mutually unequal types
        Tr„   r‘   r“   ÚMyType1ÚMyType2)r   ÚContextrx  rY  rB   r   rŠ   rC   r<  rD   r¹  r!  Úget_identified_typerw  rE   )r   Úcontextrù   Útps       r   Úassorted_typeszTestTypes.assorted_types–	  s9  € ô
 —*‘*“,ˆä�L‰L‹NœBŸK™K›MÜ�O‰OœD¤4¬ ,Ó/´·±ÄÌÀwÓ1OÜ�O‰OœD¤4 '°4Ô8Ü�O‰OœD¤4 'Ó*Ü”$œœs¤CÜ�L‰Lœ˜aÓ ¤"§,¡,¬s°AÓ"6¼¿¹ÄSÈ!Ó8LÜ× Ñ ¤$¬ Ó.´×0DÑ0DÄdÜFJðFLó 1Mà×'Ñ'¨	Ó2Ø×'Ñ'¨	Ó2ð
ˆð 	©uó F©u¨Ü# B¬¯©´b·l±lÐ(CÔDô —.‘. Õ$¨uñ Fñ 	Fˆð ˆùòFs   ÆAGc                 óœ   — | j                  «       }|D ]7  }| j                  |«      }| j                  |«      sŒ&| j                  ||«       Œ9 y r#   )r‚  r<   rz  r9   )r   rù   ry  Únewtys       r   rÇ   zTestTypes.test_pickling­	  sH   € Ø×#Ñ#Ó%ˆÛˆBØ×0Ñ0°Ó4ˆEØ×(Ñ(¨Õ,Ø× Ñ  ¨Õ+ñ r   c                 óÚ  — | j                  «       }t        j                  ||«      D ]8  \  }}||usŒ| j                  ||k(  ||f«       | j	                  ||k7  ||f«       Œ: |D ]…  }t        j
                  |«      }| j                  |«      r/| j	                  ||k(  ||f«       | j                  ||k7  ||f«       ŒX| j                  ||k(  ||f«       | j	                  ||k7  ||f«       Œ‡ y r#   )r‚  Ú	itertoolsÚproductr“  r  Úcopyrz  )r   rù   ry  rz  r�  r˜  s         r   Útest_comparisonszTestTypes.test_comparisons´	  sã   € Ø×#Ñ#Ó%ˆÜ×%Ñ% e¨UÖ3‰DˆAˆqØ˜ŠzØ× Ñ   a¡¨!¨Q¨Ô0Ø—‘  Q¡¨¨A¨Õ/ð 4ó
 ˆBÜ—I‘I˜b“MˆEØ×(Ñ(¨Ô,Ø—‘  e¡¨b°%¨[Ô9Ø× Ñ   u¡¨r°5¨kÕ:à× Ñ   u¡¨r°5¨kÔ:Ø—‘  e¡¨b°%¨[Õ9ñ r   c           	      ó¨  ‡ — t        j                  «       t        j                  d¬«      t        j                  t        «      t        j                  t        d¬«      t        j                  t        «      t        j                  t        d¬«      dœ}ˆ fd„}ˆ fd„}|j	                  «       D ]D  }‰ j                  «       D ]&  }t        |t         j                  «      rŒ |||«       Œ(  |||«       ŒF  ||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   «       y )Nr   r{  )Úop_a0Úop_a1Útp_i1_a0Útp_i1_a1Útp_i8_a0Útp_i8_a1c                 ó¾   •— ‰j                  | |k(  | |f«       ‰j                  || k(  || f«       ‰j                  | |k7  | |f«       ‰j                  || k7  || f«       y r#   )r  r“  ©Úptr1Úptr2r   s     €r   Ú	assert_eqz1TestTypes.test_ptr_comparisons.<locals>.assert_eqÕ	  s_   ø€ Ø�O‰O˜D D™L¨4°¨,Ô7Ø�O‰O˜D D™L¨4°¨,Ô7à×Ñ˜T T™\¨D°$¨<Ô8Ø×Ñ˜T T™\¨D°$¨<Õ8r   c                 ó¾   •— ‰j                  | |k(  | |f«       ‰j                  || k(  || f«       ‰j                  | |k7  | |f«       ‰j                  || k7  || f«       y r#   )r“  r  r’  s     €r   Ú	assert_nez1TestTypes.test_ptr_comparisons.<locals>.assert_neÜ	  s_   ø€ Ø×Ñ˜T T™\¨D°$¨<Ô8Ø×Ñ˜T T™\¨D°$¨<Ô8à�O‰O˜D D™L¨4°¨,Ô7Ø�O‰O˜D D™L¨4°¨,Õ7r   r‹  rŒ  r�  rŽ  r�  r�  )r   rE   r   rŠ   Úvaluesr‚  rw  )r   Úptrsr•  r—  r  r˜  s   `     r   Útest_ptr_comparisonszTestTypes.test_ptr_comparisonsÄ	  sÍ  ø€ ô —^‘^Ó%Ü—^‘^¨aÔ0ÜŸ™¤tÓ,ÜŸ™¤t°qÔ9ÜŸ™¤tÓ,ÜŸ™¤t°qÔ9ñ
ˆô	9ô	8ð —;‘;–=ˆCà×,Ñ,Ö.�Ü! %¬¯©Õ8Ù˜c 5Õ)ð /ñ �c˜3Õð !ñ 	�$�w‘-  g¡Ô/Ù�$�w‘-  jÑ!1Ô2Ù�$�w‘-  jÑ!1Ô2Ù�$�w‘-  jÑ!1Ô2Ù�$�w‘-  jÑ!1Ô2Ù�$�w‘-  jÑ!1Ô2Ù�$�w‘-  jÑ!1Ô2Ù�$�w‘-  jÑ!1Ô2Ù�$�w‘-  jÑ!1Ô2Ù�$�zÑ" D¨Ñ$4Ô5Ù�$�zÑ" D¨Ñ$4Ô5Ù�$�zÑ" D¨Ñ$4Ô5Ù�$�zÑ" D¨Ñ$4Ô5Ù�$�zÑ" D¨Ñ$4Ô5Ù�$�zÑ" D¨Ñ$4Õ5r   c                 ó  — t        j                  «       }t        j                  d¬«      }| j                  |j                  «       | j                  |j                  «       | j	                  t        |«      d«       | j	                  t        |«      d«       |j                  «       }|j                  «       }|j                  d¬«      }| j                  |j                  «       | j                  |j                  «       | j                  |j                  «       | j	                  t        |«      d«       | j	                  t        |«      d«       | j	                  t        |«      d«       t        j                  d«      j                  «       }t        j                  d«      j                  d¬«      }| j                  |j                   «       | j                  |j                   «       t        r7| j	                  t        |«      d«       | j	                  t        |«      d	«       n6| j	                  t        |«      d«       | j	                  t        |«      d«       |j                  «       }|j                  «       }	|j                  d¬«      }
| j                  |j                   «       | j                  |	j                   «       | j                  |
j                   «       t        rR| j	                  t        |«      d
«       | j	                  t        |	«      d«       | j	                  t        |
«      d«       y | j	                  t        |«      d«       | j	                  t        |	«      d«       | j	                  t        |
«      d«       y )Nro   r{  r  zptr addrspace(2)r”   zptr addrspace(3)r
   úi32*zi32 addrspace(2)*úi32**zi32 addrspace(2)**zi32 addrspace(2)* addrspace(3)*)	r   rE   r  Ú	is_opaquer9   r$   rº   r0  r   )r   r  r”  Úptr_ptrÚptr2_ptrÚ	ptr2_ptr3ÚtptrÚtptr2Útptr_ptrÚ	tptr2_ptrÚ
tptr2_ptr3s              r   Útest_pointerszTestTypes.test_pointersÿ	  sœ  € ä�n‰nÓˆÜ�~‰~¨Ô*ˆà�‰˜Ÿ™Ô&Ø�‰˜Ÿ™Ô'à×Ñœ˜S› 5Ô)Ø×Ñœ˜T›Ð$6Ô7ð —.‘.Ó"ˆØ—?‘?Ó$ˆØ—O‘O¨a�OÓ0ˆ	à�‰˜×)Ñ)Ô*Ø�‰˜×*Ñ*Ô+Ø�‰˜	×+Ñ+Ô,à×Ñœ˜W› uÔ-Ø×Ñœ˜X›¨Ô.Ø×Ñœ˜Y›Ð);Ô<ô �z‰z˜"‹~×(Ñ(Ó*ˆÜ—
‘
˜2“×)Ñ)°AÐ)Ó6ˆà�‰˜DŸN™NÐ*Ô+Ø�‰˜EŸO™OÐ+Ô,å*Ø×ÑœS ›Y¨Ô/Ø×ÑœS ›ZÐ)<Õ=à×ÑœS ›Y¨Ô.Ø×ÑœS ›ZÐ);Ô<ð —?‘?Ó$ˆØ×$Ñ$Ó&ˆ	Ø×%Ñ%°Ð%Ó2ˆ
à�‰˜H×.Ñ.Ð.Ô/Ø�‰˜I×/Ñ/Ð/Ô0Ø�‰˜J×0Ñ0Ð0Ô1å*Ø×ÑœS ›]¨GÔ4Ø×ÑœS ›^Ð-AÔBØ×ÑœS ›_Ð.OÕPà×ÑœS ›]¨EÔ2Ø×ÑœS ›^¨UÔ3Ø×ÑœS ›_Ð.@ÕAr   c                 ój  — | j                  t        j                  «       j                  d«       | j                  t        j                  d¬«      j                  d«       t        sh| j                  t        j                  t
        «      j                  d«       | j                  t        j                  t
        d«      j                  d«       y | j                  t        j                  t
        «      j                  d«       | j                  t        j                  t
        d«      j                  d«       y )NÚp0r   r{  Úp1Úp0i1Úp1i1)r9   r   rE   Úintrinsic_namer   r   r?   s    r   Útest_ptr_intrinsic_namez!TestTypes.test_ptr_intrinsic_name7
  sÁ   € Ø×ÑœŸ™Ó)×8Ñ8¸$Ô?Ø×ÑœŸ™°!Ô4×CÑCÀTÔJÝ.Ø×ÑœRŸ^™^¬DÓ1×@Ñ@À$ÔGØ×ÑœRŸ^™^¬D°!Ó4×CÑCÀTÕJà×ÑœRŸ^™^¬DÓ1×@Ñ@À&ÔIØ×ÑœRŸ^™^¬D°!Ó4×CÑCÀVÕLr   c                 ó0  — | j                  t        t        «      d«       | j                  t        t        j                  d«      «      d«       | j                  t        t
        «      d«       | j                  t        t        «      d«       | j                  t        t        j                  «       «      d«       | j                  t        t        j                  t        d«      «      d«       | j                  t        t        j                  t        t
        f«      «      d	«       | j                  t        t        j                  t        t
        t        f«      «      d
«       | j                  t        t        j                  t        dd¬«      «      d«       | j                  t        t        j                  t        t
        fd¬«      «      d«       | j                  t        t        j                  t        t
        t        fd¬«      «      d«       t        sx| j                  t        t        j                  t        «      «      d«       | j                  t        t        j                  t        j                  t        «      «      «      d«       nw| j                  t        t        j                  t        «      «      d«       | j                  t        t        j                  t        j                  t        «      «      «      d«       | j                  t        t        j                  t        d«      «      d«       t        s�| j                  t        t        j                  t        j                  t        «      d«      «      d«       | j                  t        t        j                  t        j                  t        d«      «      «      d«       nŒ| j                  t        t        j                  t        j                  t        «      d«      «      d«       | j                  t        t        j                  t        j                  t        d«      «      «      d«       | j                  t        t        j                  t        f«      «      d«       | j                  t        t        j                  t        t
        f«      «      d«       t        se| j                  t        t        j                  t        j                  t        «      t        j                  t        t        f«      f«      «      d«       nd| j                  t        t        j                  t        j                  t        «      t        j                  t        t        f«      f«      «      d«       | j                  t        t        j                  t        fd¬«      «      d«       | j                  t        t        j                  t        t
        fd¬«      «      d«       t        j                  «       }|j!                  d«      }| j                  t        |«      d «       |j!                  d!«      }| j                  t        |«      d"«       |j!                  d#«      }| j                  t        |«      d$«       y%)&z:
        Test the string representation of types.
        Úi1é   Úi29r6  ÚdoubleÚvoidry   zi1 ()z
i1 (float)zi1 (float, double)Tr„   zi1 (...)zi1 (float, ...)zi1 (float, double, ...)r  rœ  r�  r‘   z[5 x i1]z	[5 x ptr]z	[5 x i1*]z	[5 x i1]*z{i1}z{i1, float}z{ptr, {i32, i8}}z{i1*, {i32, i8}})Úpackedz<{i1}>z<{i1, float}>ÚMyTypez	%"MyType"zMyType\z%"MyType\5c"zMyType"z%"MyType\22"N)r9   r$   r   r   r0  r<  rD   rY  rB   r   rE   rC   r¹  r!  rŠ   r~  r  )r   r€  ÚmytypeÚmytype1Úmytype2s        r   Útest_strzTestTypes.test_strA
  sb  € ð 	×ÑœœT› DÔ)Ø×ÑœœRŸZ™Z¨›^Ó,¨eÔ4Ø×ÑœœS› 7Ô+Ø×ÑœœS› 8Ô,Ø×ÑœœRŸ[™[›]Ó+¨VÔ4Ø×ÑœœRŸ_™_¬T°2Ó6Ó7¸ÔAØ×ÑœœRŸ_™_¬T´C°6Ó:Ó;¸\ÔJØ×ÑœœRŸ_™_¬T´C¼°:Ó>Ó?Ø-ô	/à×ÑœœRŸ_™_¬T°2¸tÔDÓEØ#ô	%à×ÑœœRŸ_™_¬T´C°6À4ÔHÓIØ*ô	,à×ÑœœRŸ_™_¬T´C¼°:ÀtÔLÓMØ2ô	4å.Ø×ÑœS¤§¡´Ó!6Ó7¸Ô?Ø×ÑœS¤§¡´·±¼uÓ0EÓ!FÓGÈÕOà×ÑœS¤§¡´Ó!6Ó7¸Ô@Ø×ÑœS¤§¡´·±¼uÓ0EÓ!FÓGØ$ô&à×ÑœœRŸ\™\¬$°Ó2Ó3°ZÔ@Ý.Ø×ÑœS¤§¡¬b¯n©n¼TÓ.BÀAÓ!FÓGØ(ô*à×ÑœS¤§¡´·±¼TÀ1Ó0EÓ!FÓGÈÕOà×ÑœS¤§¡¬b¯n©n¼TÓ.BÀAÓ!FÓGØ(ô*à×ÑœS¤§¡´·±¼TÀ1Ó0EÓ!FÓGØ(ô*à×ÑœœR×1Ñ1´4°'Ó:Ó;¸VÔDØ×ÑœœR×1Ñ1´4¼°+Ó>Ó?ÀÔOÝ.Ø×ÑœS¤×!5Ñ!5Ü—‘œtÓ$¤b×&:Ñ&:¼EÄ4¸=Ó&Ið7Kó "Ló Mà"õ$ð ×ÑœS¤×!5Ñ!5Ü—‘œtÓ$¤b×&:Ñ&:¼EÄ4¸=Ó&Ið7Kó "Ló Mà"ô$ð 	×ÑœœR×1Ñ1´4°'À$ÔGÓHØ!ô	#à×ÑœœR×1Ñ1´4¼°+ÀdÔKÓLØ(ô	*ô —*‘*“,ˆØ×,Ñ,¨XÓ6ˆØ×Ñœ˜V› mÔ4Ø×-Ñ-¨jÓ9ˆØ×Ñœ˜W›Ð'8Ô9Ø×-Ñ-¨jÓ9ˆØ×Ñœ˜W›Ð'8Õ9r   c           	      óÄ   — t        | j                  | j                  «       «      D ]9  }| j                  t	        |«      t	        t        j
                  |«      «      «       Œ; y r#   )Úfilterrz  r‚  r9   Úhashrˆ  )r   Útyps     r   Ú	test_hashzTestTypes.test_hash}
  sD   € Ü˜$×3Ñ3°T×5HÑ5HÓ5JÖKˆCØ×ÑœT #›Y¬¬T¯Y©Y°s«^Ó(<Õ=ñ Lr   c                 ó‚  ‡ — ˆ fd„}ˆ fd„}t        j                  t        «      }t        d«      D ]  } |||t        «       Œ  ||«       t        j                  t
        d«      }t        d«      D ]  } |||t
        «       Œ  ||«       t        j                  t        t        j                  t
        t        f«      f«      } ||dt        «        ||dt        j                  t
        t        f«      «       ‰ j                  t        «      5  |j                  t        j                  t        d«      «       d d d «        ||«       t        j                  «       }t        j                  |d«      }|j                  t        t        j                  t
        t        f«      «        ||dt        «        ||dt        j                  t
        t        f«      «       ‰ j                  t        «      5  |j                  t        j                  t        d«      «       d d d «        ||«       y # 1 sw Y   ŒóxY w# 1 sw Y   ŒxY w)	Nc                 ó|   •— | j                  t        j                  t        |«      «      }‰j	                  ||«       y r#   )r  r   rC  rC   r9   )r�  r„  r[   rh   r   s       €r   Úcheck_constantz*TestTypes.test_gep.<locals>.check_constant‚
  s,   ø€ Ø—V‘VœBŸK™K¬¨qÓ1Ó2ˆFØ×Ñ˜V XÕ.r   c                 ó°   •— t        j                  t        d«      }‰j                  t        «      5  | j                  |«       d d d «       y # 1 sw Y   y xY w)Ng      ð?)r   rC  rD   rë   r  r  )r�  r"  r   s     €r   Úcheck_index_typez,TestTypes.test_gep.<locals>.check_index_type†
  s8   ø€ Ü—K‘K¤ SÓ)ˆEØ×"Ñ"¤9Õ-Ø—‘�u”÷ .×-Ñ-ús   ±AÁAr‘   r”   r   r   ro   r¶  )r   rE   rD   Úranger¹  r   r!  rŠ   rë   Ú
IndexErrorr  rC  rC   r~  ÚIdentifiedStructTypeÚset_body)r   rÂ  rÄ  r�  r„  r€  s   `     r   r  zTestTypes.test_gep�
  s“  ø€ ô	/ô	ô
 �^‰^œCÓ ˆÜ�q–ˆAÙ˜2˜q¤#Õ&ð á˜Ôä�\‰\œ$ Ó"ˆÜ�q–ˆAÙ˜2˜q¤$Õ'ð á˜Ôä×!Ñ!¤3¬×(<Ñ(<¼dÄD¸\Ó(JÐ"KÓLˆÙ�r˜1œcÔ"Ù�r˜1œb×2Ñ2´D¼$°<Ó@ÔAØ×ÑœzÕ*Ø�F‰F”2—;‘;œu aÓ(Ô)÷ +á˜Ôä—*‘*“,ˆÜ×$Ñ$ W¨hÓ7ˆØ
�‰”Cœ×-Ñ-¬t´T¨lÓ;Ô<Ù�r˜1œcÔ"Ù�r˜1œb×2Ñ2´D¼$°<Ó@ÔAØ×ÑœzÕ*Ø�F‰F”2—;‘;œu aÓ(Ô)÷ +á˜Õ÷ +Ð*ú÷ +Ð*ús   Ä*H)Ç.*H5È)H2È5H>c                 óf  ‡ ‡— t        j                  d«      Šˆ ˆfd„} |t        d«        |t        d«        |t        d«        |t        j                  t        d«      d«        |t        j                  t        d«      d«        |t        j                  t        t        t        f«      d«       y )	Nú%e-m:e-i64:64-f80:128-n8:16:32:64-S128c                 óH   •— ‰j                  | j                  ‰«      |«       y r#   )r9   Úget_abi_size©r�  r[   r   Útds     €€r   rg  z&TestTypes.test_abi_size.<locals>.check¨
  s   ø€ Ø×Ñ˜RŸ_™_¨RÓ0°(Õ;r   r   r“   r   r‘   é   r	   ©
r-   Úcreate_target_datarŠ   rC   rÝ   r   r¹  r!  rD   r<  ©r   rg  rÎ  s   ` @r   Útest_abi_sizezTestTypes.test_abi_size¥
  sy   ù€ Ü×$Ñ$Ð%LÓMˆõ	<áŒd�AŒÙŒe�QŒÙŒe�QŒÙŒb�l‰lœ4 Ó# QÔ'ÙŒb�l‰lœ5 !Ó$ bÔ)ÙŒb×"Ñ"¤C¬¬c ?Ó3°RÕ8r   c                 óf  ‡ ‡— t        j                  d«      Šˆ ˆfd„} |t        d«        |t        d«        |t        d«        |t        j                  t        d«      d«        |t        j                  t        d«      d«        |t        j                  t        t        t        f«      d«       y )NrÊ  c                 óH   •— ‰j                  | j                  ‰«      |«       y r#   )r'   Úget_abi_alignmentrÍ  s     €€r   rg  z+TestTypes.test_abi_alignment.<locals>.check´
  s   ø€ Ø�M‰M˜"×.Ñ.¨rÓ2°HÕ=r   )r   ro   r“   )r“   )r   r‘   rÐ  rÒ  s   ` @r   Útest_abi_alignmentzTestTypes.test_abi_alignment±
  s|   ù€ Ü×$Ñ$Ð%LÓMˆõ	>áŒd�IÔÙŒe�TÔÙŒe�TÔÙŒb�l‰lœ4 Ó# YÔ/ÙŒb�l‰lœ5 !Ó$ dÔ+ÙŒb×"Ñ"¤C¬¬c ?Ó3°TÕ:r   c                 ó  — t        j                  «       }|j                  d«      }t        j                  |¬«      }| j	                  |j
                  «       | j                  |«       t        |«      }|j                  t        j                  d«      t        j                  d«      t        j                  «       «       | j                  |j
                  «       | j                  |«       | j                  |t        |«      «       y )Nr¶  ©r€  r
   r   )r   r~  r  r>   r  rž  r0   r$   rÈ  r0  rB  r“  ÚassertNotEqual)r   r€  r·  r@   Úoldstrs        r   Útest_identified_structz TestTypes.test_identified_struct½
  s°   € Ü—*‘*“,ˆØ×,Ñ,¨XÓ6ˆÜ—‘ 7Ô+ˆØ�‰˜×(Ñ(Ô)Ø×Ñ˜VÔ$Ü�V“ˆØ�‰œŸ
™
 2›¬¯
©
°2«¼¿¹»ÔGØ×Ñ˜×)Ñ)Ô*Ø×Ñ˜VÔ$Ø×Ñ˜F¤C¨£KÕ0r   c                 ó~  — t        j                  d«      }t        j                  «       }|j	                  dd«      }t        j
                  |¬«      }| j                  |j                  «       | j                  |«       t        |«      }|j                  t        j                  d«      t        j                  d«      t        j                  «       «       | j                  |j                  |d|«      d«       | j                  |j                  «       | j                  |«       | j!                  |t        |«      «       y )	NrÊ  r¶  TrÙ  r	   r   r   ro   )r-   rÑ  r   r~  r  r>   r  rž  r0   r$   rÈ  r0  rB  r9   Úget_element_offsetr“  rÚ  )r   rÎ  r€  r·  r@   rÛ  s         r   Útest_identified_struct_packedz'TestTypes.test_identified_struct_packedÉ
  sâ   € Ü×$Ñ$Ð%LÓMˆÜ—*‘*“,ˆØ×,Ñ,¨X°tÓ<ˆÜ—‘ 7Ô+ˆØ�‰˜×(Ñ(Ô)Ø×Ñ˜VÔ$Ü�V“ˆØ�‰œŸ
™
 2›¬¯
©
°2«¼¿¹»ÔGØ×Ñ˜×2Ñ2°2°q¸'ÓBÀAÔFØ×Ñ˜×)Ñ)Ô*Ø×Ñ˜VÔ$Ø×Ñ˜F¤C¨£KÕ0r   c                 óô   — t        j                  «       }|j                  d«      }t        j                  d«      g|_        t        j                  d«      }| j                  |j                  ||¬«      d«       y )Nr¶  r
   rÊ  rÙ  r“   )	r   r~  r  r0  Úelementsr-   rÑ  r9   rÌ  )r   r€  r·  rÎ  s       r   Ú$test_target_data_non_default_contextz.TestTypes.test_target_data_non_default_context×
  s`   € Ü—*‘*“,ˆØ×,Ñ,¨XÓ6ˆÜŸ:™: b›>Ð*ˆŒÜ×$Ñ$Ð%LÓMˆØ×Ñ˜×,Ñ,¨R¸Ð,ÓAÀ1ÕEr   c                 óŒ   — t        j                  t        j                  d«      d«      }| j                  t	        |«      d«       y )Nr
   r   z	<8 x i32>)r   rÊ  r0  r9   r$   )r   rÏ  s     r   Útest_vectorzTestTypes.test_vectorÞ
  s.   € Ü—‘œbŸj™j¨›n¨aÓ0ˆØ×Ñœ˜U› [Õ1r   N)ru   rv   rw   rz  r‚  rÇ   r‰  rš  r§  r®  rº  r¿  r  rÓ  r×  rÜ  rß  râ  rä  ry   r   r   ru  ru  �	  sY   „ ò0ò
ò.,ò:ò 96òv6BòpMò::òx>ò"òH
9ò
;ò
1ò1òFó2r   ru  c                 ó6   — t        j                  t        | «      S r#   )r   rC  rC   )r„  s    r   Úc32ræ  ã
  s   € Ü�;‰;”u˜aÓ Ð r   c                   óÀ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z y) ÚTestConstantc                 ó  — t        j                  t        d«      }| j                  t	        |«      d«       t        j                  t
        d«      }| j                  t	        |«      d«       t        j                  t
        d«      }| j                  t	        |«      d«       t        j                  t
        d«      }| j                  t	        |«      d«       t        j                  t
        d	«      }| j                  t	        |«      d
«       t        j                  t
        t         j                  «      }| j                  t	        |«      d«       t        j                  t
        d «      }| j                  t	        |«      d«       y )NrØ   zi32 42r   zi1 1r   zi1 0Túi1 trueFzi1 falsezi1 undef)r   rC  rC   r9   r$   r   râ  ©r   r   s     r   Útest_integerszTestConstant.test_integersé
  s  € Ü�K‰Kœ˜rÓ"ˆØ×Ñœ˜Q› Ô*Ü�K‰Kœ˜aÓ ˆØ×Ñœ˜Q› Ô(Ü�K‰Kœ˜aÓ ˆØ×Ñœ˜Q› Ô(Ü�K‰Kœ˜dÓ#ˆØ×Ñœ˜Q› Ô+Ü�K‰Kœ˜eÓ$ˆØ×Ñœ˜Q› Ô,Ü�K‰KœœbŸl™lÓ+ˆØ×Ñœ˜Q› Ô,Ü�K‰Kœ˜dÓ#ˆØ×Ñœ˜Q› Õ(r   c                 óœ  — t        j                  t        d«      }| j                  t	        |«      d«       t        j                  t        d«      }| j                  t	        |«      d«       t        j                  t
        d«      }| j                  t	        |«      d«       t        j                  t
        d«      }| j                  t	        |«      d«       t        j                  t
        t         j                  «      }| j                  t	        |«      d«       t        j                  t
        d «      }| j                  t	        |«      d«       y )	Nç      ø?zfloat 0x3ff8000000000000g      ø¿zfloat 0xbff8000000000000zdouble 0x3ff8000000000000zdouble 0xbff8000000000000zdouble undefz
double 0.0)r   rC  r<  r9   r$   rD   râ  rë  s     r   Ú
test_realszTestConstant.test_realsù
  sâ   € ä�K‰Kœ˜SÓ!ˆØ×Ñœ˜Q›Ð!;Ô<Ü�K‰Kœ˜TÓ"ˆØ×Ñœ˜Q›Ð!;Ô<Ü�K‰Kœ˜SÓ!ˆØ×Ñœ˜Q›Ð!<Ô=Ü�K‰Kœ˜TÓ"ˆØ×Ñœ˜Q›Ð!<Ô=Ü�K‰KœœRŸ\™\Ó*ˆØ×Ñœ˜Q› Ô0Ü�K‰Kœ˜TÓ"ˆØ×Ñœ˜Q› Õ.r   c                 ó„  — t        j                  t        j                  t        d«      t	        d«      t	        d«      t	        d«      f«      }| j                  t        |«      d«       t        j                  t        j                  t        d«      t	        d«      t	        t         j                  «      f«      }| j                  t        |«      d«       t         j                  j                  t	        d«      t	        d«      t	        t         j                  «      f«      }| j                  t        |«      d«       | j                  t        «      5 }t         j                  j                  t	        d«      t        j                  t        d	«      f«       d d d «       | j                  t        j                  «      d
«       t        j                  t        j                  t        d«      t         j                  «      }| j                  t        |«      d«       t        j                  t        j                  t        d«      d «      }| j                  t        |«      d«       t        j                  t        j                  t        d«      t        d«      «      }| j                  t        |«      d«       t        j                  t        j                  t        d«      t        d«      «      }| j                  t        |«      d«       t        j                  t        j                  t        d«      dt         j                  df«      }| j                  t        |«      d«       | j                  t        «      5  t        j                  t        j                  t        d«      d«       d d d «       y # 1 sw Y   �ŒxY w# 1 sw Y   y xY w)Nr”   r‘   ri  r“   z[3 x i32] [i32 5, i32 6, i32 4]ro   z[2 x i32] [i32 5, i32 undef]z#[3 x i32] [i32 5, i32 6, i32 undef]rî  z$all elements must have the same typez[2 x i32] undefz[2 x i32] zeroinitializerr  s   foobar_123€z[11 x i8] c"foobar_123\80"s    ÿz[4 x i8] c"\00\01\04\ff"z#[3 x i32] [i32 5, i32 undef, i32 6])r‘   ri  )r   rC  r¹  rC   ræ  r9   r$   râ  Úliteral_arrayrë   r  r<  rÃ  rŠ   Ú	bytearrayrÍ   )r   r   rÛ  s      r   Útest_arrayszTestConstant.test_arrays  sp  € Ü�K‰KœŸ™¤U¨AÓ.´°Q³¼¸Q»ÄÀQÃÐ0HÓIˆØ×Ñœ˜Q›Ð!BÔCÜ�K‰KœŸ™¤U¨AÓ.´°Q³¼¼R¿\¹\Ó9JÐ0KÓLˆØ×Ñœ˜Q›Ð!?Ô@ä�K‰K×%Ñ%¤s¨1£v¬s°1«v´s¼2¿<¹<Ó7HÐ&IÓJˆØ×Ñœ˜Q›Ð!FÔGØ×ÑœyÔ)¨VÜ�K‰K×%Ñ%¤s¨1£v¬r¯{©{¼3ÀÓ/DÐ&EÔF÷ *à×Ñœ˜V×-Ñ-Ó.Ø?ô	Aô �K‰KœŸ™¤U¨AÓ.´·±Ó=ˆØ×Ñœ˜Q›Ð!2Ô3Ü�K‰KœŸ™¤U¨AÓ.°Ó5ˆØ×Ñœ˜Q›Ð!<Ô=ä�K‰KœŸ™¤T¨2Ó.´	Ð:KÓ0LÓMˆØ×Ñœ˜Q›Ð!>Ô?Ü�K‰KœŸ™¤T¨1Ó-¬yÐ9LÓ/MÓNˆØ×Ñœ˜Q›Ð!<Ô=ä�K‰KœŸ™¤U¨AÓ.°´B·L±LÀ!Ð0DÓEˆØ×Ñœ˜Q›Ð!FÔGà×ÑœzÕ*Ü�K‰KœŸ™¤U¨AÓ.°Ô7÷ +Ð*÷% *Ñ)ú÷$ +Ð*ús   ÅAN)Í1/N6Î)N3Î6N?c                 ó(  — t        j                  t        j                  d«      d«      }g d¢}t        j                  ||«      }dj	                  dj                  t        dj                  |«      «      «      }| j                  t        |«      |«       y )Nr
   r   )r   ro   r“   r”   r   ri  é	   é   z<8 x i32> <{}>z, zi32 {})	r   rÊ  r0  rC  rµ   r   r   r9   r$   )r   rÏ  ÚvalsrÐ  Úvec_reprs        r   rä  zTestConstant.test_vector%  sj   € Ü—‘œbŸj™j¨›n¨aÓ0ˆÚ'ˆÜ�k‰k˜% Ó&ˆØ#×*Ñ*Ø�I‰I”c˜(Ÿ/™/¨4Ó0Ó1ó3ˆà×Ñœ˜S› 8Õ,r   c                 óŽ   — t        j                  t        j                  d«      d «      j                  }| j	                  |d«       y )Nr
   r   )r   rC  r0  Úconstantr9   )r   rú  s     r   Útest_non_nullable_intz"TestConstant.test_non_nullable_int-  s0   € Ü—;‘;œrŸz™z¨"›~¨tÓ4×=Ñ=ˆØ×Ñ˜ 1Õ%r   c                 ój  — t        j                  t        t        f«      }t        j                  t        |f«      }t        j
                  |t        j
                  t        j                  «       d«      t        j
                  t        d«      f«      }| j                  t        |«      d«       t         j
                  j                  t        j
                  t        j                  «       d«      t        j
                  t        d«      f«      }| j                  |j                  |«       | j                  t        |«      d«       t         j
                  j                  t        j
                  t        j                  «       d«      t        j
                  t        t         j                  «      f«      }| j                  |j                  |«       | j                  t        |«      d«       t        j
                  |t         j                  «      }| j                  t        |«      d«       t        j
                  |d «      }| j                  t        |«      d«       t        j
                  |d«      }| j                  t        |«      d«       t        j
                  |d|f«      }| j                  t        |«      d	«       t        j
                  |d
«      }| j                  t        |«      t        |«      «       | j                  t        «      5  t        j
                  |d«       d d d «       y # 1 sw Y   y xY w)Nrî  Tú/{float, i1} {float 0x3ff8000000000000, i1 true}z0{float, i1} {float 0x3ff8000000000000, i1 undef}z{float, i1} undefz{float, i1} zeroinitializer©rî  TrØ   úL{i32, {float, i1}} {i32 42, {float, i1} {float 0x3ff8000000000000, i1 true}}©rØ   rþ  ©r“   r‘   ri  )r   r!  r<  r   rC   rC  rB  r9   r$   Úliteral_structr  râ  rë   rÍ   )r   Úst1Úst2r   Úc1Úc2Úc3s          r   Útest_structszTestConstant.test_structs1  sB  € Ü×"Ñ"¤C¬ ;Ó/ˆÜ×"Ñ"¤E¨3 <Ó0ˆÜ�K‰K˜œbŸk™k¬"¯,©,«.¸#Ó>Ü Ÿk™k¬$°Ó5ð7ó 8ˆà×Ñœ˜Q›ØJô	Lä�K‰K×&Ñ&¬¯©´B·L±L³NÀCÓ(HÜ(*¯©´D¸$Ó(?ð(Aó Bˆà×Ñ˜Ÿ™ Ô%Ø×Ñœ˜Q›ØJô	Lä�K‰K×&Ñ&¬¯©´B·L±L³NÀCÓ(HÜ(*¯©´D¼"¿,¹,Ó(Gð(Ió Jˆà×Ñ˜Ÿ™ Ô%Ø×Ñœ˜Q›ØKô	Mä�K‰K˜œRŸ\™\Ó*ˆØ×Ñœ˜Q›Ð!4Ô5Ü�K‰K˜˜TÓ"ˆØ×Ñœ˜Q›Ð!>Ô?ä�[‰[˜˜kÓ*ˆØ×Ñœ˜R›ØJô	Lä�[‰[˜˜r 2˜hÓ'ˆØ×Ñœ˜R›ð $Jô 	Lä�[‰[˜Ð/Ó0ˆØ×Ñœ˜R›¤# b£'Ô*à×ÑœzÕ*Ü�K‰K˜˜YÔ'÷ +×*Ñ*ús   Ì	L)Ì)L2c                 óÂ   — t        j                  d«      }t        j                  t        j                  ||g«      t         j                  «      }| j                  |«       y )Nr   )r   r0  rC  r!  râ  r<   )r   r  Ústs      r   Ú&test_undefined_literal_struct_picklingz3TestConstant.test_undefined_literal_struct_picklingS  s@   € Ü�Z‰Z˜‹]ˆÜ�[‰[œ×-Ñ-¨r°2¨hÓ7¼¿¹ÓFˆØ×$Ñ$ RÕ(r   c                 óÊ  — t        d«      }| j                  |t        j                  «       | j	                  t        |«      d«       t        d«      }| j                  |t        j                  «       | j	                  t        |«      d«       t        j                  t        d«      } |t        d«      t        d«      t        d«      g«      }| j	                  t        |«      d	«        |g d
¢«      }| j	                  t        |«      d	«        |d«      }| j	                  t        |«      d«       | j                  t        «      5   |g d¢«       ddd«       t        j                  t        t        f«      }t        j                  t        |f«      } |d«      }| j	                  t        |«      d«        |d«      }| j	                  t        |«      d«       y# 1 sw Y   ŒŠxY w)z@
        Instantiating a type should create a constant.
        rØ   zi8 42Trê  r”   r“   r‘   ri  z[3 x i32] [i32 4, i32 5, i32 6]r  Nz[3 x i32] zeroinitializer)r“   r‘   ri  rö  rþ  rý  r   rÿ  )rŠ   r>  r   rC  r9   r$   r   r¹  rC   ræ  rë   rÍ   r!  r<  )r   r   Úatr  r  s        r   Útest_type_instantiatonz#TestConstant.test_type_instantiatonX  s{  € ô �‹HˆØ×Ñ˜a¤§¡Ô-Ø×Ñœ˜Q› Ô)Ü�‹JˆØ×Ñ˜a¤§¡Ô-Ø×Ñœ˜Q› Ô+ä�\‰\œ% Ó#ˆÙ”�A“œ˜A›¤ A£Ð'Ó(ˆØ×Ñœ˜Q›Ð!BÔCÙŠy‹MˆØ×Ñœ˜Q›Ð!BÔCÙˆt‹HˆØ×Ñœ˜Q›Ð!<Ô=Ø×ÑœzÕ*ÙŠ|Ô÷ +ô ×"Ñ"¤C¬ ;Ó/ˆÜ×"Ñ"¤E¨3 <Ó0ˆÙ�ÓˆØ×Ñœ˜Q›ð #*ô 	,áÐ!Ó"ˆØ×Ñœ˜Q›ð #Iõ 	K÷ +Ð*ús   ÅGÇG"c                 óP   — t        d«      }| j                  t        |«      d«       y)z8
        Constants should have a useful repr().
        rØ   z!<ir.Constant type='i32' value=42>N)rC   r9   rp  rë  s     r   r¢  zTestConstant.test_reprv  s"   € ô �"‹IˆØ×Ñœ˜a›Ð"EÕFr   c                 óà  — t        j                  t        j                  t        j                  d«      d«      t	        t        d«      «      «      }| j                  «       }t        j                  ||j                  d«      }d|_	        ||_
        t        j                  t        |«      «      }t        j                  t        |«      «      }| j                  t        |«      t        |«      «       y )Nr   é   Ú
myconstantT)r   rC  r¹  r0  rò  rÅ  r@   rA  r  r†  rD  r-   r.   r$   r9   )r   r   r­  ÚgvÚparsedÚreparseds         r   Útest_encoding_problemz"TestConstant.test_encoding_problem}  s¥   € Ü�K‰KœŸ™¤R§Z¡Z°£]°CÓ8Ü!¤%¨£*Ó-ó/ˆà�K‰K‹MˆÜ×Ñ˜q !§&¡&¨,Ó7ˆØ!ˆÔØˆŒô ×$Ñ$¤S¨£VÓ,ˆä×&Ñ&¤s¨6£{Ó3ˆØ×Ñœ˜V›¤c¨(£mÕ4r   c           	      ó8  — | j                  «       }t        j                  t        t        f«      }t        j
                  ||d«      }|j                  dD �cg c]  }t        j                  t        |«      ‘Œ c}«      }t        s| j                  t        |«      d«       n| j                  t        |«      d«       | j                  |j                  t        j                  t        «      «       t        j                  |d «      }| j                  t        «      5  |j                  t        j                  t        d«      g«       d d d «       t        j                  |j!                  «       d «      }|j                  t        j                  t        d«      g«      }t        s| j                  t        |«      d«       n| j                  t        |«      d«       | j                  |j                  t        j                  t        «      «       y c c}w # 1 sw Y   ŒÍxY w)Nr  ©r   r   z<getelementptr ({float, i1}, ptr @"myconstant", i32 0, i32 1)zEgetelementptr ({float, i1}, {float, i1}* @"myconstant", i32 0, i32 1)r   z,getelementptr ({float, i1}, ptr null, i32 0)z5getelementptr ({float, i1}, {float, i1}* null, i32 0))r@   r   r!  r<  r   rA  r  rC  rC   r   r9   r$   r  rE   rë   r  rº   )	r   r­  r�  r  rP  r   ÚconstÚ	const_ptrr  s	            r   r  zTestConstant.test_gepŒ  s€  € Ø�K‰K‹MˆÜ×!Ñ!¤3¬ +Ó.ˆÜ×Ñ˜q " lÓ3ˆØ�F‰F±6Ó:±6¨a”B—K‘K¤ qÕ)°6Ñ:Ó;ˆÝ.Ø×ÑœS ›VØ[õ]ð ×ÑœS ›VØdôfà×Ñ˜Ÿ™¤§¡´Ó!5Ô6ä—‘˜B Ó%ˆØ×ÑœyÕ)Ø�I‰I”r—{‘{¤5¨!Ó,Ð-Ô.÷ *ô —K‘K §¡£°Ó6ˆ	Ø�]‰]œBŸK™K¬¨qÓ1Ð2Ó3ˆÝ.Ø×ÑœS ›WØKõMð ×ÑœS ›WØTôVà×Ñ˜Ÿ™¤§¡´Ó!5Õ6ùò+ ;÷ *Ð)ús   Á!HÄ+HÈHc           	      óx  — | j                  «       }t        j                  t        t        f«      }d}t        j
                  ||d|¬«      }| j                  |j                  |«       |j                  dD �cg c]  }t        j                  t        |«      ‘Œ c}«      }| j                  |j                  j                  |«       t        s| j                  t        |«      d«       n| j                  t        |«      d«       | j                  |j                  t        j                  t        |¬«      «       y c c}w )Nr“   r  r{  r  zIgetelementptr ({float, i1}, ptr addrspace(4) @"myconstant", i32 0, i32 1)zRgetelementptr ({float, i1}, {float, i1} addrspace(4)* @"myconstant", i32 0, i32 1))r@   r   r!  r<  r   rA  r9   r|  r  rC  rC   r  r   r$   rE   )r   r­  r�  r|  r  rP  r   s          r   Útest_gep_addrspace_globalvarz)TestConstant.test_gep_addrspace_globalvar§  só   € Ø�K‰K‹MˆÜ×!Ñ!¤3¬ +Ó.ˆØˆ	ä×Ñ˜q " l¸iÔHˆØ×Ñ˜Ÿ™ yÔ1Ø�F‰F±6Ó:±6¨a”B—K‘K¤ qÕ)°6Ñ:Ó;ˆØ×Ñ˜Ÿ™×)Ñ)¨9Ô5Ý.Ø×ÑœS ›VðJõLð ×ÑœS ›VðKôMð 	×Ñ˜Ÿ™¤§¡´À	Ô!JÕKùò ;s   Á6!D7c                 ó”   — t        j                  t        d«      j                  t        «      }| j                  t        |«      d«       y )Nr   ztrunc (i64 1 to i32))r   rC  rÝ   r8  rC   r9   r$   rë  s     r   Ú
test_trunczTestConstant.test_truncº  s2   € Ü�K‰Kœ˜qÓ!×'Ñ'¬Ó.ˆØ×Ñœ˜Q›Ð!7Õ8r   c                 ó”   — t        j                  t        d«      j                  t        «      }| j                  t        |«      d«       y )Nr   zzext (i32 1 to i64))r   rC  rC   r9  rÝ   r9   r$   rë  s     r   Ú	test_zextzTestConstant.test_zext¾  s2   € Ü�K‰Kœ˜qÓ!×&Ñ&¤uÓ-ˆØ×Ñœ˜Q›Ð!6Õ7r   c                 ó”   — t        j                  t        d«      j                  t        «      }| j                  t        |«      d«       y )Nr2   zsext (i32 -1 to i64))r   rC  rC   r:  rÝ   r9   r$   rë  s     r   Ú	test_sextzTestConstant.test_sextÂ  s2   € Ü�K‰Kœ˜rÓ"×'Ñ'¬Ó.ˆØ×Ñœ˜Q›Ð!7Õ8r   c                 ó”   — t        j                  t        d«      j                  t        «      }| j                  t        |«      d«       y )Nr   z*fptrunc (float 0x3ff0000000000000 to half))r   rC  r<  r;  rŠ  r9   r$   rë  s     r   Útest_fptrunczTestConstant.test_fptruncÆ  s2   € Ü�K‰Kœ˜QÓ×'Ñ'¬Ó,ˆØ×Ñœ˜Q›Ð!MÕNr   c                 ó”   — t        j                  t        d«      j                  t        «      }| j                  t        |«      d«       y )Nr   z*fpext (float 0x3ff0000000000000 to double))r   rC  r<  r=  rD   r9   r$   rë  s     r   Ú
test_fpextzTestConstant.test_fpextÊ  s2   € Ü�K‰Kœ˜QÓ×%Ñ%¤cÓ*ˆØ×Ñœ˜Q›Ð!MÕNr   c                 ó  — | j                  «       }t        j                  |t        d«      }|j	                  t
        j                  «       «      }t        s| j                  t        |«      d«       y | j                  t        |«      d«       y )Nr  z"bitcast (ptr @"myconstant" to ptr)z$bitcast (i32* @"myconstant" to i64*))
r@   r   rA  rC   r"  rÝ   rº   r   r9   r$   )r   r­  r  r   s       r   Útest_bitcastzTestConstant.test_bitcastÎ  se   € Ø�K‰K‹MˆÜ×Ñ˜q¤%¨Ó6ˆØ�J‰J”u×'Ñ'Ó)Ó*ˆÝ.Ø×ÑœS ›VÐ%IÕJà×ÑœS ›VÐ%KÕLr   c                 ó”   — t        j                  t        d«      j                  t        «      }| j                  t        |«      d«       y )Nr   z(fptoui (float 0x3ff0000000000000 to i32))r   rC  r<  r>  rC   r9   r$   rë  s     r   Útest_fptouizTestConstant.test_fptoui×  ó2   € Ü�K‰Kœ˜QÓ×&Ñ&¤uÓ-ˆØ×Ñœ˜Q›Ð!KÕLr   c                 ó”   — t        j                  t        d«      j                  t        «      }| j                  t        |«      d«       y )Nr   zuitofp (i32 1 to float))r   rC  rC   r@  r<  r9   r$   rë  s     r   Útest_uitofpzTestConstant.test_uitofpÛ  ó2   € Ü�K‰Kœ˜qÓ!×(Ñ(¬Ó-ˆØ×Ñœ˜Q›Ð!:Õ;r   c                 ó”   — t        j                  t        d«      j                  t        «      }| j                  t        |«      d«       y )Nr   z(fptosi (float 0x3ff0000000000000 to i32))r   rC  r<  r?  rC   r9   r$   rë  s     r   Útest_fptosizTestConstant.test_fptosiß  r+  r   c                 ó”   — t        j                  t        d«      j                  t        «      }| j                  t        |«      d«       y )Nr   zsitofp (i32 1 to float))r   rC  rC   rA  r<  r9   r$   rë  s     r   Útest_sitofpzTestConstant.test_sitofpã  r.  r   c                 óÀ  — t        j                  t        j                  «       d «      }t        j                  t        d«      }|j                  t        «      }| j                  t        |j
                  t        «       | j                  t        |j
                  t        «       t        s| j                  t        |«      d«       y | j                  t        |«      d«       y )Nr   zptrtoint (ptr null to i32)zptrtoint (i64* null to i32))r   rC  rÝ   rº   rC   rB  rë   r  r<  r   r9   r$   )r   r  rE  r   s       r   Útest_ptrtoint_1zTestConstant.test_ptrtoint_1ç  s’   € Ü�k‰kœ%×*Ñ*Ó,¨dÓ3ˆÜ�k‰kœ% Ó#ˆØ�L‰LœÓˆà×Ñœ) S§\¡\´5Ô9Ø×Ñœ) S§\¡\´3Ô7Ý.Ø×ÑœS ›VÐ%AÕBà×ÑœS ›VÐ%BÕCr   c                 óN  — | j                  «       }t        j                  |t        d«      }|j	                  t
        «      }t        sP| j                  t        |«      d«       | j                  t        d|j                  t
        j                  «       «       nO| j                  t        |«      d«       | j                  t        d|j                  t
        j                  «       «       t        j                  t        d«      }| j                  t        d|j                  t
        «       y )Nr  z#ptrtoint (ptr @"myconstant" to i64)z0can only ptrtoint\(\) to integer type, not 'ptr'z$ptrtoint (i32* @"myconstant" to i64)z2can only ptrtoint\(\) to integer type, not 'i64\*'r   z5can only call ptrtoint\(\) on pointer type, not 'i32')r@   r   rA  rC   rB  rÝ   r   r9   r$   rÌ   r  rº   rC  )r   r­  r  r   r  s        r   Útest_ptrtoint_2zTestConstant.test_ptrtoint_2ó  sÜ   € Ø�K‰K‹MˆÜ×Ñ˜q¤%¨Ó6ˆØ�K‰KœÓˆÝ.Ø×ÑœS ›VÐ%JÔKà×"Ñ"ÜØCØ—‘Ü× Ñ Ó"õ	$ð ×ÑœS ›VÐ%KÔLà×"Ñ"ÜØEØ—‘Ü× Ñ Ó"ô	$ô �[‰[œ Ó"ˆØ×ÑÜØDØ�K‰KÜõ		r   c                 óÜ  — t        j                  t        d«      }t        j                  t        d«      }|j	                  t
        j                  «       «      }| j                  t        |j                  t
        «       | j                  t        |j                  t
        j                  «       «       t        s| j                  t        |«      d«       y | j                  t        |«      d«       y )Nr   g…ëQ¸	@zinttoptr (i32 1 to ptr)zinttoptr (i32 1 to i64*))r   rC  rC   r<  rC  rÝ   rº   rë   r  r   r9   r$   )r   rE  Úpir   s       r   Útest_inttoptrzTestConstant.test_inttoptr  s›   € Ü�k‰kœ% Ó#ˆÜ�[‰[œ˜dÓ#ˆØ�L‰Lœ×)Ñ)Ó+Ó,ˆà×Ñœ) S§\¡\´5Ô9Ø×Ñœ) R§[¡[´%×2BÑ2BÓ2DÔEÝ.Ø×ÑœS ›VÐ%>Õ?à×ÑœS ›VÐ%?Õ@r   c                 óŠ   — t        j                  t        d«      }| j                  t	        |j                  «       «      d«       y )Nr   zsub (i32 0, i32 1))r   rC  rC   r9   r$   rÜ  ©r   rE  s     r   Útest_negzTestConstant.test_neg  s-   € Ü�k‰kœ% Ó#ˆØ×Ñœ˜SŸW™W›Y›Ð)=Õ>r   c                 óŠ   — t        j                  t        d«      }| j                  t	        |j                  «       «      d«       y )Nr   zxor (i32 1, i32 -1))r   rC  rC   r9   r$   rÝ  r;  s     r   Útest_notzTestConstant.test_not  s-   € Ü�k‰kœ% Ó#ˆØ×Ñœ˜SŸX™X›Z›Ð*?Õ@r   c                 óŠ   — t        j                  t        d«      }| j                  t	        |j                  «       «      d«       y )Nr   zfneg (float 0x3ff0000000000000))r   rC  r<  r9   r$   rÞ  r;  s     r   Ú	test_fnegzTestConstant.test_fneg#  s-   € Ü�k‰kœ#˜qÓ!ˆØ×Ñœ˜SŸX™X›Z›Ð*KÕLr   c                 óx  — t        j                  t        d«      }t        j                  t        d«      }|j                  d|j                  d|j
                  d|j                  d|j                  d|j                  d|j                  d	|j                  d
|j                  d|j                  d|j                  d|j                  d|j                  di}|j!                  «       D ])  \  }}| j#                  t%         ||«      «      |dz   «       Œ+ dddddddœ}|j!                  «       D ]:  \  }}t%        |j'                  ||«      «      }d|z   dz   }	| j#                  ||	«       Œ< dddddddœ}|j!                  «       D ]:  \  }}t%        |j)                  ||«      «      }d|z   dz   }	| j#                  ||	«       Œ< y )Nr   ro   rÀ  rÂ  rÁ  rˆ   r   rž  r¸  r�  rº  r»  ÚorÚandr¿  z (i32 1, i32 2)ÚeqÚneÚugtÚugeÚultÚule©rè  ré  rì  rí  rê  rë  zicmp ÚsgtÚsgeÚsltÚsle)r   rC  rC   rÀ  rÂ  rÁ  rˆ   r   rž  r¸  r�  rº  r»  r½  r¾  r¿  Úitemsr9   r$   rð  rñ  )
r   rE  rb  ÚoraclerÆ   ÚiropÚcopr'  rh   r[   s
             r   Útest_int_binopszTestConstant.test_int_binops'  s‹  € Ü�k‰kœ% Ó#ˆÜ�k‰kœ% Ó#ˆà—'‘'˜E C§H¡H¨f°c·h±hÀØ—'‘'˜E C§G¡G¨e°c·g±gÀØ—(‘(˜F C§H¡H¨f°c·h±hÀØ—(‘(˜F C§G¡G¨d°c·h±hÀØ—'‘'˜Eð	#ˆð
 Ÿ™ž‰HˆB�Ø×ÑœS¡ C£›\¨4Ð2CÑ+CÕDð 'ð  DØ˜u¨5¸ñ?ˆàŸ™ž‰IˆC�Ü˜×*Ñ*¨3°Ó4Ó5ˆFØ ‘~Ð(9Ñ9ˆHØ×Ñ˜V XÕ.ð (ð  DØ E°¸UñDˆàŸ™ž‰IˆC�Ü˜Ÿ™¨¨cÓ2Ó3ˆFØ ‘~Ð(9Ñ9ˆHØ×Ñ˜V XÕ.ñ (r   c           
      óÀ  — t        j                  t        d«      }t        j                  t        d«      }|j                  d|j                  d|j
                  d|j                  d|j                  di}|j                  «       D ]-  \  }}t         ||«      «      }|dz   }| j                  ||«       Œ/ d	d
dddddœ}|j                  «       D ]:  \  }}	t        |j                  ||«      «      }d|	z   dz   }| j                  ||«       Œ< dddddddœ}|j                  «       D ]:  \  }}	t        |j                  ||«      «      }d|	z   dz   }| j                  ||«       Œ< y )Nr   ro   rµ  r¶  r·  r¹  r¼  z5 (float 0x3ff0000000000000, float 0x4000000000000000)ÚoeqrE  ÚogtÚogerø  ÚolerJ  zfcmp ÚueqÚunerF  rG  rH  rI  )r   rC  r<  rµ  r¶  r·  r¹  r¼  rO  r$   r9   rü  rý  )
r   rE  rb  rP  rÆ   rQ  rh   r[   rR  r'  s
             r   Útest_flt_binopszTestConstant.test_flt_binopsC  sa  € Ü�k‰kœ#˜qÓ!ˆÜ�k‰kœ#˜qÓ!ˆà—(‘(˜F C§H¡H¨f°c·h±hÀØ—(‘(˜F C§H¡H¨fð6ˆàŸ™ž‰HˆB�Ü™˜C›“\ˆFØð  <ñ =ˆHà×Ñ˜V XÕ.ð	 'ð  U°¸eØ Eñ+ˆàŸ™ž‰IˆC�Ü˜×)Ñ)¨#¨sÓ3Ó4ˆFØ ‘~ð *Fñ GˆHà×Ñ˜V XÕ.ð	 (ð  U°¸eØ Eñ+ˆàŸ™ž‰IˆC�Ü˜×+Ñ+¨C°Ó5Ó6ˆFØ ‘~ð *Fñ GˆHà×Ñ˜V XÕ.ñ	 (r   N)!ru   rv   rw   rì  rï  ró  rä  rû  r  r  r  r¢  r  r  r  r  r   r"  r$  r&  r(  r*  r-  r0  r2  r4  r6  r9  r<  r>  r@  rS  r[  ry   r   r   rè  rè  ç
  s¥   „ ò)ò /ò8ò:-ò&ò (òD)ò
Kò<Gò5ò7ò6Lò&9ò8ò9òOòOòMòMò<òMò<ò
Dòò8
Aò?òAòMò/ó8/r   rè  c                   ó   — e Zd Zd„ Zy)ÚTestTransformsc                 ó¤  — t        j                  «       }t        j                  |t        j                  t        j                  «       d«      d«      }t        j                  |t        j                  t        j                  «       d«      d«      }t        j
                  «       }|j                  |j                  «       «       |j                  |d«      }| j                  |j                  |«       t        j                  |||«      }| j                  ||«       | j                  |j                  |«       | j                  |j                  |«       y )Nry   rç   rè   )r   r>   rF   rB   rY  r³   rÌ  rK   r[  r9   ÚcalleeÚreplace_all_callsr'   rÚ  )r   r)   rç   rè   r¶   r[  Úmodifieds          r   Útest_call_transformz"TestTransforms.test_call_transformc  sã   € Ü�i‰i‹kˆÜ�k‰k˜#œrŸ™¬r¯{©{«}¸bÓAÀ5ÓIˆÜ�k‰k˜#œrŸ™¬r¯{©{«}¸bÓAÀ5ÓIˆÜ—,‘,“.ˆØ×Ñ × 6Ñ 6Ó 8Ô9Ø�|‰|˜C Ó$ˆØ×Ñ˜Ÿ™ cÔ*Ü×'Ñ'¨¨S°#Ó6ˆØ�‰�d˜HÔ%Ø×Ñ˜DŸK™K¨Ô-Ø×Ñ˜Ÿ™ cÕ*r   N)ru   rv   rw   rb  ry   r   r   r]  r]  b  s   „ ó+r   r]  c                   ó   — e Zd Zd„ Zy)ÚTestSingletonc                 ó¾  — | j                  t        j                  t        j                  j	                  «       «       | j                  t        j                  t        j
                  t        j                  «      «       | j                  t        j                  t        j                  t        j                  «      «       | j                  t        j                  «       y r#   )r7   r   râ  r˜  Ú
_Undefinedrˆ  Údeepcopyr<   r?   s    r   Útest_undefinedzTestSingleton.test_undefinedr  sq   € Ø�‰”b—l‘l¤B§I¡I×$8Ñ$8Ó$:Ô;Ø�‰”b—l‘l¤D§I¡I¬b¯l©lÓ$;Ô<Ø�‰”b—l‘l¤D§M¡M´"·,±,Ó$?Ô@Ø×$Ñ$¤R§\¡\Õ2r   N)ru   rv   rw   rh  ry   r   r   rd  rd  q  s   „ ó3r   rd  Ú__main__)(rx   rˆ  r†  r4   r   rT   Úunittestr   r   Úllvmliter   r   r-   r   r0  r   rŠ   rï  rC   rÝ   ÚHalfTyperŠ  rB  r<  rn  rD   r   r{   rÕ   rj  r�  r¤  r<  ru  ræ  rè  r]  rd  ru   Úmainry   r   r   Ú<module>rn     s\  ðñó Û Û Û 	Û Û å Ý Ý $Ý 4ð €r‡z�z�!ƒ}€Ø€r‡z�z�!ƒ}€Øˆ�
‰
�2‹€Øˆ�
‰
�2‹€Øˆ�
‰
�2‹€Ø€b‡k�kƒm€Ø€b‡l�lƒn€Ø€b‡m�mƒo€ô[;ˆxô [;ô|G0�8ô G0ôTD"ˆXô D"ôNN*�xô N*ôb*L�ô *LôZV5˜Hô V5ôt(i�hô iôX	Q2�ô Q2òh
!ôx/�8ô x/ôv+�Xô +ô3�Hô 3ð ˆzÒØ€H‡M�M…Oð r   