§
    .@Äj\?  ã                   óª  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
c mZ d„ Z G d„ d¦  «        Z G d	„ d
e¦  «        Z ej        d¦  «                             ¦   «         Z G d„ dee¦  «        Z G d„ dee¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zedk    r e j        ¦   «          dS dS )é    N)Údefaultdict)Úir)Úbinding)ÚTestCasec              #   ó¬   ‡ K  — ˆ fd„}t           j                             ¦   «         D ],\  }}|                     d¦  «        rd|› � ||¦  «        fV — Œ-d S )Nc                 óD   •‡ — ˆ ˆfd„}d‰ j         › d‰ j        › �|_        |S )Nc                 ó   •—  ‰| ‰¦  «        S ©N© )ÚselfÚfnÚgenerate_tests    €€úMC:\Projects\Historical\venv\Lib\site-packages\llvmlite/tests/test_refprune.pyÚwrappedz-_iterate_cases.<locals>.wrap.<locals>.wrapped   s   ø€ Ø �=  rÑ*Ô*Ð*ó    zgenerated test for ú.)Ú
__module__Ú__name__Ú__doc__)r   r   r   s   ` €r   Úwrapz_iterate_cases.<locals>.wrap   sB   øø€ ð	+ð 	+ð 	+ð 	+ð 	+ð 	+àM°´ÐMÐMÀÄÐMÐMˆŒØˆr   ÚcaseÚtest_)ÚprotoÚ__dict__ÚitemsÚ
startswith)r   r   ÚkÚcase_fns   `   r   Ú_iterate_casesr   
   s�   øè è € ðð ð ð ð õ ”n×*Ò*Ñ,Ô,ð -ð -‰
ˆˆ7Ø�<Š<˜ÑÔð 	-Ø˜!�+�+˜t˜t G™}œ}Ð,Ð,Ð,Ð,øð-ð -r   c                   ó   — e Zd Zd„ ZdS )ÚPassManagerMixinc                 óÜ   — t          j        ¦   «          t           j                             ¦   «                              ¦   «         }t          j        d¬¦  «        }t          j        ||¦  «        S )Nr   )Úspeed_level)ÚllvmÚinitialize_native_targetÚTargetÚfrom_default_tripleÚcreate_target_machineÚcreate_pipeline_tuning_optionsÚcreate_pass_builder)r   ÚtmÚptos      r   ÚpbzPassManagerMixin.pb   sV   € ÝÔ%Ñ'Ô'Ð'ÝŒ[×,Ò,Ñ.Ô.×DÒDÑFÔFˆÝÔ1¸aÐ@Ñ@Ô@ˆÝÔ'¨¨CÑ0Ô0Ð0r   N)r   r   Ú__qualname__r-   r   r   r   r!   r!      s#   € € € € € ð1ð 1ð 1ð 1ð 1r   r!   c                   óT   — e Zd ZdZd„ Z ee¦  «        D ]\  ZZe e¦   «         e<   ŒdS )ÚTestRefPrunePrototypez-
    Test that the prototype is working.
    c                 óœ   —  |¦   «         \  }}}t          j        ||¦  «                             ¦   «         }|                      ||¦  «         d S r
   )r   ÚFanoutAlgorithmÚrunÚassertEqual)r   Úcase_genÚnodesÚedgesÚexpectedÚgots         r   r   z#TestRefPrunePrototype.generate_test#   sN   € Ø!) ¡¤Ñˆˆu�hÝÔ# E¨5Ñ1Ô1×5Ò5Ñ7Ô7ˆØ×Ò˜ 3Ñ'Ô'Ð'Ð'Ð'r   N)	r   r   r.   r   r   r   Únamer   Úlocalsr   r   r   r0   r0      s]   € € € € € ðð ð(ð (ð (ð %�n ]Ñ3Ô3ð ð ‰
ˆˆdØˆˆ‰Œ�‰ˆðð r   r0   é   c                   ó~   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Z ee¦  «        D ]\  ZZe e¦   «         e<   Œd
S )ÚTestRefPrunePasszß
    Test that the C++ implementation matches the expected behavior as for
    the prototype.

    This generates a LLVM module for each test case, runs the pruner and checks
    that the expected results are achieved.
    c                 óˆ   — t          j        t          j        ¦   «         t          g¦  «        }t          j        ||d¬¦  «        S )NÚ
NRT_incref©r:   ©r   ÚFunctionTypeÚVoidTypeÚptr_tyÚFunction©r   ÚmÚfntys      r   Úmake_increfzTestRefPrunePass.make_incref9   ó2   € ÝŒ�rœ{™}œ}­v¨hÑ7Ô7ˆÝŒ{˜1˜d¨Ð6Ñ6Ô6Ð6r   c                 óˆ   — t          j        t          j        ¦   «         t          g¦  «        }t          j        ||d¬¦  «        S )NÚ
NRT_decrefrA   rB   rG   s      r   Úmake_decrefzTestRefPrunePass.make_decref=   rK   r   c                 ó~   — t          j        t          j        d¦  «        d¦  «        }t          j        ||d¬¦  «        S )Né    r   ÚswitcherrA   ©r   rC   ÚIntTyperF   rG   s      r   Úmake_switcherzTestRefPrunePass.make_switcherA   s2   € ÝŒ�rœz¨"™~œ~¨rÑ2Ô2ˆÝŒ{˜1˜d¨Ð4Ñ4Ô4Ð4r   c                 ó~   — t          j        t          j        d¦  «        d¦  «        }t          j        ||d¬¦  «        S )Né   r   ÚbrancherrA   rR   rG   s      r   Úmake_brancherzTestRefPrunePass.make_brancherE   s2   € ÝŒ�rœz¨!™}œ}¨bÑ1Ô1ˆÝŒ{˜1˜d¨Ð4Ñ4Ô4Ð4r   c                 óB  — t          j        ¦   «         }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }t          j        t          j        ¦   «         t          g¦  «        }t          j	        ||d¬¦  «        }	|	j
        \  }
d|
_        i }|D ]}|	                     |¦  «        ||<   Œt          j        ¦   «         }|                     ¦   «         D �]œ\  }}|                     ||         ¦  «         ||         D ]L}|dk    r|                     ||
g¦  «         Œ |dk    r|                     ||
g¦  «         Œ>t#          d¦  «        ‚t%          |¦  «        }|dk    r|                     ¦   «          Œ |dk    r |\  }|                     ||         ¦  «         ŒÆ|d	k    r@|\  }}|                     |d
¦  «        }|                     |||         ||         ¦  «         �Œ|d	k    r}|                     |d
¦  «        }|^}}|                     |||         ¬¦  «        }t/          |¦  «        D ]4\  }}|                     |                     |¦  «        ||         ¦  «         Œ5�Œ�t#          d¦  «        ‚|S )NÚmainrA   ÚmemÚincrefÚdecrefÚunreachabler   rV   é   r   )Údefault)r   ÚModulerJ   rN   rT   rX   rC   rD   rE   rF   Úargsr:   Úappend_basic_blockÚ	IRBuilderr   Úposition_at_endÚcallÚAssertionErrorÚlenÚret_voidÚbranchÚcbranchÚswitchÚ	enumerateÚadd_caseÚtype)r   r6   r7   rH   Ú	incref_fnÚ	decref_fnÚswitcher_fnÚbrancher_fnrI   r   ÚptrÚbbmapÚbbÚbuilderÚjump_targetsÚactionÚ	n_targetsÚdstÚleftÚrightÚselÚheadÚtailÚswÚis                            r   Úgenerate_irzTestRefPrunePass.generate_irI   sŸ  € åŒI‰KŒKˆà×$Ò$ QÑ'Ô'ˆ	Ø×$Ò$ QÑ'Ô'ˆ	Ø×(Ò(¨Ñ+Ô+ˆØ×(Ò(¨Ñ+Ô+ˆåŒ�rœ{™}œ}­v¨hÑ7Ô7ˆÝŒ[˜˜D vÐ.Ñ.Ô.ˆØ”‰ˆØˆŒàˆØð 	2ð 	2ˆBØ×-Ò-¨bÑ1Ô1ˆE�"‰IˆIå”,‘.”.ˆØ %§¢¡¤ð 	4ñ 	4ÑˆB�Ø×#Ò# E¨"¤IÑ.Ô.Ð.à œ)ð 8ð 8�Ø˜XÒ%Ð%Ø—L’L ¨S¨EÑ2Ô2Ð2Ð2Ø˜xÒ'Ð'Ø—L’L ¨S¨EÑ2Ô2Ð2Ð2å(¨Ñ7Ô7Ð7õ ˜LÑ)Ô)ˆIØ˜AŠ~ˆ~Ø× Ò Ñ"Ô"Ð"Ð"Ø˜a’�Ø$‘�Ø—’˜u SœzÑ*Ô*Ð*Ð*Ø˜a’�Ø ,‘��uØ—l’l ;°Ñ3Ô3�Ø—’  U¨4¤[°%¸´,Ñ?Ô?Ð?Ñ?Ø˜Q’�Ø—l’l ;°Ñ3Ô3�Ø ,��˜à—^’^ C°°t´�^Ñ=Ô=�Ý'¨™oœoð 9ð 9‘F�A�sØ—K’K §¢¨¡¤¨U°3¬ZÑ8Ô8Ð8Ð8ñ9õ % ]Ñ3Ô3Ð3àˆr   c                 óì   — t          j        t          |¦  «        ¦  «        }|                      ¦   «         }|                     ¦   «         }|                     ¦   «          |                     ||¦  «         |S r
   )r$   Úparse_assemblyÚstrr-   ÚgetModulePassManagerÚadd_refprune_passr3   )r   ÚirmodÚmodr-   Úpms        r   Úapply_refprunezTestRefPrunePass.apply_refprune   s^   € ÝÔ!¥# e¡*¤*Ñ-Ô-ˆØ�WŠW‰YŒYˆØ×$Ò$Ñ&Ô&ˆØ
×ÒÑÔÐØ
�Šˆs�B‰ŒˆØˆ
r   c                 óÐ  — t          d„ ¦  «        }|                     ¦   «         D ]7\  }}|                     d¦  «        }|                     d¦  «        }||dœ||<   Œ8|                     ¦   «         D ]K\  }}	|                     |¦  «        r1|	dxx         dz  cc<   ||         D ]}
||
         dxx         dz  cc<   ŒŒL|j        D ]}|j        dk    r nŒ|j        D ]Š}||j                 }	t          |¦  «        }|                     d¦  «        }|                     d¦  «        }|                      |	d         |d	|› �¬
¦  «         |                      |	d         |d	|› �¬
¦  «         Œ‹d S )Nc                  ó*   — t          t          ¦  «        S r
   )r   Úintr   r   r   ú<lambda>z(TestRefPrunePass.check.<locals>.<lambda>Œ   s   € ¥­CÑ 0Ô 0€ r   r\   r]   )r\   r]   rV   rZ   r@   rM   zBB )Úmsg)	r   r   ÚcountÚgetÚ	functionsr:   Úblocksr†   r4   )r   rŠ   r8   r6   Údr   ÚvsÚn_increfÚn_decrefÚstatsÚdec_bbÚfrv   Útexts                 r   ÚcheckzTestRefPrunePass.check‡   s¯  € õ
 Ð0Ð0Ñ1Ô1ˆà—[’[‘]”]ð 	<ð 	<‰EˆAˆrØ—x’x Ñ)Ô)ˆHØ—x’x Ñ)Ô)ˆHØ&°(Ð;Ð;ˆAˆa‰DˆDØŸš™	œ	ð 	-ð 	-‰HˆAˆuØ�|Š|˜A‰Œð -Ø�h��” 1Ñ$��‘Ø& qœkð -ð -�FØ�f”I˜hÐ'Ð'Ô'¨1Ñ,Ð'Ð'Ñ'Ð'øð ”ð 	ð 	ˆAØŒv˜ÒÐØ�ð  ð ”(ð 	Hð 	HˆBØ�b”g”JˆEÝ�r‘7”7ˆDØ—z’z ,Ñ/Ô/ˆHØ—z’z ,Ñ/Ô/ˆHØ×Ò˜U 8œ_¨h¸JÀ"¸J¸JÐÑGÔGÐGØ×Ò˜U 8œ_¨h¸JÀ"¸J¸JÐÑGÔGÐGÐGð	Hð 	Hr   c                 ó¦   —  |¦   «         \  }}}|                       ||¦  «        }|                      |¦  «        }|                      |||¦  «         d S r
   )rƒ   rŒ   rž   )r   r5   r6   r7   r8   r‰   Úoutmods          r   r   zTestRefPrunePass.generate_test¦   sX   € Ø!) ¡¤Ñˆˆu�hØ× Ò  ¨Ñ.Ô.ˆØ×$Ò$ UÑ+Ô+ˆØ�
Š
�6˜8 UÑ+Ô+Ð+Ð+Ð+r   N)r   r   r.   r   rJ   rN   rT   rX   rƒ   rŒ   rž   r   r   r:   r   r;   r   r   r   r>   r>   0   sÊ   € € € € € ðð ð7ð 7ð 7ð7ð 7ð 7ð5ð 5ð 5ð5ð 5ð 5ð4ð 4ð 4ðlð ð ðHð Hð Hð>,ð ,ð ,ð %�n ]Ñ3Ô3ð ð ‰
ˆˆdØˆˆ‰Œ�‰ˆðð r   r>   c                   ó   — e Zd ZdZdZdd„ZdS )ÚBaseTestByIRr   zG
declare void @NRT_incref(i8* %ptr)
declare void @NRT_decref(i8* %ptr)
Nc                 ó†  — t          j        | j        › d|› �¦  «        }|                      ¦   «         }|                     ¦   «         }|€|                     | j        ¦  «         n|                     | j        |¬¦  «         t          j        ¦   «         }|                     ||¦  «         t          j        ¦   «         }|||z
  fS )Nú
©Úsubgraph_limit)	r$   r…   Úprologuer-   r‡   rˆ   Úrefprune_bitmaskÚdump_refprune_statsr3   )r   r‰   r¦   rŠ   r-   r‹   ÚbeforeÚafters           r   rž   zBaseTestByIR.check¹   sÄ   € ÝÔ! T¤]Ð"=Ð"=°eÐ"=Ð"=Ñ>Ô>ˆØ�WŠW‰YŒYˆØ×$Ò$Ñ&Ô&ˆØÐ!Ø× Ò  Ô!6Ñ7Ô7Ð7Ð7à× Ò  Ô!6Ø0>ð !ñ @ô @ð @åÔ)Ñ+Ô+ˆØ
�Šˆs�B‰ŒˆÝÔ(Ñ*Ô*ˆØ�E˜F‘NÐ"Ð"r   r
   )r   r   r.   r¨   r§   rž   r   r   r   r¢   r¢   ±   s5   € € € € € ØÐð€Hð
#ð #ð #ð #ð #ð #r   r¢   c                   óN   — e Zd Zej        j        ZdZd„ ZdZ	d„ Z
dZd„ ZdZd„ Zd	S )
Ú	TestPerBBzv
define void @main(i8* %ptr) {
    call void @NRT_incref(i8* %ptr)
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S ©Nr_   )rž   Úper_bb_ir_1r4   Ú
basicblock©r   rŠ   rš   s      r   Útest_per_bb_1zTestPerBB.test_per_bb_1Ó   s9   € Ø—Z’Z Ô 0Ñ1Ô1‰
ˆˆUØ×Ò˜Ô)¨1Ñ-Ô-Ð-Ð-Ð-r   zâ
define void @main(i8* %ptr) {
    call void @NRT_incref(i8* %ptr)
    call void @NRT_incref(i8* %ptr)
    call void @NRT_incref(i8* %ptr)
    call void @NRT_decref(i8* %ptr)
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 ó¼   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         |                      dt          |¦  «        ¦  «         d S )Né   zcall void @NRT_incref(ptr %ptr))rž   Úper_bb_ir_2r4   r±   ÚassertInr†   r²   s      r   Útest_per_bb_2zTestPerBB.test_per_bb_2â   sT   € Ø—Z’Z Ô 0Ñ1Ô1‰
ˆˆUØ×Ò˜Ô)¨1Ñ-Ô-Ð-à�ŠÐ7½¸S¹¼ÑBÔBÐBÐBÐBr   zÌ
define void @main(ptr %ptr, ptr %other) {
    call void @NRT_incref(ptr %ptr)
    call void @NRT_incref(ptr %ptr)
    call void @NRT_decref(ptr %ptr)
    call void @NRT_decref(ptr %other)
    ret void
}
c                 ó¼   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         |                      dt          |¦  «        ¦  «         d S )Nr_   ú!call void @NRT_decref(ptr %other))rž   Úper_bb_ir_3r4   r±   r·   r†   r²   s      r   Útest_per_bb_3zTestPerBB.test_per_bb_3ò   óT   € Ø—Z’Z Ô 0Ñ1Ô1‰
ˆˆUØ×Ò˜Ô)¨1Ñ-Ô-Ð-à�ŠÐ9½3¸s¹8¼8ÑDÔDÐDÐDÐDr   zü
; reordered
define void @main(ptr %ptr, ptr %other) {
    call void @NRT_incref(ptr %ptr)
    call void @NRT_decref(ptr %ptr)
    call void @NRT_decref(ptr %ptr)
    call void @NRT_decref(ptr %other)
    call void @NRT_incref(ptr %ptr)
    ret void
}
c                 ó¼   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         |                      dt          |¦  «        ¦  «         d S )Nrµ   rº   )rž   Úper_bb_ir_4r4   r±   r·   r†   r²   s      r   Útest_per_bb_4zTestPerBB.test_per_bb_4  r½   r   N)r   r   r.   r$   ÚRefPruneSubpassesÚPER_BBr¨   r°   r³   r¶   r¸   r»   r¼   r¿   rÀ   r   r   r   r­   r­   È   sƒ   € € € € € ØÔ-Ô4Ðð€Kð.ð .ð .ð	€KðCð Cð Cð€KðEð Eð Eð
€KðEð Eð Eð Eð Er   r­   c                   óX   — e Zd Zej        j        ZdZd„ ZdZ	d„ Z
dZd„ ZdZd„ Zd	Zd
„ ZdS )ÚTestDiamondz•
define void @main(i8* %ptr) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br label %bb_B
bb_B:
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S r¯   )rž   Úper_diamond_1r4   Údiamondr²   s      r   Útest_per_diamond_1zTestDiamond.test_per_diamond_1  ó8   € Ø—Z’Z Ô 2Ñ3Ô3‰
ˆˆUØ×Ò˜œ¨Ñ*Ô*Ð*Ð*Ð*r   zè
define void @main(i8* %ptr, i1 %cond) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    br label %bb_D
bb_C:
    br label %bb_D
bb_D:
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S r¯   )rž   Úper_diamond_2r4   rÇ   r²   s      r   Útest_per_diamond_2zTestDiamond.test_per_diamond_2,  rÉ   r   a3  
define void @main(i8* %ptr, i1 %cond) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    br label %bb_D
bb_C:
    call void @NRT_decref(i8* %ptr)  ; reject because of decref in diamond
    br label %bb_D
bb_D:
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S ©Nr   )rž   Úper_diamond_3r4   rÇ   r²   s      r   Útest_per_diamond_3zTestDiamond.test_per_diamond_3@  rÉ   r   a5  
define void @main(i8* %ptr, i1 %cond) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    call void @NRT_incref(i8* %ptr)     ; extra incref will not affect prune
    br label %bb_D
bb_C:
    br label %bb_D
bb_D:
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S r¯   )rž   Úper_diamond_4r4   rÇ   r²   s      r   Útest_per_diamond_4zTestDiamond.test_per_diamond_4T  rÉ   r   a0  
define void @main(i8* %ptr, i1 %cond) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    br label %bb_D
bb_C:
    br label %bb_D
bb_D:
    call void @NRT_decref(i8* %ptr)
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S )Nrµ   )rž   Úper_diamond_5r4   rÇ   r²   s      r   Útest_per_diamond_5zTestDiamond.test_per_diamond_5i  rÉ   r   N)r   r   r.   r$   rÁ   ÚDIAMONDr¨   rÆ   rÈ   rË   rÌ   rÏ   rÐ   rÒ   rÓ   rÕ   rÖ   r   r   r   rÄ   rÄ     sŽ   € € € € € ØÔ-Ô5Ðð	€Mð+ð +ð +ð€Mð+ð +ð +ð€Mð +ð +ð +ð€Mð +ð +ð +ð€Mð"+ð +ð +ð +ð +r   rÄ   c                   óN   — e Zd ZdZej        j        ZdZd„ Z	dZ
d„ ZdZd„ Zd„ Zd	S )
Ú
TestFanoutz6More complex cases are tested in TestRefPrunePass
    zí
define void @main(i8* %ptr, i1 %cond) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    call void @NRT_decref(i8* %ptr)
    ret void
bb_C:
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S )Né   )rž   Úfanout_1r4   Úfanoutr²   s      r   Útest_fanout_1zTestFanout.test_fanout_1‚  ó7   € Ø—Z’Z ¤Ñ.Ô.‰
ˆˆUØ×Ò˜œ qÑ)Ô)Ð)Ð)Ð)r   a6  
define void @main(i8* %ptr, i1 %cond, i8** %excinfo) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    call void @NRT_decref(i8* %ptr)
    ret void
bb_C:
    call void @NRT_decref(i8* %ptr)
    br label %bb_B                      ; illegal jump to other decref
}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S rÎ   )rž   Úfanout_2r4   rÝ   r²   s      r   Útest_fanout_2zTestFanout.test_fanout_2”  rß   r   a}  
define void @main(i8* %ptr, i1 %cond) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    call void @NRT_decref(i8* %ptr)
    call void @NRT_decref(i8* %ptr)
    call void @NRT_decref(i8* %ptr)
    ret void
bb_C:
    call void @NRT_decref(i8* %ptr)
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S )Né   ©rž   Úfanout_3r4   rÝ   r²   s      r   Útest_fanout_3zTestFanout.test_fanout_3ª  rß   r   c                 óz   — |                       | j        d¬¦  «        \  }}|                      |j        d¦  «         d S )NrV   r¥   r   rå   r²   s      r   Útest_fanout_3_limitedz TestFanout.test_fanout_3_limited®  s=   € ð —Z’Z ¤¸a�ZÑ@Ô@‰
ˆˆUØ×Ò˜œ qÑ)Ô)Ð)Ð)Ð)r   N)r   r   r.   r   r$   rÁ   ÚFANOUTr¨   rÜ   rÞ   rá   râ   ræ   rç   ré   r   r   r   rÙ   rÙ   n  s}   € € € € € ðð ð Ô-Ô4Ðð€Hð*ð *ð *ð€Hð*ð *ð *ð€Hð$*ð *ð *ð*ð *ð *ð *ð *r   rÙ   c                   ób   — e Zd Zej        j        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 )ÚTestFanoutRaisea'  
define i32 @main(i8* %ptr, i1 %cond, i8** %excinfo) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    call void @NRT_decref(i8* %ptr)
    ret i32 0
bb_C:
    store i8* null, i8** %excinfo, !numba_exception_output !0
    ret i32 1
}
!0 = !{i1 true}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S r¯   )rž   Úfanout_raise_1r4   Úfanout_raiser²   s      r   Útest_fanout_raise_1z#TestFanoutRaise.test_fanout_raise_1Ç  ó9   € Ø—Z’Z Ô 3Ñ4Ô4‰
ˆˆUØ×Ò˜Ô+¨QÑ/Ô/Ð/Ð/Ð/r   a:  
define i32 @main(i8* %ptr, i1 %cond, i8** %excinfo) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    call void @NRT_decref(i8* %ptr)
    ret i32 0
bb_C:
    store i8* null, i8** %excinfo, !numba_exception_typo !0      ; bad metadata
    ret i32 1
}

!0 = !{i1 true}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S rÎ   )rž   Úfanout_raise_2r4   rï   r²   s      r   Útest_fanout_raise_2z#TestFanoutRaise.test_fanout_raise_2Û  s;   € ð —Z’Z Ô 3Ñ4Ô4‰
ˆˆUØ×Ò˜Ô+¨QÑ/Ô/Ð/Ð/Ð/r   a:  
define i32 @main(i8* %ptr, i1 %cond, i8** %excinfo) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    call void @NRT_decref(i8* %ptr)
    ret i32 0
bb_C:
    store i8* null, i8** %excinfo, !numba_exception_output !0
    ret i32 1
}

!0 = !{i32 1}       ; ok; use i32
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S r¯   )rž   Úfanout_raise_3r4   rï   r²   s      r   Útest_fanout_raise_3z#TestFanoutRaise.test_fanout_raise_3ñ  rñ   r   a!  
define i32 @main(i8* %ptr, i1 %cond, i8** %excinfo) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    ret i32 1    ; BAD; all tails are raising without decref
bb_C:
    ret i32 1    ; BAD; all tails are raising without decref
}

!0 = !{i1 1}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S rÎ   )rž   Úfanout_raise_4r4   rï   r²   s      r   Útest_fanout_raise_4z#TestFanoutRaise.test_fanout_raise_4  rñ   r   a™  
define i32 @main(i8* %ptr, i1 %cond, i8** %excinfo) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond, label %bb_B, label %bb_C
bb_B:
    call void @NRT_decref(i8* %ptr)
    br label %common.ret
bb_C:
    store i8* null, i8** %excinfo, !numba_exception_output !0
    br label %common.ret
common.ret:
    %common.ret.op = phi i32 [ 0, %bb_B ], [ 1, %bb_C ]
    ret i32 %common.ret.op
}
!0 = !{i1 1}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S r¯   )rž   Úfanout_raise_5r4   rï   r²   s      r   Útest_fanout_raise_5z#TestFanoutRaise.test_fanout_raise_5  rñ   r   af  
define i32 @main(i8* %ptr, i1 %cond1, i1 %cond2, i1 %cond3, i8** %excinfo) {
bb_A:
    call void @NRT_incref(i8* %ptr)
    call void @NRT_incref(i8* %ptr)
    br i1 %cond1, label %bb_B, label %bb_C
bb_B:
    call void @NRT_decref(i8* %ptr)
    br i1 %cond2, label %bb_D, label %bb_E
bb_C:
    store i8* null, i8** %excinfo, !numba_exception_output !0
    ret i32 1
bb_D:
    call void @NRT_decref(i8* %ptr)
    ret i32 0
bb_E:
    call void @NRT_incref(i8* %ptr)
    br i1 %cond3, label %bb_F, label %bb_C
bb_F:
    call void @NRT_decref(i8* %ptr)
    call void @NRT_decref(i8* %ptr)
    ret i32 0
}
!0 = !{i1 1}
c                 óv   — |                       | j        ¦  «        \  }}|                      |j        d¦  «         d S )Né   )rž   Úfanout_raise_6r4   rï   r²   s      r   Útest_fanout_raise_6z#TestFanoutRaise.test_fanout_raise_68  rñ   r   N)r   r   r.   r$   rÁ   ÚFANOUT_RAISEr¨   rî   rð   ró   rô   rö   r÷   rù   rú   rü   rý   r   r  r   r   r   rì   rì   µ  s¤   € € € € € ØÔ-Ô:Ðð€Nð0ð 0ð 0ð€Nð 0ð 0ð 0ð€Nð 0ð 0ð 0ð€Nð0ð 0ð 0ð€Nð$0ð 0ð 0ð
€Nð40ð 0ð 0ð 0ð 0r   rì   Ú__main__)ÚunittestÚcollectionsr   Úllvmliter   r   r$   Úllvmlite.testsr   Úllvmlite.tests.refprune_protoÚtestsÚrefprune_protor   r   r!   r0   rS   Ú
as_pointerrE   r>   r¢   r­   rÄ   rÙ   rì   r   rZ   r   r   r   ú<module>r     sL  ðØ €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø #Ð #Ð #Ð #Ð #Ð #à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð	-ð 	-ð 	-ð1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ðð ð ð ð ˜Hñ ô ð ð 
ˆŒ�A‰Œ×	!Ò	!Ñ	#Ô	#€ð~ð ~ð ~ð ~ð ~�xÐ!1ñ ~ô ~ð ~ðB#ð #ð #ð #ð #�8Ð-ñ #ô #ð #ð.@Eð @Eð @Eð @Eð @E�ñ @Eô @Eð @EðF`+ð `+ð `+ð `+ð `+�,ñ `+ô `+ð `+ðFD*ð D*ð D*ð D*ð D*�ñ D*ô D*ð D*ðNE0ð E0ð E0ð E0ð E0�lñ E0ô E0ð E0ðP ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   