ó
    „ñ:i,=  ã                   óv  • S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
s  Jr  S r " S S5      r " S	 S
\5      r\R                   " S5      R#                  5       r " S S\\5      r " S S\\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\S:X  a  \ R4                  " 5         gg)é    N)Údefaultdict)Úir)Úbinding)ÚTestCasec              #   ó¶   ^ #   • U 4S jn[         R                  R                  5        H,  u  p#UR                  S5      (       d  M  SU 3U" U5      4v •  M.     g 7f)Nc                 óZ   >^ • U U4S jnST R                    ST R                   3Ul        U$ )Nc                 ó   >• T" U T5      $ ©N© )ÚselfÚfnÚgenerate_tests    €€Ú_/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/llvmlite/tests/test_refprune.pyÚwrappedÚ-_iterate_cases.<locals>.wrap.<locals>.wrapped   s   ø€ Ù   rÓ*Ð*ó    zgenerated test for Ú.)Ú
__module__Ú__name__Ú__doc__)r   r   r   s   ` €r   ÚwrapÚ_iterate_cases.<locals>.wrap   s)   ù€ ö	+à/°·±¨¸aÀÇÁ¸}ÐMˆŒØˆr   ÚcaseÚtest_)ÚprotoÚ__dict__ÚitemsÚ
startswith)r   r   ÚkÚcase_fns   `   r   Ú_iterate_casesr!   
   sJ   øé € õô —n‘n×*Ñ*Ö,‰
ˆØ�<‰<˜×ÓØ˜!˜�+™t G›}Ð,Ô,ò -ùs   ƒ>AÁAc                   ó   • \ rS rSrS rSrg)ÚPassManagerMixiné   c                 óÚ   • [         R                  " 5         [         R                  R                  5       R	                  5       n[         R
                  " SSS9n[         R                  " X5      $ )Nr   )Úspeed_levelÚ
size_level)ÚllvmÚinitialize_native_targetÚTargetÚfrom_default_tripleÚcreate_target_machineÚcreate_pipeline_tuning_optionsÚcreate_pass_builder)r   ÚtmÚptos      r   ÚpbÚPassManagerMixin.pb   sL   € Ü×%Ò%Ô'Ü�[‰[×,Ñ,Ó.×DÑDÓFˆÜ×1Ò1¸aÈAÑNˆÜ×'Ò'¨Ó0Ð0r   r   N)r   r   Ú__qualname__Ú__firstlineno__r1   Ú__static_attributes__r   r   r   r#   r#      s   † õ1r   r#   c                   óV   • \ rS rSrSrS r\" \5       H  u  rr\\	" 5       \'   M     Sr
g)ÚTestRefPrunePrototypeé   z%
Test that the prototype is working.
c                 ó‚   • U" 5       u  p#n[         R                  " X#5      R                  5       nU R                  XE5        g r
   )r   ÚFanoutAlgorithmÚrunÚassertEqual)r   Úcase_genÚnodesÚedgesÚexpectedÚgots         r   r   Ú#TestRefPrunePrototype.generate_test#   s5   € Ù!)£Ñˆ�hÜ×#Ò# EÓ1×5Ñ5Ó7ˆØ×Ñ˜Õ'r   r   N)r   r   r3   r4   r   r   r!   Únamer   Úlocalsr5   r   r   r   r7   r7      s,   † ñò(ñ % ]Ö3‰
ˆˆdØ‰‹�‹ô 4r   r7   é   c                   ó€   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 r\" \5       H  u  rr\\" 5       \'   M     Srg)ÚTestRefPrunePassé0   zË
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                 óŠ   • [         R                  " [         R                  " 5       [        /5      n[         R                  " XSS9$ )NÚ
NRT_incref©rC   ©r   ÚFunctionTypeÚVoidTypeÚptr_tyÚFunction©r   ÚmÚfntys      r   Úmake_increfÚTestRefPrunePass.make_incref9   ó+   € Ü�ŠœrŸ{š{›}¬v¨hÓ7ˆÜ�{Š{˜1¨Ñ6Ð6r   c                 óŠ   • [         R                  " [         R                  " 5       [        /5      n[         R                  " XSS9$ )NÚ
NRT_decrefrK   rL   rQ   s      r   Úmake_decrefÚTestRefPrunePass.make_decref=   rV   r   c                 ó‚   • [         R                  " [         R                  " S5      S5      n[         R                  " XSS9$ )Né    r   ÚswitcherrK   ©r   rM   ÚIntTyperP   rQ   s      r   Úmake_switcherÚTestRefPrunePass.make_switcherA   s+   € Ü�ŠœrŸzšz¨"›~¨rÓ2ˆÜ�{Š{˜1¨Ñ4Ð4r   c                 ó‚   • [         R                  " [         R                  " S5      S5      n[         R                  " XSS9$ )Né   r   ÚbrancherrK   r^   rQ   s      r   Úmake_brancherÚTestRefPrunePass.make_brancherE   s+   € Ü�ŠœrŸzšz¨!›}¨bÓ1ˆÜ�{Š{˜1¨Ñ4Ð4r   c                 ó˜  • [         R                  " 5       nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      n[         R                  " [         R                  " 5       [        /5      n[         R                  " X8SS9n	U	R                  u  n
SU
l        0 nU H  nU	R                  U5      X¼'   M     [         R                  " 5       nUR                  5        GHO  u  pÎUR                  X¼   5        X    H@  nUS:X  a  UR!                  XJ/5        M  US:X  a  UR!                  XZ/5        M7  [#        S5      e   [%        U5      nUS:X  a  UR'                  5         M„  US:X  a  Uu  nUR)                  UU   5        M¤  US	:X  a2  Uu  nnUR!                  US
5      nUR+                  UUU   UU   5        MÜ  US	:”  ae  UR!                  US
5      nUtnnUR-                  UUU   S9n[/        U5       H*  u  nnUR1                  UR3                  U5      UU   5        M,     GMG  [#        S5      e   U$ )NÚmainrK   ÚmemÚincrefÚdecrefÚunreachabler   rc   é   r   )Údefault)r   ÚModulerT   rY   r`   re   rM   rN   rO   rP   ÚargsrC   Úappend_basic_blockÚ	IRBuilderr   Úposition_at_endÚcallÚAssertionErrorÚlenÚret_voidÚbranchÚcbranchÚswitchÚ	enumerateÚadd_caseÚtype)r   r>   r?   rR   Ú	incref_fnÚ	decref_fnÚswitcher_fnÚbrancher_fnrS   r   ÚptrÚbbmapÚbbÚbuilderÚjump_targetsÚactionÚ	n_targetsÚdstÚleftÚrightÚselÚheadÚtailÚswÚis                            r   Úgenerate_irÚTestRefPrunePass.generate_irI   s  € ä�IŠI‹Kˆà×$Ñ$ QÓ'ˆ	Ø×$Ñ$ QÓ'ˆ	Ø×(Ñ(¨Ó+ˆØ×(Ñ(¨Ó+ˆä�ŠœrŸ{š{›}¬v¨hÓ7ˆÜ�[Š[˜ vÑ.ˆØ—‘‰ˆØˆŒàˆÛˆBØ×-Ñ-¨bÓ1ˆE‹Iñ ô —,’,“.ˆØ %§¡§ÑˆBØ×#Ñ# E¡IÔ.àœ)�Ø˜XÓ%Ø—L‘L ¨EÖ2Ø˜xÓ'Ø—L‘L ¨EÖ2ä(¨Ó7Ð7ñ $ô ˜LÓ)ˆIØ˜A‹~Ø× Ñ Ö"Ø˜a“Ø$‘�Ø—‘˜u S™zÖ*Ø˜a“Ø ,‘��uØ—l‘l ;°Ó3�Ø—‘  U¨4¡[°%¸±,Ö?Ø˜Q“Ø—l‘l ;°Ó3�Ø ,��˜à—^‘^ C°°t±�^Ð=�Ü'¨žo‘F�A�sØ—K‘K §¡¨£¨U°3©ZÖ8ô .ô % ]Ó3Ð3ñ? !.ðB ˆr   c                 óÆ   • [         R                  " [        U5      5      nU R                  5       nUR	                  5       nUR                  5         UR                  X#5        U$ r
   )r(   Úparse_assemblyÚstrr1   ÚgetModulePassManagerÚadd_refprune_passr;   )r   ÚirmodÚmodr1   Úpms        r   Úapply_refpruneÚTestRefPrunePass.apply_refprune   sK   € Ü×!Ò!¤# e£*Ó-ˆØ�W‰W‹YˆØ×$Ñ$Ó&ˆØ
×ÑÔØ
�‰ˆsŒØˆ
r   c                 ó�  • [        S 5      nUR                  5        H-  u  pVUR                  S5      nUR                  S5      nXxS.XE'   M/     UR                  5        HD  u  pYUR                  U5      (       d  M  U	S==   S-  ss'   X%    H  n
XJ   S==   S-  ss'   M     MF     UR                   H  nUR
                  S:X  d  M    O   WR                   Hl  nXLR
                     n	[        U5      nUR                  S5      nUR                  S5      nU R                  U	S   US	U 3S
9  U R                  U	S   US	U 3S
9  Mn     g )Nc                  ó    • [        [        5      $ r
   )r   Úintr   r   r   Ú<lambda>Ú(TestRefPrunePass.check.<locals>.<lambda>Œ   s	   € ¤¬CÔ 0r   rj   rk   )rj   rk   rc   rh   rJ   rX   zBB )Úmsg)	r   r   ÚcountÚgetÚ	functionsrC   Úblocksr•   r<   )r   r™   r@   r>   Údr   ÚvsÚn_increfÚn_decrefÚstatsÚdec_bbÚfr„   Útexts                 r   ÚcheckÚTestRefPrunePass.check‡   s1  € ô
 Ñ0Ó1ˆà—[‘[–]‰EˆAØ—x‘x Ó)ˆHØ—x‘x Ó)ˆHØ&Ñ;ˆA‹Dñ #ð Ÿ™ž	‰HˆAØ�|‰|˜A�‹Ø�h“ 1Ñ$“Ø&œk�FØ‘I˜hÓ'¨1Ñ,Õ'ó *ñ "ð —”ˆAØ�v‰v˜ÕÙñ ð
 —(”(ˆBØ—g‘g‘JˆEÜ�r“7ˆDØ—z‘z ,Ó/ˆHØ—z‘z ,Ó/ˆHØ×Ñ˜U 8™_¨h¸cÀ"À¸JÐÑGØ×Ñ˜U 8™_¨h¸cÀ"À¸JÐÓGò r   c                 ó€   • U" 5       u  p#nU R                  X#5      nU R                  U5      nU R                  XdU5        g r
   )r‘   r›   r¯   )r   r=   r>   r?   r@   r˜   Úoutmods          r   r   ÚTestRefPrunePass.generate_test¦   s<   € Ù!)£Ñˆ�hØ× Ñ  Ó.ˆØ×$Ñ$ UÓ+ˆØ�
‰
�6 UÕ+r   r   N)r   r   r3   r4   r   rT   rY   r`   re   r‘   r›   r¯   r   r!   rC   r   rD   r5   r   r   r   rG   rG   0   sQ   † ñò7ò7ò5ò5ò4òlòHò>,ñ % ]Ö3‰
ˆˆdØ‰‹�‹ô 4r   rG   c                   ó&   • \ rS rSrSrSrSS jrSrg)ÚBaseTestByIRé±   r   zG
declare void @NRT_incref(i8* %ptr)
declare void @NRT_decref(i8* %ptr)
Nc                 ó€  • [         R                  " U R                   SU 35      nU R                  5       nUR	                  5       nUc  UR                  U R                  5        OUR                  U R                  US9  [         R                  " 5       nUR                  X45        [         R                  " 5       nX7U-
  4$ )NÚ
©Úsubgraph_limit)	r(   r”   Úprologuer1   r–   r—   Úrefprune_bitmaskÚdump_refprune_statsr;   )r   r˜   rº   r™   r1   rš   ÚbeforeÚafters           r   r¯   ÚBaseTestByIR.check¹   s§   € Ü×!Ò! T§]¡] O°2°e°WÐ"=Ó>ˆØ�W‰W‹YˆØ×$Ñ$Ó&ˆØÑ!Ø× Ñ  ×!6Ñ!6Õ7à× Ñ  ×!6Ñ!6Ø0>ð !ñ @ä×)Ò)Ó+ˆØ
�‰ˆsŒÜ×(Ò(Ó*ˆØ˜F‘NÐ"Ð"r   r   r
   )r   r   r3   r4   r¼   r»   r¯   r5   r   r   r   rµ   rµ   ±   s   † ØÐð€H÷
#r   rµ   c                   óh   • \ rS rSr\R
                  R                  rSrS r	Sr
S rSrS rSrS	 rS
rg)Ú	TestPerBBéÈ   zv
define void @main(i8* %ptr) {
    call void @NRT_incref(i8* %ptr)
    call void @NRT_decref(i8* %ptr)
    ret void
}
c                 óv   • U R                  U R                  5      u  pU R                  UR                  S5        g ©Nrm   )r¯   Úper_bb_ir_1r<   Ú
basicblock©r   r™   r«   s      r   Útest_per_bb_1ÚTestPerBB.test_per_bb_1Ó   s.   € Ø—Z‘Z × 0Ñ 0Ó1‰
ˆØ×Ñ˜×)Ñ)¨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                 ó¬   • U R                  U R                  5      u  pU R                  UR                  S5        U R	                  S[        U5      5        g )Né   zcall void @NRT_incref(ptr %ptr))r¯   Úper_bb_ir_2r<   rÇ   ÚassertInr•   rÈ   s      r   Útest_per_bb_2ÚTestPerBB.test_per_bb_2â   sA   € Ø—Z‘Z × 0Ñ 0Ó1‰
ˆØ×Ñ˜×)Ñ)¨1Ô-à�‰Ð7¼¸S»Õ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                 ó¬   • U R                  U R                  5      u  pU R                  UR                  S5        U R	                  S[        U5      5        g )Nrm   ú!call void @NRT_decref(ptr %other))r¯   Úper_bb_ir_3r<   rÇ   rÎ   r•   rÈ   s      r   Útest_per_bb_3ÚTestPerBB.test_per_bb_3ò   óA   € Ø—Z‘Z × 0Ñ 0Ó1‰
ˆØ×Ñ˜×)Ñ)¨1Ô-à�‰Ð9¼3¸s»8Õ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                 ó¬   • U R                  U R                  5      u  pU R                  UR                  S5        U R	                  S[        U5      5        g )NrÌ   rÒ   )r¯   Úper_bb_ir_4r<   rÇ   rÎ   r•   rÈ   s      r   Útest_per_bb_4ÚTestPerBB.test_per_bb_4  rÖ   r   r   N)r   r   r3   r4   r(   ÚRefPruneSubpassesÚPER_BBr¼   rÆ   rÉ   rÍ   rÏ   rÓ   rÔ   rØ   rÙ   r5   r   r   r   rÂ   rÂ   È   sG   † Ø×-Ñ-×4Ñ4Ðð€Kò.ð	€KòCð€KòEð
€KõEr   rÂ   c                   ór   • \ rS rSr\R
                  R                  rSrS r	Sr
S rSrS rSrS	 rS
rS rSrg)ÚTestDiamondi  z•
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   • U R                  U R                  5      u  pU R                  UR                  S5        g rÅ   )r¯   Úper_diamond_1r<   ÚdiamondrÈ   s      r   Útest_per_diamond_1ÚTestDiamond.test_per_diamond_1  ó,   € Ø—Z‘Z × 2Ñ 2Ó3‰
ˆØ×Ñ˜Ÿ™¨Õ*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   • U R                  U R                  5      u  pU R                  UR                  S5        g rÅ   )r¯   Úper_diamond_2r<   rá   rÈ   s      r   Útest_per_diamond_2Ú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   • U R                  U R                  5      u  pU R                  UR                  S5        g ©Nr   )r¯   Úper_diamond_3r<   rá   rÈ   s      r   Útest_per_diamond_3Ú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   • U R                  U R                  5      u  pU R                  UR                  S5        g rÅ   )r¯   Úper_diamond_4r<   rá   rÈ   s      r   Útest_per_diamond_4Ú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   • U R                  U R                  5      u  pU R                  UR                  S5        g )NrÌ   )r¯   Úper_diamond_5r<   rá   rÈ   s      r   Útest_per_diamond_5ÚTestDiamond.test_per_diamond_5i  rä   r   r   N)r   r   r3   r4   r(   rÛ   ÚDIAMONDr¼   rà   râ   ræ   rç   rë   rì   rï   rð   ró   rô   r5   r   r   r   rÞ   rÞ     sP   † Ø×-Ñ-×5Ñ5Ðð	€Mò+ð€Mò+ð€Mò +ð€Mò +ð€Mõ"+r   rÞ   c                   óh   • \ rS rSrSr\R                  R                  rSr	S r
SrS rSrS rS	 rS
rg)Ú
TestFanoutin  z6More 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   • U R                  U R                  5      u  pU R                  UR                  S5        g )Né   )r¯   Úfanout_1r<   ÚfanoutrÈ   s      r   Útest_fanout_1ÚTestFanout.test_fanout_1‚  ó*   € Ø—Z‘Z §¡Ó.‰
ˆØ×Ñ˜Ÿ™ 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   • U R                  U R                  5      u  pU R                  UR                  S5        g rê   )r¯   Úfanout_2r<   rü   rÈ   s      r   Útest_fanout_2Ú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   • U R                  U R                  5      u  pU R                  UR                  S5        g )Né   ©r¯   Úfanout_3r<   rü   rÈ   s      r   Útest_fanout_3ÚTestFanout.test_fanout_3ª  rÿ   r   c                 ót   • U R                  U R                  SS9u  pU R                  UR                  S5        g )Nrc   r¹   r   r  rÈ   s      r   Útest_fanout_3_limitedÚ TestFanout.test_fanout_3_limited®  s0   € ð —Z‘Z §¡¸a�ZÐ@‰
ˆØ×Ñ˜Ÿ™ qÕ)r   r   N)r   r   r3   r4   r   r(   rÛ   ÚFANOUTr¼   rû   rý   r  r  r  r  r  r5   r   r   r   rø   rø   n  sD   † ñð ×-Ñ-×4Ñ4Ðð€Hò*ð€Hò*ð€Hò$*õ*r   rø   c                   ó|   • \ rS rSr\R
                  R                  rSrS r	Sr
S rSrS rSrS	 rS
rS rSrS rSrg)ÚTestFanoutRaiseiµ  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 = !{i1 true}
c                 óv   • U R                  U R                  5      u  pU R                  UR                  S5        g rÅ   )r¯   Úfanout_raise_1r<   Úfanout_raiserÈ   s      r   Útest_fanout_raise_1Ú#TestFanoutRaise.test_fanout_raise_1Ç  ó.   € Ø—Z‘Z × 3Ñ 3Ó4‰
ˆØ×Ñ˜×+Ñ+¨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   • U R                  U R                  5      u  pU R                  UR                  S5        g rê   )r¯   Úfanout_raise_2r<   r  rÈ   s      r   Útest_fanout_raise_2Ú#TestFanoutRaise.test_fanout_raise_2Û  s0   € ð —Z‘Z × 3Ñ 3Ó4‰
ˆØ×Ñ˜×+Ñ+¨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   • U R                  U R                  5      u  pU R                  UR                  S5        g rÅ   )r¯   Úfanout_raise_3r<   r  rÈ   s      r   Útest_fanout_raise_3Ú#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   • U R                  U R                  5      u  pU R                  UR                  S5        g rê   )r¯   Úfanout_raise_4r<   r  rÈ   s      r   Útest_fanout_raise_4Ú#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   • U R                  U R                  5      u  pU R                  UR                  S5        g rÅ   )r¯   Úfanout_raise_5r<   r  rÈ   s      r   Útest_fanout_raise_5Ú#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   • U R                  U R                  5      u  pU R                  UR                  S5        g )Né   )r¯   Úfanout_raise_6r<   r  rÈ   s      r   Útest_fanout_raise_6Ú#TestFanoutRaise.test_fanout_raise_68  r  r   r   N)r   r   r3   r4   r(   rÛ   ÚFANOUT_RAISEr¼   r  r  r  r  r  r  r  r   r#  r$  r(  r)  r5   r   r   r   r  r  µ  s\   † Ø×-Ñ-×:Ñ:Ðð€Nò0ð€Nò 0ð€Nò 0ð€Nò0ð€Nò$0ð
€Nõ40r   r  Ú__main__)ÚunittestÚcollectionsr   Úllvmliter   r   r(   Úllvmlite.testsr   Úllvmlite.tests.refprune_protoÚtestsÚrefprune_protor   r!   r#   r7   r_   Ú
as_pointerrO   rG   rµ   rÂ   rÞ   rø   r  r   rh   r   r   r   Ú<module>r5     sÄ   ðÛ Ý #Ý Ý $Ý #ç -Ð -ò	-÷1ñ 1ô˜Hô ð 
�Š�A‹×	!Ñ	!Ó	#€ô~�xÐ!1ô ~ôB#�8Ð-ô #ô.@E�ô @EôF`+�,ô `+ôFD*�ô D*ôNE0�lô E0ðP ˆzÓØ‡M‚M…Oð r   