ó
    „ñ:iïì ã                   óª  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJr  SSK	J
r
  SSK	Jr  SSK	Jr  \
R                  " S5      r\
R                  " S5      r\
R                  " S	5      r\
R                  " S
5      r\
R                  " S5      r\
R(                  " 5       r\
R,                  " 5       r\
R0                  " 5       r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\5      r!S r" " S S\5      r# " S S \5      r$ " S! S"\5      r%\&S#:X  a  \RN                  " 5         gg)$z
IR Construction Tests
é    Né   )ÚTestCase)Úir)Úbinding)Úir_layer_typed_pointers_enabledé   é   é    é@   c                   ó€   • \ rS rSrSrS rS rS rS rS r	SS	 jr
SS
 jrS rS rS rS rS rS rS rS rS rSrg)ÚTestBaseé   z
Utilities for IR tests.
c                 ó�   • S nSR                  [        X15      5      n[        R                  " SSU5      nU R	                  X$5        g)zZ
Assert *pattern* is in *text*, ignoring any whitespace differences
(including newlines).
c                 ód   • U R                  5       (       d  U R                  5       (       d  SU -   $ U $ )NÚ\)ÚisalnumÚisspace)Úcs    ÚY/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/llvmlite/tests/test_ir.pyÚescapeÚ%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   ÚassertInTextÚTestBase.assertInText!   s<   € ò	ð
 —'‘'œ#˜fÓ.Ó/ˆÜ—’�v˜w¨Ó0ˆØ×Ñ˜Õ%r   c                 óž   • [        U5      R                  5        Vs/ s H  oR                  5       PM     nnU R                  WU5        g s  snf ©N)ÚstrÚ
splitlinesÚstripÚassertIn)r   ÚlineÚmodÚliness       r   Úassert_ir_lineÚTestBase.assert_ir_line0   s=   € Ü*-¨c«(×*=Ñ*=Ô*?Ó@Ò*? $—‘–Ñ*?ˆÐ@Ø�‰�d˜EÕ"ùò As   œA
c                 óB   • [         R                  " [        U5      5        g r&   )ÚllvmÚparse_assemblyr'   ©r   r,   s     r   Úassert_valid_irÚTestBase.assert_valid_ir4   s   € Ü×ÒœC ›HÕ%r   c                 óì   • [         R                  " [         R                  " USS95      nU R                  UR                  UR                  5        U R                  [        U5      [        U5      5        U$ )zoAssert 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_correctlyÚ TestBase.assert_pickle_correctly7   sU   € ô —L’L¤§¢¨hÀÑ!DÓEˆ	Ø�‰�h×(Ñ(¨)×*=Ñ*=Ô>Ø×Ñœ˜X›¬¨I«Ô7ØÐr   c                 ó,   • [         R                  " 5       $ r&   )r   ÚModule©r   s    r   ÚmoduleÚTestBase.module@   s   € Ü�yŠy‹{Ðr   Nc           	      óè   • U=(       d    U R                  5       n[        R                  " [        [        [        [        [        R
                  " [        5      45      n[        R                  " XU5      $ r&   )rF   r   ÚFunctionTypeÚint32ÚdblÚPointerTypeÚFunction)r   rF   ÚnameÚfntys       r   ÚfunctionÚTestBase.functionC   sJ   € Ø×(˜4Ÿ;™;›=ˆÜ�Šœu¤u¬e´SÜ')§~¢~´eÓ'<ð'>ó ?ˆä�{Š{˜6¨Ó.Ð.r   c                 óV   • U=(       d    U R                  5       nUR                  U5      $ r&   )rP   Úappend_basic_block)r   ÚfuncrN   s      r   ÚblockÚTestBase.blockI   s#   € Ø×&�t—}‘}“ˆØ×&Ñ& tÓ,Ð,r   c                 óJ   • / nUR                  U5        SR                  U5      $ ©Nr   )Údescrr   )r   ÚthingÚbufs      r   rY   ÚTestBase.descrM   s!   € ØˆØ�‰�CÔØ�w‰w�s‹|Ðr   c                 óV   • [         R                  " U5      nUR                  SS5      nU$ )Nz
    z
  )ÚtextwrapÚdedentÚreplace)r   Úasms     r   Ú_normalize_asmÚTestBase._normalize_asmR   s%   € Ü�oŠo˜cÓ"ˆà�k‰k˜( FÓ+ˆØˆ
r   c                 óH   • U R                  U5      nU R                  X5        g r&   )rb   r   ©r   rY   ra   Úexpecteds       r   Úcheck_descr_regexÚTestBase.check_descr_regexX   ó    € Ø×&Ñ& sÓ+ˆØ×Ñ˜Õ)r   c                 óH   • U R                  U5      nU R                  X5        g r&   )rb   r>   re   s       r   Úcheck_descrÚTestBase.check_descr\   ri   r   c                 óF   • U R                  U R                  U5      U5        g r&   )rk   rY   ©r   rU   ra   s      r   Úcheck_blockÚTestBase.check_block`   s   € Ø×Ñ˜Ÿ™ EÓ*¨CÕ0r   c                 óF   • U R                  U R                  U5      U5        g r&   )rg   rY   rn   s      r   Úcheck_block_regexÚTestBase.check_block_regexc   s   € Ø×Ñ˜tŸz™z¨%Ó0°#Õ6r   c                 ó¢   • U R                  U5      nUR                  5       nU R                  UR                  5       UR                  5       5        g r&   )rb   Ú_stringify_bodyr>   r)   ©r   rF   ra   rf   Úactuals        r   Úcheck_module_bodyÚTestBase.check_module_bodyf   s=   € Ø×&Ñ& sÓ+ˆØ×'Ñ'Ó)ˆØ×Ñ˜Ÿ™›¨¯©Ó)9Õ:r   c                 ó¢   • U R                  U5      nUR                  5       nU R                  UR                  5       UR                  5       5        g)z&
Check module metadata against *asm*.
N)rb   Ú_stringify_metadatar>   r)   rv   s        r   Úcheck_metadataÚTestBase.check_metadatak   s?   € ð ×&Ñ& sÓ+ˆØ×+Ñ+Ó-ˆØ×Ñ˜Ÿ™›¨¯©Ó)9Õ:r   c                 óð   • U R                  U5      nU R                  U5      nUR                  S5      S   R                  S5      S   nU R	                  UR                  5       UR                  5       5        g )NÚ{é   Ú}r   )rb   rY   Ú	partitionÚ
rpartitionr>   r)   )r   rT   ra   rf   rw   s        r   Úcheck_func_bodyÚTestBase.check_func_bodys   sb   € Ø×&Ñ& sÓ+ˆØ—‘˜DÓ!ˆØ×!Ñ! #Ó& qÑ)×4Ñ4°SÓ9¸!Ñ<ˆØ×Ñ˜Ÿ™›¨¯©Ó)9Õ:r   © )NÚmy_funcrX   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r#   r.   r4   rA   rF   rP   rU   rY   rb   rg   rk   ro   rr   rx   r|   r„   Ú__static_attributes__r†   r   r   r   r      sW   † ñò&ò#ò&òòô/ô-òò
ò*ò*ò1ò7ò;ò
;õ;r   r   c                   ó„   • \ rS rSr\(       d  SOSrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)ÚTestFunctionéz   z=i32 @"my_func"(i32 %".1", i32 %".2", double %".3", ptr %".4")z>i32 @"my_func"(i32 %".1", i32 %".2", double %".3", i32* %".4")c                 ó¼   • U R                  5       nU R                  U5      R                  5       nU R                  UR                  5       SU R                  -  5        g )Nz
declare %s)rP   rY   r)   r>   Úproto©r   rT   ra   s      r   Útest_declareÚTestFunction.test_declare�   sC   € à�}‰}‹ˆØ�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ÿ™› l°T·Z±ZÑ&?Õ@r   c                 ó|  • U R                  5       nUR                  R                  S5        UR                  R                  S5        UR                  R                  S5        SUR                  l        [        R
                  " [        SSS9n[        R                  " U R                  5       US5      nX1R                  l	        U R                  U5      R                  5       n[        (       d   U R                  US	U R                  -  5        OU R                  US
U R                  -  5        U R                  U5        g )NÚoptsizeÚalwaysinlineÚ
convergentr	   r†   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")rP   Ú
attributesÚaddÚ
alignstackr   rI   Úint8rM   rF   ÚpersonalityrY   r)   r   r>   r’   rA   )r   rT   Útp_persÚpersra   s        r   Útest_declare_attributesÚ$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                 óF  • U R                  5       nUR                  S   R                  S5        SUR                  S   R                  l        SUR                  S   R                  l        SUR                  S   R                  l        UR                  S   R                  S5        UR                  R                  S	5        U R                  U5      R                  5       n[        (       d  U R                  US
5        OU R                  US5        U R                  U5        g )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"))rP   ÚargsÚadd_attributer�   ÚdereferenceableÚdereferenceable_or_nullÚalignÚreturn_valuerY   r)   r   r>   rA   r“   s      r   Útest_function_attributesÚ%TestFunction.test_function_attributes¡   sê   € à�}‰}‹ˆØ�	‰	�!‰×"Ñ" 9Ô-Ø23ˆ�	‰	�!‰×ÑÔ/Ø:<ˆ�	‰	�!‰×ÑÔ7Ø()ˆ�	‰	�!‰×ÑÔ%Ø�	‰	�!‰×"Ñ" 9Ô-Ø×Ñ×'Ñ'¨	Ô2Ø�j‰j˜Ó×$Ñ$Ó&ˆß.Ò.Ø×Ñ˜Sð xõð ×Ñ˜Sð yôð 	×$Ñ$ TÕ*r   c                 ó(  • U R                  5       nU R                  U5      nUR                  SUR                  / 5      5        U R	                  U5      R                  5       nU R                  USU R                   S35        U R                  U5        g )NÚdbgúdeclare z !dbg !0)	rF   rP   Úset_metadataÚadd_metadatarY   r)   r>   r’   rA   ©r   rF   rT   ra   s       r   Útest_function_metadataÚ#TestFunction.test_function_metadata¶   s}   € à—‘“ˆØ�}‰}˜VÓ$ˆØ×Ñ˜% ×!4Ñ!4°RÓ!8Ô9Ø�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <¨xÐ8ô	ð 	×$Ñ$ TÕ*r   c                 óÒ   • U R                  5       nSUl        U R                  U5      R                  5       nU R	                  USU R
                   S35        U R                  U5        g )NÚ	a_sectionr¸   z section "a_section")rP   ÚsectionrY   r)   r>   r’   rA   r“   s      r   Útest_function_sectionÚ"TestFunction.test_function_sectionÂ   s\   € à�}‰}‹ˆØ"ˆŒØ�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/CÐDô	ð 	×$Ñ$ TÕ*r   c                 ó6  • U R                  5       nU R                  U5      nSUl        UR                  SUR	                  / 5      5        U R                  U5      R                  5       nU R                  USU R                   S35        U R                  U5        g )Nr¿   r·   r¸   z section "a_section" !dbg !0)
rF   rP   rÀ   r¹   rº   rY   r)   r>   r’   rA   r»   s       r   Útest_function_section_metaÚ'TestFunction.test_function_section_metaÍ   s…   € à—‘“ˆØ�}‰}˜VÓ$ˆØ"ˆŒØ×Ñ˜% ×!4Ñ!4°RÓ!8Ô9Ø�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/KÐLô	ð 	×$Ñ$ TÕ*r   c                 ó^  • U R                  5       nU R                  U5      nUR                  R                  S5        UR	                  SUR                  / 5      5        U R                  U5      R                  5       nU R                  USU R                   S35        U R                  U5        g )Nr˜   r·   r¸   z alwaysinline !dbg !0)rF   rP   r�   rž   r¹   rº   rY   r)   r>   r’   rA   r»   s       r   Útest_function_attr_metaÚ$TestFunction.test_function_attr_metaÚ   s�   € à—‘“ˆØ�}‰}˜VÓ$ˆØ�‰×Ñ˜NÔ+Ø×Ñ˜% ×!4Ñ!4°RÓ!8Ô9Ø�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/DÐEô	ð 	×$Ñ$ TÕ*r   c                 ó  • U R                  5       nUR                  R                  S5        SUl        U R	                  U5      R                  5       nU R                  USU R                   S35        U R                  U5        g )Nr—   r¿   r¸   z optsize section "a_section")	rP   r�   rž   rÀ   rY   r)   r>   r’   rA   r“   s      r   Útest_function_attr_sectionÚ'TestFunction.test_function_attr_sectionç   so   € à�}‰}‹ˆØ�‰×Ñ˜IÔ&Ø"ˆŒØ�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/KÐLô	Nð 	×$Ñ$ TÕ*r   c                 ól  • U R                  5       nU R                  U5      nUR                  R                  S5        SUl        UR                  SUR                  / 5      5        U R                  U5      R                  5       nU R                  USU R                   S35        U R                  U5        g )Nr˜   r¿   r·   r¸   z) alwaysinline section "a_section" !dbg !0)rF   rP   r�   rž   rÀ   r¹   rº   rY   r)   r>   r’   rA   r»   s       r   Útest_function_attr_section_metaÚ,TestFunction.test_function_attr_section_metaò   s—   € à—‘“ˆØ�}‰}˜VÓ$ˆØ�‰×Ñ˜NÔ+Ø"ˆŒØ×Ñ˜% ×!4Ñ!4°RÓ!8Ô9Ø�j‰j˜Ó×$Ñ$Ó&ˆØ×Ñ˜Ø# D§J¡J <Ð/XÐYô	ð 	×$Ñ$ TÕ*r   c                 ó<  • U R                  5       nUR                  R                  S5        UR                  S5      n[        R
                  " U5      nUR                  5         U R                  U5      nU R                  USR                  U R                  S95        g )Nr˜   Úmy_blockz�            define {proto} alwaysinline
            {{
            my_block:
                ret void
            }}
            )r’   )rP   r�   rž   rS   r   Ú	IRBuilderÚret_voidrY   rk   Úformatr’   )r   rT   rU   Úbuilderra   s        r   Útest_defineÚTestFunction.test_define   s~   € à�}‰}‹ˆØ�‰×Ñ˜NÔ+Ø×'Ñ'¨
Ó3ˆÜ—,’,˜uÓ%ˆØ×ÑÔØ�j‰j˜ÓˆØ×Ñ˜ð ÷ ‘˜TŸZ™Z�Ð(õ	*r   c                 óH  • U R                  5       n[        R                  5       nUR                  S[        /5      nUR                  SU[
        /5      nUR                  SX"[
        /5      nUR                  S5      nU R                  U R                  U5      R                  5       S5        [        (       d_  U R                  U R                  U5      R                  5       S5        U R                  U R                  U5      R                  5       S5        O^U R                  U R                  U5      R                  5       S5        U R                  U R                  U5      R                  5       S	5        U R                  U R                  U5      R                  5       S
5        g )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"))
rF   r    Ú
as_pointerÚdeclare_intrinsicrK   rJ   rk   rY   r)   r   )r   rF   Úpint8ÚpowiÚmemsetÚmemcpyÚassumes          r   Útest_declare_intrinsicsÚ$TestFunction.test_declare_intrinsics  sf  € Ø—‘“ˆÜ—‘Ó!ˆà×'Ñ'¨´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                 ó¢   • U R                  5       nUR                  S[        /5      nUR                  S[        /5      nU R                  X#5        g )NrØ   )rF   rÚ   rK   r<   )r   rF   rÜ   Úpowi2s       r   Útest_redeclare_intrinsicÚ%TestFunction.test_redeclare_intrinsic'  sA   € Ø—‘“ˆØ×'Ñ'¨´c°UÓ;ˆØ×(Ñ(¨´s°eÓ<ˆØ�‰�dÕ"r   c                 óF   • U R                  5       nU R                  U5        g r&   )rP   rA   )r   Úfns     r   Útest_picklingÚTestFunction.test_pickling-  s   € Ø�]‰]‹_ˆØ×$Ñ$ RÕ(r   c                 ó  • U R                  5       nU R                  U5      nUR                  R                  S5        SnU R	                  [
        U5         UR                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nr˜   ú$Can't have alwaysinline and noinlineÚnoinline©rF   rP   r�   rž   ÚassertRaisesRegexÚ
ValueError©r   rF   rT   Úmsgs       r   Ú%test_alwaysinline_noinline_disallowedÚ2TestFunction.test_alwaysinline_noinline_disallowed1  s`   € Ø—‘“ˆØ�}‰}˜VÓ$ˆØ�‰×Ñ˜NÔ+à4ˆØ×#Ñ#¤J°Õ4Ø�O‰O×Ñ 
Ô+÷ 5×4Ö4úó   ÁA:Á:
Bc                 ó  • U R                  5       nU R                  U5      nUR                  R                  S5        SnU R	                  [
        U5         UR                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nrì   rë   r˜   rí   rð   s       r   Ú%test_noinline_alwaysinline_disallowedÚ2TestFunction.test_noinline_alwaysinline_disallowed:  s`   € Ø—‘“ˆØ�}‰}˜VÓ$ˆØ�‰×Ñ˜JÔ'à4ˆØ×#Ñ#¤J°Õ4Ø�O‰O×Ñ Ô/÷ 5×4Ö4úrô   r†   N)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�   z   sa   † ö /ñ 	LàLð 
ò
Aò+ò4+ò*
+ò	+ò+ò+ò	+ò+ò*ò 6ò.#ò)ò,õ0r   r�   c                   óz   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)ÚTestIRiD  c                 ó´   • U R                  5       nUR                  [        S5      [        S5      /5        U R	                  SU5        U R                  U5        g )Né{   é*   z!0 = !{ i32 123, i8 42 })rF   rº   rJ   r    r.   r4   r3   s     r   Útest_unnamed_metadataÚTestIR.test_unnamed_metadataF  sG   € à�k‰k‹mˆØ×Ñœ% ›*¤d¨2£hÐ/Ô0Ø×ÑÐ6¸Ô<Ø×Ñ˜SÕ!r   c                 ó€  • U R                  5       nUR                  [        S5      S/5      nUR                  [        S5      U/5      nUR                  [        S5      U/5      nU R	                  XC5        UR                  X#U/5        U R                  SU5        U R                  SU5        U R                  SU5        g )Nrû   ÚkerneléÈ  z!0 = !{ i32 123, !"kernel" }z!1 = !{ i64 456, !0 }z!2 = !{ !0, !1, !1 })rF   rº   rJ   Úint64r<   r.   )r   r,   Úm0Úm1Úm2s        r   Útest_unnamed_metadata_2ÚTestIR.test_unnamed_metadata_2M  s©   € à�k‰k‹mˆà×Ñœu S›z¨8Ð4Ó5ˆà×Ñœu S›z¨2Ð.Ó/ˆà×Ñœu S›z¨2Ð.Ó/ˆØ�‰�bÔà×Ñ˜" "˜Ô&Ø×ÑÐ:¸CÔ@Ø×ÑÐ3°SÔ9Ø×ÑÐ2°CÕ8r   c                 ó  • U R                  5       nUR                  [        S5      [        S5      /[        S5      /[        S5      //5        U R                  SU5        U R                  SU5        U R                  SU5        g )Nrû   r  i  z!0 = !{ i32 456 }z!1 = !{ i32 789 }z!2 = !{ i32 123, !0, !1, !0 })rF   rº   rJ   r.   r3   s     r   Útest_unnamed_metadata_3Ú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   • U R                  5       nUR                  S/5        U R                  SU5        g )Nz"\$z!0 = !{ !"\22\5c$" })rF   rº   r.   r3   s     r   Útest_metadata_stringÚTestIR.test_metadata_stringe  s.   € à�k‰k‹mˆØ×Ñ˜'˜Ô#Ø×ÑÐ4°cÕ:r   c                 ó  • U R                  5       nUR                  [        S5      /5      nUR                  [        S5      /5      nUR	                  S5      nUR                  U5        UR                  U5        UR                  U5        U R                  SU5        U R                  U5        U R                  XAR                  S5      5        U R                  [        5         UR                  S5        S S S 5        g ! , (       d  f       g = f)Nrû   r  Úfooz!foo = !{ !0, !1, !0 }Úbar)rF   rº   rJ   r  Úadd_named_metadatarž   r.   r4   r<   Úget_named_metadataÚassertRaisesÚKeyError)r   r,   r  r  Únmds        r   Útest_named_metadataÚTestIR.test_named_metadatak  sÈ   € à�k‰k‹mˆØ×Ñœu S›z˜lÓ+ˆØ×Ñœu S›z˜lÓ+ˆØ×$Ñ$ UÓ+ˆØ�‰�ŒØ�‰�ŒØ�‰�ŒØ×ÑÐ4°cÔ:Ø×Ñ˜SÔ!à�‰�c×1Ñ1°%Ó8Ô9Ø×ÑœxÕ(Ø×"Ñ" 5Ô)÷ )×(Ö(ús   Ã#C>Ã>
Dc                 óú  • U R                  5       nUR                  [        S5      /5      nUR                  SU5        UR                  S[	        S5      /5        UR                  SS/5        UR                  S/ 5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  S	U5        U R                  S
U5        U R                  SU5        U R                  U5        g )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 = !{  })rF   rº   rJ   r  r  r.   r4   )r   r,   r  s      r   Útest_named_metadata_2Ú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                 ó˜  • U R                  5       nUR                  [        R                  5       " S 5      /5        [        (       d  U R                  SU5        OU R                  SU5        U R                  U5        U R                  5       nUR                  S [        S5      /5        U R                  SU5        U R                  U5        g )Nz!0 = !{ ptr null }z!0 = !{ i32* null }rû   z!0 = !{ null, i32 123 })rF   rº   rJ   rÙ   r   r.   r4   r3   s     r   Útest_metadata_nullÚ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           
      ó  • U R                  5       nUR                  SSSS.5      nUR                  SSUR                  S /5      05      nUR                  S[        R                  " S5      US	S
SS.SS9nUR                  SSUSUSUS.SS9  [        U5      nU R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  U5        g )NÚDIFiler  r  ©ÚfilenameÚ	directoryÚDISubroutineTypeÚtypesÚDICompileUnitÚDW_LANG_PythonÚARTIQr   T)ÚlanguageÚfileÚproducerÚruntimeVersionÚisOptimized©Úis_distinctÚDISubprogramr‡   é   F)rN   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))rF   Úadd_debug_inforº   r   ÚDITokenr'   r.   r4   )r   r,   Údi_fileÚdi_func_typeÚdi_compileunitÚstrmods         r   Útest_debug_infoÚ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                 óÊ  • U R                  5       nUR                  SSSS.5      nUR                  SSSS.5      nUR                  SSSS.5      nUR                  SSSS.SS9nU R                  X#5        U R                  [	        X#XE15      S5        [        U5      nU R                  SU5        U R                  S	U5        U R                  S
U5        U R                  U5        g )Nr  r  r  r   Tr-  r«   r4  z/!1 = !DIFile(directory: "foo", filename: "bar")z8!2 = distinct !DIFile(directory: "bar", filename: "foo"))rF   r5  r<   r>   Úlenr'   r.   r4   )r   r,   Údi1Údi2Údi3Údi4r:  s          r   Útest_debug_info_2ÚTestIR.test_debug_info_2Ç  s  € à�k‰k‹mˆØ× Ñ  Ø.3Ø/4ñ"$ó%ˆð × Ñ  Ø.3Ø/4ñ"$ó%ˆð × Ñ  Ø.3Ø/4ñ"$ó%ˆð × Ñ  Ø.3Ø/4ñ"$à15ð !ð 7ˆð 	�‰�cÔØ×Ñœ˜c¨Ð1Ó2°AÔ6ä�S“ˆØ×ÑÐMØ"ô	$à×ÑÐMØ"ô	$à×Ñð %Ø&,ô	.à×Ñ˜SÕ!r   c                 óÈ  • U R                  5       nUR                  SSS[        R                  " S5      S.5      nUR                  SSS[        R                  " S5      S.5      nUR                  SSS[        R                  " S5      S.5      nUR                  SSS[        R                  " S5      S.5      nUR                  SSS[        R                  " S5      S.5      nUR                  SSS[        R                  " S5      S.5      nUR                  SSS	[        R                  " S
5      S.5      nUR                  SSS	[        R                  " S
5      S.5      n	UR                  SSS	[        R                  " S
5      S.5      n
U R	                  X#5        U R	                  X%5        U R	                  X&5        U R	                  XG5        U R	                  X‰5        U R	                  XŠ5        U R                  [        X#XEXgX‰U
1	5      S5        [        U5      nU R                  SU5        U R                  SU5        U R                  SU5        U R                  U5        g )NÚDIBasicTypeÚi8r   ÚDW_ATE_unsigned©rN   Ú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))
rF   r5  r   r6  r<   r>   r>  r'   r.   r4   )r   r,   r?  r@  rA  rB  Údi5Údi6Údi7Údi8Údi9r:  s               r   Útest_debug_info_3ÚTestIR.test_debug_info_3æ  sW  € à�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ÔØ�‰�cÔØ�‰�cÔØ�‰�cÔØ�‰�cÔØ�‰�cÔØ×Ñœ˜c¨°#¸CÀcÐJÓKÈQÔOä�S“ˆØ×Ñð 3Ø4:ô	<à×Ñð 5Ø6<ô	>à×Ñð 5Ø6<ô	>à×Ñ˜SÕ!r   c           
      ó¬  • U R                  5       nUR                  SSS[        R                  " S5      S.5      nUR                  SSS[        R                  " S5      S.5      nUR                  S[        R                  " S	5      S
US[        R                  " S5      " S5      S.5        UR                  S[        R                  " S	5      SUS[        R                  " S5      " S5      S.5        [        U5      nU R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  U5        g )NrF  rJ   r
   rN  rI  r    r   ÚDIDerivedTypeÚDW_TAG_memberÚ	field_i32r   )ÚtagrN   ÚbaseTyperJ  Ú	extraDataÚfield_i8r€   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))rF   r5  r   r6  ÚIntTyper'   r.   r4   )r   r,   Údi_base_i32Ú
di_base_i8r:  s        r   Útest_debug_info_4ÚTestIR.test_debug_info_4'  sQ  € à�k‰k‹mˆà×(Ñ(¨ØØÜŸ
š
 ?Ó3ñ9
ó ˆð
 ×'Ñ'¨ØØÜŸ
š
 ?Ó3ñ8
ó ˆ
ð 	×Ñ˜?Ü—:’:˜oÓ.ØØ#ØÜŸš Bœ¨Ó*ñ-
ô 	ð 	×Ñ˜?Ü—:’:˜oÓ.ØØ"ØÜŸš Aœ qÓ)ñ-
ô 	ô �S“ˆØ×Ñð 7Ø8>ô	@à×Ñð 5Ø6<ô	>à×Ñð?Ø@Fô	Hð 	×Ñð=Ø>Dô	Fð 	×Ñ˜SÕ!r   c                 ó  • U R                  5       n[        R                  " U[        R                  " 5       S5      n[        R                  " [        R                  " 5       S5      Ul        UR                  SSS[        R                  " S5      S.5      nUR                  SUR                  S	0 5      UR                  S
UR                  USS.SS9S.5      nUR                  SU5        [        U5      nU R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        U R                  SU5        [        R                  " S5      " S5      S[        R                  " S5      " S5      /n[        R                  " S5      " S5      S[        R                  " S5      " S5      /nUR                  U5      nUR                  U5      nUR                  S5      nUR                  U5        UR                  U5        UR                  SSSS.5      n	UR                  S[        R                  " S 5      U	[        R                  " S!5      UR                  U/5      S".SS9n
UR                  S#U
5        g )$NÚgvarrü   rF  Úfloatr
   ÚDW_ATE_floatrI  ÚDIGlobalVariableExpressionÚDIExpressionÚDIGlobalVariableT)rN   r1  Ú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 !3r€   zDwarf Versionrª   zDebug Info Versionr«   zllvm.module.flagsr  r  r  r   r%  r&  Ú	FullDebug)r(  r)  ÚemissionKindÚglobalszllvm.dbg.cu)rF   r   ÚGlobalVariableÚ	FloatTypeÚConstantÚinitializerr5  r6  rN   r¹   r'   r.   r^  rº   r  rž   )r   r,   rd  Údi_floatÚdi_gvarr:  ÚdverÚdiverÚflagsr7  Údi_cus              r   Útest_debug_info_gvarÚTestIR.test_debug_info_gvarR  s`  € ð �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Ó! ?´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                 óâ   • U R                  5       nUR                  SSS05        [        U5      nSR                  [	        S SR                  5       5      5      nU R                  SU S3U5        g )	NÚDILocalVariablerN   u   aâˆ†r   c                 ó   • SU S 3$ )Nr   Ú02xr†   )Úxs    r   Ú<lambda>Ú7TestIR.test_debug_info_unicode_string.<locals>.<lambda>œ  s   €  r¨!¨C¨¡\r   u   âˆ†z!0 = !DILocalVariable(name: "az"))rF   r5  r'   r   r   Úencoder.   )r   r,   r:  rN   s       r   Útest_debug_info_unicode_stringÚ%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                 ó  • U R                  5       n[        R                  " U[        R                  " [        R                  " 5       / 5      S5      n[        R
                  " UR                  S5      5      n[        R                  " [        [        /5      n[        R                  " USSSS9nUR                  U[        S5      /5        UR                  5         SnU R                  U[        U5      5        U R                  U5        g )	Nr  r   ú
mov $1, $2ú=r,rT©Úside_effectrû   z7call i32 asm sideeffect "mov $1, $2", "=r,r"( i32 123 ))rF   r   rM   rI   ÚVoidTyperÑ   rS   rJ   Ú	InlineAsmÚcallrÒ   r#   r'   r4   )r   r,   r  rÔ   Úasmtyra   Úpats          r   Útest_inline_assemblyÚ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                 óä  • U R                  5       n[        R                  " U[        R                  " [        R                  " 5       / 5      S5      n[        R
                  " UR                  S5      5      n[        R                  " [        [        /5      nUR                  USS[        S5      /SS9  UR                  5         SnU R                  U[        U5      5        U R                  U5        g )	Nr  r   r‡  rˆ  rû   Tr‰  z8call i32 asm sideeffect "mov $1, $2", "=r,r" ( i32 123 ))rF   r   rM   rI   r‹  rÑ   rS   rJ   ra   rÒ   r#   r'   r4   )r   r,   r  rÔ   rŽ  r�  s         r   Útest_builder_asmÚ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                 ó¶  • U R                  5       n[        R                  " U[        R                  " [        R                  " 5       / 5      S5      n[        R
                  " UR                  S5      5      nUR                  [        R                  " S5      S5        UR                  5         SnU R                  U[        U5      5        U R                  U5        g )Nr  r   r   Úraxzcall i64 asm "", "={rax}")rF   r   rM   rI   r‹  rÑ   rS   Úload_regr^  rÒ   r#   r'   r4   ©r   r,   r  rÔ   r�  s        r   Útest_builder_load_regÚ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                 óÊ  • U R                  5       n[        R                  " U[        R                  " [        R                  " 5       / 5      S5      n[        R
                  " UR                  S5      5      nUR                  [        S5      [        R                  " S5      S5        UR                  5         SnU R                  U[        U5      5        U R                  U5        g )Nr  r   rû   r   r–  z0call void asm sideeffect "", "{rax}" ( i64 123 ))rF   r   rM   rI   r‹  rÑ   rS   Ú	store_regr  r^  rÒ   r#   r'   r4   r˜  s        r   Útest_builder_store_regÚ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   r†   N)rˆ   r‰   rŠ   r‹   rý   r  r	  r  r  r  r  r;  rC  rT  ra  rz  r„  r�  r“  r™  r�  r�   r†   r   r   rù   rù   D  s^   † ò"ò9ò Bò;ò*ò "ò "ò+"òZ"ò>?"òB)"òVB5òHOò
"ò	"ò"õ"r   rù   c                   ó,   • \ rS rSrS rS rS rS rSrg)ÚTestGlobalValuesiË  c                 ó  • U R                  5       n[        R                  " U[        R                  " [        R                  " 5       / 5      S5      n[        R                  " U[        R                  " [        R                  " 5       / 5      S5        [        R
                  " U[        R                  " 5       S5      nU R                  UR                  S5      U5        U R                  UR                  S5      U5        U R                  [        5         UR                  S5        S S S 5        [        (       d  U R                  [        U5      S5        g U R                  [        U5      S5        g ! , (       d  f       NQ= f)Nr  r  Ú
globdoubleÚkkkz.<ir.GlobalVariable 'globdouble' of type 'ptr'>z2<ir.GlobalVariable 'globdouble' of type 'double*'>)rF   r   rM   rI   r‹  rp  Ú
DoubleTyper>   Ú
get_globalr  r  r   Úrepr)r   r,   r  r¢  s       r   Útest_globals_accessÚ$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   ÄE0Å0
E>c                 óè  • U R                  5       n[        R                  " [        R                  " 5       / 5      n[        R                  " XS5      n[        R                  " XS5      n[        R
                  " U[        R                  " 5       S5      nU R                  [        UR                  5      [        X445      5        U R                  [        UR                  5      [        X4U45      5        g)zZ
Accessing functions and global values through Module.functions
and Module.global_values.
r  r  r¢  N)rF   r   rI   r‹  rM   rp  r¤  r>   ÚsetÚ	functionsÚglobal_values)r   r,   Úftyr  r  r¢  s         r   Ú#test_functions_global_values_accessÚ4TestGlobalValues.test_functions_global_values_accessß  s£   € ð
 �k‰k‹mˆÜ�oŠoœbŸkšk›m¨RÓ0ˆÜ�kŠk˜# EÓ*ˆÜ�kŠk˜# EÓ*ˆÜ×&Ò& s¬B¯MªM«O¸\ÓJˆ
Ø×Ñœ˜SŸ]™]Ó+¬S°#°«_Ô=Ø×Ñœ˜S×.Ñ.Ó/´°cÀ
Ð5KÓ1LÕMr   c                 óH  • U R                  5       n[        R                  " U[        S5      n[        R                  " U[        SSS9n[        R                  " U[        S5      n[	        S5      Ul        [        R                  " U[        S5      nSUl        [        R                  " U[        S	5      nS
Ul        [        R                  " U[        SSS9nSUl        [        R                  " U[        S5      nS
Ul        [	        S5      Ul        SUl	        [        R                  " U[        S5      n	S
U	l        [	        S5      U	l        SU	l
        [        R                  " U[        S5      n
S
U
l        [	        S5      U
l        SU
l	        SU
l
        U R                  US5        g)z'
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)rF   r   rp  r    rJ   rs  Úglobal_constantÚlinkageÚunnamed_addrr²   rÀ   rx   )r   r,   r±  r²  r   rµ  r¶  r¸  r¹  rº  r¼  s              r   Útest_global_variables_irÚ)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   • U R                  5       nU R                  U5        g r&   )rF   rA   r3   s     r   Útest_pickleÚTestGlobalValues.test_pickle  s   € Ø�k‰k‹mˆØ×$Ñ$ SÕ)r   r†   N)	rˆ   r‰   rŠ   r‹   r§  r®  rÁ  rÄ  r�   r†   r   r   r   r   Ë  s   † òFò$Nò)õV*r   r   c                   ó,   • \ rS rSrS rS rS rS rSrg)Ú	TestBlocki  c                 ó¼   • U R                  5       n[        R                  " USS9nU R                  UR                  U5        U R                  UR                  5        g )NÚstart©ÚparentrN   )rP   r   ÚBlockr<   rË  ÚassertFalseÚis_terminated©r   rT   rU   s      r   Útest_attributesÚTestBlock.test_attributes  sC   € Ø�}‰}‹ˆÜ—’ ¨7Ñ3ˆØ�‰�e—l‘l DÔ)Ø×Ñ˜×,Ñ,Õ-r   c                 óà   • U R                  SS9nU R                  U R                  U5      S5        UR                  R	                  SS/5        U R                  U R                  U5      S5        g )NrÐ   ©rN   z
my_block:
r±  r²  zmy_block:
  a
  b
)rU   r>   rY   ÚinstructionsÚextend)r   rU   s     r   Ú
test_descrÚTestBlock.test_descr$  s]   € Ø—
‘
 
�
Ð+ˆØ×Ñ˜Ÿ™ EÓ*¨MÔ:Ø×Ñ×!Ñ! 3¨ *Ô-Ø×Ñ˜Ÿ™ EÓ*Ð,CÕDr   c                 ó¢  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  X4S5      nUR                  X4S5      nUR                  XdS5        [        R                  " XR                  SXT4S5      nU R                  US	5        UR                  Xg5        U R                  US
5        g )NrÐ   rÓ  r€   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"
            )rU   r   rÑ   rP   r®   rž   r   ÚmulÚInstructionr1  ro   r`   )r   rU   rÔ   r±  r²  r   rµ  r¸  s           r   Útest_replaceÚTestBlock.test_replace*  sº   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ�K‰K˜˜cÓ"ˆØ�K‰K˜˜cÓ"ˆØ�‰�A˜#ÔÜ�NŠN˜5§&¡&¨&°1°&¸#Ó>ˆØ×Ñ˜ð !ô 	ð 	�‰�aÔØ×Ñ˜ð !õ 	r   c                 ó„   • U R                  5       n[        R                  " USS9nU R                  [	        U5      S5        g)z$
Blocks should have a useful repr()
rÉ  rÊ  z"<ir.Block 'start' of type 'label'>N)rP   r   rÌ  r>   r¦  rÏ  s      r   Ú	test_reprÚTestBlock.test_repr@  s4   € ð �}‰}‹ˆÜ—’ ¨7Ñ3ˆØ×Ñœ˜e›Ð&JÕKr   r†   N)	rˆ   r‰   rŠ   r‹   rÐ  rÖ  rÜ  rß  r�   r†   r   r   rÇ  rÇ    s   † ò.òEòõ,Lr   rÇ  c                   óf  • \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8S7 r9S8 r:S9 r;S: r<S;r=g<)=ÚTestBuildInstructionsiI  zF
Test IR generation of LLVM instructions through the IRBuilder class.
i   c                 ó  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  X4S5      nU R                  US5        U R                  [        U5      S5        g )NrÐ   rÓ  r€   Ú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>)>)	rU   r   rÑ   rP   r®   rž   ro   r>   r¦  )r   rU   rÔ   r±  r²  Úinsts         r   Útest_simpleÚ!TestBuildInstructions.test_simpleP  sz   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ�{‰{˜1 Ó'ˆØ×Ñ˜ð !ô 	ð
 	×Ñœ˜d›ð<õ	=r   c                 ó2  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4nUR                  X4S5        UR                  X4S5        UR                  X4S5        UR                  X4S5        UR                  X4S5        UR                  X4S	5        UR                  X4S
5        UR                  X4S5        UR                  X4S5        UR                  X4S5        UR                  X4S5        UR!                  X4S5        UR#                  X4S5        UR%                  X4S5        UR'                  X4S5        UR)                  X4S5        UR+                  X4S5        UR-                  X4S5        U R/                  [0        5       nUR                  X55        S S S 5        U R3                  [5        WR6                  5      S5        U R9                  UR:                  5        U R=                  US5        g ! , (       d  f       Na= f)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"
            )rU   r   rÑ   rP   r®   rž   Úfaddr   ÚfsubrÚ  ÚfmulÚudivrÙ  ÚfdivÚuremÚsremÚfremÚor_Úand_ÚxorÚshlÚashrÚlshrr  rï   r>   r'   Ú	exceptionrÍ  rÎ  ro   )r   rU   rÔ   r±  r²  ÚffÚcms          r   Útest_binopsÚ!TestBuildInstructions.test_binops_  s¨  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×#Ñ#×(Ñ(¨¨!Ð,‰ˆˆbØ�‰�A˜#ÔØ�‰�Q˜3ÔØ�‰�A˜#ÔØ�‰�Q˜3ÔØ�‰�A˜#ÔØ�‰�Q˜3ÔØ�‰�Q˜3ÔØ�‰�Q˜3ÔØ�‰�Q˜3ÔØ�‰�Q˜3ÔØ�‰�Q˜3ÔØ�‰�Q˜3ÔØ�‰�A˜#ÔØ�‰�Q˜3ÔØ�‰�A˜#ÔØ�‰�A˜#ÔØ�‰�Q˜3ÔØ�‰�Q˜3ÔØ×ÑœzÔ*¨bØ�K‰K˜Ô÷ +à×Ñœ˜RŸ\™\Ó*ØLô	Nà×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	÷ +Õ*ús   ÆHÈ
Hc                 óð   • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  X4SSS9  UR                  X4SSS	/S9  U R                  US
5        g )NrÐ   rÓ  r€   r   )Únuw©rx  rµ  r  Únswz†            my_block:
                %"c" = add nuw i32 %".1", %".2"
                %"d" = sub nuw nsw i32 %".1", %".2"
            )rU   r   rÑ   rP   r®   rž   r   ro   ©r   rU   rÔ   r±  r²  s        r   Útest_binop_flagsÚ&TestBuildInstructions.test_binop_flags�  sw   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆà�‰�A˜# XˆÑ.à�‰�A˜# e¨U ^ˆÑ4Ø×Ñ˜ð !õ 	r   c                 óð   • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  X4SSS9  UR                  X4SSS	/S9  U R                  US
5        g )NrÐ   rÓ  r€   r   ©Úfastr	  rµ  ÚninfÚnszzŠ            my_block:
                %"c" = fadd fast i32 %".1", %".2"
                %"d" = fsub ninf nsz i32 %".1", %".2"
            )rU   r   rÑ   rP   r®   rô  rõ  ro   r  s        r   Útest_binop_fastmath_flagsÚ/TestBuildInstructions.test_binop_fastmath_flagsž  sw   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆà�‰�Q˜3 iˆÑ0à�‰�Q˜3 v¨u oˆÑ6Ø×Ñ˜ð !õ 	r   c                 ó€  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  X4S5        UR                  X4S5        UR                  X4S5        UR                  X4S5        UR                  X4S5        UR                  X4S	5        U R                  US
5        g )NrÐ   rÓ  r€   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")
            )rU   r   rÑ   rP   r®   Úsadd_with_overflowÚsmul_with_overflowÚssub_with_overflowÚuadd_with_overflowÚumul_with_overflowÚusub_with_overflowro   r  s        r   Útest_binops_with_overflowÚ/TestBuildInstructions.test_binops_with_overflow¬  s¯   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ×"Ñ" 1¨Ô-Ø×"Ñ" 1¨Ô-Ø×"Ñ" 1¨Ô-Ø×"Ñ" 1¨Ô-Ø×"Ñ" 1¨Ô-Ø×"Ñ" 1¨Ô-Ø×Ñ˜ð !õ 	r   c                 óL  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4nUR                  US5        UR                  US5        UR                  US5        U R                  UR                  5        U R                  US5        g )NrÐ   rÓ  r«   rµ  r¶  r¸  zœ            my_block:
                %"d" = sub i32 0, %".1"
                %"e" = xor i32 %".2", -1
                %"f" = fneg double %".3"
            )rU   r   rÑ   rP   r®   ÚnegÚnot_ÚfnegrÍ  rÎ  ro   ©r   rU   rÔ   r±  r²  r   s         r   Útest_unary_opsÚ$TestBuildInstructions.test_unary_opsÀ  s�   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×"Ñ"×'Ñ'¨¨Ð+‰ˆˆaØ�‰�A�sÔØ�‰�Q˜ÔØ�‰�Q˜ÔØ×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	r   c                 ó  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4[        R
                  " [        R                  " S5      [        R                  5      n[        R
                  " [        R                  " S5      [        R                  5      nUR                  XVS5      nU R                  US5        UR                  XS5        UR                  Xd5        U R                  US5        g )NrÐ   rÓ  r€   r
   r   zN            my_block:
                %"c" = add i32 undef, undef
            zN            my_block:
                %"c" = add i32 %".1", %".2"
            )rU   r   rÑ   rP   r®   rr  r^  Ú	Undefinedrž   ro   Úreplace_usage)r   rU   rÔ   r±  r²  Úundef1Úundef2r   s           r   Útest_replace_operandÚ*TestBuildInstructions.test_replace_operandÏ  sÆ   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆÜ—’œRŸZšZ¨›^¬R¯\©\Ó:ˆÜ—’œRŸZšZ¨›^¬R¯\©\Ó:ˆØ�K‰K˜¨Ó,ˆØ×Ñ˜ð !ô 	ð 	
�‰˜Ô"Ø	�‰˜Ô"Ø×Ñ˜ð !õ 	r   c                 ó®  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  SX4S5        UR                  SX4S5        UR                  SX4S	5        UR                  S
X4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  S
X4S5        UR                  SX4S5        UR                  SX4S5        U R                  [        5         UR                  SX4S5        S S S 5        U R                  [        5         UR                  SX4S5        S S S 5        U R                  UR                  5        U R                  US5        g ! , (       d  f       Nm= f! , (       d  f       NM= f)NrÐ   rÓ  r€   ú==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"
            )rU   r   rÑ   rP   r®   Úicmp_unsignedÚicmp_signedr  rï   rÍ  rÎ  ro   r  s        r   Útest_integer_comparisonsÚ.TestBuildInstructions.test_integer_comparisonsá  s•  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ×Ñ˜d A¨#Ô.Ø×Ñ˜d A¨#Ô.Ø×Ñ˜c 1¨Ô-Ø×Ñ˜d A¨#Ô.Ø×Ñ˜c 1¨Ô-Ø×Ñ˜d A¨#Ô.Ø×Ñ˜D !¨Ô,Ø×Ñ˜D !¨Ô,Ø×Ñ˜C  sÔ+Ø×Ñ˜D !¨Ô,Ø×Ñ˜C  sÔ+Ø×Ñ˜D !¨Ô,Ø×ÑœzÕ*Ø×Ñ  q¨TÔ2÷ +à×ÑœzÕ*Ø×Ñ  q¨TÔ2÷ +à×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	÷ +Õ*úç*Õ*ús   Ä:F5Å+GÆ5
GÇ
Gc                 óf  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  SX4S5        UR                  SX4S5        UR                  SX4S	5        UR                  S
X4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  S
X4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S5        UR                  SX4S/ SQS9  U R                  UR                  5        U R                  US 5        g )!NrÐ   rÓ  r€   r-  r   r.  rµ  r/  r¶  r0  r¸  r1  r¹  r2  rº  r¼  ré  rê  rë  rì  rí  ÚordÚur3  ÚvÚwr€  Ú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"
            )
rU   r   rÑ   rP   r®   Úfcmp_orderedÚfcmp_unorderedrÍ  rÎ  ro   r  s        r   Útest_float_comparisonsÚ,TestBuildInstructions.test_float_comparisons  s   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ×Ñ˜T 1¨Ô-Ø×Ñ˜T 1¨Ô-Ø×Ñ˜S !¨Ô,Ø×Ñ˜T 1¨Ô-Ø×Ñ˜S !¨Ô,Ø×Ñ˜T 1¨Ô-Ø×Ñ˜t Q¨3Ô/Ø×Ñ˜t Q¨3Ô/Ø×Ñ˜s A¨#Ô.Ø×Ñ˜t Q¨3Ô/Ø×Ñ˜s A¨#Ô.Ø×Ñ˜t Q¨3Ô/à×Ñ˜U A¨#Ô.Ø×Ñ˜U A¨#Ô.Ø×Ñ˜u a¨CÔ0Ø×Ñ˜u a¨CÔ0Ø×Ñ˜u a¨CÚ%Lð 	ñ 	Nà×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	r   c                 óŽ  • U R                  SS9n[        R                  " [        S5      n[        R                  " U5      nUR
                  R                  S S u  pEUR                  X$USSS9  U R                  UR                  5        UR                  5         U R                  UR                  5        U R                  US5        g )	NrÐ   rÓ  Tr€   r   )rA  r@  r	  z„            my_block:
                %"c" = select arcp nnan i1 true, i32 %".1", i32 %".2"
                unreachable
            )rU   r   rr  Úint1rÑ   rP   r®   ÚselectrÍ  rÎ  ÚunreachableÚ
assertTruero   )r   rU   ró  rÔ   r±  r²  s         r   Útest_misc_opsÚ#TestBuildInstructions.test_misc_ops3  s¦   € Ø—
‘
 
�
Ð+ˆÜ�KŠKœ˜dÓ#ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ�‰�q˜Q Ð+;ˆÑ<Ø×Ñ˜×,Ñ,Ô-Ø×ÑÔØ�‰˜×+Ñ+Ô,Ø×Ñ˜ð !õ 	r   c                 ó¸  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  R                  S5      nUR                  R                  S5      nUR                  [        SSS9nUR                  X55        UR                  XF5        U R                  UR                  5        U R                  US	5        g )
NrÐ   rÓ  r€   Úb2Úb3Úmy_phir  r	  zj            my_block:
                %"my_phi" = phi fast i32 [%".1", %"b2"], [%".2", %"b3"]
            )rU   r   rÑ   rP   r®   rS   ÚphirJ   Úadd_incomingrÍ  rÎ  ro   )r   rU   rÔ   r±  r²  Úbb2Úbb3rQ  s           r   Útest_phiÚTestBuildInstructions.test_phiB  s¿   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ×Ñ×1Ñ1°$Ó7ˆØ×Ñ×1Ñ1°$Ó7ˆØ�k‰kœ% °ˆkÐ;ˆØ×Ñ˜Ô Ø×Ñ˜Ô Ø×Ñ˜×,Ñ,Ô-Ø×Ñ˜ð !õ 	r   c                 ó4  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4nUR                  [        SS9nUR                  [        SSS9nUR                  [        USS9nS	Ul        U R                  UR                  [        R                  " [        5      5        UR                  XX5      n	U R                  U	R                  [        R                  " 5       5        UR                  XF5      n
U R                  U
R                  [        R                  " 5       5        UR                  US
5      nU R                  UR                  [        5        UR                  XFSS9nU R                  UR                  [        R                  " 5       5        UR                  USSS9nU R                  UR                  [        5        UR                  XFSSS9nU R                  UR                  [        R                  " 5       5        UR!                  USSSS9nU R                  UR                  [        5        ["        (       d+  [        R$                  " [        R                  " 5       S 5      nO/[        R$                  " [        R                  " [        5      S 5      nUR                  [        R$                  " [        S5      U5        U R'                  [(        5         UR                  XC5        S S S 5        U R'                  [(        5         UR                  U5        S S S 5        U R'                  [(        5       nUR                  XH5        S S S 5        ["        (       d8  U R                  [+        WR,                  5      S5        U R/                  US5        g U R                  [+        WR,                  5      S5        U R/                  US5        g ! , (       d  f       Nç= f! , (       d  f       NÉ= f! , (       d  f       N«= f)NrÐ   rÓ  r«   r   rü   rµ  )rJ  rN   r¶  r   r¹  r   )r²   r¼  Úseq_cstrª   )Úorderingr²   rê  )rY  r²   rN   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
                )rU   r   rÑ   rP   r®   ÚallocarJ   rK   r²   r>   r1  rL   Ústorer‹  ÚloadÚstore_atomicÚload_atomicr   rr  r  Ú	TypeErrorr'   r  ro   )r   rU   rÔ   r±  r²  Úzr   rµ  r¶  Úeer¸  r¹  rº  r¼  ré  rê  Úptrr  s                     r   Útest_mem_opsÚ"TestBuildInstructions.test_mem_opsQ  sö  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×"Ñ"×'Ñ'¨¨Ð+‰ˆˆaØ�N‰Nœ5 sˆNÐ+ˆØ�N‰Nœ5 r°ˆNÐ4ˆØ�N‰Nœ3 Q¨SˆNÐ1ˆØˆŒØ×Ñ˜Ÿ™¤§¢´Ó!4Ô5Ø�]‰]˜1Ó ˆØ×Ñ˜Ÿ™¤"§+¢+£-Ô0Ø�M‰M˜!ÓˆØ×Ñ˜Ÿ™¤§¢£Ô/Ø�L‰L˜˜CÓ ˆØ×Ñ˜Ÿ™¤Ô'à�M‰M˜! aˆMÐ(ˆØ×Ñ˜Ÿ™¤§¢£Ô/Ø�L‰L˜˜C qˆLÐ)ˆØ×Ñ˜Ÿ™¤Ô'à× Ñ  °	ÀÐ Ð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˜!Ô÷ *à×ÑœyÕ)Ø�L‰L˜ŒO÷ *ð ×ÑœyÔ)¨RØ�M‰M˜!Ô÷ *÷ /Ò.Ø×ÑœS §¡Ó.ØIôKà×Ñ˜Uð %õ ð ×ÑœS §¡Ó.ØMôOà×Ñ˜Uð %õ ÷9 *Õ)úç)Õ)ú÷ *Õ)ús$   Ë4O'Ì#O8ÍP	Ï'
O5Ï8
PÐ	
Pc                 óô  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  [        R                  " [        5      SS9nUR                  U[        R                  " [        S5      U/SS9nU R                  UR                  [        R                  " [        5      5        [        (       d  U R                  US5        g U R                  US5        g )	NrÐ   rÓ  r€   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"
                )rU   r   rÑ   rP   r®   rZ  rL   rJ   Úgeprr  r>   r1  r   ro   ©r   rU   rÔ   r±  r²  r   rµ  s          r   Útest_gepÚTestBuildInstructions.test_gep›  sÈ   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ�N‰Nœ2Ÿ>š>¬%Ó0°sˆNÐ;ˆØ�K‰K˜œBŸKšK¬¨qÓ1°1Ð5¸CˆKÐ@ˆØ×Ñ˜Ÿ™¤§¢´Ó!6Ô7ß.Ò.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ r   c           
      ól  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4[
        R                  5       n[        R                  " [        XUU[        /5      nUR                  X6R                  5       SS9nUR                  US Vs/ s H  n[        R                  " [        U5      PM      snSS9n	U R                  U	R                  [        R                  " U5      5        [         (       d  U R#                  US5        g U R#                  US5        g s  snf )	NrÐ   rÓ  r€   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
                )rU   r   rÑ   rP   r®   r    rÙ   ÚLiteralStructTyper  Úbitcastrf  rr  rJ   r>   r1  rL   r   ro   )
r   rU   rÔ   r±  r²  Úint8ptrÚlsrµ  r€  r¶  s
             r   Útest_gep_castinstrÚ(TestBuildInstructions.test_gep_castinstr°  sü   € ð —
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆÜ—/‘/Ó#ˆÜ×!Ò!¤5¨'¸GÄUÐ"KÓLˆØ�O‰O˜AŸ}™}›°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           
      ó¶  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4Sn[
        R                  5       n[        R                  " [        XfU[        /5      nUR                  X7R                  US9SS9nUR                  US V	s/ s H  n	[        R                  " [        U	5      PM      sn	SS9n
U R                  U
R                  R                  U5        U R                  U
R                  [        R                   " XeS95        ["        (       d  U R%                  US	5        g U R%                  US
5        g s  sn	f )NrÐ   rÓ  r€   rª   r³  rµ  rk  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
                )rU   r   rÑ   rP   r®   r    rÙ   rl  r  rm  rf  rr  rJ   r>   r1  r´  rL   r   ro   )r   rU   rÔ   r±  r²  r´  rn  ro  rµ  r€  r¶  s              r   Útest_gep_castinstr_addrspaceÚ2TestBuildInstructions.test_gep_castinstr_addrspaceÈ  s   € ð —
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØˆ	Ü—/‘/Ó#ˆÜ×!Ò!¤5¨'¸GÄUÐ"KÓLˆØ�O‰O˜AŸ}™}°y˜}ÐAÈˆOÐLˆØ�K‰K˜¹6ÓBº6°aœBŸKšK¬¨qÖ1¹6ÑBÈˆKÐMˆØ×Ñ˜Ÿ™×)Ñ)¨9Ô5Ø×Ñ˜Ÿ™¤§¢°Ñ!MÔNß.Ò.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ ùò Cs   Â&%E
c                 óˆ  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4SnUR                  [        R                  " [        US9SS9n[        (       d&  U R                  [        UR                  5      S5        O%U R                  [        UR                  5      S5        U R                  UR                  R                  R                  U5        UR                  U[        R                  " [        S	5      U/S
S9nU R                  UR                  R                  U5        UR                  U[        R                  " [        S5      /SS9nU R                  UR                  R                  U5        [        (       d  U R!                  US5        g U R!                  US5        g )NrÐ   rÓ  r€   rª   r³  r   rb  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
                )rU   r   rÑ   rP   r®   rZ  rL   rJ   r   r>   r'   r1  Úpointeer´  rf  rr  ro   )	r   rU   rÔ   r±  r²  r´  r   rµ  r¶  s	            r   Útest_gep_addrspaceÚ(TestBuildInstructions.test_gep_addrspaceâ  s]  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØˆ	Ø�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                 óü  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4[        R
                  " [        [        /5      n[        R
                  " [        U/5      n[        R                  " U[        R                  " [        S5      [        R                  " [        S5      45      nUR                  USSS9nUR                  XsSSS9n	UR                  U	[        R                  " [        S	5      S
SS9n
U R                  U	R                  U5        U R                  U
R                  U5        UR                  USS9nUR                  USS9nUR                  USSS9nUR                  US
SS9nUR                  USSS9nUR                  USSS9nUR                  XÎS
SS9nUR                  XÃSSS9nU R                  UR                  [        5        U R                  UR                  U5        U R                  UR                  [        5        U R                  UR                  [        5        U R                  UR                  U5        U R                  UR                  U5        U R!                  ["        5         UR                  US5        S S S 5        U R!                  ["        5         UR                  US5        S S S 5        U R!                  ["        5         UR                  US5        S S S 5        U R!                  ["        5         UR                  X4S5        S S S 5        U R!                  ["        5         UR                  XsS
5        S S S 5        [$        (       d  U R'                  US5        g U R'                  US5        g ! , (       d  f       GN = f! , (       d  f       Ná= f! , (       d  f       NÂ= f! , (       d  f       N£= f! , (       d  f       N„= f)NrÐ   rÓ  r€   rª   Tr   r   rµ  Fr   r¶  rb  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
                )rU   r   rÑ   rP   r®   rl  rJ   rG  r    rr  Úextract_valueÚinsert_valuer>   r1  rZ  r\  r  r_  r   ro   )r   rU   rÔ   r±  r²  Útp_innerÚtp_outerÚc_innerr   rµ  r¶  Úp_outerré  rê  rë  rì  rí  rî  rï  s                      r   Útest_extract_insert_valueÚ/TestBuildInstructions.test_extract_insert_value   sP  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆÜ×'Ò'¬´¨Ó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ˆØ× Ñ   q¨sÐ Ð3ˆØ× Ñ   v°CÐ Ð8ˆØ×Ñ˜Ÿ™¤Ô&Ø×Ñ˜Ÿ™ Ô*Ø×Ñ˜Ÿ™¤Ô'Ø×Ñ˜Ÿ™¤Ô&Ø×Ñ˜Ÿ™ Ô*Ø×Ñ˜Ÿ™ Ô*à×ÑœyÕ)à×!Ñ! '¨1Ô-÷ *ð ×ÑœyÕ)à×!Ñ! '¨6Ô2÷ *ð ×ÑœyÕ)à×!Ñ! '¨1Ô-÷ *ð ×ÑœyÕ)à× Ñ   qÔ)÷ *ð ×ÑœyÕ)à× Ñ  ¨QÔ/÷ *÷ /Ò.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ ÷A *Ö)ú÷ *Õ)ú÷ *Õ)ú÷ *Õ)ú÷ *Õ)ús<   ÊN(ËN:Ë<OÌ,OÍO-Î(
N7Î:
OÏ
OÏ
O*Ï-
O;c                 ó`  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4pVUR                  U[        SS9nUR                  U[        SS9nUR                  U[        SS9n	UR                  U[        S5      n
UR                  U
[        S5      nUR                  U[        S	5      nUR                  U[        S
5      nUR!                  U[        S5      nUR#                  U[        S5      nUR%                  U[        S5      nUR'                  U[        R(                  " [        5      S5      nUR+                  U[        S5      nU R-                  UR.                  5        [0        (       d  U R3                  US5        g U R3                  US5        g )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
                )rU   r   rÑ   rP   r®   Útruncr    ÚzextrJ   ÚsextÚfptruncÚfltÚfpextrK   ÚfptouiÚfptosiÚuitofpÚsitofpÚptrtointÚinttoptrrL   rm  rÍ  rÎ  r   ro   )r   rU   rÔ   r±  r²  Úfarb  r   rµ  r¶  rƒ  r„  r¹  rº  r…  r†  r¼  ré  rê  s                      r   Útest_cast_opsÚ#TestBuildInstructions.test_cast_opsM  sm  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×(Ñ(×-Ñ-¨b¨qÐ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                 ót  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  [        SS9nUR                  SXSSS5      nU R                  UR                  [        5        [        (       d  U R                  US5        g U R                  US	5        g )
NrÐ   rÓ  r€   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
                )rU   r   rÑ   rP   r®   rZ  rJ   Ú
atomic_rmwr>   r1  r   ro   rg  s          r   Útest_atomicrmwÚ$TestBuildInstructions.test_atomicrmw  s¨   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ�N‰Nœ5 sˆNÐ+ˆØ×Ñ˜u a¨K¸Ó=ˆØ×Ñ˜Ÿ™¤Ô'ß.Ò.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ r   c                 óü   • U R                  SS9n[        R                  " U5      nUR                  R	                  SS9nUR                  U5        U R                  UR                  5        U R                  US5        g )NrÐ   rÓ  ÚtargetzE            my_block:
                br label %"target"
            )	rU   r   rÑ   rP   rS   ÚbranchrJ  rÎ  ro   )r   rU   rÔ   Ú	bb_targets       r   Útest_branchÚ!TestBuildInstructions.test_branch“  sl   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×$Ñ$×7Ñ7¸XÐ7ÐFˆ	Ø�‰�yÔ!Ø�‰˜×+Ñ+Ô,Ø×Ñ˜ð !õ 	r   c                 ób  • U R                  SS9n[        R                  " U5      nUR                  R	                  SS9nUR                  R	                  SS9nUR                  [        R                  " [        S5      X45        U R                  UR                  5        U R                  US5        g )NrÐ   rÓ  Úb_trueÚb_falseFza            my_block:
                br i1 false, label %"b_true", label %"b_false"
            )rU   r   rÑ   rP   rS   Úcbranchrr  rG  rJ  rÎ  ro   )r   rU   rÔ   Úbb_trueÚbb_falses        r   Útest_cbranchÚ"TestBuildInstructions.test_cbranchž  s’   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×"Ñ"×5Ñ5¸8Ð5ÐDˆØ×#Ñ#×6Ñ6¸IÐ6ÐFˆØ�‰œŸš¤D¨%Ó0°'ÔDØ�‰˜×+Ñ+Ô,Ø×Ñ˜ð !õ 	r   c                 óÀ  • U R                  SS9n[        R                  " U5      nUR                  R	                  SS9nUR                  R	                  SS9nUR                  [        R                  " [        S5      X45      nUR                  SS/5        U R                  UR                  5        U R                  US5        U R                  UR                  S	5        g )
NrÐ   rÓ  r¢  r£  Fr¨   rü   zk            my_block:
                br i1 false, label %"b_true", label %"b_false", !prof !0
            zC            !0 = !{ !"branch_weights", i32 5, i32 42 }
            )rU   r   rÑ   rP   rS   r¤  rr  rG  Úset_weightsrJ  rÎ  ro   r|   rF   )r   rU   rÔ   r¥  r¦  Úbrs         r   Útest_cbranch_weightsÚ*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                 óì  • U R                  SS9n[        R                  " U5      nUR                  R	                  SS9nUR                  R	                  SS9nUR                  [        R                  " UR                  U5      5      nUR                  U5        UR                  U5        U R                  UR                  5        [        (       d  U R                  US5        g U R                  US5        g )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"]
                )rU   r   rÑ   rP   rS   Úbranch_indirectÚBlockAddressÚadd_destinationrJ  rÎ  r   ro   )r   rU   rÔ   Úbb_1Úbb_2Ú
indirectbrs         r   Útest_branch_indirectÚ*TestBuildInstructions.test_branch_indirectº  sÖ   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×2Ñ2¸Ð2Ð>ˆØ×Ñ×2Ñ2¸Ð2Ð>ˆØ×,Ñ,Ü�OŠO˜G×,Ñ,¨dÓ3ó5ˆ
à×"Ñ" 4Ô(Ø×"Ñ" 4Ô(Ø�‰˜×+Ñ+Ô,ß.Ò.Ø×Ñ˜Uð %õ ð
 ×Ñ˜Uð %õ r   c                 óÖ  ^ • U 4S jnT R                  SS9n[        R                  " U5      nUR                  5         U" US5        T R                  SS9n[        R                  " U5      nUR	                  [        S5      5        U" US5        T R                  SS9n[        R                  " U5      nUR                  5       nUR                  SUR                  R                  S	5      5        U" US
5        T R                  SS9n[        R                  " U5      nUR	                  [        S5      5      nUR                  SUR                  R                  S	5      5        U" US5        g )Nc                 ó^   >• TR                  U R                  5        TR                  X5        g r&   )rJ  rÎ  ro   )rU   Úexpected_irr   s     €r   ÚcheckÚ1TestBuildInstructions.test_returns.<locals>.checkÐ  s#   ø€ Ø�O‰O˜E×/Ñ/Ô0Ø×Ñ˜UÕ0r   rÐ   rÓ  z;            my_block:
                ret void
            Úother_blockr¨   z?            other_block:
                ret i32 5
            r·   r†   zD            my_block:
                ret void, !dbg !0
            é   zE            my_block:
                ret i32 6, !dbg !0
            )	rU   r   rÑ   rÒ   ÚretrJ   r¹   rF   rº   )r   r¼  rU   rÔ   rå  s   `    r   Útest_returnsÚ"TestBuildInstructions.test_returnsÏ  s>  ø€ õ	1ð —
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×ÑÔÙˆeð ô 	ð
 —
‘
 �
Ð.ˆÜ—,’,˜uÓ%ˆØ�‰”E˜!“HÔÙˆeð ô 	ð —
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×ÑÓ!ˆØ×Ñ˜% §¡×!:Ñ!:¸2Ó!>Ô?Ùˆeð ô 	ð
 —
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ�{‰{œ5 ›8Ó$ˆØ×Ñ˜% §¡×!:Ñ!:¸2Ó!>Ô?Ùˆeð õ 	r   c                 ó˜  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  R                  SS9nUR                  R                  SS9nUR                  R                  SS9nUR                  R                  SS9nUR                  X85      n	U	R                  [        R                  " [        S5      U5        U	R                  [        R                  " [        S	5      U5        U	R                  SU5        U R                  UR                  5        U R                  US
5        g )NrÐ   rÓ  r€   Ú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"]
            )rU   r   rÑ   rP   r®   rS   ÚswitchÚadd_caserr  rJ   rJ  rÎ  ro   )
r   rU   rÔ   r±  r²  Ú	bb_onzeroÚbb_ononeÚbb_ontwoÚbb_elseÚsws
             r   Útest_switchÚ!TestBuildInstructions.test_switch÷  s  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ×$Ñ$×7Ñ7¸XÐ7ÐFˆ	Ø×#Ñ#×6Ñ6¸GÐ6ÐDˆØ×#Ñ#×6Ñ6¸GÐ6ÐDˆØ×"Ñ"×5Ñ5¸;Ð5ÐGˆØ�^‰^˜AÓ'ˆØ
�‰”B—K’K¤ qÓ)¨9Ô5Ø
�‰”B—K’K¤ qÓ)¨8Ô4à
�‰�A�xÔ Ø�‰˜×+Ñ+Ô,Ø×Ñ˜ð !õ 	r   c                 ób  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4[        R
                  " [        [        [        45      n[        R
                  " [        [        4SS9n[        R
                  " [        [        [        45      n[        R                  " UR                  R                  US5      n[        R                  " UR                  R                  US5      n	[        R                  " UR                  R                  US5      n
UR                  XƒU4S	5        UR                  X”U4S
5        UR                  X£U4S5        UR                  XƒU4SSS9  UR                  XƒU4S5      nUR                  R                  S5        UR                  XƒU4SSS9  UR                  XƒU4SSS9  UR                  XƒU4SSS9  UR                  XƒU4SSS9  UR                  XƒU4SSS9  UR                  XƒU4SSS9  U R                  US5        g ) NrÐ   rÓ  r€   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
        )rU   r   rÑ   rP   r®   rI   r‹  rJ   rK   ÚhlfrM   rF   r�  r�   rž   ro   )r   rU   rÔ   r±  r²  Útp_fÚtp_gÚtp_hr¸  r¹  rº  rØ  s               r   Ú	test_callÚTestBuildInstructions.test_call
  sé  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆÜ�Šœ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                 óø  • U R                  SS9n[        R                  " U5      n[        R                  " [        R                  " 5       [        R
                  " 5       /S-  5      n[        R                  " UR                  US5      nUR                  [        SS9nUR                  R                  S5      nUR                  XEXf45        [        (       d  U R                  US5        g	U R                  US5        g	)
z)
Function calls with metadata arguments.
rÐ   rÓ  r«   zllvm.dbg.declarer±  r†   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)rU   r   rÑ   rI   r‹  ÚMetaDataTyperM   rF   rZ  rJ   rº   r�  r   ro   )r   rU   rÔ   Údbg_declare_tyÚdbg_declarer±  r²  s          r   Útest_call_metadataÚ(TestBuildInstructions.test_call_metadata0  sÌ   € ð —
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜŸš¬¯ª«¼¿ºÓ9JÐ8KÈaÑ8OÓPˆÜ—k’kØ�N‰NØØó ˆð �N‰Nœ5 sˆNÐ+ˆØ�N‰N×'Ñ'¨Ó+ˆØ�‰�[ a )Ô,ß.Ò.Ø×Ñ˜Uð %õ ð ×Ñ˜Uð %õ r   c                 óœ  • U R                  SS9n[        R                  " U5      n[        R                  " [        R                  " 5       [
        R                  5       [
        [
        R                  5       45      n[        R                  " UR                  R                  US5      nUR                  S   R                  S5        UR                  [
        SS9nUR                  [
        SS9nUR                  UU[        R                  " [
        S5      U4S	S
S.S9  [        (       d  U R!                  US5        g U R!                  US5        g )NrÐ   rÓ  Úfunr   ÚsretÚretvalÚotherrü   ©rð  r­   r­   ©r   r€   ©Ú	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"\)
            )rU   r   rÑ   rI   r‹  rJ   rÙ   rM   rP   rF   r®   r¯   rZ  r�  rr  r   rr   )r   rU   rÔ   Úfun_tyrï  rñ  rò  s          r   Útest_call_attributesÚ*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                 ó0  • U R                  SS9n[        R                  " U5      n[        R                  " [        R                  " 5       S5      n[        R
                  " UR                  R                  US5      nUR                  US5        UR                  USSS9  UR                  USSS9  UR                  USSS9  UR                  USS	S9  UR                  USS
S9  UR                  US/ S9  UR                  USSS9  U R                  US5        g )NrÐ   rÓ  r†   Ú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"()
        )
rU   r   rÑ   rI   r‹  rM   rP   rF   r�  ro   ©r   rU   rÔ   r÷  rï  s        r   Útest_call_tailÚ$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                 ó€  • U R                  5       n[        R                  " U5      n[        R                  " [        R                  " 5       S5      n[        R
                  " UR                  R                  US5      nU R                  [        5         UR                  USSS0S9  S S S 5        g ! , (       d  f       g = f)Nr†   rï  r   rð  rõ  )rU   r   rÑ   rI   r‹  rM   rP   rF   r  rï   r�  rÿ  s        r   Útest_invalid_call_attributesÚ2TestBuildInstructions.test_invalid_call_attributes†  s   € Ø—
‘
“ˆÜ—,’,˜uÓ%ˆÜ—’¤§¢£°Ó3ˆÜ�kŠk˜'×*Ñ*×1Ñ1°6¸5ÓAˆØ×ÑœzÕ*à�L‰L˜˜b¨Q°¨KˆLÑ8÷ +×*Ö*ús   ÂB/Â/
B=c                 óØ  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4[        R
                  " [        [        [        45      n[        R                  " UR                  R                  US5      nUR                  R                  SS9nUR                  R                  SS9nUR                  XcU4XxS5        U R                  US5        g )	NrÐ   rÓ  r€   r¸  ÚnormalÚunwindrÒ  z£            my_block:
                %"res_f" = invoke float @"f"(i32 %".1", i32 %".2")
                    to label %"normal" unwind label %"unwind"
            )rU   r   rÑ   rP   r®   rI   r‹  rJ   rM   rF   rS   Úinvokero   )	r   rU   rÔ   r±  r²  rã  r¸  Ú	bb_normalÚ	bb_unwinds	            r   Útest_invokeÚ!TestBuildInstructions.test_invoke�  sÇ   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆÜ�Šœs¤U¬E NÓ3ˆÜ�KŠK˜×(Ñ(×/Ñ/°°sÓ;ˆØ×$Ñ$×7Ñ7¸XÐ7ÐFˆ	Ø×$Ñ$×7Ñ7¸XÐ7ÐFˆ	Ø�‰�q˜a˜& )¸Ô@Ø×Ñ˜ð !õ 	r   c                 ó  • U R                  SS9n[        R                  " U5      n[        R                  " [        R                  " 5       [
        R                  5       [
        [
        R                  5       45      n[        R                  " UR                  R                  US5      nSUl
        UR                  S   R                  S5        UR                  [
        SS9nUR                  [
        SS9nUR                  R                  S	S9nUR                  R                  S
S9nUR                  UU[        R                   " [
        S5      U4UUSSSSSS.S9  ["        (       d  U R%                  US5        g U R%                  US5        g )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"
            )rU   r   rÑ   rI   r‹  rJ   rÙ   rM   rP   rF   Úcalling_conventionr®   r¯   rZ  rS   r  rr  r   rr   )	r   rU   rÔ   r÷  rï  rñ  rò  r	  r
  s	            r   Útest_invoke_attributesÚ,TestBuildInstructions.test_invoke_attributesž  s\  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜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           
      óÔ  • U R                  SS9n[        R                  " U5      nUR                  [        R                  " [
        [        R                  5       /5      S5      n[        R                  " UR                  R                  [        R                  5       S5      nSUl        UR                  [        R                  " U5      5        UR                  [        R                  " [        R                  " [        R                   " UR"                  S5      U/5      5      5        UR%                  U5        [&        (       d  U R)                  US5        g U R)                  US5        g )	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"
                )rU   r   rÑ   Ú
landingpadrl  rJ   r    rÙ   rp  rP   rF   r¾  Ú
add_clauseÚCatchClauseÚFilterClauserr  Ú	ArrayTyper1  Úresumer   ro   )r   rU   rÔ   r  Úint_typeinfos        r   Útest_landingpadÚ%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                 óì   • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  SX4SS9nUR                  U5        U R                  US5        g )NrÐ   rÓ  r€   r1  r   z…            my_block:
                %"c" = icmp sgt i32 %".1", %".2"
                call void @"llvm.assume"(i1 %"c")
            )rU   r   rÑ   rP   r®   r6  rß   ro   r"  s         r   Útest_assumeÚ!TestBuildInstructions.test_assumeå  sr   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ×Ñ  Q°ÐÐ4ˆØ�‰�qÔØ×Ñ˜ð !õ 	r   c                 ó¸  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4SUl        SUl        [        R                  " UR                  S5      n[        R                  " U[        R                  5      n[        R                  " S5      nUR                  XcU" S5      SS9nUR                  XdU" S	5      S
S9nU R                  US5        UR                  S5      nUR                  U5        UR                  U5        [        R                  " US	S/5      nUR!                  XfUSS9  U R                  US5        UR                  S5      nUR                  U5        UR                  U5        UR#                  XfSS9  U R                  US5        UR                  S5      nUR                  U5        UR                  U5        UR%                  Xg" S5      SS9n	UR%                  Xg" S	5      SS9n
U R                  US5        UR'                  UR#                  Xš5      5        U R)                  UR*                  5        g )NÚinsert_blockrÓ  r€   r±  r²  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
            )rU   r   rÑ   rP   r®   rN   Ú
VectorTyper1  rr  r&  r^  Úinsert_elementro   rS   r�  Úposition_at_endÚshuffle_vectorrž   Úextract_elementrÀ  r4   rF   )r   rU   rÔ   r±  r²  ÚvectyÚvecÚidxtyÚmaskr   rµ  s              r   Útest_vector_opsÚ%TestBuildInstructions.test_vector_opsñ  s#  € Ø—
‘
 �
Ð/ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØˆŒØˆŒä—’˜aŸf™f aÓ(ˆÜ�kŠk˜%¤§¡Ó.ˆÜ—
’
˜2“ˆØ×$Ñ$ S©U°1«X¸FÐ$ÐCˆØ×$Ñ$ S©U°1«X¸FÐ$ÐCˆà×Ñ˜ð !ô 	ð ×*Ñ*¨?Ó;ˆØ�‰�uÔØ×Ñ Ô&ä�{Š{˜5 1 a &Ó)ˆØ×Ñ˜s¨°FÐÑ;à×Ñ˜ð !ô 	ð
 ×*Ñ*¨;Ó7ˆØ�‰�uÔØ×Ñ Ô&à�‰�C 5ˆÑ)à×Ñ˜ð !ô 	ð
 ×*Ñ*¨?Ó;ˆØ�‰�uÔØ×Ñ Ô&à×#Ñ# C¨¨q«¸Ð#Ð>ˆØ×#Ñ# C¨¨q«¸Ð#Ð>ˆà×Ñ˜ð !ô 	ð 	�‰�G—K‘K Ó%Ô&Ø×Ñ˜WŸ^™^Õ,r   c                 óê   • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  USS9nUR                  U5        U R                  US5        g )NrÐ   rÓ  r¨   r   z}            my_block:
                %"c" = call i64 @"llvm.bitreverse.i64"(i64 5)
                ret i64 %"c"
            )rU   r   rÑ   rr  r  Ú
bitreverserÀ  ro   ©r   rU   rÔ   r±  r   s        r   Útest_bitreverseÚ%TestBuildInstructions.test_bitreverse+  se   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜qÓ!ˆØ×Ñ˜q sÐÐ+ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óL  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nU R                  [        5       nUR                  USS9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrÐ   rÓ  r¨   r   ú#expected an integer type, got float)rU   r   rÑ   rr  r‹  r  r_  r7  r*   r'   r  ©r   rU   rÔ   r±  Úraisess        r   Útest_bitreverse_wrongtypeÚ/TestBuildInstructions.test_bitreverse_wrongtype7  s~   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜QÓˆà×ÑœyÔ)¨VØ×Ñ˜q sÐÑ+÷ *à�‰Ø1Ü�× Ñ Ó!õ	#÷ *Õ)úó   ÁBÂ
B#c                 ó¸  • U R                  SS9n[        R                  " U5      nU R                  [        5       nUR                  SS 5        S S S 5        U R                  S[        WR                  5      5        U R                  [        5       nUR                  S S5        S S S 5        U R                  S[        UR                  5      5        UR                  SS 5        UR                  SS5        UR                  S	S5        UR                  S
5        UR                  5         U R                  US5        g ! , (       d  f       Nò= f! , (       d  f       N®= f)NrÐ   rÓ  r—  z#Invalid fence ordering "monotonic"!zInvalid fence ordering "None"!ÚacquireÚreleaseÚsinglethreadÚacq_relrX  zç            my_block:
                fence acquire
                fence syncscope("singlethread") release
                fence syncscope("singlethread") acq_rel
                fence seq_cst
                ret void
            )rU   r   rÑ   r  rï   Úfencer*   r'   r  rÒ   ro   )r   rU   rÔ   r>  s       r   Ú
test_fenceÚ 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                 ó4  • U R                  SS9n[        R                  " U5      nU R                  [        5         UR                  S5        S S S 5        UR                  S5        UR                  5         U R                  US5        g ! , (       d  f       NB= f)NrÐ   rÓ  zso
many linesz
my commentzX            my_block:
                ; my comment
                ret void
            )rU   r   rÑ   r  ÚAssertionErrorÚcommentrÒ   ro   ©r   rU   rÔ   s      r   Útest_commentÚ"TestBuildInstructions.test_comment]  sv   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñœ~Õ.Ø�O‰OÐ,Ô-÷ /à�‰˜Ô%Ø×ÑÔØ×Ñ˜ð !õ 	÷	 /Õ.ús   »B	Â	
Bc                 óê   • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  USS9nUR                  U5        U R                  US5        g )NrÐ   rÓ  r¨   r   zx            my_block:
                %"c" = call i32 @"llvm.bswap.i32"(i32 5)
                ret i32 %"c"
            )rU   r   rÑ   rr  rJ   ÚbswaprÀ  ro   r8  s        r   Ú
test_bswapÚ TestBuildInstructions.test_bswapj  ób   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜qÓ!ˆØ�M‰M˜! #ˆMÐ&ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óê   • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  USS9nUR                  U5        U R                  US5        g )NrÐ   rÓ  r¨   r   zx            my_block:
                %"c" = call i16 @"llvm.ctpop.i16"(i16 5)
                ret i16 %"c"
            )rU   r   rÑ   rr  Úint16ÚctpoprÀ  ro   r8  s        r   Ú
test_ctpopÚ TestBuildInstructions.test_ctpopv  rT  r   c                 ó   • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      n[        R                  " [
        S5      nUR                  X4SS9nUR                  U5        U R                  US5        g )NrÐ   rÓ  r¨   r   r   z}            my_block:
                %"c" = call i16 @"llvm.ctlz.i16"(i16 5, i1 1)
                ret i16 %"c"
            )	rU   r   rÑ   rr  rV  rG  ÚctlzrÀ  ro   r"  s         r   Ú	test_ctlzÚTestBuildInstructions.test_ctlz‚  ór   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜qÓ!ˆÜ�KŠKœ˜aÓ ˆØ�L‰L˜ CˆLÐ(ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óê   • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  USS9nUR                  U5        U R                  US5        g )NrÐ   rÓ  g      @r²  z•            my_block:
                %"b" = call i16 @"llvm.convert.to.fp16.f32"(float 0x4014000000000000)
                ret i16 %"b"
            )rU   r   rÑ   rr  r‹  Úconvert_to_fp16rÀ  ro   r  s        r   Útest_convert_to_fp16_f32Ú.TestBuildInstructions.test_convert_to_fp16_f32�  se   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜SÓ!ˆØ×#Ñ# A¨CÐ#Ð0ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óL  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nU R                  [        5       nUR                  USS9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrÐ   rÓ  r¨   r²  úexpected a float type, got i16)rU   r   rÑ   rr  rV  r  r_  r`  r*   r'   r  r=  s        r   Ú"test_convert_to_fp16_f32_wrongtypeÚ8TestBuildInstructions.test_convert_to_fp16_f32_wrongtype›  s~   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜qÓ!ˆà×ÑœyÔ)¨VØ×#Ñ# A¨CÐ#Ñ0÷ *à�‰Ø,Ü�× Ñ Ó!õ	#÷ *Õ)úrA  c                 óô   • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  US[        S9nUR                  U5        U R                  US5        g )NrÐ   rÓ  r¨   r²  ©rN   Útozˆ            my_block:
                %"b" = call float @"llvm.convert.from.fp16.f32"(i16 5)
                ret float %"b"
            )	rU   r   rÑ   rr  rV  Úconvert_from_fp16r‹  rÀ  ro   r  s        r   Útest_convert_from_fp16_f32Ú0TestBuildInstructions.test_convert_from_fp16_f32¦  sg   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜qÓ!ˆØ×%Ñ% a¨c´cÐ%Ð:ˆØ�‰�AŒØ×Ñ˜ð !õ 	r   c                 óL  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nU R                  [        5       nUR                  USS9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrÐ   rÓ  ç      @r²  zexpected a float return type©rU   r   rÑ   rr  r‹  r  r_  rj  r*   r'   r  r=  s        r   Ú!test_convert_from_fp16_f32_notypeÚ7TestBuildInstructions.test_convert_from_fp16_f32_notype²  s~   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜SÓ!ˆà×ÑœyÔ)¨VØ×%Ñ% a¨cÐ%Ñ2÷ *à�‰Ø*Ü�× Ñ Ó!õ	#÷ *Õ)úrA  c                 óV  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nU R                  [        5       nUR                  US[        S9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrÐ   rÓ  rn  r²  rh  zexpected an i16 type, got floatro  r=  s        r   Ú$test_convert_from_fp16_f32_wrongtypeÚ:TestBuildInstructions.test_convert_from_fp16_f32_wrongtype½  s€   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜SÓ!ˆà×ÑœyÔ)¨VØ×%Ñ% a¨c´cÐ%Ñ:÷ *à�‰Ø-Ü�× Ñ Ó!õ	#÷ *Õ)úó   ÁBÂ
B(c                 óV  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nU R                  [        5       nUR                  US[        S9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrÐ   rÓ  rn  r²  rh  rd  )rU   r   rÑ   rr  r‹  r  r_  rj  rV  r*   r'   r  r=  s        r   Ú%test_convert_from_fp16_f32_wrongtype2Ú;TestBuildInstructions.test_convert_from_fp16_f32_wrongtype2È  s€   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜SÓ!ˆà×ÑœyÔ)¨VØ×%Ñ% a¨c´eÐ%Ñ<÷ *à�‰Ø,Ü�× Ñ Ó!õ	#÷ *Õ)úru  c                 ó   • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      n[        R                  " [
        S5      nUR                  X4SS9nUR                  U5        U R                  US5        g )NrÐ   rÓ  r¨   r   r   z}            my_block:
                %"c" = call i64 @"llvm.cttz.i64"(i64 5, i1 1)
                ret i64 %"c"
            )	rU   r   rÑ   rr  r  rG  ÚcttzrÀ  ro   r"  s         r   Ú	test_cttzÚTestBuildInstructions.test_cttzÓ  r^  r   c                 ó‚  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      n[        R                  " [
        S5      nU R                  [        5       nUR                  X4SS9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrÐ   rÓ  r¨   r«   r   zexpected an i1 type, got i32)rU   r   rÑ   rr  r  rJ   r  r_  rz  r*   r'   r  ©r   rU   rÔ   r±  r²  r>  s         r   Útest_cttz_wrongflagÚ)TestBuildInstructions.test_cttz_wrongflagà  s‹   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜qÓ!ˆÜ�KŠKœ˜qÓ!ˆà×ÑœyÔ)¨VØ�L‰L˜ CˆLÑ(÷ *à�‰Ø*Ü�× Ñ Ó!õ	#÷ *Õ)úó   Á1B0Â0
B>c                 ó‚  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      n[        R                  " [
        S5      nU R                  [        5       nUR                  X4SS9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrÐ   rÓ  r¨   r   r   r<  )rU   r   rÑ   rr  r‹  rG  r  r_  rz  r*   r'   r  r~  s         r   Útest_cttz_wrongtypeÚ)TestBuildInstructions.test_cttz_wrongtypeì  s‹   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜QÓˆÜ�KŠKœ˜aÓ ˆà×ÑœyÔ)¨VØ�L‰L˜ CˆLÑ(÷ *à�‰Ø1Ü�× Ñ Ó!õ	#÷ *Õ)úr�  c                 óX  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      n[        R                  " [        S5      n[        R                  " [        S5      nUR                  X4USS9nUR                  U5        U R                  US5        g )NrÐ   rÓ  r¨   r   r€   ÚfmazÅ            my_block:
                %"fma" = call float @"llvm.fma.f32"(float 0x4014000000000000, float 0x3ff0000000000000, float 0x4000000000000000)
                ret float %"fma"
            )rU   r   rÑ   rr  r‹  r†  rÀ  ro   )r   rU   rÔ   r±  r²  r   r†  s          r   Útest_fmaÚTestBuildInstructions.test_fmaø  s…   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜QÓˆÜ�KŠKœ˜QÓˆÜ�KŠKœ˜QÓˆØ�k‰k˜! ¨ˆkÐ.ˆØ�‰�CÔØ×Ñ˜ð !õ 	r   c                 óº  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      n[        R                  " [        S5      n[        R                  " [        S5      nU R                  [        5       nUR                  X4USS9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrÐ   rÓ  r¨   r   r€   r†  z(expected an floating point type, got i32)rU   r   rÑ   rr  rJ   r  r_  r†  r*   r'   r  ©r   rU   rÔ   r±  r²  r   r>  s          r   Útest_fma_wrongtypeÚ(TestBuildInstructions.test_fma_wrongtype  s�   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜qÓ!ˆÜ�KŠKœ˜qÓ!ˆÜ�KŠKœ˜qÓ!ˆà×ÑœyÔ)¨VØ�K‰K˜˜a eˆKÑ,÷ *à�‰Ø6Ü�× Ñ Ó!õ	#÷ *Õ)úó   ÂCÃ
Cc                 óº  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      n[        R                  " [
        S5      n[        R                  " [        S5      nU R                  [        5       nUR                  X4USS9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrÐ   rÓ  r¨   r   r€   r†  z7expected types to be the same, got float, double, float)rU   r   rÑ   rr  r‹  rK   r  r_  r†  r*   r'   r  rŠ  s          r   Útest_fma_mixedtypesÚ)TestBuildInstructions.test_fma_mixedtypes  s�   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜QÓˆÜ�KŠKœ˜QÓˆÜ�KŠKœ˜QÓˆà×ÑœyÔ)¨VØ�K‰K˜˜a eˆKÑ,÷ *à�‰ØEÜ�× Ñ Ó!õ	#÷ *Õ)úr�  c                 óT   • S nS H  n[         R                  " U" U5      5        M!     g )Nc                 ó†  • [         R                  " [         R                  " S5      [         R                  " S5      R                  5       [         R                  " S5      /5      n[         R                  " 5       n[         R
                  " X!SS9nUR                  5       nUR                  5       nUR                  5       n[         R                  " 5       nUR                  U5        UR                  U5        UR                  U5        UR                  [         R                  " S5      5      nUR                  [         R                  " UR                  S5      U5        UR                  [         R                  " S5      5      n	U	R                  [         R                  " U	R                  S5      U5        UR                  S   R                  U 5        UR!                  UR                  S   U/5      n
UR#                  U
5      nUR%                  X›5      nU	R                  XÅ5        UR%                  U[         R                  " UR                  S5      5      nUR                  XÕ5        UR'                  SXÓR                  S   5      nUR)                  XåU5        UR                  U5        UR+                  U5        [-        U5      $ )Nr
   r'  rÓ  r   r   r/  )r   rI   r^  rÙ   rD   rM   rS   rÑ   r-  r�  rQ  rR  rr  r1  r®   r¯   rf  r\  rž   r5  r¤  rÀ  r'   )Ú	attr_namerO   rF   rT   Úbb_entryÚbb_loopÚbb_exitrÔ   ÚindexÚaccumrb  ÚvalueÚaddedÚindexp1Úconds                  r   Úgen_codeÚ;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°%Ñ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 Ó-ˆEØ×Ñ˜uÔ.à—k‘k %¬¯ª°U·Z±ZÀÓ)CÓDˆGØ×Ñ˜wÔ0à×(Ñ(¨¨g·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§   )r1   r2   )r   r�  r“  s      r   Útest_arg_attributesÚ)TestBuildInstructions.test_arg_attributes   s)   € ò&	óP
ˆIô, ×Ò¡¨Ó 3Ö4ò-
r   r†   N)>rˆ   r‰   rŠ   r‹   rŒ   ÚmaxDiffræ  r  r  r  r  r#  r*  r7  rD  rK  rU  rc  rh  rp  rs  rw  r€  r”  r™  rŸ  r§  r¬  r·  rÁ  rÏ  ræ  rì  rø  r   r  r  r  r  r  r4  r9  r?  rH  rN  rR  rX  r\  ra  re  rk  rp  rs  rw  r{  r  rƒ  r‡  r‹  r�  r¯  r�   r†   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                   óZ   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)ÚTestBuilderMiscic  z5
Test various other features of the IRBuilder class.
c                 ó¢  • U R                  SS9n[        R                  " U5      nU R                  UR                  UR
                  5        U R                  UR                  [        R                  5        U R                  UR                  UR
                  R                  5        U R                  UR                  [        R                  5        g )NrÉ  rÓ  )
rU   r   rÑ   r<   rP   rË  ÚassertIsInstancerM   rF   rD   rM  s      r   rÐ  ÚTestBuilderMisc.test_attributesh  s†   € Ø—
‘
 �
Ð(ˆÜ—,’,˜uÓ%ˆØ�‰�g×&Ñ&¨¯©Ô5Ø×Ñ˜g×.Ñ.´·±Ô<Ø�‰�g—n‘n e§l¡l×&9Ñ&9Ô:Ø×Ñ˜gŸn™n¬b¯i©iÕ8r   c                 óä  • U R                  SS9n[        R                  " U5      nUR                  R                  S S u  p4UR                  X4S5        UR                  SS9nUR                  U5         UR                  X4S5        UR                  5          UR                  X4S5        S S S 5        UR                  X4S5        UR                  U5        S S S 5        UR                  X4S	5        UR                  U5         UR                  X4S
5        S S S 5        U R                  US5        U R                  US5        g ! , (       d  f       Nœ= f! , (       d  f       N‚= f! , (       d  f       NU= f)NrÐ   rÓ  r€   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"
            )rU   r   rÑ   rP   r®   rž   rS   Ú
goto_blockrô  Úgoto_entry_blockr   rõ  r�  rÚ  rö  ro   )r   rU   rÔ   r±  r²  Úbb_news         r   Útest_goto_blockÚTestBuilderMisc.test_goto_blockp  s-  € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ×Ñ×$Ñ$ R aÐ(‰ˆØ�‰�A˜#ÔØ×+Ñ+°Ð+Ð7ˆØ×Ñ Õ'Ø�L‰L˜˜sÔ#Ø×)Ñ)Õ+Ø—‘˜A #Ô&÷ ,à�L‰L˜˜sÔ#Ø�N‰N˜6Ô"÷ (ð 	�‰�A˜#ÔØ×Ñ Õ'Ø�L‰L˜˜sÔ#÷ (à×Ñ˜ð !ô 	ð 	×Ñ˜ð "õ 	÷ ,Õ+ú÷ (Õ'ú÷ (Õ'ús0   Á3#EÂD?Â)+EÃ?E!Ä?
E	Å	EÅ
EÅ!
E/c                 óR  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  X3S5      nUR                  U5       nUR                  X3S5        S S S 5        U R                  UR                   W5        UR                  X3S5      nUR                  U5         UR                  X3S5        UR                  U5        S S S 5        U R                  UR                  S5        g ! , (       d  f       N–= f! , (       d  f       N<= f)	NÚonerÓ  r   r±  r²  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:
            )rU   r   rÑ   rr  rG  rž   Úif_thenr<   r�  r„   rP   )r   rU   rÔ   r`  r±  Úbbendr   s          r   Útest_if_thenÚTestBuilderMisc.test_if_then�  sß   € Ø—
‘
 �
Ð&ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜aÓ ˆØ�K‰K˜˜cÓ"ˆØ�_‰_˜QÔ 5Ø�K‰K˜˜cÔ"÷  ð 	�‰�g—m‘m UÔ+Ø�K‰K˜˜cÓ"ˆØ�_‰_˜QÕØ�K‰K˜˜cÔ"Ø�N‰N˜5Ô!÷  ð 	×Ñ˜W×-Ñ-ð 0õ 	÷  Õú÷
  Õús   Á$DÂ>$DÄ
DÄ
D&c                 óô  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  X3S5      nUR                  U5         UR                  X3S5      nUR                  U5         UR                  X3S5        S S S 5        S S S 5        UR                  5         U R                  UR                  S5        g ! , (       d  f       NC= f! , (       d  f       NL= f)Nr¾  rÓ  r   r±  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 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"
            )
rU   r   rÑ   rr  rG  rž   r¿  rÒ   r„   rP   )r   rU   rÔ   r`  r±  r²  s         r   Útest_if_then_nestedÚ#TestBuilderMisc.test_if_then_nested«  s»   € à—
‘
 �
Ð&ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜aÓ ˆØ�K‰K˜˜cÓ"ˆØ�_‰_˜QÕØ—‘˜A #Ó&ˆAØ—‘ Õ#Ø—‘˜A #Ô&÷ $÷  ð 	×ÑÔØ×Ñ˜W×-Ñ-ð 0õ 	÷ $Õ#ú÷  Õús$   Á$$C)ÂCÂC)Ã
C&	Ã"C)Ã)
C7c           	      ó  • SnU R                  US9n[        R                  " U5      n[        R                  " [        S5      nUR                  XDS5      nUR                  U5         UR                  XDS5      nUR                  U5         UR                  XDS5        S S S 5        S S S 5        UR                  5         U R                  UR                  SR                  XS S S	-   S
95        g ! , (       d  f       NV= f! , (       d  f       N_= f)NÚPLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongrÓ  r   r±  r²  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)rU   r   rÑ   rr  rG  rž   r¿  rÒ   r„   rP   rÓ   )r   rÉ  rU   rÔ   r`  r±  r²  s          r   Útest_if_then_long_labelÚ'TestBuilderMisc.test_if_then_long_labelÆ  sÚ   € Ø ˆ
Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜aÓ ˆØ�K‰K˜˜cÓ"ˆØ�_‰_˜QÕØ—‘˜A #Ó&ˆAØ—‘ Õ#Ø—‘˜A #Ô&÷ $÷  ð 	×ÑÔØ×Ñ˜W×-Ñ-ð 0÷ ‘ *¸sÀ°OÀdÑ4J�ÐKõ	M÷ $Õ#ú÷  Õús$   Á&$C>Â
C-ÂC>Ã-
C;	Ã7C>Ã>
Dc                 ó¢   ^ • U 4S jnU" S5      nT R                  UR                  S5        U" S5      nT R                  UR                  S5        g )Nc                 ó   >• TR                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  X0S9    S S S 5        TR                  US5        U$ ! , (       d  f       N"= f)Nr¾  rÓ  r   ©Úlikelyzp                one:
                    br i1 0, label %"one.if", label %"one.endif", !prof !0
                )rU   r   rÑ   rr  rG  r¿  ro   )rÐ  rU   rÔ   r`  r   s       €r   r¼  Ú2TestBuilderMisc.test_if_then_likely.<locals>.checkâ  sl   ø€ Ø—J‘J E�JÐ*ˆEÜ—l’l 5Ó)ˆGÜ—’œD !Ó$ˆAØ—‘ �Ò2Ø÷ 3à×Ñ˜Uð %ô ð ˆN÷ 3Õ2ús   ÁA/Á/
A=TúC            !0 = !{ !"branch_weights", i32 99, i32 1 }
            FúC            !0 = !{ !"branch_weights", i32 1, i32 99 }
            ©r|   rF   ©r   r¼  rÔ   s   `  r   Útest_if_then_likelyÚ#TestBuilderMisc.test_if_then_likelyá  sP   ø€ õ
	ñ ˜“+ˆØ×Ñ˜GŸN™Nð -ô 	ñ ˜“,ˆØ×Ñ˜GŸN™Nð -õ 	r   c                 óþ  • U R                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  X3S5      nUR                  U5       u  pVU   UR                  X3S5        S S S 5        U   UR                  X3S5        S S S 5        S S S 5        UR                  U5       u  pVU   UR                  U5        S S S 5        U   UR                  5         S S S 5        S S S 5        U R                  UR                  S5        g ! , (       d  f       N£= f! , (       d  f       N—= f! , (       d  f       N = f! , (       d  f       N�= f! , (       d  f       Nw= f! , (       d  f       N€= f)Nr¾  rÓ  r   r±  r²  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:
            )rU   r   rÑ   rr  rG  rž   Úif_elser�  rÒ   r„   rP   )r   rU   rÔ   r`  r±  ÚthenrÇ  s          r   Útest_if_elseÚTestBuilderMisc.test_if_elseö  s  € Ø—
‘
 �
Ð&ˆÜ—,’,˜uÓ%ˆÜ�KŠKœ˜aÓ ˆØ�K‰K˜˜cÓ"ˆØ�_‰_˜QÔÑ#4 DÚØ—‘˜A #Ô&÷ âØ—‘˜A #Ô&÷ ÷  ð �_‰_˜QÔÑ#4 DÚØ—‘˜uÔ%÷ âØ× Ñ Ô"÷ ÷  ð 	×Ñ˜W×-Ñ-ð 0õ 	÷ •úç•ú÷  Õú÷ •úç•ú÷  Õúsx   Á$D;Á)DÁ<
D;ÂD*ÂD;Â:E.Â?EÃ
E.ÃEÃ,E.Ä
D'	Ä#D;Ä*
D8	Ä4D;Ä;
E	Å
E	ÅE.Å
E+	Å'E.Å.
E<c                 ó¢   ^ • U 4S jnU" S5      nT R                  UR                  S5        U" S5      nT R                  UR                  S5        g )Nc                 óÈ  >• TR                  SS9n[        R                  " U5      n[        R                  " [        S5      nUR                  X0S9 u  pEU   UR                  U5        S S S 5        U   UR                  5         S S S 5        S S S 5        TR                  UR                  S5        U$ ! , (       d  f       NO= f! , (       d  f       NE= f! , (       d  f       NN= f)Nr¾  rÓ  r   rÏ  zý                one:
                    br i1 0, label %"one.if", label %"one.else", !prof !0
                one.if:
                    br label %"one"
                one.else:
                    ret void
                one.endif:
                )
rU   r   rÑ   rr  rG  rÙ  r�  rÒ   r„   rP   )rÐ  rU   rÔ   r`  rÚ  rÇ  r   s         €r   r¼  Ú2TestBuilderMisc.test_if_else_likely.<locals>.check	  s¬   ø€ Ø—J‘J E�JÐ*ˆEÜ—l’l 5Ó)ˆGÜ—’œD !Ó$ˆAØ—‘ �Ñ2Ñ6G°tÚØ—N‘N 5Ô)÷ âØ×$Ñ$Ô&÷ ÷ 3ð
 × Ñ  ×!1Ñ!1ð 4ô ð ˆN÷ •Túç•Yú÷ 3Õ2ús<   ÁCÁB1Á(
CÁ2CÂCÂ1
B?	Â;CÃ
C	ÃCÃ
C!TrÒ  FrÓ  rÔ  rÕ  s   `  r   Útest_if_else_likelyÚ#TestBuilderMisc.test_if_else_likely	  sP   ø€ õ	ñ& ˜“+ˆØ×Ñ˜GŸN™Nð -ô 	ñ ˜“,ˆØ×Ñ˜GŸN™Nð -õ 	r   c                 ó6  • U R                  5       n[        R                  " 5       n[        R                  " [        S5      nUR                  SS9nUR                  SS9nUR                  SS9nUR                  U5        UR                  X3S5        UR                  U5        UR                  X3S5        UR                  X3S5        UR                  U5        UR                  X3S	5      nUR                  X3S
5        UR                  U5        UR                  X3S5      nUR                  U5        UR                  X3S5        UR                  U5        UR                  X3S5        U R                  US5        U R                  US5        U R                  US5        g)z9
Test IRBuilder.position_{before,after,at_start,at_end}.
r   r¾  rÓ  ÚtwoÚthreer±  rì  rí  rî  rï  r²  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)rP   r   rÑ   rr  rJ   rS   Úposition_at_startrž   r-  Úposition_afterÚposition_beforero   )	r   rT   rÔ   r`  Úbb_oneÚbb_twoÚbb_threerî  r²  s	            r   Útest_positioningÚ TestBuilderMisc.test_positioning7	  sn  € ð �}‰}‹ˆÜ—,’,“.ˆÜ�KŠKœ˜qÓ!ˆØ×(Ñ(¨eÐ(Ð4ˆØ×(Ñ(¨eÐ(Ð4ˆØ×*Ñ*°Ð*Ð8ˆà×!Ñ! &Ô)Ø�‰�A˜#Ôà×Ñ Ô'Ø�‰�A˜#ÔØ�‰�A˜#Ôà×!Ñ! &Ô)Ø�K‰K˜˜cÓ"ˆØ�‰�A˜#Ôà×Ñ Ô'Ø�K‰K˜˜cÓ"ˆà×Ñ˜qÔ!Ø�‰�A˜#Ôà×Ñ Ô"Ø�‰�A˜#ÔØ×Ñ˜ð "ô 	ð 	×Ñ˜ð "ô 	ð 	×Ñ˜ð $õ 	r   c                 óz  • U R                  5       n[        R                  " 5       nUR                  SS9nUR	                  U5        [        R
                  " [        S5      nUR                  XDS5      nUR                  5       nU R                  UR                  5        UR                  U5        U R                  UR                  5        UR                  XUS5      nUR                  XwS5      nUR                  U5        UR                  5         U R                  UR                  5        U R                  US5        g )NÚentryrÓ  iÒ  r±  r²  r   zˆ            entry:
                %"a" = add i32 1234, 1234
                %"b" = mul i32 %"a", %"a"
                ret void
        )rP   r   rÑ   rS   r-  rr  rJ   rž   rÒ   rJ  rÎ  ÚremoverÍ  rÚ  ro   )	r   rT   rÔ   Úblkrê  r±  Úretvoidr²  r   s	            r   Útest_instruction_removalÚ(TestBuilderMisc.test_instruction_removalg	  sø   € Ø�}‰}‹ˆÜ—,’,“.ˆØ×%Ñ%¨7Ð%Ð3ˆØ×Ñ Ô$Ü�KŠKœ˜tÓ$ˆØ�K‰K˜˜cÓ"ˆØ×"Ñ"Ó$ˆØ�‰˜×)Ñ)Ô*Ø�‰�wÔØ×Ñ˜×*Ñ*Ô+Ø�K‰K˜˜cÓ"ˆØ�K‰K˜˜cÓ"ˆØ�‰�qÔØ×ÑÔØ�‰˜×)Ñ)Ô*Ø×Ñ˜ð õ 	r   c                 ó>  • U R                  SS9n[        R                  " U5      nUR                  R	                  / 5      Ul        UR                  [        R                  " [        5      SS9  [        (       d  U R                  US5        g U R                  US5        g )NrÐ   rÓ  r   zY                my_block:
                    %"c" = alloca ptr, !dbg !0
                zZ                my_block:
                    %"c" = alloca i32*, !dbg !0
                )rU   r   rÑ   rF   rº   Údebug_metadatarZ  rL   rJ   r   ro   rM  s      r   Útest_metadataÚTestBuilderMisc.test_metadata~	  s‚   € Ø—
‘
 
�
Ð+ˆÜ—,’,˜uÓ%ˆØ!(§¡×!<Ñ!<¸RÓ!@ˆÔØ�‰”r—~’~¤eÓ,°3ˆÑ7ß.Ò.Ø×Ñ˜Uð %õ ð
 ×Ñ˜Uð %õ r   r†   N)rˆ   r‰   rŠ   r‹   rŒ   rÐ  r»  rÁ  rÄ  rË  rÖ  rÛ  rà  rë  rò  rö  r�   r†   r   r   r³  r³  c  sA   † ñò9òò:ò<ò6Mò6ò*"òHò:.ò`õ.r   r³  c                   ót   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)Ú	TestTypesi�	  c                 óØ   • [        U[        R                  5      (       a-  UR                  n[        U[        R                  5      (       a  M-  [        U[        R                  5      (       + $ r&   )Ú
isinstancer   rL   rv  Ú	LabelType)r   Útys     r   Úhas_logical_equalityÚTestTypes.has_logical_equality‘	  sC   € Ü˜œRŸ^™^×,Ñ,Ø—‘ˆBô ˜œRŸ^™^×,Ó,ä˜b¤"§,¡,Ó/Ô/Ð/r   c                 óÌ  • [         R                  " 5       n[         R                  " 5       [         R                  " 5       [         R                  " [
        [        [        45      [         R                  " [
        [        45      [         R                  " [
        [        4SS9[         R                  " [        [        45      [
        [        [        [        [        [         R                  " [        S5      [         R                  " [        S5      [         R                  " [        S5      [         R                  " [
        [        45      [         R                  " [        [
        45      UR                  S5      UR                  S5      /nX" Vs/ s HJ  n[        U[         R                  [         R                  45      (       a  M4  [         R                  " U5      PML     sn-  nU$ s  snf )z#
A bunch of mutually unequal types
Trš   r¨   rª   ÚMyType1ÚMyType2)r   ÚContextrü  r‹  rI   rG  r    rJ   r‹  rK   r  rl  Úget_identified_typerû  rL   )r   Úcontextr$  Útps       r   Úassorted_typesÚTestTypes.assorted_types–	  s;  € ô
 —*’*“,ˆä�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   Æ	3G!Ç G!c                 óª   • U R                  5       nU H=  nU R                  U5      nU R                  U5      (       d  M,  U R                  X25        M?     g r&   )r  rA   rþ  r>   )r   r$  rý  Únewtys       r   rè   ÚTestTypes.test_pickling­	  sI   € Ø×#Ñ#Ó%ˆÛˆBØ×0Ñ0°Ó4ˆEØ×(Ñ(¨×,Ó,Ø× Ñ  Ö+ò r   c                 óØ  • U R                  5       n[        R                  " X5       H5  u  p#X#Ld  M  U R                  X#:H  X#45        U R	                  X#:g  X#45        M7     U H…  n[
        R
                  " U5      nU R                  U5      (       a,  U R	                  XE:H  XE45        U R                  XE:g  XE45        M[  U R                  XE:H  XE45        U R	                  XE:g  XE45        M‡     g r&   )r  Ú	itertoolsÚproductrÍ  rJ  Úcopyrþ  )r   r$  r±  r²  r  rò  s         r   Útest_comparisonsÚTestTypes.test_comparisons´	  sÈ   € Ø×#Ñ#Ó%ˆÜ×%Ò% eÖ3‰DˆAØŒzØ× Ñ  ¡¨!¨Ô0Ø—‘ ¡¨¨Ö/ñ 4ó
 ˆBÜ—I’I˜b“MˆEØ×(Ñ(¨×,Ñ,Ø—‘ ¡¨b¨[Ô9Ø× Ñ  ¡¨r¨kÖ:à× Ñ  ¡¨r¨kÔ:Ø—‘ ¡¨b¨[Ö9ò r   c           
      ó¶  ^ • [         R                  " 5       [         R                  " SS9[         R                  " [        5      [         R                  " [        SS9[         R                  " [        5      [         R                  " [        SS9S.nU 4S jnU 4S jnUR	                  5        HK  nT R                  5        H,  n[        U[         R                  5      (       a  M$  U" XE5        M.     U" XD5        MM     U" US   US   5        U" US   US   5        U" US   US	   5        U" US   US
   5        U" US   US   5        U" US   US   5        U" US   US	   5        U" US   US
   5        U" US   US   5        U" US   US	   5        U" US   US
   5        U" US   US   5        U" US	   US
   5        U" US	   US   5        U" US
   US   5        g )Nr   r³  )Úop_a0Úop_a1Útp_i1_a0Útp_i1_a1Útp_i8_a0Útp_i8_a1c                 ó®   >• TR                  X:H  X45        TR                  X:H  X45        TR                  X:g  X45        TR                  X:g  X45        g r&   )rJ  rÍ  ©Úptr1Úptr2r   s     €r   Ú	assert_eqÚ1TestTypes.test_ptr_comparisons.<locals>.assert_eqÕ	  sO   ø€ Ø�O‰O˜D™L¨4¨,Ô7Ø�O‰O˜D™L¨4¨,Ô7à×Ñ˜T™\¨D¨<Ô8Ø×Ñ˜T™\¨D¨<Õ8r   c                 ó®   >• TR                  X:H  X45        TR                  X:H  X45        TR                  X:g  X45        TR                  X:g  X45        g r&   )rÍ  rJ  r  s     €r   Ú	assert_neÚ1TestTypes.test_ptr_comparisons.<locals>.assert_neÜ	  sO   ø€ Ø×Ñ˜T™\¨D¨<Ô8Ø×Ñ˜T™\¨D¨<Ô8à�O‰O˜D™L¨4¨,Ô7Ø�O‰O˜D™L¨4¨,Õ7r   r  r  r  r  r  r  )r   rL   rG  r    Úvaluesr  rû  )r   Úptrsr  r   rb  rò  s   `     r   Útest_ptr_comparisonsÚTestTypes.test_ptr_comparisonsÄ	  sÌ  ø€ ô —^’^Ó%Ü—^’^¨aÑ0ÜŸš¤tÓ,ÜŸš¤t°qÑ9ÜŸš¤tÓ,ÜŸš¤t°qÑ9ñ
ˆõ	9õ	8ð —;‘;–=ˆCà×,Ñ,Ö.�Ü! %¬¯©×8Ó8Ù˜cÖ)ñ /ñ �cÖñ !ñ 	�$�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                 óH  • [         R                  " 5       n[         R                  " SS9nU R                  UR                  5        U R                  UR                  5        U R	                  [        U5      S5        U R	                  [        U5      S5        UR                  5       nUR                  5       nUR                  SS9nU R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R	                  [        U5      S5        U R	                  [        U5      S5        U R	                  [        U5      S5        [         R                  " S5      R                  5       n[         R                  " S5      R                  SS9nU R                  UR                  (       + 5        U R                  UR                  (       + 5        [        (       a7  U R	                  [        U5      S5        U R	                  [        U5      S	5        O6U R	                  [        U5      S5        U R	                  [        U5      S5        UR                  5       nUR                  5       n	UR                  SS9n
U R                  UR                  (       + 5        U R                  U	R                  (       + 5        U R                  U
R                  (       + 5        [        (       aR  U R	                  [        U5      S
5        U R	                  [        U	5      S5        U R	                  [        U
5      S5        g U R	                  [        U5      S5        U R	                  [        U	5      S5        U R	                  [        U
5      S5        g )Nr€   r³  rb  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   rL   rJ  Ú	is_opaquer>   r'   rÙ   r^  r   )r   rb  r  Úptr_ptrÚptr2_ptrÚ	ptr2_ptr3ÚtptrÚtptr2Útptr_ptrÚ	tptr2_ptrÚ
tptr2_ptr3s              r   Útest_pointersÚ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                 óz  • U R                  [        R                  " 5       R                  S5        U R                  [        R                  " SS9R                  S5        [        (       dj  U R                  [        R                  " [
        5      R                  S5        U R                  [        R                  " [
        S5      R                  S5        g U R                  [        R                  " [
        5      R                  S5        U R                  [        R                  " [
        S5      R                  S5        g )NÚp0r   r³  Úp1Úp0i1Úp1i1)r>   r   rL   Úintrinsic_namer   rG  rE   s    r   Útest_ptr_intrinsic_nameÚ!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                 ót  • U R                  [        [        5      S5        U R                  [        [        R                  " S5      5      S5        U R                  [        [
        5      S5        U R                  [        [        5      S5        U R                  [        [        R                  " 5       5      S5        U R                  [        [        R                  " [        S5      5      S5        U R                  [        [        R                  " [        [
        45      5      S	5        U R                  [        [        R                  " [        [
        [        45      5      S
5        U R                  [        [        R                  " [        SSS95      S5        U R                  [        [        R                  " [        [
        4SS95      S5        U R                  [        [        R                  " [        [
        [        4SS95      S5        [        (       d{  U R                  [        [        R                  " [        5      5      S5        U R                  [        [        R                  " [        R                  " [        5      5      5      S5        OzU R                  [        [        R                  " [        5      5      S5        U R                  [        [        R                  " [        R                  " [        5      5      5      S5        U R                  [        [        R                  " [        S5      5      S5        [        (       d‘  U R                  [        [        R                  " [        R                  " [        5      S5      5      S5        U R                  [        [        R                  " [        R                  " [        S5      5      5      S5        O�U R                  [        [        R                  " [        R                  " [        5      S5      5      S5        U R                  [        [        R                  " [        R                  " [        S5      5      5      S5        U R                  [        [        R                  " [        45      5      S5        U R                  [        [        R                  " [        [
        45      5      S5        [        (       dh  U R                  [        [        R                  " [        R                  " [        5      [        R                  " [        [        45      45      5      S5        OgU R                  [        [        R                  " [        R                  " [        5      [        R                  " [        [        45      45      5      S5        U R                  [        [        R                  " [        4SS95      S5        U R                  [        [        R                  " [        [
        4SS95      S5        [        R                  " 5       nUR!                  S5      nU R                  [        U5      S 5        UR!                  S!5      nU R                  [        U5      S"5        UR!                  S#5      nU R                  [        U5      S$5        g%)&z*
Test the string representation of types.
Úi1é   Úi29re  ÚdoubleÚvoidr†   zi1 ()z
i1 (float)zi1 (float, double)Trš   zi1 (...)zi1 (float, ...)zi1 (float, double, ...)rb  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)r>   r'   rG  r   r^  r‹  rK   r‹  rI   r   rL   rJ   r  rl  r    r  r  )r   r  ÚmytypeÚmytype1Úmytype2s        r   Útest_strÚTestTypes.test_strA
  sk  € ð 	×Ñœœ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           	      óÊ   • [        U R                  U R                  5       5       H;  nU R                  [	        U5      [	        [
        R
                  " U5      5      5        M=     g r&   )Úfilterrþ  r  r>   Úhashr  )r   Útyps     r   Ú	test_hashÚTestTypes.test_hash}
  sD   € Ü˜$×3Ñ3°T×5HÑ5HÓ5JÖKˆCØ×ÑœT #›Y¬¬T¯YªY°s«^Ó(<Ö=ò Lr   c                 ó´  ^ • U 4S jnU 4S jn[         R                  " [        5      n[        S5       H  nU" X4[        5        M     U" U5        [         R                  " [
        S5      n[        S5       H  nU" X4[
        5        M     U" U5        [         R                  " [        [         R                  " [
        [        45      45      nU" US[        5        U" US[         R                  " [
        [        45      5        T R                  [        5         UR                  [         R                  " [        S5      5        S S S 5        U" U5        [         R                  " 5       n[         R                  " US5      nUR                  [        [         R                  " [
        [        45      5        U" US[        5        U" US[         R                  " [
        [        45      5        T R                  [        5         UR                  [         R                  " [        S5      5        S S S 5        U" U5        g ! , (       d  f       Ný= f! , (       d  f       N(= f)	Nc                 ó|   >• U R                  [        R                  " [        U5      5      nTR	                  X25        g r&   )rf  r   rr  rJ   r>   )r  r¼  rf   rw   r   s       €r   Úcheck_constantÚ*TestTypes.test_gep.<locals>.check_constant‚
  s*   ø€ Ø—V‘VœBŸKšK¬¨qÓ1Ó2ˆFØ×Ñ˜VÕ.r   c                 ó¼   >• [         R                  " [        S5      nTR                  [        5         U R                  U5        S S S 5        g ! , (       d  f       g = f)Ng      ð?)r   rr  rK   r  r_  rf  )r  r—  r   s     €r   Úcheck_index_typeÚ,TestTypes.test_gep.<locals>.check_index_type†
  s8   ø€ Ü—K’K¤ SÓ)ˆEØ×"Ñ"¤9Õ-Ø—‘�u”÷ .×-Ö-ús   ²AÁ
Ar¨   r«   r   r   r€   rC  )r   rL   rK   Úranger  rG  rl  r    r  Ú
IndexErrorrf  rr  rJ   r  ÚIdentifiedStructTypeÚset_body)r   rQ  rT  r  r¼  r  s   `     r   rh  ÚTestTypes.test_gep�
  s�  ø€ õ	/õ	ô
 �^Š^œCÓ ˆÜ�q–ˆAÙ˜2¤#Ö&ñ á˜Ôä�\Š\œ$ Ó"ˆÜ�q–ˆAÙ˜2¤$Ö'ñ á˜Ôä×!Ò!¤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   Ä+H8Ç<+I	È8
IÉ	
Ic                 óp  ^ ^• [         R                  " S5      mU U4S jnU" [        S5        U" [        S5        U" [        S5        U" [
        R                  " [        S5      S5        U" [
        R                  " [        S5      S5        U" [
        R                  " [        [        [        45      S5        g )	Nú%e-m:e-i64:64-f80:128-n8:16:32:64-S128c                 óH   >• TR                  U R                  T5      U5        g r&   )r>   Úget_abi_size©r  rf   r   Útds     €€r   r¼  Ú&TestTypes.test_abi_size.<locals>.check¨
  s   ø€ Ø×Ñ˜RŸ_™_¨RÓ0°(Õ;r   r   rª   r   r¨   é   r	   ©
r1   Úcreate_target_datar    rJ   r  r   r  rl  rK   r‹  ©r   r¼  r`  s   ` @r   Útest_abi_sizeÚ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                 óp  ^ ^• [         R                  " S5      mU U4S jnU" [        S5        U" [        S5        U" [        S5        U" [
        R                  " [        S5      S5        U" [
        R                  " [        S5      S5        U" [
        R                  " [        [        [        45      S5        g )Nr\  c                 óH   >• TR                  U R                  T5      U5        g r&   )r*   Úget_abi_alignmentr_  s     €€r   r¼  Ú+TestTypes.test_abi_alignment.<locals>.check´
  s   ø€ Ø�M‰M˜"×.Ñ.¨rÓ2°HÕ=r   )r   r€   rª   )rª   )r   r¨   rc  re  s   ` @r   Útest_abi_alignmentÚ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                 ó  • [         R                  " 5       nUR                  S5      n[         R                  " US9nU R	                  UR
                  5        U R                  U5        [        U5      nUR                  [         R                  " S5      [         R                  " S5      [         R                  " 5       5        U R                  UR
                  5        U R                  U5        U R                  U[        U5      5        g )NrC  ©r  r
   r   )r   r  r  rD   rJ  r)  r4   r'   rY  r^  rq  rÍ  ÚassertNotEqual)r   r  rD  rF   Úoldstrs        r   Útest_identified_structÚ TestTypes.test_identified_struct½
  s°   € Ü—*’*“,ˆØ×,Ñ,¨XÓ6ˆÜ—’ 7Ñ+ˆØ�‰˜×(Ñ(Ô)Ø×Ñ˜VÔ$Ü�V“ˆØ�‰œŸ
š
 2›¬¯
ª
°2«¼¿º»ÔGØ×Ñ˜×)Ñ)Ô*Ø×Ñ˜VÔ$Ø×Ñ˜F¤C¨£KÕ0r   c                 ó„  • [         R                  " S5      n[        R                  " 5       nUR	                  SS5      n[        R
                  " US9nU R                  UR                  5        U R                  U5        [        U5      nUR                  [        R                  " S5      [        R                  " S5      [        R                  " 5       5        U R                  UR                  USU5      S5        U R                  UR                  5        U R                  U5        U R!                  U[        U5      5        g )	Nr\  rC  Tro  r	   r   r   r€   )r1   rd  r   r  r  rD   rJ  r)  r4   r'   rY  r^  rq  r>   Úget_element_offsetrÍ  rp  )r   r`  r  rD  rF   rq  s         r   Útest_identified_struct_packedÚ'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                 óò   • [         R                  " 5       nUR                  S5      n[         R                  " S5      /Ul        [
        R                  " S5      nU R                  UR                  X1S9S5        g )NrC  r
   r\  ro  rª   )	r   r  r  r^  Úelementsr1   rd  r>   r^  )r   r  rD  r`  s       r   Ú$test_target_data_non_default_contextÚ.TestTypes.test_target_data_non_default_context×
  s^   € Ü—*’*“,ˆØ×,Ñ,¨XÓ6ˆÜŸ:š: b›>Ð*ˆŒÜ×$Ò$Ð%LÓMˆØ×Ñ˜×,Ñ,¨RÐ,ÐAÀ1ÕEr   c                 ó�   • [         R                  " [         R                  " S5      S5      nU R                  [	        U5      S5        g )Nr
   r   z	<8 x i32>)r   r+  r^  r>   r'   )r   r0  s     r   Útest_vectorÚTestTypes.test_vectorÞ
  s.   € Ü—’œbŸjšj¨›n¨aÓ0ˆØ×Ñœ˜U› [Õ1r   r†   N)rˆ   r‰   rŠ   r‹   rþ  r  rè   r  r$  r2  r:  rG  rM  rh  rf  rl  rr  rv  rz  r}  r�   r†   r   r   rù  rù  �	  sY   † ò0ò
ò.,ò:ò 96òv6BòpMò::òx>ò"òH
9ò
;ò
1ò1òFõ2r   rù  c                 ó8   • [         R                  " [        U 5      $ r&   )r   rr  rJ   )r¼  s    r   Úc32r€  ã
  s   € Ü�;Š;”u˜aÓ Ð r   c                   óÈ   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"g!)"ÚTestConstantiç
  c                 ó  • [         R                  " [        S5      nU R                  [	        U5      S5        [         R                  " [
        S5      nU R                  [	        U5      S5        [         R                  " [
        S5      nU R                  [	        U5      S5        [         R                  " [
        S5      nU R                  [	        U5      S5        [         R                  " [
        S	5      nU R                  [	        U5      S
5        [         R                  " [
        [         R                  5      nU R                  [	        U5      S5        [         R                  " [
        S 5      nU R                  [	        U5      S5        g )Nrü   zi32 42r   zi1 1r   zi1 0Túi1 trueFzi1 falsezi1 undef)r   rr  rJ   r>   r'   rG  r&  ©r   r   s     r   Útest_integersÚ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                 ó¨  • [         R                  " [        S5      nU R                  [	        U5      S5        [         R                  " [        S5      nU R                  [	        U5      S5        [         R                  " [
        S5      nU R                  [	        U5      S5        [         R                  " [
        S5      nU R                  [	        U5      S5        [         R                  " [
        [         R                  5      nU R                  [	        U5      S5        [         R                  " [
        S 5      nU R                  [	        U5      S5        g )	Nç      ø?zfloat 0x3ff8000000000000g      ø¿zfloat 0xbff8000000000000zdouble 0x3ff8000000000000zdouble 0xbff8000000000000zdouble undefz
double 0.0)r   rr  r‹  r>   r'   rK   r&  r…  s     r   Ú
test_realsÚ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                 óº  • [         R                  " [         R                  " [        S5      [	        S5      [	        S5      [	        S5      45      nU R                  [        U5      S5        [         R                  " [         R                  " [        S5      [	        S5      [	        [         R                  5      45      nU R                  [        U5      S5        [         R                  R                  [	        S5      [	        S5      [	        [         R                  5      45      nU R                  [        U5      S5        U R                  [        5       n[         R                  R                  [	        S5      [         R                  " [        S	5      45        S S S 5        U R                  [        WR                  5      S
5        [         R                  " [         R                  " [        S5      [         R                  5      nU R                  [        U5      S5        [         R                  " [         R                  " [        S5      S 5      nU R                  [        U5      S5        [         R                  " [         R                  " [        S5      [        S5      5      nU R                  [        U5      S5        [         R                  " [         R                  " [        S5      [        S5      5      nU R                  [        U5      S5        [         R                  " [         R                  " [        S5      S[         R                  S45      nU R                  [        U5      S5        U R                  [        5         [         R                  " [         R                  " [        S5      S5        S S S 5        g ! , (       d  f       GN+= f! , (       d  f       g = f)Nr«   r¨   r¿  rª   z[3 x i32] [i32 5, i32 6, i32 4]r€   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] zeroinitializerr0  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¨   r¿  )r   rr  r  rJ   r€  r>   r'   r&  Úliteral_arrayr  r_  r‹  r  r    Ú	bytearrayrï   )r   r   r>  s      r   Útest_arraysÚ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:Î 1OÎ:
O	Ï
Oc                 ó,  • [         R                  " [         R                  " S5      S5      n/ SQn[         R                  " X5      nSR	                  SR                  [        SR                  U5      5      5      nU R                  [        U5      U5        g )Nr
   r   )r   r€   rª   r«   r   r¿  é	   é   z<8 x i32> <{}>z, zi32 {})	r   r+  r^  rr  rÓ   r   r   r>   r'   )r   r0  Úvalsr1  Úvec_reprs        r   r}  ÚTestConstant.test_vector%  sh   € Ü—’œbŸjšj¨›n¨aÓ0ˆÚ'ˆÜ�kŠk˜%Ó&ˆØ#×*Ñ*Ø�I‰I”c˜(Ÿ/™/¨4Ó0Ó1ó3ˆà×Ñœ˜S› 8Õ,r   c                 ó’   • [         R                  " [         R                  " S5      S 5      R                  nU R	                  US5        g )Nr
   r   )r   rr  r^  Úconstantr>   )r   r˜  s     r   Útest_non_nullable_intÚ"TestConstant.test_non_nullable_int-  s0   € Ü—;’;œrŸzšz¨"›~¨tÓ4×=Ñ=ˆØ×Ñ˜ 1Õ%r   c                 ó˜  • [         R                  " [        [        45      n[         R                  " [        U45      n[         R
                  " U[         R
                  " [         R                  " 5       S5      [         R
                  " [        S5      45      nU R                  [        U5      S5        [         R
                  R                  [         R
                  " [         R                  " 5       S5      [         R
                  " [        S5      45      nU R                  UR                  U5        U R                  [        U5      S5        [         R
                  R                  [         R
                  " [         R                  " 5       S5      [         R
                  " [        [         R                  5      45      nU R                  UR                  U5        U R                  [        U5      S5        [         R
                  " U[         R                  5      nU R                  [        U5      S5        [         R
                  " US 5      nU R                  [        U5      S5        [         R
                  " US5      nU R                  [        U5      S5        [         R
                  " USU45      nU R                  [        U5      S	5        [         R
                  " US
5      nU R                  [        U5      [        U5      5        U R                  [        5         [         R
                  " US5        S S S 5        g ! , (       d  f       g = f)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¨   r¿  )r   rl  r‹  rG  rJ   rr  rq  r>   r'   Úliteral_structr1  r&  r  rï   )r   Úst1Úst2r   Úc1Úc2Úc3s          r   Útest_structsÚ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;Ì;
M	c                 óÆ   • [         R                  " S5      n[         R                  " [         R                  " X/5      [         R                  5      nU R                  U5        g )Nr   )r   r^  rr  rl  r&  rA   )r   rG  Ústs      r   Ú&test_undefined_literal_struct_picklingÚ3TestConstant.test_undefined_literal_struct_picklingS  s>   € Ü�ZŠZ˜‹]ˆÜ�[Š[œ×-Ò-¨r¨hÓ7¼¿¹ÓFˆØ×$Ñ$ RÕ(r   c                 óÚ  • [        S5      nU R                  U[        R                  5        U R	                  [        U5      S5        [        S5      nU R                  U[        R                  5        U R	                  [        U5      S5        [        R                  " [        S5      nU" [        S5      [        S5      [        S5      /5      nU R	                  [        U5      S	5        U" / S
Q5      nU R	                  [        U5      S	5        U" S5      nU R	                  [        U5      S5        U R                  [        5         U" / SQ5        SSS5        [        R                  " [        [        45      n[        R                  " [        U45      nU" S5      nU R	                  [        U5      S5        U" S5      nU R	                  [        U5      S5        g! , (       d  f       N‘= f)z0
Instantiating a type should create a constant.
rü   zi8 42Tr„  r«   rª   r¨   r¿  z[3 x i32] [i32 4, i32 5, i32 6]r   Nz[3 x i32] zeroinitializer)rª   r¨   r¿  r“  r�  rœ  rŸ  rž  )r    rµ  r   rr  r>   r'   rG  r  rJ   r€  r  rï   rl  r‹  )r   r   Úatr¢  r£  s        r   Útest_type_instantiatonÚ#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   • [        S5      nU R                  [        U5      S5        g)z(
Constants should have a useful repr().
rü   z!<ir.Constant type='i32' value=42>N)rJ   r>   r¦  r…  s     r   rß  ÚTestConstant.test_reprv  s"   € ô �"‹IˆØ×Ñœ˜a›Ð"EÕFr   c                 óè  • [         R                  " [         R                  " [         R                  " S5      S5      [	        [        S5      5      5      nU R                  5       n[         R                  " X!R                  S5      nSUl	        Xl
        [        R                  " [        U5      5      n[        R                  " [        U5      5      nU R                  [        U5      [        U5      5        g )Nr   é   Ú
myconstantT)r   rr  r  r^  rŽ  rV  rF   rp  r1  r¾  rs  r1   r2   r'   r>   )r   r   rì  ÚgvÚparsedÚreparseds         r   Útest_encoding_problemÚ"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           	      ól  • U R                  5       n[        R                  " [        [        45      n[        R
                  " XS5      nUR                  S Vs/ s H  n[        R                  " [        U5      PM      sn5      n[        (       d  U R                  [        U5      S5        OU R                  [        U5      S5        U R                  UR                  [        R                  " [        5      5        [        R                  " US 5      nU R                  [        5         UR                  [        R                  " [        S5      /5        S S S 5        [        R                  " UR!                  5       S 5      nUR                  [        R                  " [        S5      /5      n[        (       d  U R                  [        U5      S5        OU R                  [        U5      S5        U R                  UR                  [        R                  " [        5      5        g s  snf ! , (       d  f       NÚ= f)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))rF   r   rl  r‹  rG  rp  rf  rr  rJ   r   r>   r'   r1  rL   r  r_  rÙ   )	r   rì  r  r¶  r€  r   ÚconstÚ	const_ptrr¥  s	            r   rh  Ú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%È%
H3c           	      ó‚  • U R                  5       n[        R                  " [        [        45      nSn[        R
                  " XSUS9nU R                  UR                  U5        UR                  S Vs/ s H  n[        R                  " [        U5      PM      sn5      nU R                  UR                  R                  U5        [        (       d  U R                  [        U5      S5        OU R                  [        U5      S5        U R                  UR                  [        R                  " [        US95        g s  snf )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))rF   r   rl  r‹  rG  rp  r>   r´  rf  rr  rJ   r1  r   r'   rL   )r   rì  r  r´  r¶  r€  r   s          r   Útest_gep_addrspace_globalvarÚ)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   Á4%D<c                 ó–   • [         R                  " [        S5      R                  [        5      nU R                  [        U5      S5        g )Nr   ztrunc (i64 1 to i32))r   rr  r  r‡  rJ   r>   r'   r…  s     r   Ú
test_truncÚTestConstant.test_truncº  s2   € Ü�KŠKœ˜qÓ!×'Ñ'¬Ó.ˆØ×Ñœ˜Q›Ð!7Õ8r   c                 ó–   • [         R                  " [        S5      R                  [        5      nU R                  [        U5      S5        g )Nr   zzext (i32 1 to i64))r   rr  rJ   rˆ  r  r>   r'   r…  s     r   Ú	test_zextÚTestConstant.test_zext¾  s2   € Ü�KŠKœ˜qÓ!×&Ñ&¤uÓ-ˆØ×Ñœ˜Q›Ð!6Õ7r   c                 ó–   • [         R                  " [        S5      R                  [        5      nU R                  [        U5      S5        g )Nr7   zsext (i32 -1 to i64))r   rr  rJ   r‰  r  r>   r'   r…  s     r   Ú	test_sextÚTestConstant.test_sextÂ  s2   € Ü�KŠKœ˜rÓ"×'Ñ'¬Ó.ˆØ×Ñœ˜Q›Ð!7Õ8r   c                 ó–   • [         R                  " [        S5      R                  [        5      nU R                  [        U5      S5        g )Nr   z*fptrunc (float 0x3ff0000000000000 to half))r   rr  r‹  rŠ  râ  r>   r'   r…  s     r   Útest_fptruncÚTestConstant.test_fptruncÆ  s2   € Ü�KŠKœ˜QÓ×'Ñ'¬Ó,ˆØ×Ñœ˜Q›Ð!MÕNr   c                 ó–   • [         R                  " [        S5      R                  [        5      nU R                  [        U5      S5        g )Nr   z*fpext (float 0x3ff0000000000000 to double))r   rr  r‹  rŒ  rK   r>   r'   r…  s     r   Ú
test_fpextÚTestConstant.test_fpextÊ  s2   € Ü�KŠKœ˜QÓ×%Ñ%¤cÓ*ˆØ×Ñœ˜Q›Ð!MÕNr   c                 ó&  • U R                  5       n[        R                  " U[        S5      nUR	                  [
        R                  5       5      n[        (       d  U R                  [        U5      S5        g U R                  [        U5      S5        g )Nrµ  z"bitcast (ptr @"myconstant" to ptr)z$bitcast (i32* @"myconstant" to i64*))
rF   r   rp  rJ   rm  r  rÙ   r   r>   r'   )r   rì  r¶  r   s       r   Útest_bitcastÚTestConstant.test_bitcastÎ  sh   € Ø�K‰K‹MˆÜ×Ò˜q¤%¨Ó6ˆØ�J‰J”u×'Ñ'Ó)Ó*ˆß.Ò.Ø×ÑœS ›VÐ%IÕJà×ÑœS ›VÐ%KÕLr   c                 ó–   • [         R                  " [        S5      R                  [        5      nU R                  [        U5      S5        g )Nr   z(fptoui (float 0x3ff0000000000000 to i32))r   rr  r‹  r�  rJ   r>   r'   r…  s     r   Útest_fptouiÚTestConstant.test_fptoui×  ó2   € Ü�KŠKœ˜QÓ×&Ñ&¤uÓ-ˆØ×Ñœ˜Q›Ð!KÕLr   c                 ó–   • [         R                  " [        S5      R                  [        5      nU R                  [        U5      S5        g )Nr   zuitofp (i32 1 to float))r   rr  rJ   r�  r‹  r>   r'   r…  s     r   Útest_uitofpÚTestConstant.test_uitofpÛ  ó2   € Ü�KŠKœ˜qÓ!×(Ñ(¬Ó-ˆØ×Ñœ˜Q›Ð!:Õ;r   c                 ó–   • [         R                  " [        S5      R                  [        5      nU R                  [        U5      S5        g )Nr   z(fptosi (float 0x3ff0000000000000 to i32))r   rr  r‹  rŽ  rJ   r>   r'   r…  s     r   Útest_fptosiÚTestConstant.test_fptosiß  rØ  r   c                 ó–   • [         R                  " [        S5      R                  [        5      nU R                  [        U5      S5        g )Nr   zsitofp (i32 1 to float))r   rr  rJ   r�  r‹  r>   r'   r…  s     r   Útest_sitofpÚTestConstant.test_sitofpã  rÜ  r   c                 óÎ  • [         R                  " [        R                  5       S 5      n[         R                  " [        S5      nUR                  [        5      nU R                  [        UR
                  [        5        U R                  [        UR
                  [        5        [        (       d  U R                  [        U5      S5        g U R                  [        U5      S5        g )Nr   zptrtoint (ptr null to i32)zptrtoint (i64* null to i32))r   rr  r  rÙ   rJ   r‘  r  r_  r‹  r   r>   r'   )r   rb  r¾  r   s       r   Útest_ptrtoint_1Ú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                 ó\  • U R                  5       n[        R                  " U[        S5      nUR	                  [
        5      n[        (       dP  U R                  [        U5      S5        U R                  [        SUR                  [
        R                  5       5        OOU R                  [        U5      S5        U R                  [        SUR                  [
        R                  5       5        [        R                  " [        S5      nU R                  [        SUR                  [
        5        g )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')rF   r   rp  rJ   r‘  r  r   r>   r'   rî   r_  rÙ   rr  )r   rì  r¶  r   r¥  s        r   Útest_ptrtoint_2Ú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                 óê  • [         R                  " [        S5      n[         R                  " [        S5      nUR	                  [
        R                  5       5      nU R                  [        UR                  [
        5        U R                  [        UR                  [
        R                  5       5        [        (       d  U R                  [        U5      S5        g U R                  [        U5      S5        g )Nr   g…ëQ¸	@zinttoptr (i32 1 to ptr)zinttoptr (i32 1 to i64*))r   rr  rJ   r‹  r’  r  rÙ   r  r_  r   r>   r'   )r   r¾  Úpir   s       r   Útest_inttoptrÚTestConstant.test_inttoptr  sž   € Ü�kŠkœ% Ó#ˆÜ�[Š[œ˜dÓ#ˆØ�L‰Lœ×)Ñ)Ó+Ó,ˆà×Ñœ) S§\¡\´5Ô9Ø×Ñœ) R§[¡[´%×2BÑ2BÓ2DÔEß.Ò.Ø×ÑœS ›VÐ%>Õ?à×ÑœS ›VÐ%?Õ@r   c                 óŒ   • [         R                  " [        S5      nU R                  [	        UR                  5       5      S5        g )Nr   zsub (i32 0, i32 1))r   rr  rJ   r>   r'   r  ©r   r¾  s     r   Útest_negÚTestConstant.test_neg  s-   € Ü�kŠkœ% Ó#ˆØ×Ñœ˜SŸW™W›Y›Ð)=Õ>r   c                 óŒ   • [         R                  " [        S5      nU R                  [	        UR                  5       5      S5        g )Nr   zxor (i32 1, i32 -1))r   rr  rJ   r>   r'   r   rî  s     r   Útest_notÚTestConstant.test_not  s-   € Ü�kŠkœ% Ó#ˆØ×Ñœ˜SŸX™X›Z›Ð*?Õ@r   c                 óŒ   • [         R                  " [        S5      nU R                  [	        UR                  5       5      S5        g )Nr   zfneg (float 0x3ff0000000000000))r   rr  r‹  r>   r'   r!  rî  s     r   Ú	test_fnegÚTestConstant.test_fneg#  s-   € Ü�kŠkœ#˜qÓ!ˆØ×Ñœ˜SŸX™X›Z›Ð*KÕLr   c                 óz  • [         R                  " [        S5      n[         R                  " [        S5      nUR                  SUR                  SUR
                  SUR                  SUR                  SUR                  SUR                  S	UR                  S
UR                  SUR                  SUR                  SUR                  SUR                  S0nUR!                  5        H)  u  pEU R#                  [%        U" U5      5      US-   5        M+     SSSSSSS.nUR!                  5        H8  u  pg[%        UR'                  Xb5      5      nSU-   S-   n	U R#                  X‰5        M:     SSSSSSS.nUR!                  5        H8  u  pg[%        UR)                  Xb5      5      nSU-   S-   n	U R#                  X‰5        M:     g )Nr   r€   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.  r1  r2  r/  r0  zicmp ÚsgtÚsgeÚsltÚsle)r   rr  rJ   rÿ  r  r   rž   r   rÚ  r÷  rÙ  rù  rú  rü  rý  rþ  Úitemsr>   r'   r5  r6  )
r   r¾  rã  Úoraclerç   ÚiropÚcoprœ  rw   rf   s
             r   Útest_int_binopsÚ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Ö.ñ (ð  DØ E°¸UñDˆàŸ™ž‰IˆCÜ˜Ÿ™¨Ó2Ó3ˆFØ ‘~Ð(9Ñ9ˆHØ×Ñ˜VÖ.ò (r   c           
      óÀ  • [         R                  " [        S5      n[         R                  " [        S5      nUR                  SUR                  SUR
                  SUR                  SUR                  S0nUR                  5        H,  u  pE[        U" U5      5      nUS-   nU R                  Xg5        M.     S	S
SSSSS.nUR                  5        H8  u  p‰[        UR                  X‚5      5      nSU	-   S-   nU R                  Xg5        M:     SSSSSSS.nUR                  5        H8  u  p‰[        UR                  X‚5      5      nSU	-   S-   nU R                  Xg5        M:     g )Nr   r€   rô  rõ  rö  rø  rû  z5 (float 0x3ff0000000000000, float 0x4000000000000000)Úoeqr¾  ÚogtÚoger>  Úoler   zfcmp ÚueqÚunerü  rý  rþ  rÿ  )r   rr  r‹  rô  rõ  rö  rø  rû  r  r'   r>   rB  rC  )
r   r¾  rã  r  rç   r  rw   rf   r  rœ  s
             r   Útest_flt_binopsÚTestConstant.test_flt_binopsC  sQ  € Ü�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Ö.ñ	 'ð  U°¸eØ Eñ+ˆàŸ™ž‰IˆCÜ˜×)Ñ)¨#Ó3Ó4ˆFØ ‘~ð *Fñ GˆHà×Ñ˜VÖ.ñ	 (ð  U°¸eØ Eñ+ˆàŸ™ž‰IˆCÜ˜×+Ñ+¨CÓ5Ó6ˆFØ ‘~ð *Fñ GˆHà×Ñ˜VÖ.ò	 (r   r†   N)#rˆ   r‰   rŠ   r‹   r†  rŠ  r�  r}  r™  r§  r«  r¯  rß  r¹  rh  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‚  ç
  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                   ó   • \ rS rSrS rSrg)ÚTestTransformsib  c                 ó²  • [         R                  " 5       n[         R                  " U[         R                  " [         R                  " 5       S5      S5      n[         R                  " U[         R                  " [         R                  " 5       S5      S5      n[         R
                  " 5       nUR                  UR                  5       5        UR                  US5      nU R                  UR                  U5        [         R                  " XU5      nU R                  XV5        U R                  UR                  U5        U R                  UR                  U5        g )Nr†   r  r  )r   rD   rM   rI   r‹  rÑ   r-  rS   r�  r>   ÚcalleeÚreplace_all_callsr*   rp  )r   r,   r  r  rÔ   r�  Úmodifieds          r   Útest_call_transformÚ"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Ô*Ü×'Ò'¨°#Ó6ˆØ�‰�dÔ%Ø×Ñ˜DŸK™K¨Ô-Ø×Ñ˜Ÿ™ cÕ*r   r†   N)rˆ   r‰   rŠ   r‹   r  r�   r†   r   r   r  r  b  s   † õ+r   r  c                   ó   • \ rS rSrS rSrg)ÚTestSingletoniq  c                 óÂ  • U R                  [        R                  [        R                  R	                  5       5        U R                  [        R                  [
        R
                  " [        R                  5      5        U R                  [        R                  [
        R                  " [        R                  5      5        U R                  [        R                  5        g r&   )r<   r   r&  r"  Ú
_Undefinedr  ÚdeepcopyrA   rE   s    r   Útest_undefinedÚ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   r†   N)rˆ   r‰   rŠ   r‹   r!  r�   r†   r   r   r  r  q  s   † õ3r   r  Ú__main__)(rŒ   r  r  r9   r   r^   Úunittestr   r   Úllvmliter   r   r1   r   r^  rG  r    rV  rJ   r  ÚHalfTyperâ  rq  r‹  r¤  rK   r   r�   rù   r   rÇ  râ  r³  rù  r€  r‚  r  r  rˆ   Úmainr†   r   r   Ú<module>r(     sJ  ðñó Û Û Û 	Û Û å Ý Ý $Ý 4ð 
‡z‚z�!ƒ}€Ø	‡z‚z�!ƒ}€Ø
�
Š
�2‹€Ø
�
Š
�2‹€Ø
�
Š
�2‹€Ø‡k‚kƒm€Ø‡l‚lƒn€Ø‡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ÓØ‡M‚M…Oð r   