B
      ›\R  ã               @   s    d dl mZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZ dd„ Zdd„ Zd	d
„ Ze
dkrdeneZG dd„ dejƒZG dd„ dejƒZedkrœe ¡  dS )é    )Úprint_functionN)ÚcompilerÚir)Ú	PYVERSIONÚStringIOc             C   s.   ||  } }|||  }}}| | | | | S )aÚ  
    label 0:
        a = arg(0, name=a)                       ['a']
        b = arg(1, name=b)                       ['b']
        c = arg(2, name=c)                       ['c']
        d = arg(3, name=d)                       ['d']
        e = arg(4, name=e)                       ['e']
        a.1 = b                                  ['a.1', 'b']
        del b                                    []
        b.1 = a                                  ['a', 'b.1']
        del a                                    []
        c.1 = e                                  ['c.1', 'e']
        del e                                    []
        d.1 = c                                  ['c', 'd.1']
        del c                                    []
        e.1 = d                                  ['d', 'e.1']
        del d                                    []
        $0.8 = a.1 + b.1                         ['$0.8', 'a.1', 'b.1']
        del b.1                                  []
        del a.1                                  []
        $0.10 = $0.8 + c.1                       ['$0.10', '$0.8', 'c.1']
        del c.1                                  []
        del $0.8                                 []
        $0.12 = $0.10 + d.1                      ['$0.10', '$0.12', 'd.1']
        del d.1                                  []
        del $0.10                                []
        $0.14 = $0.12 + e.1                      ['$0.12', '$0.14', 'e.1']
        del e.1                                  []
        del $0.12                                []
        $0.15 = cast(value=$0.14)                ['$0.14', '$0.15']
        del $0.14                                []
        return $0.15                             ['$0.15']
    © )ÚaÚbÚcÚdÚer   r   ú2lib/python3.7/site-packages/numba/tests/test_ir.pyÚvar_swapping
   s    "
r   c             C   s   | |kr| n|d }|S )an  
    label 0:
        a = arg(0, name=a)                       ['a']
        b = arg(1, name=b)                       ['b']
        $0.3 = a > b                             ['$0.3', 'a', 'b']
        branch $0.3, 12, 18                      ['$0.3']
    label 12:
        del b                                    []
        del $0.3                                 []
        $phi21.2 = a                             ['$phi21.2', 'a']
        del a                                    []
        jump 21                                  []
    label 18:
        del a                                    []
        del $0.3                                 []
        $phi21.2 = b                             ['$phi21.2', 'b']
        del b                                    []
        jump 21                                  []
    label 21:
        $const21.1 = const(int, 5)               ['$const21.1']
        $21.3 = $phi21.2 + $const21.1            ['$21.3', '$const21.1', '$phi21.2']
        del $phi21.2                             []
        del $const21.1                           []
        c = $21.3                                ['$21.3', 'c']
        del $21.3                                []
        $21.5 = cast(value=c)                    ['$21.5', 'c']
        del c                                    []
        return $21.5                             ['$21.5']
    é   r   )r   r	   r
   r   r   r   Úvar_propagate1_pre360   s    r   c             C   s   | |kr| n|d }|S )am  
    label 0:
        a = arg(0, name=a)                       ['a']
        b = arg(1, name=b)                       ['b']
        $0.3 = a > b                             ['$0.3', 'a', 'b']
        branch $0.3, 8, 12                       ['$0.3']
    label 8:
        del b                                    []
        del $0.3                                 []
        $phi14.2 = a                             ['$phi14.2', 'a']
        del a                                    []
        jump 14                                  []
    label 12:
        del a                                    []
        del $0.3                                 []
        $phi14.2 = b                             ['$phi14.2', 'b']
        del b                                    []
        jump 14                                  []
    label 14:
        $const14.1 = const(int, 5)               ['$const14.1']
        $14.3 = $phi14.2 + $const14.1            ['$14.3', '$const14.1', '$phi14.2']
        del $phi14.2                             []
        del $const14.1                           []
        c = $14.3                                ['$14.3', 'c']
        del $14.3                                []
        $14.5 = cast(value=c)                    ['$14.5', 'c']
        del c                                    []
        return $14.5                             ['$14.5']
    r   r   )r   r	   r
   r   r   r   Úvar_propagate1_post36Q   s    r   )é   é   c               @   s   e Zd Zdd„ ZdS )ÚTestIRc             C   sj  d}t jd t j|ddd}t j|t j|ddd}|jdt j|ddd}|  | d¡|¡ |  t|jƒd¡ |jd	t j|d
dd}|  t|jƒd¡ |  t|jƒd¡ |  | d	¡|¡ |  | d	¡|¡ |jd	t j|ddd}|  | d	¡|¡ |  	| d	¡| ¡ |  | d	¡|¡ y|jd	t j|ddd}W n t j
k
rT   Y nX |  dt j
 ¡ d S )Nz<?>é   )ÚfilenameÚline)ÚparentÚlocé   Úappler   )r   Úorangeé   r   zExpecting an %s)r   ZScopeZLocZdefineZassertIsÚgetÚassertEqualÚlenZ	localvarsZassertIsNotZRedefinedErrorZfail)Úselfr   ÚtopZlocalr   r   Zmore_orangeZ
bad_oranger   r   r   Útest_IRScopez   s,    zTestIR.test_IRScopeN)Ú__name__Ú
__module__Ú__qualname__r#   r   r   r   r   r   x   s   r   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú
TestIRDumpzå
    Exercise the IR dump of some constructs.  These tests are fragile
    (may need to be updated when details of IR generation change, may
    need to be skipped for some Python versions) but help find out
    regressions.
    c             C   s
   t  |¡S )N)r   Zrun_frontend)r!   Úpyfuncr   r   r   Úget_ir    s    zTestIRDump.get_irc             C   sZ   |   |¡}tƒ }|j|d t |j¡ ¡  ¡ }| ¡  ¡  ¡ }|  	||d| ¡  ¡ d S )N)Úfilez=dump might need to be refreshed; here is the actual dump:
%s
)
r)   r   ÚdumpÚtextwrapÚdedentÚ__doc__ÚstripÚ
splitlinesÚgetvaluer   )r!   r(   Zfunc_irÚoutZexpectedZgotr   r   r   Úcheck_ir_dump£   s    
zTestIRDump.check_ir_dumpc             C   s   |   t¡ d S )N)r3   r   )r!   r   r   r   Útest_var_swapping­   s    zTestIRDump.test_var_swappingc             C   s   |   t¡ d S )N)r3   Úvar_propagate1)r!   r   r   r   Útest_var_propagate1±   s    zTestIRDump.test_var_propagate1N)r$   r%   r&   r.   r)   r3   r4   r6   r   r   r   r   r'   ˜   s
   
r'   Ú__main__)Z
__future__r   r,   Znumba.unittest_supportZunittest_supportZunittestZnumbar   r   Znumba.utilsr   r   r   r   r   r5   ZTestCaser   r'   r$   Úmainr   r   r   r   Ú<module>   s   &!# 