§
    ‚Ûg œ ã                   óÀ  — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddl	mZ  e
j        d¦  «        Z e
j        d¦  «        Z e
j        d¦  «        Z e
j        d	¦  «        Z e
j        d
¦  «        Z e
j        ¦   «         Z e
j        ¦   «         Z e
j        ¦   «         Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z d„ Z! G d„ de¦  «        Z" G d„ de¦  «        Z# G d „ d!e¦  «        Z$e%d"k    r ej&        ¦   «          dS dS )#z
IR Construction Tests
é    Né   )ÚTestCase)Úir)Úbindingé   é   é    é@   c                   óv   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zdd	„Z	dd„Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestBasez!
    Utilities for IR tests.
    c                 óª   — d„ }d                      t          ||¦  «        ¦  «        }t          j        dd|¦  «        }|                      ||¦  «         dS )zr
        Assert *pattern* is in *text*, ignoring any whitespace differences
        (including newlines).
        c                 ó`   — |                       ¦   «         s|                      ¦   «         sd| z   S | S )Nú\)ÚisalnumÚisspace)Úcs    úL/granary/edev/quantum/lib/python3.11/site-packages/llvmlite/tests/test_ir.pyÚescapez%TestBase.assertInText.<locals>.escape&   s/   € Ø—9’9‘;”;ð   q§y¢y¡{¤{ð  Ø˜a‘x�ØˆHó    Ú z\s+z\\s*N)ÚjoinÚmapÚreÚsubÚassertRegex)ÚselfÚpatternÚtextr   Úregexs        r   ÚassertInTextzTestBase.assertInText    s]   € ð	ð 	ð 	ð
 —'’'�#˜f gÑ.Ô.Ñ/Ô/ˆÝ”�v˜w¨Ñ0Ô0ˆØ×Ò˜˜uÑ%Ô%Ð%Ð%Ð%r   c                 óˆ   — d„ t          |¦  «                             ¦   «         D ¦   «         }|                      ||¦  «         d S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Ústrip)Ú.0Úlines     r   ú
<listcomp>z+TestBase.assert_ir_line.<locals>.<listcomp>0   s    € Ð@Ð@Ð@ $�—’‘”Ð@Ð@Ð@r   )ÚstrÚ
splitlinesÚassertIn)r   r&   ÚmodÚliness       r   Úassert_ir_linezTestBase.assert_ir_line/   sA   € Ø@Ð@­#¨c©(¬(×*=Ò*=Ñ*?Ô*?Ð@Ñ@Ô@ˆØ�Š�d˜EÑ"Ô"Ð"Ð"Ð"r   c                 óH   — t          j        t          |¦  «        ¦  «         d S ©N)ÚllvmÚparse_assemblyr(   ©r   r+   s     r   Úassert_valid_irzTestBase.assert_valid_ir3   s   € ÝÔ�C ™HœHÑ%Ô%Ð%Ð%Ð%r   c                 óö   — t          j        t          j        |d¬¦  «        ¦  «        }|                      |j        |j        ¦  «         |                      t          |¦  «        t          |¦  «        ¦  «         |S )zAssert that the IR object pickles and unpickles correctly.
        The IR string is equal and that their type is equal
        éÿÿÿÿ)Úprotocol)ÚpickleÚloadsÚdumpsÚassertIsÚ	__class__ÚassertEqualr(   )r   ÚirobjectÚ	newobjects      r   Úassert_pickle_correctlyz TestBase.assert_pickle_correctly6   sd   € õ ”L¥¤¨hÀÐ!DÑ!DÔ!DÑEÔEˆ	Ø�Š�hÔ(¨)Ô*=Ñ>Ô>Ð>Ø×Ò�˜X™œ­¨I©¬Ñ7Ô7Ð7ØÐr   c                 ó(   — t          j        ¦   «         S r/   )r   ÚModule©r   s    r   ÚmodulezTestBase.module?   s   € ÝŒy‰{Œ{Ðr   NÚmy_funcc           	      óâ   — |p|                       ¦   «         }t          j        t          t          t          t          t          j        t          ¦  «        f¦  «        }t          j        |||¦  «        S r/   )rC   r   ÚFunctionTypeÚint32ÚdblÚPointerTypeÚFunction)r   rC   ÚnameÚfntys       r   ÚfunctionzTestBase.functionB   sS   € ØÐ(˜4Ÿ;š;™=œ=ˆÝŒ�u¥u­eµSÝ')¤~µeÑ'<Ô'<ð'>ñ ?ô ?ˆåŒ{˜6 4¨Ñ.Ô.Ð.r   r   c                 óX   — |p|                       ¦   «         }|                     |¦  «        S r/   )rM   Úappend_basic_block)r   ÚfuncrK   s      r   ÚblockzTestBase.blockH   s(   € ØÐ&�t—}’}‘”ˆØ×&Ò& tÑ,Ô,Ð,r   c                 óZ   — g }|                      |¦  «         d                     |¦  «        S ©Nr   )Údescrr   )r   ÚthingÚbufs      r   rT   zTestBase.descrL   s)   € ØˆØ�Š�CÑÔÐØ�wŠw�s‰|Œ|Ðr   c                 óZ   — t          j        |¦  «        }|                     dd¦  «        }|S )Nz
    z
  )ÚtextwrapÚdedentÚreplace)r   Úasms     r   Ú_normalize_asmzTestBase._normalize_asmQ   s)   € ÝŒo˜cÑ"Ô"ˆà�kŠk˜( FÑ+Ô+ˆØˆ
r   c                 ó\   — |                       |¦  «        }|                      ||¦  «         d S r/   )r\   r   ©r   rT   r[   Úexpecteds       r   Úcheck_descr_regexzTestBase.check_descr_regexW   ó1   € Ø×&Ò& sÑ+Ô+ˆØ×Ò˜ Ñ)Ô)Ð)Ð)Ð)r   c                 ó\   — |                       |¦  «        }|                      ||¦  «         d S r/   )r\   r<   r^   s       r   Úcheck_descrzTestBase.check_descr[   ra   r   c                 óX   — |                       |                      |¦  «        |¦  «         d S r/   )rc   rT   ©r   rQ   r[   s      r   Úcheck_blockzTestBase.check_block_   s*   € Ø×Ò˜Ÿš EÑ*Ô*¨CÑ0Ô0Ð0Ð0Ð0r   c                 óX   — |                       |                      |¦  «        |¦  «         d S r/   )r`   rT   re   s      r   Úcheck_block_regexzTestBase.check_block_regexb   s*   € Ø×Ò˜tŸzšz¨%Ñ0Ô0°#Ñ6Ô6Ð6Ð6Ð6r   c                 óÌ   — |                       |¦  «        }|                     ¦   «         }|                      |                     ¦   «         |                     ¦   «         ¦  «         d S r/   )r\   Ú_stringify_bodyr<   r$   ©r   rC   r[   r_   Úactuals        r   Úcheck_module_bodyzTestBase.check_module_bodye   sT   € Ø×&Ò& sÑ+Ô+ˆØ×'Ò'Ñ)Ô)ˆØ×Ò˜Ÿš™œ¨¯ªÑ)9Ô)9Ñ:Ô:Ð:Ð:Ð:r   c                 óÌ   — |                       |¦  «        }|                     ¦   «         }|                      |                     ¦   «         |                     ¦   «         ¦  «         dS )z6
        Check module metadata against *asm*.
        N)r\   Ú_stringify_metadatar<   r$   rk   s        r   Úcheck_metadatazTestBase.check_metadataj   sV   € ð ×&Ò& sÑ+Ô+ˆØ×+Ò+Ñ-Ô-ˆØ×Ò˜Ÿš™œ¨¯ªÑ)9Ô)9Ñ:Ô:Ð:Ð:Ð:r   c                 ó6  — |                       |¦  «        }|                      |¦  «        }|                     d¦  «        d                              d¦  «        d         }|                      |                     ¦   «         |                     ¦   «         ¦  «         d S )NÚ{é   Ú}r   )r\   rT   Ú	partitionÚ
rpartitionr<   r$   )r   rP   r[   r_   rl   s        r   Úcheck_func_bodyzTestBase.check_func_bodyr   s   € Ø×&Ò& sÑ+Ô+ˆØ—’˜DÑ!Ô!ˆØ×!Ò! #Ñ&Ô& qÔ)×4Ò4°SÑ9Ô9¸!Ô<ˆØ×Ò˜Ÿš™œ¨¯ªÑ)9Ô)9Ñ:Ô:Ð:Ð:Ð:r   )NrD   rS   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r-   r3   r?   rC   rM   rQ   rT   r\   r`   rc   rf   rh   rm   rp   rw   r#   r   r   r   r      s  € € € € € ðð ð&ð &ð &ð#ð #ð #ð&ð &ð &ðð ð ðð ð ð/ð /ð /ð /ð-ð -ð -ð -ðð ð ð
ð ð ð*ð *ð *ð*ð *ð *ð1ð 1ð 1ð7ð 7ð 7ð;ð ;ð ;ð
;ð ;ð ;ð;ð ;ð ;ð ;ð ;r   r   c                   ól   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestFunctionz>i32 @"my_func"(i32 %".1", i32 %".2", double %".3", i32* %".4")c                 óÜ   — |                       ¦   «         }|                      |¦  «                             ¦   «         }|                      |                     ¦   «         d| j        z  ¦  «         d S )Nz
declare %s)rM   rT   r$   r<   Úproto©r   rP   r[   s      r   Útest_declarezTestFunction.test_declare}   sW   € à�}Š}‰ŒˆØ�jŠj˜ÑÔ×$Ò$Ñ&Ô&ˆØ×Ò˜Ÿš™œ l°T´ZÑ&?Ñ@Ô@Ð@Ð@Ð@r   c                 ó  — |                       ¦   «         }|j                             d¦  «         |j                             d¦  «         d|j        _        t	          j        t          dd¬¦  «        }t	          j        |                      ¦   «         |d¦  «        }||j        _	        |  
                    |¦  «                             ¦   «         }|                      |d| j        z  ¦  «         |                      |¦  «         d S )	NÚoptsizeÚalwaysinliner   r#   T©Úvar_argÚ__gxx_personality_v0z\declare %s alwaysinline optsize alignstack(16) personality i8 (...)* @"__gxx_personality_v0")rM   Ú
attributesÚaddÚ
alignstackr   rF   Úint8rJ   rC   ÚpersonalityrT   r$   r<   r   r?   )r   rP   Útp_persÚpersr[   s        r   Útest_declare_attributesz$TestFunction.test_declare_attributesƒ   sä   € à�}Š}‰ŒˆØŒ×Ò˜IÑ&Ô&Ð&ØŒ×Ò˜NÑ+Ô+Ð+Ø%'ˆŒÔ"Ý”/¥$¨°DÐ9Ñ9Ô9ˆÝŒ{˜4Ÿ;š;™=œ=¨'Ð3IÑJÔJˆØ&*ˆŒÔ#Ø�jŠj˜ÑÔ×$Ò$Ñ&Ô&ˆØ×Ò˜ðLàœñ$ñ	%ô 	%ð 	%ð
 	×$Ò$ TÑ*Ô*Ð*Ð*Ð*r   c                 ó  — |                       ¦   «         }|j        d                              d¦  «         d|j        d         j        _        d|j        d         j        _        d|j        d         j        _        |j        d                              d¦  «         |j                             d	¦  «         |                      |¦  «         	                    ¦   «         }|  
                    |d
¦  «         |                      |¦  «         d S )Nr   Úzeroexté   r   é
   é   é   ÚnonnullÚnoaliasz•declare noalias i32 @"my_func"(i32 zeroext %".1", i32 dereferenceable(5) dereferenceable_or_null(10) %".2", double %".3", i32* nonnull align 4 %".4"))rM   ÚargsÚadd_attributerˆ   ÚdereferenceableÚdereferenceable_or_nullÚalignÚreturn_valuerT   r$   r<   r?   r€   s      r   Útest_function_attributesz%TestFunction.test_function_attributes”   sæ   € à�}Š}‰ŒˆØŒ	�!Œ×"Ò" 9Ñ-Ô-Ð-Ø23ˆŒ	�!ŒÔÔ/Ø:<ˆŒ	�!ŒÔÔ7Ø()ˆŒ	�!ŒÔÔ%ØŒ	�!Œ×"Ò" 9Ñ-Ô-Ð-ØÔ×'Ò'¨	Ñ2Ô2Ð2Ø�jŠj˜ÑÔ×$Ò$Ñ&Ô&ˆØ×Ò˜ð uñ	ô 	ð 	ð 	×$Ò$ TÑ*Ô*Ð*Ð*Ð*r   c                 ó`  — |                       ¦   «         }|                      |¦  «        }|                     d|                     g ¦  «        ¦  «         |                      |¦  «                             ¦   «         }|                      |d| j        › d�¦  «         |                      |¦  «         d S )NÚdbgúdeclare z !dbg !0)	rC   rM   Úset_metadataÚadd_metadatarT   r$   r<   r   r?   ©r   rC   rP   r[   s       r   Útest_function_metadataz#TestFunction.test_function_metadata¤   s§   € à—’‘”ˆØ�}Š}˜VÑ$Ô$ˆØ×Ò˜% ×!4Ò!4°RÑ!8Ô!8Ñ9Ô9Ð9Ø�jŠj˜ÑÔ×$Ò$Ñ&Ô&ˆØ×Ò˜Ø8 D¤JÐ8Ð8Ð8ñ	ô 	ð 	ð 	×$Ò$ TÑ*Ô*Ð*Ð*Ð*r   c                 óò   — |                       ¦   «         }d|_        |                      |¦  «                             ¦   «         }|                      |d| j        › d�¦  «         |                      |¦  «         d S )NÚ	a_sectionr¡   z section "a_section")rM   ÚsectionrT   r$   r<   r   r?   r€   s      r   Útest_function_sectionz"TestFunction.test_function_section°   sy   € à�}Š}‰ŒˆØ"ˆŒØ�jŠj˜ÑÔ×$Ò$Ñ&Ô&ˆØ×Ò˜ØD D¤JÐDÐDÐDñ	ô 	ð 	ð 	×$Ò$ TÑ*Ô*Ð*Ð*Ð*r   c                 ón  — |                       ¦   «         }|                      |¦  «        }d|_        |                     d|                     g ¦  «        ¦  «         |                      |¦  «                             ¦   «         }|                      |d| j        › d�¦  «         |  	                    |¦  «         d S )Nr§   r    r¡   z section "a_section" !dbg !0)
rC   rM   r¨   r¢   r£   rT   r$   r<   r   r?   r¤   s       r   Útest_function_section_metaz'TestFunction.test_function_section_meta»   s®   € à—’‘”ˆØ�}Š}˜VÑ$Ô$ˆØ"ˆŒØ×Ò˜% ×!4Ò!4°RÑ!8Ô!8Ñ9Ô9Ð9Ø�jŠj˜ÑÔ×$Ò$Ñ&Ô&ˆØ×Ò˜ØL D¤JÐLÐLÐLñ	ô 	ð 	ð 	×$Ò$ TÑ*Ô*Ð*Ð*Ð*r   c                 ó”  — |                       ¦   «         }|                      |¦  «        }|j                             d¦  «         |                     d|                     g ¦  «        ¦  «         |                      |¦  «                             ¦   «         }|                      |d| j	        › d�¦  «         |  
                    |¦  «         d S )Nr„   r    r¡   z alwaysinline !dbg !0)rC   rM   rˆ   r‰   r¢   r£   rT   r$   r<   r   r?   r¤   s       r   Útest_function_attr_metaz$TestFunction.test_function_attr_metaÈ   s½   € à—’‘”ˆØ�}Š}˜VÑ$Ô$ˆØŒ×Ò˜NÑ+Ô+Ð+Ø×Ò˜% ×!4Ò!4°RÑ!8Ô!8Ñ9Ô9Ð9Ø�jŠj˜ÑÔ×$Ò$Ñ&Ô&ˆØ×Ò˜ØE D¤JÐEÐEÐEñ	ô 	ð 	ð 	×$Ò$ TÑ*Ô*Ð*Ð*Ð*r   c                 ó&  — |                       ¦   «         }|j                             d¦  «         d|_        |                      |¦  «                             ¦   «         }|                      |d| j        › d�¦  «         |                      |¦  «         d S )Nrƒ   r§   r¡   z optsize section "a_section")	rM   rˆ   r‰   r¨   rT   r$   r<   r   r?   r€   s      r   Útest_function_attr_sectionz'TestFunction.test_function_attr_sectionÕ   s’   € à�}Š}‰ŒˆØŒ×Ò˜IÑ&Ô&Ð&Ø"ˆŒØ�jŠj˜ÑÔ×$Ò$Ñ&Ô&ˆØ×Ò˜ØL D¤JÐLÐLÐLñ	Nô 	Nð 	Nð 	×$Ò$ TÑ*Ô*Ð*Ð*Ð*r   c                 ó¢  — |                       ¦   «         }|                      |¦  «        }|j                             d¦  «         d|_        |                     d|                     g ¦  «        ¦  «         |                      |¦  «                             ¦   «         }|  	                    |d| j
        › d�¦  «         |                      |¦  «         d S )Nr„   r§   r    r¡   z) alwaysinline section "a_section" !dbg !0)rC   rM   rˆ   r‰   r¨   r¢   r£   rT   r$   r<   r   r?   r¤   s       r   Útest_function_attr_section_metaz,TestFunction.test_function_attr_section_metaà   sÄ   € à—’‘”ˆØ�}Š}˜VÑ$Ô$ˆØŒ×Ò˜NÑ+Ô+Ð+Ø"ˆŒØ×Ò˜% ×!4Ò!4°RÑ!8Ô!8Ñ9Ô9Ð9Ø�jŠj˜ÑÔ×$Ò$Ñ&Ô&ˆØ×Ò˜ØY D¤JÐYÐYÐYñ	ô 	ð 	ð 	×$Ò$ TÑ*Ô*Ð*Ð*Ð*r   c                 ód  — |                       ¦   «         }|j                             d¦  «         |                     d¦  «        }t	          j        |¦  «        }|                     ¦   «          |                      |¦  «        }|                      |d 	                    | j
        ¬¦  «        ¦  «         d S )Nr„   Úmy_blockz�            define {proto} alwaysinline
            {{
            my_block:
                ret void
            }}
            )r   )rM   rˆ   r‰   rO   r   Ú	IRBuilderÚret_voidrT   rc   Úformatr   )r   rP   rQ   Úbuilderr[   s        r   Útest_definezTestFunction.test_defineî   s¦   € à�}Š}‰ŒˆØŒ×Ò˜NÑ+Ô+Ð+Ø×'Ò'¨
Ñ3Ô3ˆÝ”,˜uÑ%Ô%ˆØ×ÒÑÔÐØ�jŠj˜ÑÔˆØ×Ò˜ð ÷ ’˜TœZ�Ñ(Ô(ñ	*ô 	*ð 	*ð 	*ð 	*r   c                 ó  — |                       ¦   «         }t                               ¦   «         }|                     dt          g¦  «        }|                     d|t
          g¦  «        }|                     d||t
          g¦  «        }|                     d¦  «        }|                      |                      |¦  «                             ¦   «         d¦  «         |                      |                      |¦  «                             ¦   «         d¦  «         |                      |                      |¦  «                             ¦   «         d¦  «         |                      |                      |¦  «                             ¦   «         d¦  «         d S )	Nú	llvm.powizllvm.memsetzllvm.memcpyzllvm.assumezD            declare double @"llvm.powi.f64"(double %".1", i32 %".2")zZ            declare void @"llvm.memset.p0i8.i32"(i8* %".1", i8 %".2", i32 %".3", i1 %".4")z`            declare void @"llvm.memcpy.p0i8.p0i8.i32"(i8* %".1", i8* %".2", i32 %".3", i1 %".4")z1            declare void @"llvm.assume"(i1 %".1"))	rC   r‹   Ú
as_pointerÚdeclare_intrinsicrH   rG   rc   rT   r$   )r   rC   Úpint8ÚpowiÚmemsetÚmemcpyÚassumes          r   Útest_declare_intrinsicsz$TestFunction.test_declare_intrinsicsþ   so  € Ø—’‘”ˆÝ—’Ñ!Ô!ˆà×'Ò'¨µc°UÑ;Ô;ˆØ×)Ò)¨-¸%Å¸ÑHÔHˆØ×)Ò)¨-¸%ÀÍÐ9NÑOÔOˆØ×)Ò)¨-Ñ8Ô8ˆØ×Ò˜Ÿš DÑ)Ô)×/Ò/Ñ1Ô1ð 4Hñ 	Iô 	Ið 	Ià×Ò˜Ÿš FÑ+Ô+×1Ò1Ñ3Ô3ð 6^ñ 	_ô 	_ð 	_à×Ò˜Ÿš FÑ+Ô+×1Ò1Ñ3Ô3ð 6dñ 	eô 	eð 	eà×Ò˜Ÿš FÑ+Ô+×1Ò1Ñ3Ô3ð 65ñ 	6ô 	6ð 	6ð 	6ð 	6r   c                 óÊ   — |                       ¦   «         }|                     dt          g¦  «        }|                     dt          g¦  «        }|                      ||¦  «         d S )Nrº   )rC   r¼   rH   r:   )r   rC   r¾   Úpowi2s       r   Útest_redeclare_intrinsicz%TestFunction.test_redeclare_intrinsic  sW   € Ø—’‘”ˆØ×'Ò'¨µc°UÑ;Ô;ˆØ×(Ò(¨µs°eÑ<Ô<ˆØ�Š�d˜EÑ"Ô"Ð"Ð"Ð"r   c                 óX   — |                       ¦   «         }|                      |¦  «         d S r/   )rM   r?   )r   Úfns     r   Útest_picklingzTestFunction.test_pickling  s)   € Ø�]Š]‰_Œ_ˆØ×$Ò$ RÑ(Ô(Ð(Ð(Ð(r   c                 ó,  — |                       ¦   «         }|                      |¦  «        }|j                             d¦  «         d}|                      t
          |¦  «        5  |j                             d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr„   ú$Can't have alwaysinline and noinlineÚnoinline©rC   rM   rˆ   r‰   ÚassertRaisesRegexÚ
ValueError©r   rC   rP   Úmsgs       r   Ú%test_alwaysinline_noinline_disallowedz2TestFunction.test_alwaysinline_noinline_disallowed  sË   € Ø—’‘”ˆØ�}Š}˜VÑ$Ô$ˆØŒ×Ò˜NÑ+Ô+Ð+à4ˆØ×#Ò#¥J°Ñ4Ô4ð 	,ð 	,ØŒO×Ò 
Ñ+Ô+Ð+ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ó   Á!B	Â	BÂBc                 ó,  — |                       ¦   «         }|                      |¦  «        }|j                             d¦  «         d}|                      t
          |¦  «        5  |j                             d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrË   rÊ   r„   rÌ   rÏ   s       r   Ú%test_noinline_alwaysinline_disallowedz2TestFunction.test_noinline_alwaysinline_disallowed"  sË   € Ø—’‘”ˆØ�}Š}˜VÑ$Ô$ˆØŒ×Ò˜JÑ'Ô'Ð'à4ˆØ×#Ò#¥J°Ñ4Ô4ð 	0ð 	0ØŒO×Ò Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0rÒ   N)rx   ry   rz   r   r�   r�   rž   r¥   r©   r«   r­   r¯   r±   r¸   rÂ   rÅ   rÈ   rÑ   rÔ   r#   r   r   r}   r}   y   sý   € € € € € àP€EðAð Að Að+ð +ð +ð"+ð +ð +ð 
+ð 
+ð 
+ð	+ð 	+ð 	+ð+ð +ð +ð+ð +ð +ð	+ð 	+ð 	+ð+ð +ð +ð*ð *ð *ð 6ð 6ð 6ð"#ð #ð #ð)ð )ð )ð,ð ,ð ,ð0ð 0ð 0ð 0ð 0r   r}   c                   óh   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestIRc                 óæ   — |                       ¦   «         }|                     t          d¦  «        t          d¦  «        g¦  «         |                      d|¦  «         |                      |¦  «         d S )Né{   é*   z!0 = !{ i32 123, i8 42 })rC   r£   rG   r‹   r-   r3   r2   s     r   Útest_unnamed_metadatazTestIR.test_unnamed_metadata.  se   € à�kŠk‰mŒmˆØ×Ò�% ™*œ*¥d¨2¡h¤hÐ/Ñ0Ô0Ð0Ø×ÒÐ6¸Ñ<Ô<Ð<Ø×Ò˜SÑ!Ô!Ð!Ð!Ð!r   c                 óæ  — |                       ¦   «         }|                     t          d¦  «        dg¦  «        }|                     t          d¦  «        |g¦  «        }|                     t          d¦  «        |g¦  «        }|                      ||¦  «         |                     |||g¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         d S )NrØ   ÚkerneléÈ  z!0 = !{ i32 123, !"kernel" }z!1 = !{ i64 456, !0 }z!2 = !{ !0, !1, !1 })rC   r£   rG   Úint64r:   r-   )r   r+   Úm0Úm1Úm2s        r   Útest_unnamed_metadata_2zTestIR.test_unnamed_metadata_25  sâ   € à�kŠk‰mŒmˆà×Ò�u S™zœz¨8Ð4Ñ5Ô5ˆà×Ò�u S™zœz¨2Ð.Ñ/Ô/ˆà×Ò�u S™zœz¨2Ð.Ñ/Ô/ˆØ�Š�b˜"ÑÔÐà×Ò˜"˜b "˜Ñ&Ô&Ð&Ø×ÒÐ:¸CÑ@Ô@Ð@Ø×ÒÐ3°SÑ9Ô9Ð9Ø×ÒÐ2°CÑ8Ô8Ð8Ð8Ð8r   c                 óR  — |                       ¦   «         }|                     t          d¦  «        t          d¦  «        gt          d¦  «        gt          d¦  «        gg¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         d S )NrØ   rÝ   i  z!0 = !{ i32 456 }z!1 = !{ i32 789 }z!2 = !{ i32 123, !0, !1, !0 })rC   r£   rG   r-   r2   s     r   Útest_unnamed_metadata_3zTestIR.test_unnamed_metadata_3E  s•   € à�kŠk‰mŒmˆØ×Ò�% ™*œ*¥u¨S¡z¤z lµU¸3±Z´Z°LÅ5ÈÁ:Ä:À,ÐOÑPÔPÐPØ×ÒÐ/°Ñ5Ô5Ð5Ø×ÒÐ/°Ñ5Ô5Ð5Ø×ÒÐ;¸SÑAÔAÐAÐAÐAr   c                 ó†   — |                       ¦   «         }|                     dg¦  «         |                      d|¦  «         d S )Nz"\$z!0 = !{ !"\22\5c$" })rC   r£   r-   r2   s     r   Útest_metadata_stringzTestIR.test_metadata_stringM  sB   € à�kŠk‰mŒmˆØ×Ò˜'˜Ñ#Ô#Ð#Ø×ÒÐ4°cÑ:Ô:Ð:Ð:Ð:r   c                 óš  — |                       ¦   «         }|                     t          d¦  «        g¦  «        }|                     t          d¦  «        g¦  «        }|                     d¦  «        }|                     |¦  «         |                     |¦  «         |                     |¦  «         |                      d|¦  «         |                      |¦  «         |                      || 	                    d¦  «        ¦  «         |  
                    t          ¦  «        5  | 	                    d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrØ   rÝ   Úfooz!foo = !{ !0, !1, !0 }Úbar)rC   r£   rG   rÞ   Úadd_named_metadatar‰   r-   r3   r:   Úget_named_metadataÚassertRaisesÚKeyError)r   r+   rß   rà   Únmds        r   Útest_named_metadatazTestIR.test_named_metadataS  s^  € à�kŠk‰mŒmˆØ×Ò�u S™zœz˜lÑ+Ô+ˆØ×Ò�u S™zœz˜lÑ+Ô+ˆØ×$Ò$ UÑ+Ô+ˆØ�Š�‰ŒˆØ�Š�‰ŒˆØ�Š�‰ŒˆØ×ÒÐ4°cÑ:Ô:Ð:Ø×Ò˜SÑ!Ô!Ð!à�Š�c˜3×1Ò1°%Ñ8Ô8Ñ9Ô9Ð9Ø×Ò�xÑ(Ô(ð 	*ð 	*Ø×"Ò" 5Ñ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   ÄE Å EÅEc                 ót  — |                       ¦   «         }|                     t          d¦  «        g¦  «        }|                     d|¦  «         |                     dt	          d¦  «        g¦  «         |                     ddg¦  «         |                     dg ¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d	|¦  «         |                      d
|¦  «         |                      d|¦  «         |                      |¦  «         d S )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 = !{  })rC   r£   rG   rê   rÞ   r-   r3   )r   r+   rß   s      r   Útest_named_metadata_2zTestIR.test_named_metadata_2c  s/  € à�kŠk‰mŒmˆØ×Ò�u S™zœz˜lÑ+Ô+ˆØ×Ò˜u bÑ)Ô)Ð)Ø×Ò˜u¥u¨S¡z¤z lÑ3Ô3Ð3Ø×Ò˜u x jÑ1Ô1Ð1Ø×Ò˜u bÑ)Ô)Ð)Ø×ÒÐ4°cÑ:Ô:Ð:Ø×ÒÐ/°Ñ5Ô5Ð5Ø×ÒÐ/°Ñ5Ô5Ð5Ø×ÒÐ1°3Ñ7Ô7Ð7Ø×ÒÐ,¨cÑ2Ô2Ð2Ø×Ò˜L¨#Ñ.Ô.Ð.Ø×Ò˜SÑ!Ô!Ð!Ð!Ð!r   c                 ó´  — |                       ¦   «         }|                     t                               ¦   «         d ¦  «        g¦  «         |                      d|¦  «         |                      |¦  «         |                       ¦   «         }|                     d t          d¦  «        g¦  «         |                      d|¦  «         |                      |¦  «         d S )Nz!0 = !{ i32* null }rØ   z!0 = !{ null, i32 123 })rC   r£   rG   r»   r-   r3   r2   s     r   Útest_metadata_nullzTestIR.test_metadata_nulls  sÂ   € à�kŠk‰mŒmˆØ×Ò�%×*Ò*Ñ,Ô,¨TÑ2Ô2Ð3Ñ4Ô4Ð4Ø×ÒÐ1°3Ñ7Ô7Ð7Ø×Ò˜SÑ!Ô!Ð!à�kŠk‰mŒmˆØ×Ò˜$¥ c¡
¤
Ð+Ñ,Ô,Ð,Ø×ÒÐ5°sÑ;Ô;Ð;Ø×Ò˜SÑ!Ô!Ð!Ð!Ð!r   c           
      óz  — |                       ¦   «         }|                     ddddœ¦  «        }|                     dd|                     d g¦  «        i¦  «        }|                     dt          j        d¦  «        |d	d
ddœd¬¦  «        }|                     dd|d|d|dœd¬¦  «         t          |¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      |¦  «         d S )NÚDIFilerè   ré   ©ÚfilenameÚ	directoryÚDISubroutineTypeÚtypesÚDICompileUnitÚDW_LANG_PythonÚARTIQr   T)ÚlanguageÚfileÚproducerÚruntimeVersionÚisOptimized©Úis_distinctÚDISubprogramrD   é   F)rK   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))rC   Úadd_debug_infor£   r   ÚDITokenr(   r-   r3   )r   r+   Údi_fileÚdi_func_typeÚdi_compileunitÚstrmods         r   Útest_debug_infozTestIR.test_debug_info  s±  € ð �kŠk‰mŒmˆØ×$Ò$ XØØð0
ð 0
ñ ô ˆð ×)Ò)Ð*<à�S×%Ò% t fÑ-Ô-ð?
ñ ô ˆð ×+Ò+¨OÝœ
Ð#3Ñ4Ô4ØØØØð>
ð >
ð ð ,ñ ô ˆð 	×Ò˜>ØØØØ ØØ"ð,
ð ,
ð ð 	ñ 	ô 	ð 	õ �S‘”ˆØ×ÒÐMØ"ñ	$ô 	$ð 	$à×ÒÐ,¨fÑ5Ô5Ð5Ø×ÒÐ?ÀÑHÔHÐHà×Òð Dð #ñ	$ô 	$ð 	$ð 	×Òð "ð #ñ	$ô 	$ð 	$ð 	×Ò˜SÑ!Ô!Ð!Ð!Ð!r   c                 ó@  — |                       ¦   «         }|                     ddddœ¦  «        }|                     ddddœ¦  «        }|                     ddddœ¦  «        }|                     ddddœd¬¦  «        }|                      ||¦  «         |                      t	          ||||h¦  «        d¦  «         t          |¦  «        }|                      d|¦  «         |                      d	|¦  «         |                      d
|¦  «         |                      |¦  «         d S )Nrõ   rè   ré   rö   Tr  r•   r
  z/!1 = !DIFile(directory: "foo", filename: "bar")z8!2 = distinct !DIFile(directory: "bar", filename: "foo"))rC   r  r:   r<   Úlenr(   r-   r3   )r   r+   Údi1Údi2Údi3Údi4r  s          r   Útest_debug_info_2zTestIR.test_debug_info_2¬  sw  € à�kŠk‰mŒmˆØ× Ò  Ø.3Ø/4ð"$ð "$ñ%ô %ˆð × Ò  Ø.3Ø/4ð"$ð "$ñ%ô %ˆð × Ò  Ø.3Ø/4ð"$ð "$ñ%ô %ˆð × Ò  Ø.3Ø/4ð"$ð "$à15ð !ñ 7ô 7ˆð 	�Š�c˜3ÑÔÐØ×Ò�˜c 3¨¨SÐ1Ñ2Ô2°AÑ6Ô6Ð6å�S‘”ˆØ×ÒÐMØ"ñ	$ô 	$ð 	$à×ÒÐMØ"ñ	$ô 	$ð 	$à×Òð %Ø&,ñ	.ô 	.ð 	.à×Ò˜SÑ!Ô!Ð!Ð!Ð!r   c                 ó®  — |                       ¦   «         }t          j        |t          j        ¦   «         d¦  «        }t          j        t          j        ¦   «         d¦  «        |_        |                     dddt          j        d¦  «        dœ¦  «        }|                     d|                     d	i ¦  «        |                     d
|j        |ddœd¬¦  «        dœ¦  «        }| 	                    d|¦  «         t          |¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «          t          j        d¦  «        d¦  «        d t          j        d¦  «        d¦  «        g} t          j        d¦  «        d¦  «        d t          j        d¦  «        d¦  «        g}|                     |¦  «        }|                     |¦  «        }|                     d¦  «        }|                     |¦  «         |                     |¦  «         |                     ddddœ¦  «        }	|                     dt          j        d ¦  «        |	t          j        d!¦  «        |                     |g¦  «        d"œd¬¦  «        }
|                     d#|
¦  «         d S )$NÚgvarrÙ   ÚDIBasicTypeÚfloatr	   ÚDW_ATE_float)rK   ÚsizeÚencodingÚDIGlobalVariableExpressionÚDIExpressionÚDIGlobalVariableT)rK   r  ÚisDefinitionr  )ÚexprÚvarr    zB!0 = !DIBasicType(encoding: DW_ATE_float, name: "float", size: 32)z!1 = !DIExpression()zK!2 = distinct !DIGlobalVariable(isDefinition: true, name: "gvar", type: !0)z3!3 = !DIGlobalVariableExpression(expr: !1, var: !2)z2@"gvar" = global float 0x4045000000000000, !dbg !3rs   zDwarf Versionr”   zDebug Info Versionr•   zllvm.module.flagsrõ   rè   ré   rö   rû   rü   Ú	FullDebug)rþ   rÿ   ÚemissionKindÚglobalszllvm.dbg.cu)rC   r   ÚGlobalVariableÚ	FloatTypeÚConstantÚinitializerr  r  rK   r¢   r(   r-   ÚIntTyper£   rê   r‰   )r   r+   r  Údi_floatÚdi_gvarr  ÚdverÚdiverÚflagsr  Údi_cus              r   Útest_debug_info_gvarzTestIR.test_debug_info_gvarË  s
  € ð �kŠk‰mŒmˆåÔ  ¥b¤l¡n¤n°fÑ=Ô=ˆÝœ;¥r¤|¡~¤~°rÑ:Ô:ˆÔà×%Ò% mØØÝœ
 >Ñ2Ô2ð6
ð 6
ñ ô ˆð
 ×$Ò$Ð%AØ×&Ò& ~°rÑ:Ô:Ø×%Ò%Ð&8Øœ	Ø Ø $ð;ð ;ð  ð	 &ñ !ô !ðD
ð D
ñ ô ˆð 	×Ò˜% Ñ)Ô)Ð)õ �S‘”ˆØ×Òð 7Ø8>ñ	@ô 	@ð 	@à×ÒÐ2°FÑ;Ô;Ð;Ø×Òð <Ø=Cñ	Eô 	Eð 	Eà×Òð 'Ø(.ñ	0ô 	0ð 	0à×Òð &Ø'-ñ	/ô 	/ð 	/ð •”
˜2‘”˜qÑ!Ô! ?°NµB´J¸r±N´NÀ1Ñ4EÔ4EÐFˆØ•”˜B‘” Ñ"Ô"Ð$8¸.½"¼*ÀR¹.¼.ÈÑ:KÔ:KÐLˆØ×Ò Ñ%Ô%ˆØ× Ò  Ñ'Ô'ˆØ×&Ò&Ð':Ñ;Ô;ˆØ�	Š	�$‰ŒˆØ�	Š	�%ÑÔÐà×$Ò$ XØØð0
ð 0
ñ ô ˆð ×"Ò" ?Ýœ
Ð#3Ñ4Ô4ØÝœJ {Ñ3Ô3Ø×'Ò'¨¨	Ñ2Ô2ð	5
ð 5
ð
 ð #ñ ô ˆð 	×Ò˜}¨eÑ4Ô4Ð4Ð4Ð4r   c                 ó  — |                       ¦   «         }|                     dddi¦  «         t          |¦  «        }d                     t	          d„ d                     ¦   «         ¦  «        ¦  «        }|                      d|› d�|¦  «         d S )	NÚDILocalVariablerK   u   aâˆ†r   c                 ó   — d| d›�S )Nr   Ú02xr#   )Úxs    r   ú<lambda>z7TestIR.test_debug_info_unicode_string.<locals>.<lambda>  s   €  \¨! \ \ \€ r   u   âˆ†z!0 = !DILocalVariable(name: "az"))rC   r  r(   r   r   Úencoder-   )r   r+   r  rK   s       r   Útest_debug_info_unicode_stringz%TestIR.test_debug_info_unicode_string  s…   € Ø�kŠk‰mŒmˆØ×ÒÐ,¨v°vÐ.>Ñ?Ô?Ð?å�S‘”ˆà�wŠw•sÐ1Ð1°5·<²<±>´>ÑBÔBÑCÔCˆØ×ÒÐE¸TÐEÐEÐEÀvÑNÔNÐNÐNÐNr   c                 óD  — |                       ¦   «         }t          j        |t          j        t          j        ¦   «         g ¦  «        d¦  «        }t          j        |                     d¦  «        ¦  «        }t          j        t          t          g¦  «        }t          j        |ddd¬¦  «        }| 	                    |t          d¦  «        g¦  «         | 
                    ¦   «          d}|                      |t          |¦  «        ¦  «         |                      |¦  «         d S )	Nrè   r   ú
mov $1, $2ú=r,rT©Úside_effectrØ   ú8call i32 asm sideeffect "mov $1, $2", "=r,r" ( i32 123 ))rC   r   rJ   rF   ÚVoidTyper´   rO   rG   Ú	InlineAsmÚcallrµ   r    r(   r3   )r   r+   rè   r·   Úasmtyr[   Úpats          r   Útest_inline_assemblyzTestIR.test_inline_assembly  så   € Ø�kŠk‰mŒmˆÝŒk˜#�rœ­r¬{©}¬}¸bÑAÔAÀ5ÑIÔIˆÝ”,˜s×5Ò5°bÑ9Ô9Ñ:Ô:ˆÝ”¥­ wÑ/Ô/ˆÝŒl˜5 ,°ÀDÐIÑIÔIˆØ�Š�S�5 ™:œ:˜,Ñ'Ô'Ð'Ø×ÒÑÔÐØHˆØ×Ò˜#�s 3™xœxÑ(Ô(Ð(Ø×Ò˜SÑ!Ô!Ð!Ð!Ð!r   c                 ó  — |                       ¦   «         }t          j        |t          j        t          j        ¦   «         g ¦  «        d¦  «        }t          j        |                     d¦  «        ¦  «        }t          j        t          t          g¦  «        }|                     |ddt          d¦  «        gd¬¦  «         | 	                    ¦   «          d}|  
                    |t          |¦  «        ¦  «         |                      |¦  «         d S )	Nrè   r   r>  r?  rØ   Tr@  rB  )rC   r   rJ   rF   rC  r´   rO   rG   r[   rµ   r    r(   r3   )r   r+   rè   r·   rF  rG  s         r   Útest_builder_asmzTestIR.test_builder_asm$  sÕ   € Ø�kŠk‰mŒmˆÝŒk˜#�rœ­r¬{©}¬}¸bÑAÔAÀ5ÑIÔIˆÝ”,˜s×5Ò5°bÑ9Ô9Ñ:Ô:ˆÝ”¥­ wÑ/Ô/ˆØ�Š�E˜<¨µ%¸±*´*°È4ˆÑPÔPÐPØ×ÒÑÔÐØHˆØ×Ò˜#�s 3™xœxÑ(Ô(Ð(Ø×Ò˜SÑ!Ô!Ð!Ð!Ð!r   c                 óÜ  — |                       ¦   «         }t          j        |t          j        t          j        ¦   «         g ¦  «        d¦  «        }t          j        |                     d¦  «        ¦  «        }|                     t          j        d¦  «        d¦  «         | 	                    ¦   «          d}|  
                    |t          |¦  «        ¦  «         |                      |¦  «         d S )Nrè   r   r
   Úraxzcall i64 asm "", "={rax}")rC   r   rJ   rF   rC  r´   rO   Úload_regr-  rµ   r    r(   r3   ©r   r+   rè   r·   rG  s        r   Útest_builder_load_regzTestIR.test_builder_load_reg/  s¼   € Ø�kŠk‰mŒmˆÝŒk˜#�rœ­r¬{©}¬}¸bÑAÔAÀ5ÑIÔIˆÝ”,˜s×5Ò5°bÑ9Ô9Ñ:Ô:ˆØ×Ò�œ B™œ¨Ñ/Ô/Ð/Ø×ÒÑÔÐØ)ˆØ×Ò˜#�s 3™xœxÑ(Ô(Ð(Ø×Ò˜SÑ!Ô!Ð!Ð!Ð!r   c                 óø  — |                       ¦   «         }t          j        |t          j        t          j        ¦   «         g ¦  «        d¦  «        }t          j        |                     d¦  «        ¦  «        }|                     t          d¦  «        t          j	        d¦  «        d¦  «         | 
                    ¦   «          d}|                      |t          |¦  «        ¦  «         |                      |¦  «         d S )Nrè   r   rØ   r
   rL  z0call void asm sideeffect "", "{rax}" ( i64 123 ))rC   r   rJ   rF   rC  r´   rO   Ú	store_regrÞ   r-  rµ   r    r(   r3   rN  s        r   Útest_builder_store_regzTestIR.test_builder_store_reg9  sÄ   € Ø�kŠk‰mŒmˆÝŒk˜#�rœ­r¬{©}¬}¸bÑAÔAÀ5ÑIÔIˆÝ”,˜s×5Ò5°bÑ9Ô9Ñ:Ô:ˆØ×Ò�% ™*œ*¥b¤j°¡n¤n°eÑ<Ô<Ð<Ø×ÒÑÔÐØ@ˆØ×Ò˜#�s 3™xœxÑ(Ô(Ð(Ø×Ò˜SÑ!Ô!Ð!Ð!Ð!r   N)rx   ry   rz   rÚ   râ   rä   ræ   rï   rñ   ró   r  r  r4  r<  rH  rJ  rO  rR  r#   r   r   rÖ   rÖ   ,  s   € € € € € ð"ð "ð "ð9ð 9ð 9ð Bð Bð Bð;ð ;ð ;ð*ð *ð *ð "ð "ð "ð 
"ð 
"ð 
"ð+"ð +"ð +"ðZ"ð "ð "ð>B5ð B5ð B5ðHOð Oð Oð
"ð 
"ð 
"ð	"ð 	"ð 	"ð"ð "ð "ð"ð "ð "ð "ð "r   rÖ   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestGlobalValuesc                 óÜ  — |                       ¦   «         }t          j        |t          j        t          j        ¦   «         g ¦  «        d¦  «        }t          j        |t          j        t          j        ¦   «         g ¦  «        d¦  «         t          j        |t          j        ¦   «         d¦  «        }|                      |                     d¦  «        |¦  «         |                      |                     d¦  «        |¦  «         |  	                    t          ¦  «        5  |                     d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t          |¦  «        d¦  «         d S )Nrè   ré   Ú
globdoubleÚkkkz2<ir.GlobalVariable 'globdouble' of type 'double*'>)rC   r   rJ   rF   rC  r)  Ú
DoubleTyper<   Ú
get_globalrì   rí   Úrepr)r   r+   rè   rV  s       r   Útest_globals_accessz$TestGlobalValues.test_globals_accessF  si  € Ø�kŠk‰mŒmˆÝŒk˜#�rœ­r¬{©}¬}¸bÑAÔAÀ5ÑIÔIˆÝ
Œ�C�œ­¬©¬¸Ñ;Ô;¸UÑCÔCÐCÝÔ& s­B¬M©O¬O¸\ÑJÔJˆ
Ø×Ò˜Ÿš¨Ñ.Ô.°Ñ4Ô4Ð4Ø×Ò˜Ÿš¨Ñ5Ô5°zÑBÔBÐBØ×Ò�xÑ(Ô(ð 	"ð 	"Ø�NŠN˜5Ñ!Ô!Ð!ð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	×Ò�˜jÑ)Ô)ØMñ	Oô 	Oð 	Oð 	Oð 	Os   ÄD>Ä>EÅEc                 óþ  — |                       ¦   «         }t          j        t          j        ¦   «         g ¦  «        }t          j        ||d¦  «        }t          j        ||d¦  «        }t          j        |t          j        ¦   «         d¦  «        }|                      t          |j	        ¦  «        t          ||f¦  «        ¦  «         |                      t          |j
        ¦  «        t          |||f¦  «        ¦  «         dS )zr
        Accessing functions and global values through Module.functions
        and Module.global_values.
        rè   ré   rV  N)rC   r   rF   rC  rJ   r)  rX  r<   ÚsetÚ	functionsÚglobal_values)r   r+   Úftyrè   ré   rV  s         r   Ú#test_functions_global_values_accessz4TestGlobalValues.test_functions_global_values_accessS  sÈ   € ð
 �kŠk‰mŒmˆÝŒo�bœk™mœm¨RÑ0Ô0ˆÝŒk˜#˜s EÑ*Ô*ˆÝŒk˜#˜s EÑ*Ô*ˆÝÔ& s­B¬M©O¬O¸\ÑJÔJˆ
Ø×Ò�˜Sœ]Ñ+Ô+­S°#°s°©_¬_Ñ=Ô=Ð=Ø×Ò�˜SÔ.Ñ/Ô/µ°c¸3À
Ð5KÑ1LÔ1LÑMÔMÐMÐMÐMr   c                 ót  — |                       ¦   «         }t          j        |t          d¦  «        }t          j        |t          dd¬¦  «        }t          j        |t          d¦  «        }t	          d¦  «        |_        t          j        |t          d¦  «        }d|_        t          j        |t          d	¦  «        }d
|_        t          j        |t          dd¬¦  «        }d|_        t          j        |t          d¦  «        }d
|_        t	          d¦  «        |_        d|_	        t          j        |t          d¦  «        }	d
|	_        t	          d¦  «        |	_        d|	_
        t          j        |t          d¦  «        }
d
|
_        t	          d¦  «        |
_        d|
_	        d|
_
        |                      |d¦  «         dS )z7
        IR serialization of global variables.
        ÚaÚbrÙ   ©Ú	addrspacer   rØ   ÚdTÚeÚinternalÚfrÝ   Úgr   ÚhÚ	h_sectionÚir   Ú	i_sectionaß              @"a" = external global i8
            @"b" = external addrspace(42) global i8
            @"c" = global i32 123
            @"d" = external constant i32
            @"e" = internal global i32 undef
            @"f" = external unnamed_addr addrspace(456) global i32
            @"g" = internal global i32 123, align 16
            @"h" = internal global i32 123, section "h_section"
            @"i" = internal global i32 456, section "i_section", align 8
            N)rC   r   r)  r‹   rG   r,  Úglobal_constantÚlinkageÚunnamed_addrrœ   r¨   rm   )r   r+   rc  rd  r   rg  rh  rj  rk  rl  rn  s              r   Útest_global_variables_irz)TestGlobalValues.test_global_variables_ir`  ss  € ð �kŠk‰mŒ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                 óX   — |                       ¦   «         }|                      |¦  «         d S r/   )rC   r?   r2   s     r   Útest_picklezTestGlobalValues.test_pickle‹  s)   € Ø�kŠk‰mŒmˆØ×$Ò$ SÑ)Ô)Ð)Ð)Ð)r   N)rx   ry   rz   r[  ra  rs  ru  r#   r   r   rT  rT  D  sW   € € € € € ðOð Oð OðNð Nð Nð)ð )ð )ðV*ð *ð *ð *ð *r   rT  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )Ú	TestBlockc                 óÄ   — |                       ¦   «         }t          j        |d¬¦  «        }|                      |j        |¦  «         |                      |j        ¦  «         d S )NÚstart©ÚparentrK   )rM   r   ÚBlockr:   r{  ÚassertFalseÚis_terminated©r   rP   rQ   s      r   Útest_attributeszTestBlock.test_attributes’  sV   € Ø�}Š}‰ŒˆÝ” ¨7Ð3Ñ3Ô3ˆØ�Š�e”l DÑ)Ô)Ð)Ø×Ò˜Ô,Ñ-Ô-Ð-Ð-Ð-r   c                 ó  — |                       d¬¦  «        }|                      |                      |¦  «        d¦  «         |j                             ddg¦  «         |                      |                      |¦  «        d¦  «         d S )Nr³   ©rK   z
my_block:
rc  rd  zmy_block:
  a
  b
)rQ   r<   rT   ÚinstructionsÚextend)r   rQ   s     r   Ú
test_descrzTestBlock.test_descr˜  s{   € Ø—
’
 
�
Ñ+Ô+ˆØ×Ò˜Ÿš EÑ*Ô*¨MÑ:Ô:Ð:ØÔ×!Ò! 3¨ *Ñ-Ô-Ð-Ø×Ò˜Ÿš EÑ*Ô*Ð,CÑDÔDÐDÐDÐDr   c                 óÔ  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     ||d¦  «        }|                     ||d¦  «        }|                     ||d¦  «         t          j        ||j	        d||fd¦  «        }|  
                    |d	¦  «         |                     ||¦  «         |  
                    |d
¦  «         d S )Nr³   r‚  rs   r   rg  rh  Úsdivrj  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"
            )rQ   r   r´   rM   r˜   r‰   r   ÚmulÚInstructionr  rf   rZ   )r   rQ   r·   rc  rd  r   rg  rj  s           r   Útest_replacezTestBlock.test_replacež  s÷   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø�KŠK˜˜1˜cÑ"Ô"ˆØ�KŠK˜˜1˜cÑ"Ô"ˆØ�Š�A�q˜#ÑÔÐÝŒN˜5 !¤&¨&°1°a°&¸#Ñ>Ô>ˆØ×Ò˜ð !ñ 	ô 	ð 	ð 	�Š�a˜ÑÔÐØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó    — |                       ¦   «         }t          j        |d¬¦  «        }|                      t	          |¦  «        d¦  «         dS )z4
        Blocks should have a useful repr()
        ry  rz  z"<ir.Block 'start' of type 'label'>N)rM   r   r|  r<   rZ  r  s      r   Ú	test_reprzTestBlock.test_repr´  sH   € ð �}Š}‰ŒˆÝ” ¨7Ð3Ñ3Ô3ˆØ×Ò�˜e™œÐ&JÑKÔKÐKÐKÐKr   N)rx   ry   rz   r€  r…  rŠ  rŒ  r#   r   r   rw  rw  �  sX   € € € € € ð.ð .ð .ðEð Eð Eðð ð ð,Lð Lð Lð Lð Lr   rw  c                   ó`  — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d „ Z"d!„ Z#d"„ Z$d#„ Z%d$„ Z&d%„ Z'd&„ Z(d'„ Z)d(„ Z*d)„ Z+d*„ Z,d+„ Z-d,„ Z.d-„ Z/d.„ Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:S );ÚTestBuildInstructionszN
    Test IR generation of LLVM instructions through the IRBuilder class.
    i   c                 ó(  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     ||d¦  «        }|                      |d¦  «         |                      t          |¦  «        d¦  «         d S )Nr³   r‚  rs   Ú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>)>)	rQ   r   r´   rM   r˜   r‰   rf   r<   rZ  )r   rQ   r·   rc  rd  Úinsts         r   Útest_simplez!TestBuildInstructions.test_simpleÄ  s¡   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø�{Š{˜1˜a Ñ'Ô'ˆØ×Ò˜ð !ñ 	ô 	ð 	ð
 	×Ò�˜d™œð<ñ	=ô 	=ð 	=ð 	=ð 	=r   c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}}|                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         | 	                    ||d¦  «         | 
                    ||d	¦  «         |                     ||d
¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                      t0          ¦  «        5 }|                     ||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t5          |j        ¦  «        d¦  «         |                      |j        ¦  «         |                      |d¦  «         d S )Nr³   r‚  r•   r   rg  rh  rj  rk  rl  rn  Ú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"
            )rQ   r   r´   rM   r˜   r‰   Úfaddr   Úfsubrˆ  ÚfmulÚudivr‡  ÚfdivÚuremÚsremÚfremÚor_Úand_ÚxorÚshlÚashrÚlshrrì   rÎ   r<   r(   Ú	exceptionr}  r~  rf   )r   rQ   r·   rc  rd  ÚffÚcms          r   Útest_binopsz!TestBuildInstructions.test_binopsÓ  s®  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔ#Ô(¨¨!¨Ô,‰ˆˆ1ˆbØ�Š�A�q˜#ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�A�q˜#ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�A�q˜#ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�A�q˜#ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�A�q˜#ÑÔÐØ�Š�A�q˜#ÑÔÐØ�Š�Q˜˜3ÑÔÐØ�Š�Q˜˜3ÑÔÐØ×Ò�zÑ*Ô*ð 	¨bØ�KŠK˜˜2ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò�˜Rœ\Ñ*Ô*ØLñ	Nô 	Nð 	Nà×Ò˜Ô,Ñ-Ô-Ð-Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	s   Ç;HÈH"È%H"c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     ||dd¬¦  «         |                     ||ddd	g¬¦  «         |                      |d
¦  «         d S )Nr³   r‚  rs   r   )Únuw©r2  rg  r²  Únswz†            my_block:
                %"c" = add nuw i32 %".1", %".2"
                %"d" = sub nuw nsw i32 %".1", %".2"
            )rQ   r   r´   rM   r˜   r‰   r   rf   ©r   rQ   r·   rc  rd  s        r   Útest_binop_flagsz&TestBuildInstructions.test_binop_flags  s�   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1à�Š�A�q˜# XˆÑ.Ô.Ð.à�Š�A�q˜# e¨U ^ˆÑ4Ô4Ð4Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     ||dd¬¦  «         |                     ||ddd	g¬¦  «         |                      |d
¦  «         d S )Nr³   r‚  rs   r   ©Úfastr³  rg  ÚninfÚnszzŠ            my_block:
                %"c" = fadd fast i32 %".1", %".2"
                %"d" = fsub ninf nsz i32 %".1", %".2"
            )rQ   r   r´   rM   r˜   rŸ  r   rf   rµ  s        r   Útest_binop_fastmath_flagsz/TestBuildInstructions.test_binop_fastmath_flags  s�   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1à�Š�Q˜˜3 iˆÑ0Ô0Ð0à�Š�Q˜˜3 v¨u oˆÑ6Ô6Ð6Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óÈ  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     ||d¦  «         | 	                    ||d¦  «         | 
                    ||d	¦  «         |                      |d
¦  «         d S )Nr³   r‚  rs   r   rg  rh  rj  rk  rl  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")
            )rQ   r   r´   rM   r˜   Úsadd_with_overflowÚsmul_with_overflowÚssub_with_overflowÚuadd_with_overflowÚumul_with_overflowÚusub_with_overflowrf   rµ  s        r   Útest_binops_with_overflowz/TestBuildInstructions.test_binops_with_overflow   sõ   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø×"Ò" 1 a¨Ñ-Ô-Ð-Ø×"Ò" 1 a¨Ñ-Ô-Ð-Ø×"Ò" 1 a¨Ñ-Ô-Ð-Ø×"Ò" 1 a¨Ñ-Ô-Ð-Ø×"Ò" 1 a¨Ñ-Ô-Ð-Ø×"Ò" 1 a¨Ñ-Ô-Ð-Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ón  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}}|                     |d¦  «         |                     |d¦  «         |                     |d¦  «         |                      |j	        ¦  «         |  
                    |d¦  «         d S )Nr³   r‚  r•   rg  rh  rj  zœ            my_block:
                %"d" = sub i32 0, %".1"
                %"e" = xor i32 %".2", -1
                %"f" = fneg double %".3"
            )rQ   r   r´   rM   r˜   ÚnegÚnot_Úfnegr}  r~  rf   ©r   rQ   r·   rc  rd  r   s         r   Útest_unary_opsz$TestBuildInstructions.test_unary_ops4  sº   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔ"Ô'¨¨¨Ô+‰ˆˆ1ˆaØ�Š�A�sÑÔÐØ�Š�Q˜ÑÔÐØ�Š�Q˜ÑÔÐØ×Ò˜Ô,Ñ-Ô-Ð-Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó*  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}t          j        t          j        d¦  «        t          j        ¦  «        }t          j        t          j        d¦  «        t          j        ¦  «        }|                     ||d¦  «        }|  	                    |d¦  «         | 
                    ||¦  «         | 
                    ||¦  «         |  	                    |d¦  «         d S )Nr³   r‚  rs   r	   r   zN            my_block:
                %"c" = add i32 undef, undef
            zN            my_block:
                %"c" = add i32 %".1", %".2"
            )rQ   r   r´   rM   r˜   r+  r-  Ú	Undefinedr‰   rf   Úreplace_usage)r   rQ   r·   rc  rd  Úundef1Úundef2r   s           r   Útest_replace_operandz*TestBuildInstructions.test_replace_operandC  sù   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ý”�RœZ¨™^œ^­R¬\Ñ:Ô:ˆÝ”�RœZ¨™^œ^­R¬\Ñ:Ô:ˆØ�KŠK˜ ¨Ñ,Ô,ˆØ×Ò˜ð !ñ 	ô 	ð 	ð 	
�Š˜ Ñ"Ô"Ð"Ø	�Š˜ Ñ"Ô"Ð"Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óP  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     d||d¦  «         |                     d||d¦  «         |                     d||d	¦  «         |                     d
||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d
||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                      t          ¦  «        5  |                     d||d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t          ¦  «        5  |                     d||d¦  «         d d d ¦  «         n# 1 swxY w Y   |  	                    |j
        ¦  «         |                      |d¦  «         d S )Nr³   r‚  rs   ú==r   ú!=rg  ú<rh  ú<=rj  ú>rk  ú>=rl  rn  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"
            )rQ   r   r´   rM   r˜   Úicmp_unsignedÚicmp_signedrì   rÎ   r}  r~  rf   rµ  s        r   Útest_integer_comparisonsz.TestBuildInstructions.test_integer_comparisonsU  sº  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø×Ò˜d A q¨#Ñ.Ô.Ð.Ø×Ò˜d A q¨#Ñ.Ô.Ð.Ø×Ò˜c 1 a¨Ñ-Ô-Ð-Ø×Ò˜d A q¨#Ñ.Ô.Ð.Ø×Ò˜c 1 a¨Ñ-Ô-Ð-Ø×Ò˜d A q¨#Ñ.Ô.Ð.Ø×Ò˜D ! Q¨Ñ,Ô,Ð,Ø×Ò˜D ! Q¨Ñ,Ô,Ð,Ø×Ò˜C  A sÑ+Ô+Ð+Ø×Ò˜D ! Q¨Ñ,Ô,Ð,Ø×Ò˜C  A sÑ+Ô+Ð+Ø×Ò˜D ! Q¨Ñ,Ô,Ð,Ø×Ò�zÑ*Ô*ð 	3ð 	3Ø×Ò  q¨!¨TÑ2Ô2Ð2ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3à×Ò�zÑ*Ô*ð 	3ð 	3Ø×Ò  q¨!¨TÑ2Ô2Ð2ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3à×Ò˜Ô,Ñ-Ô-Ð-Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	s$   Å<F!Æ!F%Æ(F%ÇG+Ç+G/Ç2G/c                 ó   — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     d||d¦  «         |                     d||d¦  «         |                     d||d	¦  «         |                     d
||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d
||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||d¦  «         |                     d||dg d¢¬¦  «         |                      |j        ¦  «         |  	                    |d ¦  «         d S )!Nr³   r‚  rs   rÒ  r   rÓ  rg  rÔ  rh  rÕ  rj  rÖ  rk  r×  rl  rn  r”  r•  r–  r—  r˜  ÚordÚurØ  ÚvÚwr9  Ú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"
            )
rQ   r   r´   rM   r˜   Úfcmp_orderedÚfcmp_unorderedr}  r~  rf   rµ  s        r   Útest_float_comparisonsz,TestBuildInstructions.test_float_comparisonsz  sM  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø×Ò˜T 1 a¨Ñ-Ô-Ð-Ø×Ò˜T 1 a¨Ñ-Ô-Ð-Ø×Ò˜S ! Q¨Ñ,Ô,Ð,Ø×Ò˜T 1 a¨Ñ-Ô-Ð-Ø×Ò˜S ! Q¨Ñ,Ô,Ð,Ø×Ò˜T 1 a¨Ñ-Ô-Ð-Ø×Ò˜t Q¨¨3Ñ/Ô/Ð/Ø×Ò˜t Q¨¨3Ñ/Ô/Ð/Ø×Ò˜s A q¨#Ñ.Ô.Ð.Ø×Ò˜t Q¨¨3Ñ/Ô/Ð/Ø×Ò˜s A q¨#Ñ.Ô.Ð.Ø×Ò˜t Q¨¨3Ñ/Ô/Ð/à×Ò˜U A q¨#Ñ.Ô.Ð.Ø×Ò˜U A q¨#Ñ.Ô.Ð.Ø×Ò˜u a¨¨CÑ0Ô0Ð0Ø×Ò˜u a¨¨CÑ0Ô0Ð0Ø×Ò˜u a¨¨CØ%LÐ%LÐ%Lð 	ñ 	Nô 	Nð 	Nà×Ò˜Ô,Ñ-Ô-Ð-Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó¬  — |                       d¬¦  «        }t          j        t          d¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     |||dd¬¦  «         |                      |j	        ¦  «         | 
                    ¦   «          |                      |j	        ¦  «         |                      |d¦  «         d S )	Nr³   r‚  Trs   r   )rå  rä  r³  z„            my_block:
                %"c" = select arcp nnan i1 true, i32 %".1", i32 %".2"
                unreachable
            )rQ   r   r+  Úint1r´   rM   r˜   Úselectr}  r~  ÚunreachableÚ
assertTruerf   )r   rQ   rž  r·   rc  rd  s         r   Útest_misc_opsz#TestBuildInstructions.test_misc_ops§  sÑ   € Ø—
’
 
�
Ñ+Ô+ˆÝŒK�˜dÑ#Ô#ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø�Š�q˜!˜Q Ð+;ˆÑ<Ô<Ð<Ø×Ò˜Ô,Ñ-Ô-Ð-Ø×ÒÑÔÐØ�Š˜Ô+Ñ,Ô,Ð,Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óâ  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|j                             d¦  «        }|j                             d¦  «        }|                     t          dd¬¦  «        }|                     ||¦  «         |                     ||¦  «         |  	                    |j
        ¦  «         |                      |d	¦  «         d S )
Nr³   r‚  rs   Úb2Úb3Úmy_phir¸  r³  zj            my_block:
                %"my_phi" = phi fast i32 [%".1", %"b2"], [%".2", %"b3"]
            )rQ   r   r´   rM   r˜   rO   ÚphirG   Úadd_incomingr}  r~  rf   )r   rQ   r·   rc  rd  Úbb2Úbb3ró  s           r   Útest_phizTestBuildInstructions.test_phi¶  së   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1ØÔ×1Ò1°$Ñ7Ô7ˆØÔ×1Ò1°$Ñ7Ô7ˆØ�kŠk�% °ˆkÑ;Ô;ˆØ×Ò˜˜CÑ Ô Ð Ø×Ò˜˜CÑ Ô Ð Ø×Ò˜Ô,Ñ-Ô-Ð-Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó:  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}}|                     t          d¬¦  «        }|                     t          dd¬¦  «        }|                     t          |d¬¦  «        }d	|_        |  	                    |j
        t          j        t          ¦  «        ¦  «         |                     ||¦  «        }	|  	                    |	j
        t          j        ¦   «         ¦  «         |                     ||¦  «        }
|  	                    |
j
        t          j        ¦   «         ¦  «         |                     |d
¦  «        }|  	                    |j
        t          ¦  «         |                     ||d¬¦  «        }|  	                    |j
        t          j        ¦   «         ¦  «         |                     |dd¬¦  «        }|  	                    |j
        t          ¦  «         |                     ||dd¬¦  «        }|  	                    |j
        t          j        ¦   «         ¦  «         |                     |ddd¬¦  «        }|  	                    |j
        t          ¦  «         |                      t$          ¦  «        5  |                     ||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t$          ¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t$          ¦  «        5 }|                     ||¦  «         d d d ¦  «         n# 1 swxY w Y   |  	                    t'          |j        ¦  «        d¦  «         |                      |d¦  «         d S )Nr³   r‚  r•   r   rÙ   rg  )r  rK   rh  r   rk  r   )rœ   rn  Úseq_cstr”   )Úorderingrœ   r•  )rú  rœ   rK   z.cannot store i32 to double*: mismatching typesa              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
            )rQ   r   r´   rM   r˜   ÚallocarG   rH   rœ   r<   r  rI   ÚstorerC  ÚloadÚstore_atomicÚload_atomicrì   Ú	TypeErrorr(   r­  rf   )r   rQ   r·   rc  rd  Úzr   rg  rh  Úeerj  rk  rl  rn  r”  r•  r¯  s                    r   Útest_mem_opsz"TestBuildInstructions.test_mem_opsÅ  sÍ  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔ"Ô'¨¨¨Ô+‰ˆˆ1ˆaØ�NŠN�5 sˆNÑ+Ô+ˆØ�NŠN�5 r°ˆNÑ4Ô4ˆØ�NŠN�3 Q¨SˆNÑ1Ô1ˆØˆŒØ×Ò˜œ¥¤µÑ!4Ô!4Ñ5Ô5Ð5Ø�]Š]˜1˜aÑ Ô ˆØ×Ò˜œ¥"¤+¡-¤-Ñ0Ô0Ð0Ø�MŠM˜!˜QÑÔˆØ×Ò˜œ¥¤¡¤Ñ/Ô/Ð/Ø�LŠL˜˜CÑ Ô ˆØ×Ò˜œ¥Ñ'Ô'Ð'à�MŠM˜!˜Q aˆMÑ(Ô(ˆØ×Ò˜œ¥¤¡¤Ñ/Ô/Ð/Ø�LŠL˜˜C qˆLÑ)Ô)ˆØ×Ò˜œ¥Ñ'Ô'Ð'à× Ò   A°	ÀÐ ÑCÔCˆØ×Ò˜œ¥¤¡¤Ñ/Ô/Ð/Ø×Ò ¨I¸QÀSÐÑIÔIˆØ×Ò˜œ¥Ñ'Ô'Ð'à×Ò�yÑ)Ô)ð 	 ð 	 Ø�MŠM˜!˜QÑÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 à×Ò�yÑ)Ô)ð 	ð 	Ø�LŠL˜‰OŒOˆOð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ×Ò�yÑ)Ô)ð 	 ¨RØ�MŠM˜!˜QÑÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 à×Ò�˜Rœ\Ñ*Ô*ØIñ	Kô 	Kð 	Kà×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	s6   Ê KËKË
KË(L
Ì
LÌLÌ/MÍMÍMc                 óØ  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     t          j        t          ¦  «        d¬¦  «        }|                     |t          j	        t          d¦  «        |gd¬¦  «        }|  
                    |j        t          j        t          ¦  «        ¦  «         |                      |d¦  «         d S )Nr³   r‚  rs   r   r’   rg  z�            my_block:
                %"c" = alloca i32*
                %"d" = getelementptr i32*, i32** %"c", i32 5, i32 %".1"
            )rQ   r   r´   rM   r˜   rû  rI   rG   Úgepr+  r<   r  rf   ©r   rQ   r·   rc  rd  r   rg  s          r   Útest_gepzTestBuildInstructions.test_gepö  sÎ   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø�NŠN�2œ>­%Ñ0Ô0°sˆNÑ;Ô;ˆØ�KŠK˜�BœK­¨qÑ1Ô1°1Ð5¸CˆKÑ@Ô@ˆØ×Ò˜œ¥¤µÑ!6Ô!6Ñ7Ô7Ð7Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}t
                               ¦   «         }t          j        t          |||t          g¦  «        }| 	                    ||                     ¦   «         d¬¦  «        }| 
                    |d„ dD ¦   «         d¬¦  «        }|                      |j        t          j        |¦  «        ¦  «         |                      |d¦  «         d S )	Nr³   r‚  rs   rg  c                 óB   — g | ]}t          j        t          |¦  «        ‘ŒS r#   ©r   r+  rG   ©r%   r9  s     r   r'   z<TestBuildInstructions.test_gep_castinstr.<locals>.<listcomp>  ó$   € ÐBÐBÐB°a�BœK­¨qÑ1Ô1ÐBÐBÐBr   ©r   r•   rh  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
            )rQ   r   r´   rM   r˜   r‹   r»   ÚLiteralStructTyperÞ   Úbitcastr  r<   r  rI   rf   )	r   rQ   r·   rc  rd  Úint8ptrÚlsrg  rh  s	            r   Útest_gep_castinstrz(TestBuildInstructions.test_gep_castinstr  sø   € ð —
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ý—/’/Ñ#Ô#ˆÝÔ!¥5¨'°7¸GÅUÐ"KÑLÔLˆØ�OŠO˜A˜rŸ}š}™œ°SˆOÑ9Ô9ˆØ�KŠK˜ÐBÐB¸6ÐBÑBÔBÈˆKÑMÔMˆØ×Ò˜œ¥¤°Ñ!8Ô!8Ñ9Ô9Ð9Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ój  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}d}t
                               ¦   «         }t          j        t          |||t          g¦  «        }| 	                    ||                     |¬¦  «        d¬¦  «        }| 
                    |d„ dD ¦   «         d	¬¦  «        }	|                      |	j        j        |¦  «         |                      |	j        t          j        ||¬¦  «        ¦  «         |                      |d
¦  «         d S )Nr³   r‚  rs   r”   re  rg  c                 óB   — g | ]}t          j        t          |¦  «        ‘ŒS r#   r
  r  s     r   r'   zFTestBuildInstructions.test_gep_castinstr_addrspace.<locals>.<listcomp>  r  r   r  rh  zñ            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
            )rQ   r   r´   rM   r˜   r‹   r»   r  rÞ   r  r  r<   r  rf  rI   rf   )
r   rQ   r·   rc  rd  rf  r  r  rg  rh  s
             r   Útest_gep_castinstr_addrspacez2TestBuildInstructions.test_gep_castinstr_addrspace  s#  € ð —
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Øˆ	Ý—/’/Ñ#Ô#ˆÝÔ!¥5¨'°7¸GÅUÐ"KÑLÔLˆØ�OŠO˜A˜rŸ}š}°y˜}ÑAÔAÈˆOÑLÔLˆØ�KŠK˜ÐBÐB¸6ÐBÑBÔBÈˆKÑMÔMˆØ×Ò˜œÔ)¨9Ñ5Ô5Ð5Ø×Ò˜œ¥¤°À9Ð!MÑ!MÔ!MÑNÔNÐNØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óø  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}d}|                     t          j        t          |¬¦  «        d¬¦  «        }|                      t          |j
        ¦  «        d¦  «         |                      |j
        j        j        |¦  «         |                     |t          j        t          d¦  «        |gd	¬¦  «        }|                      |j
        j        |¦  «         |                     |t          j        t          d
¦  «        gd¬¦  «        }|                      |j
        j        |¦  «         |                      |d¦  «         d S )Nr³   r‚  rs   r”   re  r   zi32 addrspace(4)**r’   rg  r“   rh  zý            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
            )rQ   r   r´   rM   r˜   rû  rI   rG   r<   r(   r  Úpointeerf  r  r+  rf   )	r   rQ   r·   rc  rd  rf  r   rg  rh  s	            r   Útest_gep_addrspacez(TestBuildInstructions.test_gep_addrspace(  sN  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Øˆ	Ø�NŠN�2œ>­%¸9ÐEÑEÔEÈCˆNÑPÔPˆØ×Ò�˜QœV™œÐ&:Ñ;Ô;Ð;Ø×Ò˜œœÔ1°9Ñ=Ô=Ð=Ø�KŠK˜�BœK­¨qÑ1Ô1°1Ð5¸CˆKÑ@Ô@ˆØ×Ò˜œÔ)¨9Ñ5Ô5Ð5Ø�KŠK˜�BœK­¨rÑ2Ô2Ð3¸#ˆKÑ>Ô>ˆØ×Ò˜œÔ)¨9Ñ5Ô5Ð5Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óž  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}t          j        t          t          g¦  «        }t          j        t          |g¦  «        }t          j	        |t          j	        t          d¦  «        t          j	        t          d¦  «        f¦  «        }| 
                    |dd¬¦  «        }|                     ||dd¬¦  «        }	|                     |	t          j	        t          d	¦  «        d
d¬¦  «        }
|                      |	j        |¦  «         |                      |
j        |¦  «         |                     |d¬¦  «        }|                     |d¬¦  «        }| 
                    |dd¬¦  «        }| 
                    |d
d¬¦  «        }| 
                    |dd¬¦  «        }| 
                    |dd¬¦  «        }|                     ||d
d¬¦  «        }|                     ||dd¬¦  «        }|                      |j        t          ¦  «         |                      |j        |¦  «         |                      |j        t          ¦  «         |                      |j        t          ¦  «         |                      |j        |¦  «         |                      |j        |¦  «         |                      t"          ¦  «        5  | 
                    |d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t"          ¦  «        5  | 
                    |d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t"          ¦  «        5  | 
                    |d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t"          ¦  «        5  |                     ||d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t"          ¦  «        5  |                     ||d
¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |d¦  «         d S )Nr³   r‚  rs   r”   Tr   r   rg  Fr   rh  Úptrr”  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}}, {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
            )rQ   r   r´   rM   r˜   r  rG   rê  r‹   r+  Úextract_valueÚinsert_valuer<   r  rû  rý  rì   r   rf   )r   rQ   r·   rc  rd  Útp_innerÚtp_outerÚc_innerr   rg  rh  Úp_outerr”  r•  r–  r—  r˜  r™  rš  s                      r   Útest_extract_insert_valuez/TestBuildInstructions.test_extract_insert_value;  s9  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1ÝÔ'­µ¨Ñ6Ô6ˆÝÔ'­¨xÐ(8Ñ9Ô9ˆÝ”+˜h­¬µU¸AÑ)>Ô)>Ý)+¬µT¸4Ñ)@Ô)@ð)Bñ Cô Cˆð ×!Ò! '¨1°3Ð!Ñ7Ô7ˆØ× Ò  ¨!¨Q°SÐ Ñ9Ô9ˆØ× Ò  ¥B¤Kµ°eÑ$<Ô$<¸aÀcÐ ÑJÔJˆØ×Ò˜œ Ñ*Ô*Ð*Ø×Ò˜œ Ñ*Ô*Ð*à—.’. °�.Ñ6Ô6ˆØ�LŠL˜ sˆLÑ+Ô+ˆØ×!Ò! ! Q¨SÐ!Ñ1Ô1ˆØ×!Ò! ! Q¨SÐ!Ñ1Ô1ˆØ×!Ò! ! V°#Ð!Ñ6Ô6ˆØ×!Ò! ! V°#Ð!Ñ6Ô6ˆØ× Ò   A q¨sÐ Ñ3Ô3ˆØ× Ò   A v°CÐ Ñ8Ô8ˆØ×Ò˜œ¥Ñ&Ô&Ð&Ø×Ò˜œ Ñ*Ô*Ð*Ø×Ò˜œ¥Ñ'Ô'Ð'Ø×Ò˜œ¥Ñ&Ô&Ð&Ø×Ò˜œ Ñ*Ô*Ð*Ø×Ò˜œ Ñ*Ô*Ð*à×Ò�yÑ)Ô)ð 	.ð 	.à×!Ò! '¨1Ñ-Ô-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð ×Ò�yÑ)Ô)ð 	3ð 	3à×!Ò! '¨6Ñ2Ô2Ð2ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3ð ×Ò�yÑ)Ô)ð 	.ð 	.à×!Ò! '¨1Ñ-Ô-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð ×Ò�yÑ)Ô)ð 	*ð 	*à× Ò   A qÑ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð ×Ò�yÑ)Ô)ð 	0ð 	0à× Ò  ¨!¨QÑ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	sZ   Ë'L
Ì
LÌLÌ/MÍMÍMÍ7NÎNÎ!NÎ?O#Ï#O'Ï*O'ÐP,Ð,P0Ð3P0c                 ó¶  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}}}|                     |t          d¬¦  «        }|                     |t          d¬¦  «        }| 	                    |t          d¬¦  «        }	| 
                    |t          d¦  «        }
|                     |
t          d¦  «        }|                     |t          d	¦  «        }|                     |t          d
¦  «        }|                     |t          d¦  «        }|                     |t          d¦  «        }|                     |t          d¦  «        }|                     |t          j        t          ¦  «        d¦  «        }|                     |t          d¦  «        }|                      |j        ¦  «         |                      |d¦  «         d S )Nr³   r‚  r”   r   rg  rh  ÚfbÚfcrk  rl  ÚfdÚfern  r”  r•  ah              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
            )rQ   r   r´   rM   r˜   Útruncr‹   ÚzextrG   ÚsextÚfptruncÚfltÚfpextrH   ÚfptouiÚfptosiÚuitofpÚsitofpÚptrtointÚinttoptrrI   r  r}  r~  rf   )r   rQ   r·   rc  rd  Úfar  r   rg  rh  r#  r$  rk  rl  r%  r&  rn  r”  r•  s                      r   Útest_cast_opsz#TestBuildInstructions.test_cast_opsx  s�  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔ(Ô-¨b¨q¨bÔ1‰ˆˆ1ˆb�#Ø�MŠM˜!�T¨ˆMÑ,Ô,ˆØ�LŠL˜�E¨ˆLÑ,Ô,ˆØ�LŠL˜�E¨ˆLÑ,Ô,ˆØ�_Š_˜R¥ dÑ+Ô+ˆØ�]Š]˜2�s DÑ)Ô)ˆØ�NŠN˜2�u cÑ*Ô*ˆØ�NŠN˜2�t SÑ)Ô)ˆØ�^Š^˜A�s DÑ)Ô)ˆØ�^Š^˜A�s DÑ)Ô)ˆØ×Ò˜S¥%¨Ñ-Ô-ˆØ×Ò˜Q¥¤­tÑ 4Ô 4°cÑ:Ô:ˆØ�OŠO˜A�s CÑ(Ô(ˆØ×Ò˜Ô,Ñ-Ô-Ð-Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó^  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     t          d¬¦  «        }|                     d||dd¦  «        }|                      |j	        t          ¦  «         |  
                    |d¦  «         d S )	Nr³   r‚  rs   r   r‰   Ú	monotonicrg  zˆ            my_block:
                %"c" = alloca i32
                %"d" = atomicrmw add i32* %"c", i32 %".1" monotonic
            )rQ   r   r´   rM   r˜   rû  rG   Ú
atomic_rmwr<   r  rf   r  s          r   Útest_atomicrmwz$TestBuildInstructions.test_atomicrmw™  s­   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø�NŠN�5 sˆNÑ+Ô+ˆØ×Ò˜u a¨¨K¸Ñ=Ô=ˆØ×Ò˜œ¥Ñ'Ô'Ð'Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }|j                             d¬¦  «        }|                     |¦  «         |                      |j        ¦  «         |                      |d¦  «         d S )Nr³   r‚  ÚtargetzE            my_block:
                br label %"target"
            )	rQ   r   r´   rM   rO   Úbranchrí  r~  rf   )r   rQ   r·   Ú	bb_targets       r   Útest_branchz!TestBuildInstructions.test_branch¦  s�   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔ$×7Ò7¸XÐ7ÑFÔFˆ	Ø�Š�yÑ!Ô!Ð!Ø�Š˜Ô+Ñ,Ô,Ð,Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó„  — |                       d¬¦  «        }t          j        |¦  «        }|j                             d¬¦  «        }|j                             d¬¦  «        }|                     t          j        t          d¦  «        ||¦  «         |                      |j	        ¦  «         |  
                    |d¦  «         d S )Nr³   r‚  Úb_trueÚb_falseFza            my_block:
                br i1 false, label %"b_true", label %"b_false"
            )rQ   r   r´   rM   rO   Úcbranchr+  rê  rí  r~  rf   )r   rQ   r·   Úbb_trueÚbb_falses        r   Útest_cbranchz"TestBuildInstructions.test_cbranch±  s¶   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔ"×5Ò5¸8Ð5ÑDÔDˆØÔ#×6Ò6¸IÐ6ÑFÔFˆØ�Š�œ¥D¨%Ñ0Ô0°'¸8ÑDÔDÐDØ�Š˜Ô+Ñ,Ô,Ð,Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óè  — |                       d¬¦  «        }t          j        |¦  «        }|j                             d¬¦  «        }|j                             d¬¦  «        }|                     t          j        t          d¦  «        ||¦  «        }|                     ddg¦  «         |  	                    |j
        ¦  «         |                      |d¦  «         |                      |j        d	¦  «         d S )
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 }
            )rQ   r   r´   rM   rO   rA  r+  rê  Úset_weightsrí  r~  rf   rp   rC   )r   rQ   r·   rB  rC  Úbrs         r   Útest_cbranch_weightsz*TestBuildInstructions.test_cbranch_weights½  sî   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔ"×5Ò5¸8Ð5ÑDÔDˆØÔ#×6Ò6¸IÐ6ÑFÔFˆØ�_Š_�Rœ[­¨uÑ5Ô5°wÀÑIÔIˆØ
�Š˜˜2�wÑÔÐØ�Š˜Ô+Ñ,Ô,Ð,Ø×Ò˜ð !ñ 	ô 	ð 	ð 	×Ò˜GœNð -ñ 	ô 	ð 	ð 	ð 	r   c                 óÔ  — |                       d¬¦  «        }t          j        |¦  «        }|j                             d¬¦  «        }|j                             d¬¦  «        }|                     t          j        |j        |¦  «        ¦  «        }|                     |¦  «         |                     |¦  «         |                      |j	        ¦  «         |  
                    |d¦  «         d S )Nr³   r‚  Úb_1Úb_2z€            my_block:
                indirectbr i8* blockaddress(@"my_func", %"b_1"), [label %"b_1", label %"b_2"]
            )rQ   r   r´   rM   rO   Úbranch_indirectÚBlockAddressÚadd_destinationrí  r~  rf   )r   rQ   r·   Úbb_1Úbb_2Ú
indirectbrs         r   Útest_branch_indirectz*TestBuildInstructions.test_branch_indirectÍ  sã   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔ×2Ò2¸Ð2Ñ>Ô>ˆØÔ×2Ò2¸Ð2Ñ>Ô>ˆØ×,Ò,ÝŒO˜GÔ,¨dÑ3Ô3ñ5ô 5ˆ
à×"Ò" 4Ñ(Ô(Ð(Ø×"Ò" 4Ñ(Ô(Ð(Ø�Š˜Ô+Ñ,Ô,Ð,Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óR  ‡ — ˆ fd„}‰                       d¬¦  «        }t          j        |¦  «        }|                     ¦   «           ||d¦  «         ‰                       d¬¦  «        }t          j        |¦  «        }|                     t          d¦  «        ¦  «          ||d¦  «         ‰                       d¬¦  «        }t          j        |¦  «        }|                     ¦   «         }|                     d|j                             d	¦  «        ¦  «          ||d
¦  «         ‰                       d¬¦  «        }t          j        |¦  «        }|                     t          d¦  «        ¦  «        }|                     d|j                             d	¦  «        ¦  «          ||d¦  «         d S )Nc                 óh   •— ‰                      | j        ¦  «         ‰                     | |¦  «         d S r/   )rí  r~  rf   )rQ   Úexpected_irr   s     €r   Úcheckz1TestBuildInstructions.test_returns.<locals>.checkÝ  s4   ø€ Ø�OŠO˜EÔ/Ñ0Ô0Ð0Ø×Ò˜U KÑ0Ô0Ð0Ð0Ð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
            )	rQ   r   r´   rµ   ÚretrG   r¢   rC   r£   )r   rV  rQ   r·   r‘  s   `    r   Útest_returnsz"TestBuildInstructions.test_returnsÜ  sÀ  ø€ ð	1ð 	1ð 	1ð 	1ð 	1ð —
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØ×ÒÑÔÐØˆˆeð ñ 	ô 	ð 	ð
 —
’
 �
Ñ.Ô.ˆÝ”,˜uÑ%Ô%ˆØ�Š•E˜!‘H”HÑÔÐØˆˆeð ñ 	ô 	ð 	ð —
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØ×ÒÑ!Ô!ˆØ×Ò˜% ¤×!:Ò!:¸2Ñ!>Ô!>Ñ?Ô?Ð?Øˆˆeð ñ 	ô 	ð 	ð
 —
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØ�{Š{�5 ™8œ8Ñ$Ô$ˆØ×Ò˜% ¤×!:Ò!:¸2Ñ!>Ô!>Ñ?Ô?Ð?Øˆˆeð ñ 	ô 	ð 	ð 	ð 	r   c                 óÐ  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|j                             d¬¦  «        }|j                             d¬¦  «        }|j                             d¬¦  «        }|j                             d¬¦  «        }|                     ||¦  «        }	|	                     t          j        t          d¦  «        |¦  «         |	                     t          j        t          d	¦  «        |¦  «         |	                     d|¦  «         |  
                    |j        ¦  «         |                      |d
¦  «         d S )Nr³   r‚  rs   Ú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"]
            )rQ   r   r´   rM   r˜   rO   ÚswitchÚadd_caser+  rG   rí  r~  rf   )
r   rQ   r·   rc  rd  Ú	bb_onzeroÚbb_ononeÚbb_ontwoÚbb_elseÚsws
             r   Útest_switchz!TestBuildInstructions.test_switch  sE  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1ØÔ$×7Ò7¸XÐ7ÑFÔFˆ	ØÔ#×6Ò6¸GÐ6ÑDÔDˆØÔ#×6Ò6¸GÐ6ÑDÔDˆØÔ"×5Ò5¸;Ð5ÑGÔGˆØ�^Š^˜A˜wÑ'Ô'ˆØ
�Š•B”K¥ qÑ)Ô)¨9Ñ5Ô5Ð5Ø
�Š•B”K¥ qÑ)Ô)¨8Ñ4Ô4Ð4à
�Š�A�xÑ Ô Ð Ø�Š˜Ô+Ñ,Ô,Ð,Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó�  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}t          j        t          t          t          f¦  «        }t          j        t          t          fd¬¦  «        }t          j        t          t          t          f¦  «        }t          j
        |j        j        |d¦  «        }t          j
        |j        j        |d¦  «        }	t          j
        |j        j        |d¦  «        }
|                     |||fd	¦  «         |                     |	||fd
¦  «         |                     |
||fd¦  «         |                     |||fdd¬¦  «         |                     |||fd¦  «        }|j                             d¦  «         |                     |||fdd¬¦  «         |                     |||fdd¬¦  «         |                     |||fdd¬¦  «         |                     |||fdd¬¦  «         |                     |||fdd¬¦  «         |                      |d¦  «         d S )Nr³   r‚  rs   Tr…   rj  rk  rl  Ú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Ë   rp  a          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
        )rQ   r   r´   rM   r˜   rF   r+  rG   rH   ÚhlfrJ   rC   rE  rˆ   r‰   rf   )r   rQ   r·   rc  rd  Útp_fÚtp_gÚtp_hrj  rk  rl  ro  s               r   Ú	test_callzTestBuildInstructions.test_call  s5  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1ÝŒ�s¥U­E NÑ3Ô3ˆÝŒ�s¥U H°dÐ;Ñ;Ô;ˆÝŒ�s¥U­E NÑ3Ô3ˆÝŒK˜Ô(Ô/°°sÑ;Ô;ˆÝŒK˜Ô(Ô/°°sÑ;Ô;ˆÝŒK˜Ô(Ô/°°sÑ;Ô;ˆØ�Š�Q˜˜A˜ Ñ(Ô(Ð(Ø�Š�Q˜˜A˜ Ñ(Ô(Ð(Ø�Š�Q˜˜A˜ Ñ(Ô(Ð(Ø�Š�Q˜˜A˜ °HˆÑ=Ô=Ð=Ø Ÿš a¨!¨Q¨Ð1AÑBÔBˆØÔ!×%Ò% jÑ1Ô1Ð1Ø�Š�Q˜˜A˜ 
°VˆÑ<Ô<Ð<Ø�Š�Q˜˜A˜ Ð:JˆÑKÔKÐKØ�Š�Q˜˜A˜ °jˆÑAÔAÐAØ�Š�Q˜˜A˜Ð 2¸.ˆÑIÔIÐIØ�Š�Q˜˜A˜Ð 1ð :Fˆñ 	Gô 	Gð 	Gà×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óÐ  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          j        ¦   «         t          j        ¦   «         gdz  ¦  «        }t          j        |j        |d¦  «        }|                     t          d¬¦  «        }|j         
                    d¦  «        }|                     ||||f¦  «         |                      |d¦  «         dS )	z9
        Function calls with metadata arguments.
        r³   r‚  r•   zllvm.dbg.declarerc  r#   z             my_block:
                %"a" = alloca i32
                call void @"llvm.dbg.declare"(metadata i32* %"a", metadata !0, metadata !0)
            N)rQ   r   r´   rF   rC  ÚMetaDataTyperJ   rC   rû  rG   r£   rE  rf   )r   rQ   r·   Údbg_declare_tyÚdbg_declarerc  rd  s          r   Útest_call_metadataz(TestBuildInstructions.test_call_metadata;  sØ   € ð —
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝœ­¬©¬½¼Ñ9JÔ9JÐ8KÈaÑ8OÑPÔPˆÝ”kØŒNØØñ ô  ˆð �NŠN�5 sˆNÑ+Ô+ˆØŒN×'Ò'¨Ñ+Ô+ˆØ�Š�[ 1 a¨ )Ñ,Ô,Ð,Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óš  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          j        ¦   «         t
                               ¦   «         t
          t
                               ¦   «         f¦  «        }t          j        |j        j	        |d¦  «        }|j
        d                              d¦  «         |                     t
          d¬¦  «        }|                     t
          d¬¦  «        }|                     ||t          j        t
          d¦  «        |fd	d
dœ¬¦  «         |                      |d¦  «         d S )Nr³   r‚  Úfunr   ÚsretÚretvalÚotherrÙ   ©r„  r—   r—   ©r   rs   ©Ú	arg_attrszÆ        my_block:
            %"retval" = alloca i32
            %"other" = alloca i32
            call void @"fun"\(i32\* noalias sret(\(i32\))? %"retval", i32 42, i32\* noalias %"other"\)
        )rQ   r   r´   rF   rC  rG   r»   rJ   rM   rC   r˜   r™   rû  rE  r+  rh   )r   rQ   r·   Úfun_tyrƒ  r…  r†  s          r   Útest_call_attributesz*TestBuildInstructions.test_call_attributesO  s-  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝ”ÝŒK‰MŒM�E×,Ò,Ñ.Ô.µµu×7GÒ7GÑ7IÔ7IÐJñLô LˆåŒk˜'Ô*Ô1°6¸5ÑAÔAˆØŒ�Œ×!Ò! &Ñ)Ô)Ð)Ø—’¥¨H�Ñ5Ô5ˆØ—’�u¨7�Ñ3Ô3ˆØ�ŠØØ•R”[¥¨Ñ+Ô+¨UÐ3à&Øðð ð 	ñ 	
ô 	
ð 	
ð 	×Ò˜uð 'ñ 	ô 	ð 	ð 	ð 	r   c                 óŽ  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          j        ¦   «         d¦  «        }t          j        |j        j        |d¦  «        }|                     |d¦  «         |                     |dd¬¦  «         |                     |dd¬¦  «         |                     |dd¬¦  «         |                     |dd	¬¦  «         |                     |dd
¬¦  «         |                     |dg ¬¦  «         |                     |dd¬¦  «         |  	                    |d¦  «         d S )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"()
        )
rQ   r   r´   rF   rC  rJ   rM   rC   rE  rf   ©r   rQ   r·   r‹  rƒ  s        r   Útest_call_tailz$TestBuildInstructions.test_call_tailg  s9  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝ”¥¤¡¤°Ñ3Ô3ˆÝŒk˜'Ô*Ô1°6¸8ÑDÔDˆà�Š�S˜"ÑÔÐØ�Š�S˜" 5ˆÑ)Ô)Ð)Ø�Š�S˜" 4ˆÑ(Ô(Ð(Ø�Š�S˜" 6ˆÑ*Ô*Ð*Ø�Š�S˜" 8ˆÑ,Ô,Ð,Ø�Š�S˜" :ˆÑ.Ô.Ð.Ø�Š�S˜" 2ˆÑ&Ô&Ð&Ø�Š�S˜" >ˆÑ2Ô2Ð2à×Ò˜ð 
!ñ 
	ô 
	ð 
	ð 
	ð 
	r   c                 ó|  — |                       ¦   «         }t          j        |¦  «        }t          j        t          j        ¦   «         d¦  «        }t          j        |j        j        |d¦  «        }|                      t          ¦  «        5  | 
                    |dddi¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr#   rƒ  r   r„  r‰  )rQ   r   r´   rF   rC  rJ   rM   rC   rì   rÎ   rE  r’  s        r   Útest_invalid_call_attributesz2TestBuildInstructions.test_invalid_call_attributes‚  sâ   € Ø—
’
‘”ˆÝ”,˜uÑ%Ô%ˆÝ”¥¤¡¤°Ñ3Ô3ˆÝŒk˜'Ô*Ô1°6¸5ÑAÔAˆØ×Ò�zÑ*Ô*ð 	9ð 	9à�LŠL˜˜b¨Q°¨KˆLÑ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9s   Â	B1Â1B5Â8B5c                 óâ  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}t          j        t          t          t          f¦  «        }t          j        |j        j	        |d¦  «        }|j         
                    d¬¦  «        }|j         
                    d¬¦  «        }|                     |||f||d¦  «         |                      |d¦  «         d S )	Nr³   r‚  rs   rj  ÚnormalÚunwindri  z£            my_block:
                %"res_f" = invoke float @"f"(i32 %".1", i32 %".2")
                    to label %"normal" unwind label %"unwind"
            )rQ   r   r´   rM   r˜   rF   r+  rG   rJ   rC   rO   Úinvokerf   )	r   rQ   r·   rc  rd  ry  rj  Ú	bb_normalÚ	bb_unwinds	            r   Útest_invokez!TestBuildInstructions.test_invoke‹  sã   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1ÝŒ�s¥U­E NÑ3Ô3ˆÝŒK˜Ô(Ô/°°sÑ;Ô;ˆØÔ$×7Ò7¸XÐ7ÑFÔFˆ	ØÔ$×7Ò7¸XÐ7ÑFÔFˆ	Ø�Š�q˜1˜a˜& )¨Y¸Ñ@Ô@Ð@Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          j        ¦   «         t
                               ¦   «         t
          t
                               ¦   «         f¦  «        }t          j        |j        j	        |d¦  «        }d|_
        |j        d                              d¦  «         |                     t
          d¬¦  «        }|                     t
          d¬¦  «        }|j                             d	¬¦  «        }|j                             d
¬¦  «        }|                     ||t          j        t
          d¦  «        |f||ddddddœ¬¦  «         |                      |d¦  «         d S )Nr³   r‚  rƒ  rm  r   r„  r…  r†  r—  r˜  rÙ   r¹  rË   r‡  r—   rˆ  )rn  rr  ru  rŠ  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"
        )rQ   r   r´   rF   rC  rG   r»   rJ   rM   rC   Úcalling_conventionr˜   r™   rû  rO   r™  r+  rh   )	r   rQ   r·   r‹  rƒ  r…  r†  rš  r›  s	            r   Útest_invoke_attributesz,TestBuildInstructions.test_invoke_attributesš  sv  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝ”ÝŒK‰MŒM�E×,Ò,Ñ.Ô.µµu×7GÒ7GÑ7IÔ7IÐJñLô LˆåŒk˜'Ô*Ô1°6¸5ÑAÔAˆØ!)ˆÔØŒ�Œ×!Ò! &Ñ)Ô)Ð)Ø—’¥¨H�Ñ5Ô5ˆØ—’�u¨7�Ñ3Ô3ˆØÔ$×7Ò7¸XÐ7ÑFÔFˆ	ØÔ$×7Ò7¸XÐ7ÑFÔFˆ	Ø�ŠØØ•R”[¥¨Ñ+Ô+¨UÐ3ØØØØØà&Øðð ð 	ñ 	
ô 	
ð 	
ð 	×Ò˜uð 'ñ 	ô 	ð 	ð 	ð 	r   c           
      ó¬  — |                       d¬¦  «        }t          j        |¦  «        }|                     t          j        t
          t                               ¦   «         g¦  «        d¦  «        }t          j        |j	        j
        t                               ¦   «         d¦  «        }d|_        |                     t          j        |¦  «        ¦  «         |                     t          j        t          j        t          j        |j        d¦  «        |g¦  «        ¦  «        ¦  «         |                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  ÚlpÚ_ZTIiTr   zÖ            my_block:
                %"lp" = landingpad {i32, i8*}
                    catch i8** @"_ZTIi"
                    filter [1 x i8**] [i8** @"_ZTIi"]
                resume {i32, i8*} %"lp"
            )rQ   r   r´   Ú
landingpadr  rG   r‹   r»   r)  rM   rC   rp  Ú
add_clauseÚCatchClauseÚFilterClauser+  Ú	ArrayTyper  Úresumerf   )r   rQ   r·   r¡  Úint_typeinfos        r   Útest_landingpadz%TestBuildInstructions.test_landingpad»  s;  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØ×Ò¥Ô 4µeÝ6:·o²oÑ6GÔ6Gð6Iñ !Jô !JØKOñQô QˆåÔ(¨Ô)9Ô)@Ý)-¯ªÑ):Ô):¸GñEô Eˆà'+ˆÔ$Ø
�Š•b”n \Ñ2Ô2Ñ3Ô3Ð3Ø
�Š•b”o¥b¤kµ"´,ØÔ˜qñ3"ô 3"Ø$0 >ñ'3ô '3ñ 4ô 4ñ 	5ô 	5ð 	5à�Š�rÑÔÐØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     d||d¬¦  «        }|                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  rs   rÖ  r   z…            my_block:
                %"c" = icmp sgt i32 %".1", %".2"
                call void @"llvm.assume"(i1 %"c")
            )rQ   r   r´   rM   r˜   rÛ  rÁ   rf   rÉ  s         r   Útest_assumez!TestBuildInstructions.test_assumeÏ  s“   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø×Ò  Q¨°ÐÑ4Ô4ˆØ�Š�qÑÔÐØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óŠ  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}d|_        d|_        t          j        |j        d¦  «        }t          j        |t          j	        ¦  «        }t          j
        d¦  «        }|                     || |d¦  «        d¬¦  «        }|                     || |d	¦  «        d
¬¦  «        }|                      |d¦  «         |                     d¦  «        }|                     |¦  «         |                     |¦  «         t          j        |d	dg¦  «        }|                     |||d¬¦  «         |                      |d¦  «         |                     d¦  «        }|                     |¦  «         |                     |¦  «         |                     ||d¬¦  «         |                      |d¦  «         |                     d¦  «        }|                     |¦  «         |                     |¦  «         |                     | |d¦  «        d¬¦  «        }	|                     | |d	¦  «        d¬¦  «        }
|                      |d¦  «         |                     |                     |	|
¦  «        ¦  «         |                      |j        ¦  «         d S )NÚinsert_blockr‚  rs   rc  rd  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
            )rQ   r   r´   rM   r˜   rK   Ú
VectorTyper  r+  rÌ  r-  Úinsert_elementrf   rO   r;  Úposition_at_endÚshuffle_vectorr‰   Úextract_elementrY  r3   rC   )r   rQ   r·   rc  rd  ÚvectyÚvecÚidxtyÚmaskr   rg  s              r   Útest_vector_opsz%TestBuildInstructions.test_vector_opsÛ  s¾  € Ø—
’
 �
Ñ/Ô/ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1ØˆŒØˆŒå”˜aœf aÑ(Ô(ˆÝŒk˜%¥¤Ñ.Ô.ˆÝ”
˜2‘”ˆØ×$Ò$ S¨!¨U¨U°1©X¬X¸FÐ$ÑCÔCˆØ×$Ò$ S¨!¨U¨U°1©X¬X¸FÐ$ÑCÔCˆà×Ò˜ð !ñ 	ô 	ð 	ð ×*Ò*¨?Ñ;Ô;ˆØ�Š�uÑÔÐØ×Ò Ñ&Ô&Ð&åŒ{˜5 1 a &Ñ)Ô)ˆØ×Ò˜s C¨°FÐÑ;Ô;Ð;à×Ò˜ð !ñ 	ô 	ð 	ð
 ×*Ò*¨;Ñ7Ô7ˆØ�Š�uÑÔÐØ×Ò Ñ&Ô&Ð&à�Š�C˜ 5ˆÑ)Ô)Ð)à×Ò˜ð !ñ 	ô 	ð 	ð
 ×*Ò*¨?Ñ;Ô;ˆØ�Š�uÑÔÐØ×Ò Ñ&Ô&Ð&à×#Ò# C¨¨¨q©¬¸Ð#Ñ>Ô>ˆØ×#Ò# C¨¨¨q©¬¸Ð#Ñ>Ô>ˆà×Ò˜ð !ñ 	ô 	ð 	ð 	�Š�G—K’K  1Ñ%Ô%Ñ&Ô&Ð&Ø×Ò˜Wœ^Ñ,Ô,Ð,Ð,Ð,r   c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     |d¬¦  «        }|                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  r’   r   z}            my_block:
                %"c" = call i64 @"llvm.bitreverse.i64"(i64 5)
                ret i64 %"c"
            )rQ   r   r´   r+  rÞ   Ú
bitreverserY  rf   ©r   rQ   r·   rc  r   s        r   Útest_bitreversez%TestBuildInstructions.test_bitreverse  s…   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜qÑ!Ô!ˆØ×Ò˜q sÐÑ+Ô+ˆØ�Š�A‰ŒˆØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óp  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                      t          ¦  «        5 }|                     |d¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j
        ¦  «        ¦  «         d S )Nr³   r‚  r’   r   ú#expected an integer type, got float)rQ   r   r´   r+  r+  rì   r   rÃ  r*   r(   r­  ©r   rQ   r·   rc  Úraisess        r   Útest_bitreverse_wrongtypez/TestBuildInstructions.test_bitreverse_wrongtype!  så   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜QÑÔˆà×Ò�yÑ)Ô)ð 	,¨VØ×Ò˜q sÐÑ+Ô+Ð+ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,à�ŠØ1Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	#ð 	#ó   ÁBÂBÂ
Bc                 ó  — |                       d¬¦  «        }t          j        |¦  «        }|                      t          ¦  «        5 }|                     dd ¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         |                      t          ¦  «        5 }|                     d d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         |                     dd ¦  «         |                     dd¦  «         |                     d	d¦  «         |                     d
¦  «         | 	                    ¦   «          |  
                    |d¦  «         d S )Nr³   r‚  r6  z#Invalid fence ordering "monotonic"!zInvalid fence ordering "None"!ÚacquireÚreleaseÚsinglethreadÚacq_relrù  zç            my_block:
                fence acquire
                fence syncscope("singlethread") release
                fence syncscope("singlethread") acq_rel
                fence seq_cst
                ret void
            )rQ   r   r´   rì   rÎ   Úfencer*   r(   r­  rµ   rf   )r   rQ   r·   rÉ  s       r   Ú
test_fencez TestBuildInstructions.test_fence,  só  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØ×Ò�zÑ*Ô*ð 	-¨fØ�MŠM˜+ tÑ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-à�ŠØ3Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð ×Ò�zÑ*Ô*ð 	-¨fØ�MŠM˜$ Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-à�ŠØ.Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	�Š�i Ñ&Ô&Ð&Ø�Š�i Ñ0Ô0Ð0Ø�Š�i Ñ0Ô0Ð0Ø�Š�iÑ Ô Ð Ø×ÒÑÔÐØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	s$   ÁA(Á(A,Á/A,Â5CÃCÃCc                 óf  — |                       d¬¦  «        }t          j        |¦  «        }|                      t          ¦  «        5  |                     d¦  «         d d d ¦  «         n# 1 swxY w Y   |                     d¦  «         |                     ¦   «          |                      |d¦  «         d S )Nr³   r‚  zso
many linesz
my commentzX            my_block:
                ; my comment
                ret void
            )rQ   r   r´   rì   ÚAssertionErrorÚcommentrµ   rf   ©r   rQ   r·   s      r   Útest_commentz"TestBuildInstructions.test_commentG  sí   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØ×Ò�~Ñ.Ô.ð 	.ð 	.Ø�OŠOÐ,Ñ-Ô-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.à�Š˜Ñ%Ô%Ð%Ø×ÒÑÔÐØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	s   ÁA'Á'A+Á.A+c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     |d¬¦  «        }|                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  r’   r   zx            my_block:
                %"c" = call i32 @"llvm.bswap.i32"(i32 5)
                ret i32 %"c"
            )rQ   r   r´   r+  rG   ÚbswaprY  rf   rÄ  s        r   Ú
test_bswapz TestBuildInstructions.test_bswapT  ó‚   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜qÑ!Ô!ˆØ�MŠM˜! #ˆMÑ&Ô&ˆØ�Š�A‰ŒˆØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     |d¬¦  «        }|                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  r’   r   zx            my_block:
                %"c" = call i16 @"llvm.ctpop.i16"(i16 5)
                ret i16 %"c"
            )rQ   r   r´   r+  Úint16ÚctpoprY  rf   rÄ  s        r   Ú
test_ctpopz TestBuildInstructions.test_ctpop`  rÛ  r   c                 óH  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }t          j        t
          d¦  «        }|                     ||d¬¦  «        }|                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  r’   r   r   z}            my_block:
                %"c" = call i16 @"llvm.ctlz.i16"(i16 5, i1 1)
                ret i16 %"c"
            )	rQ   r   r´   r+  rÝ  rê  ÚctlzrY  rf   rÉ  s         r   Ú	test_ctlzzTestBuildInstructions.test_ctlzl  ó•   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜qÑ!Ô!ˆÝŒK�˜aÑ Ô ˆØ�LŠL˜˜A CˆLÑ(Ô(ˆØ�Š�A‰ŒˆØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     |d¬¦  «        }|                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  g      @rd  z•            my_block:
                %"b" = call i16 @"llvm.convert.to.fp16.f32"(float 0x4014000000000000)
                ret i16 %"b"
            )rQ   r   r´   r+  r+  Úconvert_to_fp16rY  rf   rµ  s        r   Útest_convert_to_fp16_f32z.TestBuildInstructions.test_convert_to_fp16_f32y  s…   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜SÑ!Ô!ˆØ×#Ò# A¨CÐ#Ñ0Ô0ˆØ�Š�A‰ŒˆØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óp  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                      t          ¦  «        5 }|                     |d¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j
        ¦  «        ¦  «         d S )Nr³   r‚  r’   rd  úexpected a float type, got i16)rQ   r   r´   r+  rÝ  rì   r   rå  r*   r(   r­  rÈ  s        r   Ú"test_convert_to_fp16_f32_wrongtypez8TestBuildInstructions.test_convert_to_fp16_f32_wrongtype…  så   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜qÑ!Ô!ˆà×Ò�yÑ)Ô)ð 	1¨VØ×#Ò# A¨CÐ#Ñ0Ô0Ð0ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1à�ŠØ,Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	#ð 	#rË  c                 ó  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     |dt          ¬¦  «        }|                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  r’   rd  ©rK   Útozˆ            my_block:
                %"b" = call float @"llvm.convert.from.fp16.f32"(i16 5)
                ret float %"b"
            )	rQ   r   r´   r+  rÝ  Úconvert_from_fp16r+  rY  rf   rµ  s        r   Útest_convert_from_fp16_f32z0TestBuildInstructions.test_convert_from_fp16_f32�  s‡   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜qÑ!Ô!ˆØ×%Ò% a¨cµcÐ%Ñ:Ô:ˆØ�Š�A‰ŒˆØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óp  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                      t          ¦  «        5 }|                     |d¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j
        ¦  «        ¦  «         d S )Nr³   r‚  ç      @rd  zexpected a float return type©rQ   r   r´   r+  r+  rì   r   rí  r*   r(   r­  rÈ  s        r   Ú!test_convert_from_fp16_f32_notypez7TestBuildInstructions.test_convert_from_fp16_f32_notypeœ  så   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜SÑ!Ô!ˆà×Ò�yÑ)Ô)ð 	3¨VØ×%Ò% a¨cÐ%Ñ2Ô2Ð2ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3à�ŠØ*Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	#ð 	#rË  c                 ó|  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                      t          ¦  «        5 }|                     |dt          ¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j
        ¦  «        ¦  «         d S )Nr³   r‚  rð  rd  rë  zexpected an i16 type, got floatrñ  rÈ  s        r   Ú$test_convert_from_fp16_f32_wrongtypez:TestBuildInstructions.test_convert_from_fp16_f32_wrongtype§  sç   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜SÑ!Ô!ˆà×Ò�yÑ)Ô)ð 	;¨VØ×%Ò% a¨cµcÐ%Ñ:Ô:Ð:ð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;à�ŠØ-Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	#ð 	#ó   ÁB	Â	BÂBc                 ó|  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                      t          ¦  «        5 }|                     |dt          ¬¦  «         d d d ¦  «         n# 1 swxY w Y   |  	                    dt          |j        ¦  «        ¦  «         d S )Nr³   r‚  rð  rd  rë  rè  )rQ   r   r´   r+  r+  rì   r   rí  rÝ  r*   r(   r­  rÈ  s        r   Ú%test_convert_from_fp16_f32_wrongtype2z;TestBuildInstructions.test_convert_from_fp16_f32_wrongtype2²  sç   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜SÑ!Ô!ˆà×Ò�yÑ)Ô)ð 	=¨VØ×%Ò% a¨cµeÐ%Ñ<Ô<Ð<ð	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=à�ŠØ,Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	#ð 	#rõ  c                 óH  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }t          j        t
          d¦  «        }|                     ||d¬¦  «        }|                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  r’   r   r   z}            my_block:
                %"c" = call i64 @"llvm.cttz.i64"(i64 5, i1 1)
                ret i64 %"c"
            )	rQ   r   r´   r+  rÞ   rê  ÚcttzrY  rf   rÉ  s         r   Ú	test_cttzzTestBuildInstructions.test_cttz½  rã  r   c                 ó¦  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }t          j        t
          d¦  «        }|                      t          ¦  «        5 }|                     ||d¬¦  «         d d d ¦  «         n# 1 swxY w Y   |  	                    dt          |j        ¦  «        ¦  «         d S )Nr³   r‚  r’   r•   r   zexpected an i1 type, got i32)rQ   r   r´   r+  rÞ   rG   rì   r   rù  r*   r(   r­  ©r   rQ   r·   rc  rd  rÉ  s         r   Útest_cttz_wrongflagz)TestBuildInstructions.test_cttz_wrongflagÊ  sõ   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜qÑ!Ô!ˆÝŒK�˜qÑ!Ô!ˆà×Ò�yÑ)Ô)ð 	)¨VØ�LŠL˜˜A CˆLÑ(Ô(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)à�ŠØ*Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	#ð 	#ó   Á9BÂB"Â%B"c                 ó¦  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }t          j        t
          d¦  «        }|                      t          ¦  «        5 }|                     ||d¬¦  «         d d d ¦  «         n# 1 swxY w Y   |  	                    dt          |j        ¦  «        ¦  «         d S )Nr³   r‚  r’   r   r   rÇ  )rQ   r   r´   r+  r+  rê  rì   r   rù  r*   r(   r­  rü  s         r   Útest_cttz_wrongtypez)TestBuildInstructions.test_cttz_wrongtypeÖ  sõ   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜QÑÔˆÝŒK�˜aÑ Ô ˆà×Ò�yÑ)Ô)ð 	)¨VØ�LŠL˜˜A CˆLÑ(Ô(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)à�ŠØ1Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	#ð 	#rþ  c                 ó~  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }t          j        t          d¦  «        }t          j        t          d¦  «        }|                     |||d¬¦  «        }|                     |¦  «         |                      |d¦  «         d S )Nr³   r‚  r’   r   rs   ÚfmazÅ            my_block:
                %"fma" = call float @"llvm.fma.f32"(float 0x4014000000000000, float 0x3ff0000000000000, float 0x4000000000000000)
                ret float %"fma"
            )rQ   r   r´   r+  r+  r  rY  rf   )r   rQ   r·   rc  rd  r   r  s          r   Útest_fmazTestBuildInstructions.test_fmaâ  s«   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜QÑÔˆÝŒK�˜QÑÔˆÝŒK�˜QÑÔˆØ�kŠk˜!˜Q ¨ˆkÑ.Ô.ˆØ�Š�CÑÔÐØ×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   c                 óÜ  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }t          j        t          d¦  «        }t          j        t          d¦  «        }|                      t          ¦  «        5 }|                     |||d¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j
        ¦  «        ¦  «         d S )Nr³   r‚  r’   r   rs   r  z(expected an floating point type, got i32)rQ   r   r´   r+  rG   rì   r   r  r*   r(   r­  ©r   rQ   r·   rc  rd  r   rÉ  s          r   Útest_fma_wrongtypez(TestBuildInstructions.test_fma_wrongtypeð  s  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜qÑ!Ô!ˆÝŒK�˜qÑ!Ô!ˆÝŒK�˜qÑ!Ô!ˆà×Ò�yÑ)Ô)ð 	-¨VØ�KŠK˜˜1˜a eˆKÑ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-à�ŠØ6Ý�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	#ð 	#ó   ÂB9Â9B=Ã B=c                 óÜ  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }t          j        t
          d¦  «        }t          j        t          d¦  «        }|                      t          ¦  «        5 }|                     |||d¬¦  «         d d d ¦  «         n# 1 swxY w Y   |  	                    dt          |j        ¦  «        ¦  «         d S )Nr³   r‚  r’   r   rs   r  z7expected types to be the same, got float, double, float)rQ   r   r´   r+  r+  rH   rì   r   r  r*   r(   r­  r  s          r   Útest_fma_mixedtypesz)TestBuildInstructions.test_fma_mixedtypesý  s  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜QÑÔˆÝŒK�˜QÑÔˆÝŒK�˜QÑÔˆà×Ò�yÑ)Ô)ð 	-¨VØ�KŠK˜˜1˜a eˆKÑ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-à�ŠØEÝ�Ô Ñ!Ô!ñ	#ô 	#ð 	#ð 	#ð 	#r  c                 óP   — d„ }dD ]}t          j         ||¦  «        ¦  «         Œ d S )Nc                 óö  — t          j        t          j        d¦  «        t          j        d¦  «                             ¦   «         t          j        d¦  «        g¦  «        }t          j        ¦   «         }t          j        ||d¬¦  «        }|                     ¦   «         }|                     ¦   «         }|                     ¦   «         }t          j        ¦   «         }|                     |¦  «         | 	                    |¦  «         |                     |¦  «         | 
                    t          j        d¦  «        ¦  «        }|                     t          j        |j        d¦  «        |¦  «         | 
                    t          j        d¦  «        ¦  «        }	|	                     t          j        |	j        d¦  «        |¦  «         |j        d                              | ¦  «         |                     |j        d         |g¦  «        }
|                     |
¦  «        }|                     |	|¦  «        }|	                     ||¦  «         |                     |t          j        |j        d¦  «        ¦  «        }|                     ||¦  «         |                     d||j        d         ¦  «        }|                     |||¦  «         |                     |¦  «         |                     |¦  «         t-          |¦  «        S )Nr	   r´  r‚  r   r   rÔ  )r   rF   r-  r»   rA   rJ   rO   r´   rº  r;  ró  rô  r+  r  r˜   r™   r  rý  r‰   rÚ  rA  rY  r(   )Ú	attr_namerL   rC   rP   Úbb_entryÚbb_loopÚbb_exitr·   ÚindexÚaccumr  ÚvalueÚaddedÚindexp1Úconds                  r   Úgen_codez;TestBuildInstructions.test_arg_attributes.<locals>.gen_code  sd  € Ý”?¥2¤:¨b¡>¤>µB´J¸r±N´N×4MÒ4MÑ4OÔ4OÝ46´J¸r±N´Nð4Dñ Eô EˆDå”Y‘[”[ˆFå”;˜v t°%Ð8Ñ8Ô8ˆDà×.Ò.Ñ0Ô0ˆHØ×-Ò-Ñ/Ô/ˆGØ×-Ò-Ñ/Ô/ˆGå”l‘n”nˆGØ×#Ò# HÑ-Ô-Ð-à�NŠN˜7Ñ#Ô#Ð#Ø×#Ò# GÑ,Ô,Ð,à—K’K¥¤
¨2¡¤Ñ/Ô/ˆEØ×Ò�rœ{¨5¬:°qÑ9Ô9¸8ÑDÔDÐDØ—K’K¥¤
¨2¡¤Ñ/Ô/ˆEØ×Ò�rœ{¨5¬:°qÑ9Ô9¸8ÑDÔDÐDàŒI�aŒL×&Ò& yÑ1Ô1Ð1Ø—+’+˜dœi¨œl¨U¨GÑ4Ô4ˆCØ—L’L Ñ%Ô%ˆEà—K’K  uÑ-Ô-ˆEØ×Ò˜u gÑ.Ô.Ð.à—k’k %­¬°U´ZÀÑ)CÔ)CÑDÔDˆGØ×Ò˜w¨Ñ0Ô0Ð0à×(Ò(¨¨g°t´yÀ´|ÑDÔDˆDØ�OŠO˜D '¨7Ñ3Ô3Ð3à×#Ò# GÑ,Ô,Ð,Ø�KŠK˜ÑÔÐå�v‘;”;Ðr   )ÚbyrefÚbyvalÚelementtypeÚimmargÚinallocaÚinregÚnestr—   Ú	nocaptureÚnofreer–   ÚnoundefÚpreallocatedÚreturnedÚsignextÚ
swiftasyncÚ
swifterrorÚ	swiftselfr‘   )r0   r1   )r   r  r  s      r   Útest_arg_attributesz)TestBuildInstructions.test_arg_attributes
  sM   € ð&	ð &	ð &	ðP
ð 	5ð 	5ˆIõ, Ô  ¨Ñ 3Ô 3Ñ4Ô4Ð4Ð4ð-	5ð 	5r   N)<rx   ry   rz   r{   ÚmaxDiffr’  r°  r¶  r¼  rÄ  rÊ  rÐ  rÜ  rè  rî  r÷  r  r  r  r  r  r!  r4  r8  r=  rD  rH  rR  rZ  rg  r|  r�  rŒ  r“  r•  rœ  rŸ  rª  r¬  rÁ  rÅ  rÊ  rÒ  r×  rÚ  rß  râ  ræ  ré  rî  rò  rô  r÷  rú  rý  r   r  r  r	  r'  r#   r   r   rŽ  rŽ  ½  sh  € € € € € ðð ð €Gð=ð =ð =ð/ð /ð /ðbð ð ðð ð ðð ð ð(ð ð ðð ð ð$#ð #ð #ðJ+ð +ð +ðZð ð ðð ð ð/ð /ð /ðbð ð ðð ð ð"ð ð ð&ð ð ð&;ð ;ð ;ðzð ð ðBð ð ð	ð 	ð 	ð
ð 
ð 
ðð ð ð ð ð ð&ð &ð &ðPð ð ð&"ð "ð "ðHð ð ð(ð ð ð0ð ð ð69ð 9ð 9ðð ð ðð ð ðBð ð ð(
ð 
ð 
ð8-ð 8-ð 8-ðt
ð 
ð 
ð	#ð 	#ð 	#ðð ð ð6ð ð ð
ð 
ð 
ð
ð 
ð 
ðð ð ð
ð 
ð 
ð	#ð 	#ð 	#ð
ð 
ð 
ð	#ð 	#ð 	#ð	#ð 	#ð 	#ð	#ð 	#ð 	#ðð ð ð
#ð 
#ð 
#ð
#ð 
#ð 
#ðð ð ð#ð #ð #ð#ð #ð #ð?5ð ?5ð ?5ð ?5ð ?5r   rŽ  c                   óT   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )ÚTestBuilderMiscz=
    Test various other features of the IRBuilder class.
    c                 óx  — |                       d¬¦  «        }t          j        |¦  «        }|                      |j        |j        ¦  «         |                      |j        t          j        ¦  «         |                      |j        |j        j        ¦  «         |                      |j        t          j	        ¦  «         d S )Nry  r‚  )
rQ   r   r´   r:   rM   r{  ÚassertIsInstancerJ   rC   rA   rÖ  s      r   r€  zTestBuilderMisc.test_attributesR  s“   € Ø—
’
 �
Ñ(Ô(ˆÝ”,˜uÑ%Ô%ˆØ�Š�gÔ&¨¬Ñ5Ô5Ð5Ø×Ò˜gÔ.µ´Ñ<Ô<Ð<Ø�Š�g”n e¤lÔ&9Ñ:Ô:Ð:Ø×Ò˜gœn­b¬iÑ8Ô8Ð8Ð8Ð8r   c                 óV  — |                       d¬¦  «        }t          j        |¦  «        }|j        j        d d…         \  }}|                     ||d¦  «         |                     d¬¦  «        }|                     |¦  «        5  |                     ||d¦  «         | 	                    ¦   «         5  | 
                    ||d¦  «         d d d ¦  «         n# 1 swxY w Y   |                     ||d¦  «         |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |                     ||d	¦  «         |                     |¦  «        5  |                     ||d
¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |d¦  «         |                      |d¦  «         d S )Nr³   r‚  rs   r   rè   rg  rh  rj  rk  rl  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"
            )rQ   r   r´   rM   r˜   r‰   rO   Ú
goto_blockrŸ  Úgoto_entry_blockr   r   r;  rˆ  r¡  rf   )r   rQ   r·   rc  rd  Úbb_news         r   Útest_goto_blockzTestBuilderMisc.test_goto_blockZ  sm  € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØÔÔ$ R a RÔ(‰ˆˆ1Ø�Š�A�q˜#ÑÔÐØ×+Ò+°Ð+Ñ7Ô7ˆØ×Ò Ñ'Ô'ð 	#ð 	#Ø�LŠL˜˜A˜sÑ#Ô#Ð#Ø×)Ò)Ñ+Ô+ð 'ð 'Ø—’˜A˜q #Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'à�LŠL˜˜A˜sÑ#Ô#Ð#Ø�NŠN˜6Ñ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	�Š�A�q˜#ÑÔÐØ×Ò Ñ'Ô'ð 	$ð 	$Ø�LŠL˜˜A˜sÑ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$à×Ò˜ð !ñ 	ô 	ð 	ð 	×Ò˜ð "ñ 	ô 	ð 	ð 	ð 	sH   Â,DÂ0CÃDÃC	ÃDÃC	Ã/DÄDÄDÅE2Å2E6Å9E6c                 ó�  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     ||d¦  «        }|                     |¦  «        5 }|                     ||d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |j         |¦  «         |                     ||d¦  «        }|                     |¦  «        5  |                     ||d¦  «         |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |  	                    |j
        d¦  «         d S )	NÚoner‚  r   rc  rd  r   rg  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:
            )rQ   r   r´   r+  rê  r‰   Úif_thenr:   r;  rw   rM   )r   rQ   r·   r  rc  Úbbendr   s          r   Útest_if_thenzTestBuilderMisc.test_if_thenw  s®  € Ø—
’
 �
Ñ&Ô&ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜aÑ Ô ˆØ�KŠK˜˜1˜cÑ"Ô"ˆØ�_Š_˜QÑÔð 	# 5Ø�KŠK˜˜1˜cÑ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	�Š�g”m UÑ+Ô+Ð+Ø�KŠK˜˜1˜cÑ"Ô"ˆØ�_Š_˜QÑÔð 	"ð 	"Ø�KŠK˜˜1˜cÑ"Ô"Ð"Ø�NŠN˜5Ñ!Ô!Ð!ð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	×Ò˜WÔ-ð 0ñ 	ô 	ð 	ð 	ð 	s$   Á1BÂBÂBÃ'-D Ä D$Ä'D$c                 ó*  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     ||d¦  «        }|                     |¦  «        5  |                     ||d¦  «        }|                     |¦  «        5  |                     ||d¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                     ¦   «          |                      |j	        d¦  «         d S )Nr3  r‚  r   rc  rd  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"
            )
rQ   r   r´   r+  rê  r‰   r4  rµ   rw   rM   )r   rQ   r·   r  rc  rd  s         r   Útest_if_then_nestedz#TestBuilderMisc.test_if_then_nested•  sƒ  € à—
’
 �
Ñ&Ô&ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜aÑ Ô ˆØ�KŠK˜˜1˜cÑ"Ô"ˆØ�_Š_˜QÑÔð 	'ð 	'Ø—’˜A˜q #Ñ&Ô&ˆAØ—’ Ñ#Ô#ð 'ð 'Ø—’˜A˜q #Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	×ÒÑÔÐØ×Ò˜WÔ-ð 0ñ 	ô 	ð 	ð 	ð 	s6   Á1-CÂCÂ6CÃC	ÃCÃ	C	Ã
CÃCÃ Cc           	      ón  — d}|                       |¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     ||d¦  «        }|                     |¦  «        5  |                     ||d¦  «        }|                     |¦  «        5  |                     ||d¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                     ¦   «          |                      |j	        d 
                    ||d d…         d	z   ¬
¦  «        ¦  «         d S )NÚPLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongr‚  r   rc  rd  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)rQ   r   r´   r+  rê  r‰   r4  rµ   rw   rM   r¶   )r   r<  rQ   r·   r  rc  rd  s          r   Útest_if_then_long_labelz'TestBuilderMisc.test_if_then_long_label°  s­  € Ø ˆ
Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜aÑ Ô ˆØ�KŠK˜˜1˜cÑ"Ô"ˆØ�_Š_˜QÑÔð 	'ð 	'Ø—’˜A˜q #Ñ&Ô&ˆAØ—’ Ñ#Ô#ð 'ð 'Ø—’˜A˜q #Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	×ÒÑÔÐØ×Ò˜WÔ-ð 0÷ ’ *°J¸sÀ¸s´OÀdÑ4J�ÑKÔKñ	Mô 	Mð 	Mð 	Mð 	Ms6   Á3-CÂ CÂ8CÃC	ÃCÃC	ÃCÃCÃ"Cc                 óª   ‡ — ˆ fd„} |d¦  «        }‰                       |j        d¦  «          |d¦  «        }‰                       |j        d¦  «         d S )Nc                 ó  •— ‰                      d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     || ¬¦  «        5  	 d d d ¦  «         n# 1 swxY w Y   ‰                     |d¦  «         |S )Nr3  r‚  r   ©Úlikelyzp                one:
                    br i1 0, label %"one.if", label %"one.endif", !prof !0
                )rQ   r   r´   r+  rê  r4  rf   )rB  rQ   r·   r  r   s       €r   rV  z2TestBuilderMisc.test_if_then_likely.<locals>.checkÌ  sÊ   ø€ Ø—J’J E�JÑ*Ô*ˆEÝ”l 5Ñ)Ô)ˆGÝ”�D !Ñ$Ô$ˆAØ—’ ¨6�Ñ2Ô2ð ð Øðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à×Ò˜Uð %ñ ô ð ð ˆNs   ÁA+Á+A/Á2A/TúC            !0 = !{ !"branch_weights", i32 99, i32 1 }
            FúC            !0 = !{ !"branch_weights", i32 1, i32 99 }
            ©rp   rC   ©r   rV  r·   s   `  r   Útest_if_then_likelyz#TestBuilderMisc.test_if_then_likelyË  s†   ø€ ð
	ð 
	ð 
	ð 
	ð 
	ð �%˜‘+”+ˆØ×Ò˜GœNð -ñ 	ô 	ð 	ð �%˜‘,”,ˆØ×Ò˜GœNð -ñ 	ô 	ð 	ð 	ð 	r   c                 ó0  — |                       d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     ||d¦  «        }|                     |¦  «        5 \  }}|5  |                     ||d¦  «         d d d ¦  «         n# 1 swxY w Y   |5  |                     ||d¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                     |¦  «        5 \  }}|5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |  	                    |j
        d¦  «         d S )Nr3  r‚  r   rc  rd  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:
            )rQ   r   r´   r+  rê  r‰   Úif_elser;  rµ   rw   rM   )r   rQ   r·   r  rc  Úthenr_  s          r   Útest_if_elsezTestBuilderMisc.test_if_elseà  s  € Ø—
’
 �
Ñ&Ô&ˆÝ”,˜uÑ%Ô%ˆÝŒK�˜aÑ Ô ˆØ�KŠK˜˜1˜cÑ"Ô"ˆØ�_Š_˜QÑÔð 	'Ñ#4 D¨)Øð 'ð 'Ø—’˜A˜q #Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'àð 'ð 'Ø—’˜A˜q #Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð �_Š_˜QÑÔð 	#Ñ#4 D¨)Øð &ð &Ø—’˜uÑ%Ô%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &àð #ð #Ø× Ò Ñ"Ô"Ð"ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	×Ò˜WÔ-ð 0ñ 	ô 	ð 	ð 	ð 	s´   Á1C#Á7BÂC#ÂB	ÂC#Â"B	Â#C#Â(CÃ C#ÃC	ÃC#ÃC	ÃC#Ã#C'Ã*C'ÄE0Ä	D+ÄE0Ä+D/	Ä/E0Ä2D/	Ä3E0Ä8EÅE0ÅE	ÅE0Å E	Å!E0Å0E4Å7E4c                 óª   ‡ — ˆ fd„} |d¦  «        }‰                       |j        d¦  «          |d¦  «        }‰                       |j        d¦  «         d S )Nc                 óä  •— ‰                      d¬¦  «        }t          j        |¦  «        }t          j        t          d¦  «        }|                     || ¬¦  «        5 \  }}|5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   ‰                     |j	        d¦  «         |S )Nr3  r‚  r   rA  zý                one:
                    br i1 0, label %"one.if", label %"one.else", !prof !0
                one.if:
                    br label %"one"
                one.else:
                    ret void
                one.endif:
                )
rQ   r   r´   r+  rê  rI  r;  rµ   rw   rM   )rB  rQ   r·   r  rJ  r_  r   s         €r   rV  z2TestBuilderMisc.test_if_else_likely.<locals>.check  s¨  ø€ Ø—J’J E�JÑ*Ô*ˆEÝ”l 5Ñ)Ô)ˆGÝ”�D !Ñ$Ô$ˆAØ—’ ¨6�Ñ2Ô2ð 'Ñ6G°t¸YØð *ð *Ø—N’N 5Ñ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *àð 'ð 'Ø×$Ò$Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð
 × Ò  Ô!1ð 4ñ ô ð ð ˆNsZ   ÁC
Á#BÁ9C
ÂB		Â	C
ÂB		ÂC
ÂB3Â'C
Â3B7	Â7C
Â:B7	Â;C
Ã
CÃCTrC  FrD  rE  rF  s   `  r   Útest_if_else_likelyz#TestBuilderMisc.test_if_else_likely  s†   ø€ ð	ð 	ð 	ð 	ð 	ð& �%˜‘+”+ˆØ×Ò˜GœNð -ñ 	ô 	ð 	ð �%˜‘,”,ˆØ×Ò˜GœNð -ñ 	ô 	ð 	ð 	ð 	r   c                 óü  — |                       ¦   «         }t          j        ¦   «         }t          j        t          d¦  «        }|                     d¬¦  «        }|                     d¬¦  «        }|                     d¬¦  «        }|                     |¦  «         |                     ||d¦  «         |                     |¦  «         |                     ||d¦  «         |                     ||d¦  «         |                     |¦  «         |                     ||d	¦  «        }|                     ||d
¦  «         |                     |¦  «         |                     ||d¦  «        }| 	                    |¦  «         |                     ||d¦  «         | 
                    |¦  «         |                     ||d¦  «         |                      |d¦  «         |                      |d¦  «         |                      |d¦  «         dS )zI
        Test IRBuilder.position_{before,after,at_start,at_end}.
        r   r3  r‚  ÚtwoÚthreerc  r—  r˜  r™  rš  rd  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)rM   r   r´   r+  rG   rO   Úposition_at_startr‰   rº  Úposition_afterÚposition_beforerf   )	r   rP   r·   r  Úbb_oneÚbb_twoÚbb_threer™  rd  s	            r   Útest_positioningz TestBuilderMisc.test_positioning!  s   € ð �}Š}‰ŒˆÝ”,‘.”.ˆÝŒK�˜qÑ!Ô!ˆØ×(Ò(¨eÐ(Ñ4Ô4ˆØ×(Ò(¨eÐ(Ñ4Ô4ˆØ×*Ò*°Ð*Ñ8Ô8ˆà×!Ò! &Ñ)Ô)Ð)Ø�Š�A�q˜#ÑÔÐà×Ò Ñ'Ô'Ð'Ø�Š�A�q˜#ÑÔÐØ�Š�A�q˜#ÑÔÐà×!Ò! &Ñ)Ô)Ð)Ø�KŠK˜˜1˜cÑ"Ô"ˆØ�Š�A�q˜#ÑÔÐà×Ò Ñ'Ô'Ð'Ø�KŠK˜˜1˜cÑ"Ô"ˆà×Ò˜qÑ!Ô!Ð!Ø�Š�A�q˜#ÑÔÐà×Ò Ñ"Ô"Ð"Ø�Š�A�q˜#ÑÔÐØ×Ò˜ð "ñ 	ô 	ð 	ð 	×Ò˜ð "ñ 	ô 	ð 	ð 	×Ò˜ð $ñ 	ô 	ð 	ð 	ð 	r   c                 óÔ  — |                       ¦   «         }t          j        ¦   «         }|                     d¬¦  «        }|                     |¦  «         t          j        t          d¦  «        }|                     ||d¦  «        }|                     ¦   «         }|  	                    |j
        ¦  «         |                     |¦  «         |                      |j
        ¦  «         |                     ||d¦  «        }|                     ||d¦  «        }|                     |¦  «         |                     ¦   «          |  	                    |j
        ¦  «         |                      |d¦  «         d S )NÚentryr‚  iÒ  rc  rd  r   zˆ            entry:
                %"a" = add i32 1234, 1234
                %"b" = mul i32 %"a", %"a"
                ret void
        )rM   r   r´   rO   rº  r+  rG   r‰   rµ   rí  r~  Úremover}  rˆ  rf   )	r   rP   r·   Úblkr•  rc  Úretvoidrd  r   s	            r   Útest_instruction_removalz(TestBuilderMisc.test_instruction_removalQ  sE  € Ø�}Š}‰ŒˆÝ”,‘.”.ˆØ×%Ò%¨7Ð%Ñ3Ô3ˆØ×Ò Ñ$Ô$Ð$ÝŒK�˜tÑ$Ô$ˆØ�KŠK˜˜1˜cÑ"Ô"ˆØ×"Ò"Ñ$Ô$ˆØ�Š˜Ô)Ñ*Ô*Ð*Ø�Š�wÑÔÐØ×Ò˜Ô*Ñ+Ô+Ð+Ø�KŠK˜˜1˜cÑ"Ô"ˆØ�KŠK˜˜1˜cÑ"Ô"ˆØ�Š�qÑÔÐØ×ÒÑÔÐØ�Š˜Ô)Ñ*Ô*Ð*Ø×Ò˜ð ñ 	ô 	ð 	ð 	ð 	r   c                 ó   — |                       d¬¦  «        }t          j        |¦  «        }|j                             g ¦  «        |_        |                     t          j        t          ¦  «        d¬¦  «         |  	                    |d¦  «         d S )Nr³   r‚  r   zN            my_block:
                %"c" = alloca i32*, !dbg !0
            )
rQ   r   r´   rC   r£   Údebug_metadatarû  rI   rG   rf   rÖ  s      r   Útest_metadatazTestBuilderMisc.test_metadatah  s…   € Ø—
’
 
�
Ñ+Ô+ˆÝ”,˜uÑ%Ô%ˆØ!(¤×!<Ò!<¸RÑ!@Ô!@ˆÔØ�Š•r”~¥eÑ,Ô,°3ˆÑ7Ô7Ð7Ø×Ò˜ð !ñ 	ô 	ð 	ð 	ð 	r   N)rx   ry   rz   r{   r€  r1  r6  r8  r>  rG  rK  rN  rX  r^  ra  r#   r   r   r*  r*  M  sÈ   € € € € € ðð ð9ð 9ð 9ðð ð ð:ð ð ð<ð ð ð6Mð Mð Mð6ð ð ð*"ð "ð "ðHð ð ð:.ð .ð .ð`ð ð ð.ð ð ð ð r   r*  c                   óV   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )Ú	TestTypesc                 ó®   — t          |t          j        ¦  «        r!|j        }t          |t          j        ¦  «        °!t          |t          j        ¦  «         S r/   )Ú
isinstancer   rI   r  Ú	LabelType)r   Útys     r   Úhas_logical_equalityzTestTypes.has_logical_equalityu  sH   € Ý˜�Rœ^Ñ,Ô,ð 	Ø”ˆBõ ˜�Rœ^Ñ,Ô,ð 	å˜b¥"¤,Ñ/Ô/Ð/Ð/r   c                 ó<  — t          j        ¦   «         }t          j        ¦   «         t          j        ¦   «         t          j        t
          t          t          f¦  «        t          j        t
          t          f¦  «        t          j        t
          t          fd¬¦  «        t          j        t          t          f¦  «        t
          t          t          t          t          t          j
        t          d¦  «        t          j
        t          d¦  «        t          j
        t          d¦  «        t          j        t
          t          f¦  «        t          j        t          t
          f¦  «        |                     d¦  «        |                     d¦  «        g}|d„ |D ¦   «         z  }|S )z3
        A bunch of mutually unequal types
        Tr…   r’   r”   ÚMyType1ÚMyType2c                 ó‚   — g | ]<}t          |t          j        t          j        f¦  «        °(t          j        |¦  «        ‘Œ=S r#   )re  r   rC  rf  rI   )r%   Útps     r   r'   z,TestTypes.assorted_types.<locals>.<listcomp>Œ  sP   € ð Fð Fð F¨Ý# B­¬µb´lÐ(CÑDÔDðF•"”. Ñ$Ô$ð Fð Fð Fr   )r   ÚContextrf  rC  rF   rê  r‹   rG   r+  rH   r§  r  Úget_identified_type)r   Úcontextrú   s      r   Úassorted_typeszTestTypes.assorted_typesz  s,  € õ
 ”*‘,”,ˆåŒL‰NŒN�BœK™MœMÝŒO�D¥4­ ,Ñ/Ô/µ´ÅÍÀwÑ1OÔ1OÝŒO�D¥4 '°4Ð8Ñ8Ô8ÝŒO�D¥4 'Ñ*Ô*Ý•$��s¥CÝŒL�˜aÑ Ô ¥"¤,­s°AÑ"6Ô"6½¼ÅSÈ!Ñ8LÔ8LÝÔ ¥$­ Ñ.Ô.µÔ0DÅdÝFJðFLñ 1Mô 1Mà×'Ò'¨	Ñ2Ô2Ø×'Ò'¨	Ñ2Ô2ð
ˆð 	ð Fð F¨uð Fñ Fô Fñ 	Fˆð ˆr   c                 ó¸   — |                       ¦   «         }|D ]B}|                      |¦  «        }|                      |¦  «        r|                      ||¦  «         ŒCd S r/   )rq  r?   rh  r<   )r   rú   rg  Únewtys       r   rÈ   zTestTypes.test_pickling‘  sl   € Ø×#Ò#Ñ%Ô%ˆØð 	,ð 	,ˆBØ×0Ò0°Ñ4Ô4ˆEØ×(Ò(¨Ñ,Ô,ð ,Ø× Ò  ¨Ñ+Ô+Ð+øð	,ð 	,r   c                 ó  — |                       ¦   «         }t          j        ||¦  «        D ]A\  }}||ur8|                      ||k    ||f¦  «         |                      ||k    ||f¦  «         ŒB|D ]œ}t          j        |¦  «        }|                      |¦  «        r9|                      ||k    ||f¦  «         |                      ||k    ||f¦  «         Œd|                      ||k    ||f¦  «         |                      ||k    ||f¦  «         Œ�d S r/   )rq  Ú	itertoolsÚproductr}  rí  Úcopyrh  )r   rú   rc  rd  rm  r†  s         r   Útest_comparisonszTestTypes.test_comparisons˜  s-  € Ø×#Ò#Ñ%Ô%ˆÝÔ% e¨UÑ3Ô3ð 	0ð 	0‰DˆAˆqØ˜ˆzˆzØ× Ò   a¢¨!¨Q¨Ñ0Ô0Ð0Ø—’  Q¢¨¨A¨Ñ/Ô/Ð/øàð 	:ð 	:ˆBÝ”I˜b‘M”MˆEØ×(Ò(¨Ñ,Ô,ð :Ø—’  e¢¨b°%¨[Ñ9Ô9Ð9Ø× Ò   u¢¨r°5¨kÑ:Ô:Ð:Ð:à× Ò   u¢¨r°5¨kÑ:Ô:Ð:Ø—’  e¢¨b°%¨[Ñ9Ô9Ð9Ð9ð	:ð 	:r   c                 óÜ  — |                       t          t          ¦  «        d¦  «         |                       t          t          j        d¦  «        ¦  «        d¦  «         |                       t          t
          ¦  «        d¦  «         |                       t          t          ¦  «        d¦  «         |                       t          t          j        ¦   «         ¦  «        d¦  «         |                       t          t          j        t          d¦  «        ¦  «        d¦  «         |                       t          t          j        t          t
          f¦  «        ¦  «        d	¦  «         |                       t          t          j        t          t
          t          f¦  «        ¦  «        d
¦  «         |                       t          t          j        t          dd¬¦  «        ¦  «        d¦  «         |                       t          t          j        t          t
          fd¬¦  «        ¦  «        d¦  «         |                       t          t          j        t          t
          t          fd¬¦  «        ¦  «        d¦  «         |                       t          t          j	        t          ¦  «        ¦  «        d¦  «         |                       t          t          j	        t          j	        t          ¦  «        ¦  «        ¦  «        d¦  «         |                       t          t          j        t          d¦  «        ¦  «        d¦  «         |                       t          t          j        t          j	        t          ¦  «        d¦  «        ¦  «        d¦  «         |                       t          t          j	        t          j        t          d¦  «        ¦  «        ¦  «        d¦  «         |                       t          t          j        t          f¦  «        ¦  «        d¦  «         |                       t          t          j        t          t
          f¦  «        ¦  «        d¦  «         |                       t          t          j        t          j	        t          ¦  «        t          j        t          t          f¦  «        f¦  «        ¦  «        d¦  «         |                       t          t          j        t          fd¬¦  «        ¦  «        d¦  «         |                       t          t          j        t          t
          fd¬¦  «        ¦  «        d¦  «         t          j        ¦   «         }|                     d¦  «        }|                       t          |¦  «        d¦  «         |                     d¦  «        }|                       t          |¦  «        d¦  «         |                     d ¦  «        }|                       t          |¦  «        d!¦  «         d"S )#z:
        Test the string representation of types.
        Úi1é   Úi29r  ÚdoubleÚvoidr#   zi1 ()z
i1 (float)zi1 (float, double)Tr…   zi1 (...)zi1 (float, ...)zi1 (float, double, ...)zi32*zi32**r’   z[5 x i1]z	[5 x i1*]z	[5 x i1]*z{i1}z{i1, float}z{i1*, {i32, i8}})Úpackedz<{i1}>z<{i1, float}>ÚMyTypez	%"MyType"zMyType\z%"MyType\5c"zMyType"z%"MyType\22"N)r<   r(   rê  r   r-  r+  rH   rC  rF   rI   rG   r§  r  r‹   rn  ro  )r   rp  ÚmytypeÚmytype1Úmytype2s        r   Útest_strzTestTypes.test_str¨  s™  € ð 	×Ò��T™œ DÑ)Ô)Ð)Ø×Ò��RœZ¨™^œ^Ñ,Ô,¨eÑ4Ô4Ð4Ø×Ò��S™œ 7Ñ+Ô+Ð+Ø×Ò��S™œ 8Ñ,Ô,Ð,Ø×Ò��Rœ[™]œ]Ñ+Ô+¨VÑ4Ô4Ð4Ø×Ò��Rœ_­T°2Ñ6Ô6Ñ7Ô7¸ÑAÔAÐAØ×Ò��Rœ_­TµC°6Ñ:Ô:Ñ;Ô;¸\ÑJÔJÐJØ×Ò��Rœ_­TµC½°:Ñ>Ô>Ñ?Ô?Ø-ñ	/ô 	/ð 	/à×Ò��Rœ_­T°2¸tÐDÑDÔDÑEÔEØ#ñ	%ô 	%ð 	%à×Ò��Rœ_­TµC°6À4ÐHÑHÔHÑIÔIØ*ñ	,ô 	,ð 	,à×Ò��Rœ_­TµC½°:ÀtÐLÑLÔLÑMÔMØ2ñ	4ô 	4ð 	4à×Ò��Rœ^­EÑ2Ô2Ñ3Ô3°VÑ<Ô<Ð<Ø×Ò��Rœ^­B¬N½5Ñ,AÔ,AÑBÔBÑCÔCÀWÑMÔMÐMØ×Ò��Rœ\­$°Ñ2Ô2Ñ3Ô3°ZÑ@Ô@Ð@Ø×Ò��Rœ\­"¬.½Ñ*>Ô*>ÀÑBÔBÑCÔCØ$ñ	&ô 	&ð 	&à×Ò��Rœ^­B¬L½¸qÑ,AÔ,AÑBÔBÑCÔCØ$ñ	&ô 	&ð 	&à×Ò��RÔ1µ4°'Ñ:Ô:Ñ;Ô;¸VÑDÔDÐDØ×Ò��RÔ1µ4½°+Ñ>Ô>Ñ?Ô?ÀÑOÔOÐOØ×Ò��RÔ1ÝŒN�4Ñ Ô ¥"Ô"6½½t°}Ñ"EÔ"Eð3Gñ Hô Hñ Iô Iàñ	 ô 	 ð 	 ð 	×Ò��RÔ1µ4°'À$ÐGÑGÔGÑHÔHØ!ñ	#ô 	#ð 	#à×Ò��RÔ1µ4½°+ÀdÐKÑKÔKÑLÔLØ(ñ	*ô 	*ð 	*õ ”*‘,”,ˆØ×,Ò,¨XÑ6Ô6ˆØ×Ò�˜V™œ mÑ4Ô4Ð4Ø×-Ò-¨jÑ9Ô9ˆØ×Ò�˜W™œÐ'8Ñ9Ô9Ð9Ø×-Ò-¨jÑ9Ô9ˆØ×Ò�˜W™œÐ'8Ñ9Ô9Ð9Ð9Ð9r   c           	      óÞ   — t          | j        |                      ¦   «         ¦  «        D ]D}|                      t	          |¦  «        t	          t          j        |¦  «        ¦  «        ¦  «         ŒEd S r/   )Úfilterrh  rq  r<   Úhashrw  )r   Útyps     r   Ú	test_hashzTestTypes.test_hashÕ  sc   € Ý˜$Ô3°T×5HÒ5HÑ5JÔ5JÑKÔKð 	>ð 	>ˆCØ×Ò�T #™YœY­­T¬Y°s©^¬^Ñ(<Ô(<Ñ=Ô=Ð=Ð=ð	>ð 	>r   c                 ó  ‡ — ˆ fd„}ˆ fd„}t          j        t          ¦  «        }t          d¦  «        D ]} |||t          ¦  «         Œ ||¦  «         t          j        t
          d¦  «        }t          d¦  «        D ]} |||t
          ¦  «         Œ ||¦  «         t          j        t          t          j        t
          t          f¦  «        f¦  «        } ||dt          ¦  «          ||dt          j        t
          t          f¦  «        ¦  «         ‰                      t          ¦  «        5  | 
                    t          j        t          d¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y    ||¦  «         t          j        ¦   «         }t          j        |d¦  «        }|                     t          t          j        t
          t          f¦  «        ¦  «          ||dt          ¦  «          ||dt          j        t
          t          f¦  «        ¦  «         ‰                      t          ¦  «        5  | 
                    t          j        t          d¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y    ||¦  «         d S )	Nc                 óŽ   •— |                       t          j        t          |¦  «        ¦  «        }‰                     ||¦  «         d S r/   )r  r   r+  rG   r<   )rm  rn  r_   rl   r   s       €r   Úcheck_constantz*TestTypes.test_gep.<locals>.check_constantÚ  s<   ø€ Ø—V’V�BœK­¨qÑ1Ô1Ñ2Ô2ˆFØ×Ò˜V XÑ.Ô.Ð.Ð.Ð.r   c                 óÌ   •— t          j        t          d¦  «        }‰                     t          ¦  «        5  |                      |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Ng      ð?)r   r+  rH   rì   r   r  )rm  r  r   s     €r   Úcheck_index_typez,TestTypes.test_gep.<locals>.check_index_typeÞ  s›   ø€ Ý”K¥ SÑ)Ô)ˆEØ×"Ò"¥9Ñ-Ô-ð ð Ø—’�u‘”�ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ¶AÁAÁ Ar’   r•   r   r   rs   r€  )r   rI   rH   Úranger§  rê  r  r‹   rì   Ú
IndexErrorr  r+  rG   rn  ÚIdentifiedStructTypeÚset_body)r   rŒ  rŽ  rm  rn  rp  s   `     r   r  zTestTypes.test_gepÙ  sÙ  ø€ ð	/ð 	/ð 	/ð 	/ð 	/ð	ð 	ð 	ð 	ð 	õ
 Œ^�CÑ Ô ˆÝ�q‘”ð 	'ð 	'ˆAØˆN˜2˜q¥#Ñ&Ô&Ð&Ð&ØÐ˜ÑÔÐåŒ\�$ Ñ"Ô"ˆÝ�q‘”ð 	(ð 	(ˆAØˆN˜2˜q¥$Ñ'Ô'Ð'Ð'ØÐ˜ÑÔÐåÔ!¥3­Ô(<½dÅD¸\Ñ(JÔ(JÐ"KÑLÔLˆØˆ�r˜1�cÑ"Ô"Ð"Øˆ�r˜1�bÔ2µD½$°<Ñ@Ô@ÑAÔAÐAØ×Ò�zÑ*Ô*ð 	*ð 	*Ø�FŠF•2”;�u aÑ(Ô(Ñ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*àÐ˜ÑÔÐå”*‘,”,ˆÝÔ$ W¨hÑ7Ô7ˆØ
�Š•C�Ô-­tµT¨lÑ;Ô;Ñ<Ô<Ð<Øˆ�r˜1�cÑ"Ô"Ð"Øˆ�r˜1�bÔ2µD½$°<Ñ@Ô@ÑAÔAÐAØ×Ò�zÑ*Ô*ð 	*ð 	*Ø�FŠF•2”;�u aÑ(Ô(Ñ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*àÐ˜ÑÔÐÐÐs$   Ä-.E'Å'E+Å.E+È5.I/É/I3É6I3c                 ó”  ‡ ‡— t          j        d¦  «        Šˆ ˆfd„} |t          d¦  «          |t          d¦  «          |t          d¦  «          |t          j        t          d¦  «        d¦  «          |t          j        t          d¦  «        d¦  «          |t          j        t          t          t          f¦  «        d¦  «         d S )	Nú%e-m:e-i64:64-f80:128-n8:16:32:64-S128c                 óZ   •— ‰                      |                      ‰¦  «        |¦  «         d S r/   )r<   Úget_abi_size©rm  r_   r   Útds     €€r   rV  z&TestTypes.test_abi_size.<locals>.check 	  s+   ø€ Ø×Ò˜RŸ_š_¨RÑ0Ô0°(Ñ;Ô;Ð;Ð;Ð;r   r   r”   r   r’   é   r   ©
r0   Úcreate_target_datar‹   rG   rÞ   r   r§  r  rH   r+  ©r   rV  r˜  s   ` @r   Útest_abi_sizezTestTypes.test_abi_sizeý  sÅ   øø€ ÝÔ$Ð%LÑMÔMˆð	<ð 	<ð 	<ð 	<ð 	<ð 	<àˆ�d�A‰ŒˆØˆ�e�Q‰ŒˆØˆ�e�Q‰ŒˆØˆ�bŒl�4 Ñ#Ô# QÑ'Ô'Ð'Øˆ�bŒl�5 !Ñ$Ô$ bÑ)Ô)Ð)Øˆ�bÔ"¥C­­c ?Ñ3Ô3°RÑ8Ô8Ð8Ð8Ð8r   c                 ó”  ‡ ‡— t          j        d¦  «        Šˆ ˆfd„} |t          d¦  «          |t          d¦  «          |t          d¦  «          |t          j        t          d¦  «        d¦  «          |t          j        t          d¦  «        d¦  «          |t          j        t          t          t          f¦  «        d¦  «         d S )Nr”  c                 óZ   •— ‰                      |                      ‰¦  «        |¦  «         d S r/   )r*   Úget_abi_alignmentr—  s     €€r   rV  z+TestTypes.test_abi_alignment.<locals>.check	  s+   ø€ Ø�MŠM˜"×.Ò.¨rÑ2Ô2°HÑ=Ô=Ð=Ð=Ð=r   )r   rs   r”   )r”   )r   r’   rš  rœ  s   ` @r   Útest_abi_alignmentzTestTypes.test_abi_alignment		  sÎ   øø€ ÝÔ$Ð%LÑMÔMˆð	>ð 	>ð 	>ð 	>ð 	>ð 	>àˆ�d�IÑÔÐØˆ�e�TÑÔÐØˆ�e�TÑÔÐØˆ�bŒl�4 Ñ#Ô# YÑ/Ô/Ð/Øˆ�bŒl�5 !Ñ$Ô$ dÑ+Ô+Ð+Øˆ�bÔ"¥C­­c ?Ñ3Ô3°TÑ:Ô:Ð:Ð:Ð:r   c                 ó8  — t          j        ¦   «         }|                     d¦  «        }t          j        |¬¦  «        }|                      |j        ¦  «         |                      |¦  «         t          |¦  «        }|                     t          j	        d¦  «        t          j	        d¦  «        t          j
        ¦   «         ¦  «         |                      |j        ¦  «         |                      |¦  «         |                      |t          |¦  «        ¦  «         d S )Nr€  ©rp  r	   r
   )r   rn  ro  rA   rí  Ú	is_opaquer3   r(   r’  r-  r*  r}  ÚassertNotEqual)r   rp  r�  rC   Úoldstrs        r   Útest_identified_structz TestTypes.test_identified_struct	  sß   € Ý”*‘,”,ˆØ×,Ò,¨XÑ6Ô6ˆÝ” 7Ð+Ñ+Ô+ˆØ�Š˜Ô(Ñ)Ô)Ð)Ø×Ò˜VÑ$Ô$Ð$Ý�V‘”ˆØ�Š�œ
 2™œ­¬
°2©¬½¼¹¼ÑGÔGÐGØ×Ò˜Ô)Ñ*Ô*Ð*Ø×Ò˜VÑ$Ô$Ð$Ø×Ò˜F¥C¨¡K¤KÑ0Ô0Ð0Ð0Ð0r   c                 ó  — t          j        ¦   «         }|                     d¦  «        }t          j        d¦  «        g|_        t          j        d¦  «        }|                      |                     ||¬¦  «        d¦  «         d S )Nr€  r	   r”  r£  r”   )	r   rn  ro  r-  Úelementsr0   r›  r<   r–  )r   rp  r�  r˜  s       r   Ú$test_target_data_non_default_contextz.TestTypes.test_target_data_non_default_context!	  sr   € Ý”*‘,”,ˆØ×,Ò,¨XÑ6Ô6ˆÝœ: b™>œ>Ð*ˆŒÝÔ$Ð%LÑMÔMˆØ×Ò˜×,Ò,¨R¸Ð,ÑAÔAÀ1ÑEÔEÐEÐEÐEr   c                 óš   — t          j        t          j        d¦  «        d¦  «        }|                      t	          |¦  «        d¦  «         d S )Nr	   r   z	<8 x i32>)r   r¸  r-  r<   r(   )r   r½  s     r   Útest_vectorzTestTypes.test_vector(	  s=   € Ý”�bœj¨™nœn¨aÑ0Ô0ˆØ×Ò�˜U™œ [Ñ1Ô1Ð1Ð1Ð1r   N)rx   ry   rz   rh  rq  rÈ   rx  r„  r‰  r  r�  r¡  r§  rª  r¬  r#   r   r   rc  rc  s  sÍ   € € € € € ð0ð 0ð 0ð
ð ð ð.,ð ,ð ,ð:ð :ð :ð +:ð +:ð +:ðZ>ð >ð >ð"ð "ð "ðH
9ð 
9ð 
9ð
;ð 
;ð 
;ð
1ð 
1ð 
1ðFð Fð Fð2ð 2ð 2ð 2ð 2r   rc  c                 ó6   — t          j        t          | ¦  «        S r/   r
  )rn  s    r   Úc32r®  -	  s   € ÝŒ;•u˜aÑ Ô Ð r   c                   óÂ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z dS ) ÚTestConstantc                 óp  — t          j        t          d¦  «        }|                      t	          |¦  «        d¦  «         t          j        t
          d¦  «        }|                      t	          |¦  «        d¦  «         t          j        t
          d¦  «        }|                      t	          |¦  «        d¦  «         t          j        t
          d¦  «        }|                      t	          |¦  «        d¦  «         t          j        t
          d	¦  «        }|                      t	          |¦  «        d
¦  «         t          j        t
          t           j        ¦  «        }|                      t	          |¦  «        d¦  «         t          j        t
          d ¦  «        }|                      t	          |¦  «        d¦  «         d S )NrÙ   zi32 42r   zi1 1r   zi1 0Túi1 trueFzi1 falsezi1 undef)r   r+  rG   r<   r(   rê  rÌ  ©r   r   s     r   Útest_integerszTestConstant.test_integers3	  sE  € ÝŒK�˜rÑ"Ô"ˆØ×Ò�˜Q™œ Ñ*Ô*Ð*ÝŒK�˜aÑ Ô ˆØ×Ò�˜Q™œ Ñ(Ô(Ð(ÝŒK�˜aÑ Ô ˆØ×Ò�˜Q™œ Ñ(Ô(Ð(ÝŒK�˜dÑ#Ô#ˆØ×Ò�˜Q™œ Ñ+Ô+Ð+ÝŒK�˜eÑ$Ô$ˆØ×Ò�˜Q™œ Ñ,Ô,Ð,ÝŒK��bœlÑ+Ô+ˆØ×Ò�˜Q™œ Ñ,Ô,Ð,ÝŒK�˜dÑ#Ô#ˆØ×Ò�˜Q™œ Ñ(Ô(Ð(Ð(Ð(r   c                 óö  — t          j        t          d¦  «        }|                      t	          |¦  «        d¦  «         t          j        t          d¦  «        }|                      t	          |¦  «        d¦  «         t          j        t
          d¦  «        }|                      t	          |¦  «        d¦  «         t          j        t
          d¦  «        }|                      t	          |¦  «        d¦  «         t          j        t
          t           j        ¦  «        }|                      t	          |¦  «        d¦  «         t          j        t
          d ¦  «        }|                      t	          |¦  «        d¦  «         d S )	Nç      ø?zfloat 0x3ff8000000000000g      ø¿zfloat 0xbff8000000000000zdouble 0x3ff8000000000000zdouble 0xbff8000000000000zdouble undefz
double 0.0)r   r+  r+  r<   r(   rH   rÌ  r³  s     r   Ú
test_realszTestConstant.test_realsC	  s  € åŒK�˜SÑ!Ô!ˆØ×Ò�˜Q™œÐ!;Ñ<Ô<Ð<ÝŒK�˜TÑ"Ô"ˆØ×Ò�˜Q™œÐ!;Ñ<Ô<Ð<ÝŒK�˜SÑ!Ô!ˆØ×Ò�˜Q™œÐ!<Ñ=Ô=Ð=ÝŒK�˜TÑ"Ô"ˆØ×Ò�˜Q™œÐ!<Ñ=Ô=Ð=ÝŒK��Rœ\Ñ*Ô*ˆØ×Ò�˜Q™œ Ñ0Ô0Ð0ÝŒK�˜TÑ"Ô"ˆØ×Ò�˜Q™œ Ñ.Ô.Ð.Ð.Ð.r   c                 óT  — t          j        t          j        t          d¦  «        t	          d¦  «        t	          d¦  «        t	          d¦  «        f¦  «        }|                      t          |¦  «        d¦  «         t          j        t          j        t          d¦  «        t	          d¦  «        t	          t           j        ¦  «        f¦  «        }|                      t          |¦  «        d¦  «         t           j                             t	          d¦  «        t	          d¦  «        t	          t           j        ¦  «        f¦  «        }|                      t          |¦  «        d¦  «         |  	                    t          ¦  «        5 }t           j                             t	          d¦  «        t          j        t          d	¦  «        f¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d
¦  «         t          j        t          j        t          d¦  «        t           j        ¦  «        }|                      t          |¦  «        d¦  «         t          j        t          j        t          d¦  «        d ¦  «        }|                      t          |¦  «        d¦  «         t          j        t          j        t          d¦  «        t          d¦  «        ¦  «        }|                      t          |¦  «        d¦  «         t          j        t          j        t          d¦  «        t          d¦  «        ¦  «        }|                      t          |¦  «        d¦  «         t          j        t          j        t          d¦  «        dt           j        df¦  «        }|                      t          |¦  «        d¦  «         |  	                    t          ¦  «        5  t          j        t          j        t          d¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr•   r’   rX  r”   z[3 x i32] [i32 5, i32 6, i32 4]rs   z[2 x i32] [i32 5, i32 undef]z#[3 x i32] [i32 5, i32 6, i32 undef]r¶  z$all elements must have the same typez[2 x i32] undefz[2 x i32] zeroinitializerr  s   foobar_123€z[11 x i8] c"foobar_123\80"s    ÿz[4 x i8] c"\00\01\04\ff"z#[3 x i32] [i32 5, i32 undef, i32 6])r’   rX  )r   r+  r§  rG   r®  r<   r(   rÌ  Úliteral_arrayrì   r   r+  r­  r‹   Ú	bytearrayrÎ   )r   r   rÉ  s      r   Útest_arrayszTestConstant.test_arraysR	  s˜  € ÝŒK�œ¥U¨AÑ.Ô.µ°Q±´½¸Q¹¼ÅÀQÁÄÐ0HÑIÔIˆØ×Ò�˜Q™œÐ!BÑCÔCÐCÝŒK�œ¥U¨AÑ.Ô.µ°Q±´½½R¼\Ñ9JÔ9JÐ0KÑLÔLˆØ×Ò�˜Q™œÐ!?Ñ@Ô@Ð@åŒK×%Ò%¥s¨1¡v¤v­s°1©v¬vµs½2¼<Ñ7HÔ7HÐ&IÑJÔJˆØ×Ò�˜Q™œÐ!FÑGÔGÐGØ×Ò�yÑ)Ô)ð 	G¨VÝŒK×%Ò%¥s¨1¡v¤v­r¬{½3ÀÑ/DÔ/DÐ&EÑFÔFÐFð	Gð 	Gð 	Gñ 	Gô 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gøøøð 	Gð 	Gð 	Gð 	Gà×Ò�˜VÔ-Ñ.Ô.Ø?ñ	Aô 	Að 	Aõ ŒK�œ¥U¨AÑ.Ô.µ´Ñ=Ô=ˆØ×Ò�˜Q™œÐ!2Ñ3Ô3Ð3ÝŒK�œ¥U¨AÑ.Ô.°Ñ5Ô5ˆØ×Ò�˜Q™œÐ!<Ñ=Ô=Ð=åŒK�œ¥T¨2Ñ.Ô.µ	Ð:KÑ0LÔ0LÑMÔMˆØ×Ò�˜Q™œÐ!>Ñ?Ô?Ð?ÝŒK�œ¥T¨1Ñ-Ô-­yÐ9LÑ/MÔ/MÑNÔNˆØ×Ò�˜Q™œÐ!<Ñ=Ô=Ð=åŒK�œ¥U¨AÑ.Ô.°µB´LÀ!Ð0DÑEÔEˆØ×Ò�˜Q™œÐ!FÑGÔGÐGà×Ò�zÑ*Ô*ð 	8ð 	8ÝŒK�œ¥U¨AÑ.Ô.°Ñ7Ô7Ð7ð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð 	8ð 	8s%   ÆAGÇGÇGÏ".PÐP!Ð$P!c                 óB  — t          j        t          j        d¦  «        d¦  «        }g d¢}t          j        ||¦  «        }d                     d                     t          dj        |¦  «        ¦  «        ¦  «        }|                      t          |¦  «        |¦  «         d S )Nr	   r   )r   rs   r”   r•   r   rX  é	   é   z<8 x i32> <{}>z, zi32 {})	r   r¸  r-  r+  r¶   r   r   r<   r(   )r   r½  Úvalsr¾  Úvec_reprs        r   r¬  zTestConstant.test_vectoro	  s‰   € Ý”�bœj¨™nœn¨aÑ0Ô0ˆØ'Ð'Ð'ˆÝŒk˜% Ñ&Ô&ˆØ#×*Ò*Ø�IŠI•c˜(œ/¨4Ñ0Ô0Ñ1Ô1ñ3ô 3ˆà×Ò�˜S™œ 8Ñ,Ô,Ð,Ð,Ð,r   c                 óŠ   — t          j        t          j        d¦  «        d ¦  «        j        }|                      |d¦  «         d S )Nr	   r   )r   r+  r-  Úconstantr<   )r   rÂ  s     r   Útest_non_nullable_intz"TestConstant.test_non_nullable_intw	  s:   € Ý”;�rœz¨"™~œ~¨tÑ4Ô4Ô=ˆØ×Ò˜ 1Ñ%Ô%Ð%Ð%Ð%r   c                 óÚ  — t          j        t          t          f¦  «        }t          j        t          |f¦  «        }t          j        |t          j        t          j        ¦   «         d¦  «        t          j        t          d¦  «        f¦  «        }|                      t          |¦  «        d¦  «         t           j         	                    t          j        t          j        ¦   «         d¦  «        t          j        t          d¦  «        f¦  «        }|                      |j
        |¦  «         |                      t          |¦  «        d¦  «         t           j         	                    t          j        t          j        ¦   «         d¦  «        t          j        t          t           j        ¦  «        f¦  «        }|                      |j
        |¦  «         |                      t          |¦  «        d¦  «         t          j        |t           j        ¦  «        }|                      t          |¦  «        d¦  «         t          j        |d ¦  «        }|                      t          |¦  «        d¦  «         t          j        |d¦  «        }|                      t          |¦  «        d¦  «         t          j        |d|f¦  «        }|                      t          |¦  «        d	¦  «         t          j        |d
¦  «        }|                      t          |¦  «        t          |¦  «        ¦  «         |                      t          ¦  «        5  t          j        |d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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’   rX  )r   r  r+  rê  rG   r+  r*  r<   r(   Úliteral_structr  rÌ  rì   rÎ   )r   Úst1Úst2r   Úc1Úc2Úc3s          r   Útest_structszTestConstant.test_structs{	  s  € ÝÔ"¥C­ ;Ñ/Ô/ˆÝÔ"¥E¨3 <Ñ0Ô0ˆÝŒK˜�bœk­"¬,©.¬.¸#Ñ>Ô>Ý œk­$°Ñ5Ô5ð7ñ 8ô 8ˆà×Ò�˜Q™œØJñ	Lô 	Lð 	LåŒK×&Ò&­¬µB´L±N´NÀCÑ(HÔ(HÝ(*¬µD¸$Ñ(?Ô(?ð(Añ Bô Bˆà×Ò˜œ Ñ%Ô%Ð%Ø×Ò�˜Q™œØJñ	Lô 	Lð 	LåŒK×&Ò&­¬µB´L±N´NÀCÑ(HÔ(HÝ(*¬µD½"¼,Ñ(GÔ(Gð(Iñ Jô Jˆà×Ò˜œ Ñ%Ô%Ð%Ø×Ò�˜Q™œØKñ	Mô 	Mð 	MåŒK˜�Rœ\Ñ*Ô*ˆØ×Ò�˜Q™œÐ!4Ñ5Ô5Ð5ÝŒK˜˜TÑ"Ô"ˆØ×Ò�˜Q™œÐ!>Ñ?Ô?Ð?åŒ[˜˜kÑ*Ô*ˆØ×Ò�˜R™œØJñ	Lô 	Lð 	LåŒ[˜˜r 2˜hÑ'Ô'ˆØ×Ò�˜R™œð $Jñ 	Lô 	Lð 	LåŒ[˜Ð/Ñ0Ô0ˆØ×Ò�˜R™œ¥# b¡'¤'Ñ*Ô*Ð*à×Ò�zÑ*Ô*ð 	(ð 	(ÝŒK˜˜YÑ'Ô'Ð'ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(s   Ì=M Í M$Í'M$c                 ó¾   — t          j        d¦  «        }t          j        t          j        ||g¦  «        t           j        ¦  «        }|                      |¦  «         d S )Nr   )r   r-  r+  r  rÌ  r?   )r   Úi8Ústs      r   Ú&test_undefined_literal_struct_picklingz3TestConstant.test_undefined_literal_struct_pickling�	  sK   € ÝŒZ˜‰]Œ]ˆÝŒ[�Ô-¨r°2¨hÑ7Ô7½¼ÑFÔFˆØ×$Ò$ RÑ(Ô(Ð(Ð(Ð(r   c                 óš  — t          d¦  «        }|                      |t          j        ¦  «         |                      t          |¦  «        d¦  «         t          d¦  «        }|                      |t          j        ¦  «         |                      t          |¦  «        d¦  «         t          j        t          d¦  «        } |t          d¦  «        t          d¦  «        t          d¦  «        g¦  «        }|                      t          |¦  «        d	¦  «          |g d
¢¦  «        }|                      t          |¦  «        d	¦  «          |d¦  «        }|                      t          |¦  «        d¦  «         |  
                    t          ¦  «        5   |g d¢¦  «         ddd¦  «         n# 1 swxY w Y   t          j        t          t          f¦  «        }t          j        t          |f¦  «        } |d¦  «        }|                      t          |¦  «        d¦  «          |d¦  «        }|                      t          |¦  «        d¦  «         dS )z@
        Instantiating a type should create a constant.
        rÙ   zi8 42Tr²  r•   r”   r’   rX  z[3 x i32] [i32 4, i32 5, i32 6]rÉ  Nz[3 x i32] zeroinitializer)r”   r’   rX  r¾  rÆ  rÅ  rÈ  rÇ  )r‹   r,  r   r+  r<   r(   rê  r§  rG   r®  rì   rÎ   r  r+  )r   r   ÚatrË  rÌ  s        r   Útest_type_instantiatonz#TestConstant.test_type_instantiaton¢	  sP  € õ �‰HŒHˆØ×Ò˜a¥¤Ñ-Ô-Ð-Ø×Ò�˜Q™œ Ñ)Ô)Ð)Ý�‰JŒJˆØ×Ò˜a¥¤Ñ-Ô-Ð-Ø×Ò�˜Q™œ Ñ+Ô+Ð+åŒ\�% Ñ#Ô#ˆØˆB•�A‘”�˜A™œ¥ A¡¤Ð'Ñ(Ô(ˆØ×Ò�˜Q™œÐ!BÑCÔCÐCØˆBˆyˆyˆy‰MŒMˆØ×Ò�˜Q™œÐ!BÑCÔCÐCØˆBˆt‰HŒHˆØ×Ò�˜Q™œÐ!<Ñ=Ô=Ð=Ø×Ò�zÑ*Ô*ð 	ð 	ØˆBˆ|ˆ|ˆ|ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ Ô"¥C­ ;Ñ/Ô/ˆÝÔ"¥E¨3 <Ñ0Ô0ˆØˆC�ÑÔˆØ×Ò�˜Q™œð #*ñ 	,ô 	,ð 	,àˆCÐ!Ñ"Ô"ˆØ×Ò�˜Q™œð #Iñ 	Kô 	Kð 	Kð 	Kð 	Ks   ÆF)Æ)F-Æ0F-c                 ój   — t          d¦  «        }|                      t          |¦  «        d¦  «         dS )z8
        Constants should have a useful repr().
        rÙ   z!<ir.Constant type='i32' value=42>N)rG   r<   rZ  r³  s     r   rŒ  zTestConstant.test_reprÀ	  s2   € õ �"‰IŒIˆØ×Ò�˜a™œÐ"EÑFÔFÐFÐFÐFr   c                 ó  — t          j        t          j        t          j        d¦  «        d¦  «        t	          t          d¦  «        ¦  «        ¦  «        }|                      ¦   «         }t          j        ||j        d¦  «        }d|_	        ||_
        t          j        t          |¦  «        ¦  «        }t          j        t          |¦  «        ¦  «        }|                      t          |¦  «        t          |¦  «        ¦  «         d S )Nr   é   Ú
myconstantT)r   r+  r§  r-  rº  r�  rC   r)  r  rp  r,  r0   r1   r(   r<   )r   r   r—  ÚgvÚparsedÚreparseds         r   Útest_encoding_problemz"TestConstant.test_encoding_problemÇ	  sÂ   € ÝŒK�œ¥R¤Z°¡]¤]°CÑ8Ô8Ý!¥%¨¡*¤*Ñ-Ô-ñ/ô /ˆà�KŠK‰MŒMˆÝÔ˜q !¤&¨,Ñ7Ô7ˆØ!ˆÔØˆŒõ Ô$¥S¨¡V¤VÑ,Ô,ˆåÔ&¥s¨6¡{¤{Ñ3Ô3ˆØ×Ò�˜V™œ¥c¨(¡m¤mÑ4Ô4Ð4Ð4Ð4r   c                 óÀ  — |                       ¦   «         }t          j        t          t          f¦  «        }t          j        ||d¦  «        }|                     d„ dD ¦   «         ¦  «        }|                      t          |¦  «        d¦  «         |                      |j	        t          j
        t          ¦  «        ¦  «         t          j        |d ¦  «        }|                      t          ¦  «        5  |                     t          j        t          d¦  «        g¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        |                     ¦   «         d ¦  «        }|                     t          j        t          d¦  «        g¦  «        }|                      t          |¦  «        d¦  «         |                      |j	        t          j
        t          ¦  «        ¦  «         d S )NrÛ  c                 óB   — g | ]}t          j        t          |¦  «        ‘ŒS r#   r
  r  s     r   r'   z)TestConstant.test_gep.<locals>.<listcomp>Ú	  ó$   € Ð:Ð:Ð:¨a•B”K¥ qÑ)Ô)Ð:Ð:Ð:r   ©r   r   zEgetelementptr ({float, i1}, {float, i1}* @"myconstant", i32 0, i32 1)r   z5getelementptr ({float, i1}, {float, i1}* null, i32 0))rC   r   r  r+  rê  r)  r  r<   r(   r  rI   r+  rì   r   rG   r»   )r   r—  rm  rÜ  r   ÚconstÚ	const_ptrrÎ  s           r   r  zTestConstant.test_gepÖ	  sÃ  € Ø�KŠK‰MŒMˆÝÔ!¥3­ +Ñ.Ô.ˆÝÔ˜q " lÑ3Ô3ˆØ�FŠFÐ:Ð:°6Ð:Ñ:Ô:Ñ;Ô;ˆØ×Ò�˜Q™œØ`ñ	bô 	bð 	bà×Ò˜œ¥¤µÑ!5Ô!5Ñ6Ô6Ð6å”˜B Ñ%Ô%ˆØ×Ò�yÑ)Ô)ð 	/ð 	/Ø�IŠI•r”{¥5¨!Ñ,Ô,Ð-Ñ.Ô.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/õ ”K §¢¡¤°Ñ6Ô6ˆ	Ø�]Š]�BœK­¨qÑ1Ô1Ð2Ñ3Ô3ˆØ×Ò�˜R™œØPñ	Rô 	Rð 	Rà×Ò˜œ¥¤µÑ!5Ô!5Ñ6Ô6Ð6Ð6Ð6s   Ã./D)Ä)D-Ä0D-c                 ó  — |                       ¦   «         }t          j        t          t          f¦  «        }d}t          j        ||d|¬¦  «        }|                      |j        |¦  «         |                     d„ dD ¦   «         ¦  «        }|                      |j	        j        |¦  «         |                      t          |¦  «        d¦  «         |                      |j	        t          j        t          |¬¦  «        ¦  «         d S )Nr”   rÛ  re  c                 óB   — g | ]}t          j        t          |¦  «        ‘ŒS r#   r
  r  s     r   r'   z=TestConstant.test_gep_addrspace_globalvar.<locals>.<listcomp>ð	  râ  r   rã  zRgetelementptr ({float, i1}, {float, i1} addrspace(4)* @"myconstant", i32 0, i32 1))rC   r   r  r+  rê  r)  r<   rf  r  r  r(   rI   )r   r—  rm  rf  rÜ  r   s         r   Útest_gep_addrspace_globalvarz)TestConstant.test_gep_addrspace_globalvaré	  sì   € Ø�KŠK‰MŒMˆÝÔ!¥3­ +Ñ.Ô.ˆØˆ	åÔ˜q " l¸iÐHÑHÔHˆØ×Ò˜œ yÑ1Ô1Ð1Ø�FŠFÐ:Ð:°6Ð:Ñ:Ô:Ñ;Ô;ˆØ×Ò˜œÔ)¨9Ñ5Ô5Ð5Ø×Ò�˜Q™œðGñ	Iô 	Ið 	Ið 	×Ò˜œ¥¤µÀ	Ð!JÑ!JÔ!JÑKÔKÐKÐKÐKr   c                 ó°   — t          j        t          d¦  «                             t          ¦  «        }|                      t          |¦  «        d¦  «         d S )Nr   ztrunc (i64 1 to i32))r   r+  rÞ   r'  rG   r<   r(   r³  s     r   Ú
test_trunczTestConstant.test_trunc÷	  sD   € ÝŒK�˜qÑ!Ô!×'Ò'­Ñ.Ô.ˆØ×Ò�˜Q™œÐ!7Ñ8Ô8Ð8Ð8Ð8r   c                 ó°   — t          j        t          d¦  «                             t          ¦  «        }|                      t          |¦  «        d¦  «         d S )Nr   zzext (i32 1 to i64))r   r+  rG   r(  rÞ   r<   r(   r³  s     r   Ú	test_zextzTestConstant.test_zextû	  sD   € ÝŒK�˜qÑ!Ô!×&Ò&¥uÑ-Ô-ˆØ×Ò�˜Q™œÐ!6Ñ7Ô7Ð7Ð7Ð7r   c                 ó°   — t          j        t          d¦  «                             t          ¦  «        }|                      t          |¦  «        d¦  «         d S )Nr5   zsext (i32 -1 to i64))r   r+  rG   r)  rÞ   r<   r(   r³  s     r   Ú	test_sextzTestConstant.test_sextÿ	  sD   € ÝŒK�˜rÑ"Ô"×'Ò'­Ñ.Ô.ˆØ×Ò�˜Q™œÐ!7Ñ8Ô8Ð8Ð8Ð8r   c                 ó°   — t          j        t          d¦  «                             t          ¦  «        }|                      t          |¦  «        d¦  «         d S )Nr   z*fptrunc (float 0x3ff0000000000000 to half))r   r+  r+  r*  rx  r<   r(   r³  s     r   Útest_fptrunczTestConstant.test_fptrunc
  sD   € ÝŒK�˜QÑÔ×'Ò'­Ñ,Ô,ˆØ×Ò�˜Q™œÐ!MÑNÔNÐNÐNÐNr   c                 ó°   — t          j        t          d¦  «                             t          ¦  «        }|                      t          |¦  «        d¦  «         d S )Nr   z*fpext (float 0x3ff0000000000000 to double))r   r+  r+  r,  rH   r<   r(   r³  s     r   Ú
test_fpextzTestConstant.test_fpext
  sD   € ÝŒK�˜QÑÔ×%Ò%¥cÑ*Ô*ˆØ×Ò�˜Q™œÐ!MÑNÔNÐNÐNÐNr   c                 ó  — |                       ¦   «         }t          j        |t          d¦  «        }|                     t
                               ¦   «         ¦  «        }|                      t          |¦  «        d¦  «         d S )NrÛ  z$bitcast (i32* @"myconstant" to i64*))	rC   r   r)  rG   r  rÞ   r»   r<   r(   )r   r—  rÜ  r   s       r   Útest_bitcastzTestConstant.test_bitcast
  sc   € Ø�KŠK‰MŒMˆÝÔ˜q¥%¨Ñ6Ô6ˆØ�JŠJ•u×'Ò'Ñ)Ô)Ñ*Ô*ˆØ×Ò�˜Q™œÐ!GÑHÔHÐHÐHÐHr   c                 ó°   — t          j        t          d¦  «                             t          ¦  «        }|                      t          |¦  «        d¦  «         d S )Nr   z(fptoui (float 0x3ff0000000000000 to i32))r   r+  r+  r-  rG   r<   r(   r³  s     r   Útest_fptouizTestConstant.test_fptoui
  óD   € ÝŒK�˜QÑÔ×&Ò&¥uÑ-Ô-ˆØ×Ò�˜Q™œÐ!KÑLÔLÐLÐLÐLr   c                 ó°   — t          j        t          d¦  «                             t          ¦  «        }|                      t          |¦  «        d¦  «         d S )Nr   zuitofp (i32 1 to float))r   r+  rG   r/  r+  r<   r(   r³  s     r   Útest_uitofpzTestConstant.test_uitofp
  óD   € ÝŒK�˜qÑ!Ô!×(Ò(­Ñ-Ô-ˆØ×Ò�˜Q™œÐ!:Ñ;Ô;Ð;Ð;Ð;r   c                 ó°   — t          j        t          d¦  «                             t          ¦  «        }|                      t          |¦  «        d¦  «         d S )Nr   z(fptosi (float 0x3ff0000000000000 to i32))r   r+  r+  r.  rG   r<   r(   r³  s     r   Útest_fptosizTestConstant.test_fptosi
  r÷  r   c                 ó°   — t          j        t          d¦  «                             t          ¦  «        }|                      t          |¦  «        d¦  «         d S )Nr   zsitofp (i32 1 to float))r   r+  rG   r0  r+  r<   r(   r³  s     r   Útest_sitofpzTestConstant.test_sitofp
  rú  r   c                 ó¤  — t          j        t                               ¦   «         d ¦  «        }t          j        t          d¦  «        }|                     t          ¦  «        }|                      t          |j        t          ¦  «         |                      t          |j        t          ¦  «         |  	                    t          |¦  «        d¦  «         d S )Nr   zptrtoint (i64* null to i32))r   r+  rÞ   r»   rG   r1  rì   r   r+  r<   r(   )r   r  r3  r   s       r   Útest_ptrtoint_1zTestConstant.test_ptrtoint_1!
  s˜   € ÝŒk�%×*Ò*Ñ,Ô,¨dÑ3Ô3ˆÝŒk�% Ñ#Ô#ˆØ�LŠL�ÑÔˆà×Ò�) S¤\µ5Ñ9Ô9Ð9Ø×Ò�) S¤\µ3Ñ7Ô7Ð7Ø×Ò�˜Q™œÐ!>Ñ?Ô?Ð?Ð?Ð?r   c                 óÒ  — |                       ¦   «         }t          j        |t          d¦  «        }|                     t
          ¦  «        }|                      t          |¦  «        d¦  «         |                      t          d|j        t
           
                    ¦   «         ¦  «         t          j        t          d¦  «        }|                      t          d|j        t
          ¦  «         d S )NrÛ  z$ptrtoint (i32* @"myconstant" to i64)z2can only ptrtoint\(\) to integer type, not 'i64\*'r   z5can only call ptrtoint\(\) on pointer type, not 'i32')rC   r   r)  rG   r1  rÞ   r<   r(   rÍ   r   r»   r+  )r   r—  rÜ  r   rÎ  s        r   Útest_ptrtoint_2zTestConstant.test_ptrtoint_2*
  sÆ   € Ø�KŠK‰MŒMˆÝÔ˜q¥%¨Ñ6Ô6ˆØ�KŠK�ÑÔˆØ×Ò�˜Q™œÐ!GÑHÔHÐHà×ÒÝØAØŒKÝ×ÒÑÔñ		 ô 	 ð 	 õ Œ[� Ñ"Ô"ˆØ×ÒÝØDØŒKÝñ		ô 	ð 	ð 	ð 	r   c                 óÈ  — t          j        t          d¦  «        }t          j        t          d¦  «        }|                     t
                               ¦   «         ¦  «        }|                      t          |j        t
          ¦  «         |                      t          |j        t
                               ¦   «         ¦  «         |  	                    t          |¦  «        d¦  «         d S )Nr   g…ëQ¸	@zinttoptr (i32 1 to i64*))r   r+  rG   r+  r2  rÞ   r»   rì   r   r<   r(   )r   r3  Úpir   s       r   Útest_inttoptrzTestConstant.test_inttoptr=
  s¤   € ÝŒk�% Ñ#Ô#ˆÝŒ[�˜dÑ#Ô#ˆØ�LŠL�×)Ò)Ñ+Ô+Ñ,Ô,ˆà×Ò�) S¤\µ5Ñ9Ô9Ð9Ø×Ò�) R¤[µ%×2BÒ2BÑ2DÔ2DÑEÔEÐEØ×Ò�˜Q™œÐ!;Ñ<Ô<Ð<Ð<Ð<r   c                 ó¤   — t          j        t          d¦  «        }|                      t	          |                     ¦   «         ¦  «        d¦  «         d S )Nr   zsub (i32 0, i32 1))r   r+  rG   r<   r(   rÆ  ©r   r3  s     r   Útest_negzTestConstant.test_negF
  s>   € ÝŒk�% Ñ#Ô#ˆØ×Ò�˜SŸWšW™YœY™œÐ)=Ñ>Ô>Ð>Ð>Ð>r   c                 ó¤   — t          j        t          d¦  «        }|                      t	          |                     ¦   «         ¦  «        d¦  «         d S )Nr   zxor (i32 1, i32 -1))r   r+  rG   r<   r(   rÇ  r  s     r   Útest_notzTestConstant.test_notJ
  s>   € ÝŒk�% Ñ#Ô#ˆØ×Ò�˜SŸXšX™ZœZ™œÐ*?Ñ@Ô@Ð@Ð@Ð@r   c                 ó¤   — t          j        t          d¦  «        }|                      t	          |                     ¦   «         ¦  «        d¦  «         d S )Nr   zfneg (float 0x3ff0000000000000))r   r+  r+  r<   r(   rÈ  r  s     r   Ú	test_fnegzTestConstant.test_fnegN
  s>   € ÝŒk�#˜qÑ!Ô!ˆØ×Ò�˜SŸXšX™ZœZ™œÐ*KÑLÔLÐLÐLÐLr   c                 óJ  — t          j        t          d¦  «        }t          j        t          d¦  «        }|j        d|j        d|j        d|j        d|j        d|j        d|j	        d	|j
        d
|j        d|j        d|j        d|j        d|j        di}|                     ¦   «         D ]4\  }}|                      t%           ||¦  «        ¦  «        |dz   ¦  «         Œ5dddddddœ}|                     ¦   «         D ]F\  }}t%          |                     ||¦  «        ¦  «        }d|z   dz   }	|                      ||	¦  «         ŒGdddddddœ}|                     ¦   «         D ]F\  }}t%          |                     ||¦  «        ¦  «        }d|z   dz   }	|                      ||	¦  «         ŒGd S )Nr   rs   rª  r¬  r«  r‰   r   rˆ  r¢  r‡  r¤  r¥  ÚorÚandr©  z (i32 1, i32 2)ÚeqÚneÚugtÚugeÚultÚule©rÒ  rÓ  rÖ  r×  rÔ  rÕ  zicmp ÚsgtÚsgeÚsltÚsle)r   r+  rG   rª  r¬  r«  r‰   r   rˆ  r¢  r‡  r¤  r¥  r§  r¨  r©  Úitemsr<   r(   rÚ  rÛ  )
r   r3  rP  ÚoraclerÇ   ÚiropÚcopr  rl   r_   s
             r   Útest_int_binopszTestConstant.test_int_binopsR
  sÌ  € ÝŒk�% Ñ#Ô#ˆÝŒk�% Ñ#Ô#ˆà”'˜E C¤H¨f°c´hÀØ”'˜E C¤G¨e°c´gÀØ”(˜F C¤H¨f°c´hÀØ”(˜F C¤G¨d°c´hÀØ”'˜Eð	#ˆð
 Ÿš™œð 	Eð 	E‰HˆB�Ø×Ò�S   C¡¤™\œ\¨4Ð2CÑ+CÑDÔDÐDÐDð  DØ˜u¨5¸ð?ð ?ˆàŸš™œð 	/ð 	/‰IˆC�Ý˜×*Ò*¨3°Ñ4Ô4Ñ5Ô5ˆFØ ‘~Ð(9Ñ9ˆHØ×Ò˜V XÑ.Ô.Ð.Ð.ð  DØ E°¸UðDð DˆàŸš™œð 	/ð 	/‰IˆC�Ý˜Ÿš¨¨cÑ2Ô2Ñ3Ô3ˆFØ ‘~Ð(9Ñ9ˆHØ×Ò˜V XÑ.Ô.Ð.Ð.ð	/ð 	/r   c           
      óâ  — t          j        t          d¦  «        }t          j        t          d¦  «        }|j        d|j        d|j        d|j        d|j        di}|                     ¦   «         D ]8\  }}t           ||¦  «        ¦  «        }|dz   }|  
                    ||¦  «         Œ9d	d
dddddœ}|                     ¦   «         D ]F\  }}	t          |                     ||¦  «        ¦  «        }d|	z   dz   }|  
                    ||¦  «         ŒGdddddddœ}|                     ¦   «         D ]F\  }}	t          |                     ||¦  «        ¦  «        }d|	z   dz   }|  
                    ||¦  «         ŒGd S )Nr   rs   rŸ  r   r¡  r£  r¦  z5 (float 0x3ff0000000000000, float 0x4000000000000000)Úoeqr3  ÚogtÚogerâ  Úoler  zfcmp ÚueqÚuner  r  r  r  )r   r+  r+  rŸ  r   r¡  r£  r¦  r  r(   r<   ræ  rç  )
r   r3  rP  r  rÇ   r  rl   r_   r  r  s
             r   Útest_flt_binopszTestConstant.test_flt_binopsn
  s¯  € ÝŒk�#˜qÑ!Ô!ˆÝŒk�#˜qÑ!Ô!ˆà”(˜F C¤H¨f°c´hÀØ”(˜F C¤H¨fð6ˆàŸš™œð 	/ð 	/‰HˆB�Ý˜˜˜C™œ‘\”\ˆFØð  <ñ =ˆHà×Ò˜V XÑ.Ô.Ð.Ð.ð  U°¸eØ Eð+ð +ˆàŸš™œð 	/ð 	/‰IˆC�Ý˜×)Ò)¨#¨sÑ3Ô3Ñ4Ô4ˆFØ ‘~ð *Fñ GˆHà×Ò˜V XÑ.Ô.Ð.Ð.ð  U°¸eØ Eð+ð +ˆàŸš™œð 	/ð 	/‰IˆC�Ý˜×+Ò+¨C°Ñ5Ô5Ñ6Ô6ˆFØ ‘~ð *Fñ GˆHà×Ò˜V XÑ.Ô.Ð.Ð.ð		/ð 	/r   N)!rx   ry   rz   r´  r·  r»  r¬  rÃ  rÐ  rÔ  r×  rŒ  rß  r  rè  rê  rì  rî  rð  rò  rô  rö  rù  rü  rþ  r   r  r  r  r
  r  r  r'  r#   r   r   r°  r°  1	  sø  € € € € € ð)ð )ð )ð /ð /ð /ð8ð 8ð 8ð:-ð -ð -ð&ð &ð &ð (ð  (ð  (ðD)ð )ð )ð
Kð Kð Kð<Gð Gð Gð5ð 5ð 5ð7ð 7ð 7ð&Lð Lð Lð9ð 9ð 9ð8ð 8ð 8ð9ð 9ð 9ðOð Oð OðOð Oð OðIð Ið IðMð Mð Mð<ð <ð <ðMð Mð Mð<ð <ð <ð@ð @ð @ðð ð ð&=ð =ð =ð?ð ?ð ?ðAð Að AðMð Mð Mð/ð /ð /ð8/ð /ð /ð /ð /r   r°  c                   ó   — e Zd Zd„ ZdS )ÚTestTransformsc                 ó®  — t          j        ¦   «         }t          j        |t          j        t          j        ¦   «         d¦  «        d¦  «        }t          j        |t          j        t          j        ¦   «         d¦  «        d¦  «        }t          j        ¦   «         }|                     |                     ¦   «         ¦  «         |                     |d¦  «        }|  	                    |j
        |¦  «         t          j        |||¦  «        }|                      ||¦  «         |                      |j
        |¦  «         |  	                    |j
        |¦  «         d S )Nr#   rè   ré   )r   rA   rJ   rF   rC  r´   rº  rO   rE  r<   ÚcalleeÚreplace_all_callsr*   r¥  )r   r+   rè   ré   r·   rE  Úmodifieds          r   Útest_call_transformz"TestTransforms.test_call_transformŽ
  s  € ÝŒi‰kŒkˆÝŒk˜#�rœ­r¬{©}¬}¸bÑAÔAÀ5ÑIÔIˆÝŒk˜#�rœ­r¬{©}¬}¸bÑAÔAÀ5ÑIÔIˆÝ”,‘.”.ˆØ×Ò × 6Ò 6Ñ 8Ô 8Ñ9Ô9Ð9Ø�|Š|˜C Ñ$Ô$ˆØ×Ò˜œ cÑ*Ô*Ð*ÝÔ'¨¨S°#Ñ6Ô6ˆØ�Š�d˜HÑ%Ô%Ð%Ø×Ò˜DœK¨Ñ-Ô-Ð-Ø×Ò˜œ cÑ*Ô*Ð*Ð*Ð*r   N)rx   ry   rz   r.  r#   r   r   r)  r)  �
  s#   € € € € € ð+ð +ð +ð +ð +r   r)  c                   ó   — e Zd Zd„ ZdS )ÚTestSingletonc                 ó¬  — |                       t          j        t          j                             ¦   «         ¦  «         |                       t          j        t          j        t          j        ¦  «        ¦  «         |                       t          j        t          j        t          j        ¦  «        ¦  «         |                      t          j        ¦  «         d S r/   )r:   r   rÌ  ÚvaluesÚ
_Undefinedrw  Údeepcopyr?   rB   s    r   Útest_undefinedzTestSingleton.test_undefined�
  s†   € Ø�Š•b”l¥B¤I×$8Ò$8Ñ$:Ô$:Ñ;Ô;Ð;Ø�Š•b”l¥D¤I­b¬lÑ$;Ô$;Ñ<Ô<Ð<Ø�Š•b”l¥D¤Mµ"´,Ñ$?Ô$?Ñ@Ô@Ð@Ø×$Ò$¥R¤\Ñ2Ô2Ð2Ð2Ð2r   N)rx   ry   rz   r5  r#   r   r   r0  r0  œ
  s#   € € € € € ð3ð 3ð 3ð 3ð 3r   r0  Ú__main__)'r{   rw  ru  r7   r   rX   Úunittestr   r   Úllvmliter   r   r0   r-  rê  r‹   rÝ  rG   rÞ   ÚHalfTyperx  r*  r+  rX  rH   r   r}   rÖ   rT  rw  rŽ  r*  rc  r®  r°  r)  r0  rx   Úmainr#   r   r   ú<module>r;     sH  ððð ð €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ð €r„z�!�}„}€Ø€r„z�!�}„}€ØˆŒ
�2‰Œ€ØˆŒ
�2‰Œ€ØˆŒ
�2‰Œ€Ø€b„k�m„m€Ø€b„l�n„n€Ø€b„m�o„o€ð[;ð [;ð [;ð [;ð [;ˆxñ [;ô [;ð [;ð|p0ð p0ð p0ð p0ð p0�8ñ p0ô p0ð p0ðfU"ð U"ð U"ð U"ð U"ˆXñ U"ô U"ð U"ðpI*ð I*ð I*ð I*ð I*�xñ I*ô I*ð I*ðX*Lð *Lð *Lð *Lð *L�ñ *Lô *Lð *LðZL5ð L5ð L5ð L5ð L5˜Hñ L5ô L5ð L5ð`$cð cð cð cð c�hñ cô cð cðL	w2ð w2ð w2ð w2ð w2�ñ w2ô w2ð w2ðt!ð !ð !ðY/ð Y/ð Y/ð Y/ð Y/�8ñ Y/ô Y/ð Y/ðx
+ð +ð +ð +ð +�Xñ +ô +ð +ð3ð 3ð 3ð 3ð 3�Hñ 3ô 3ð 3ð ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   