o
    1&i                     @   s   d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
 dZer4d dlmZ edd	 d
ddZee  dkdG dd de
ZedkrUe  dS dS )    N)types)njit)config)TestCaseF)binding z--debug-only=loop-vectorizeskylake-avx512)ZNUMBA_CPU_NAMEZNUMBA_CPU_FEATURESx86_64zx86_64 only testc                   @   s^   e Zd ZdZdddZejeddd Zejdd	iedd
d Z	ejeddd Z
dS )TestVectorizationzP
    Tests to assert that code which should vectorize does indeed vectorize
    Fc                 C   s6   |  tjd |  tjd t||d|}||S )Nr   r   fastmath)assertEqualr   ZCPU_NAMEZCPU_FEATURESr   Zinspect_llvm)selffuncZ
args_tupler   Zjitted r   IC:\wamp64\www\opt\env\Lib\site-packages\numba/tests/test_vectorization.pygen_ir   s   
zTestVectorization.gen_ir)envvarsc                 C   sB   dd }| j |tjd d d fdd}| d| | d| d S )Nc                 S   s$   d}t | D ]}|| 7 }q|S )Nr   )npZnditeritem)xaccvr   r   r   do_sum%   s   z2TestVectorization.test_nditer_loop.<locals>.do_sum   Tr   vector.bodyllvm.loop.isvectorized)r   r   float64assertIn)r   r   llvm_irr   r   r   test_nditer_loop"   s   z"TestVectorization.test_nditer_loopZNUMBA_SLP_VECTORIZE1c                 C   sD   dd }t j}| j||fd |d d d f dd}| d| d S )Nc                 S   sD   | | |  |d< |||  |d< | | |  |d< |||  |d< d S )Nr   r         r   )Za1Za2b1b2Ar   r   r   foo8   s   z'TestVectorization.test_slp.<locals>.foo   r   Tr   z
2 x double)r   r   r   r   )r   r'   tyr   r   r   r   test_slp1   s   &zTestVectorization.test_slpc                 C   s>   dd }| j |ttjfdd}| d| | d| d S )Nc                 S   s    d}| D ]	}|t |7 }q|S )Ng        )r   sqrt)lstr   r   r   r   r   sum_sqrt_listJ   s   z@TestVectorization.test_instcombine_effect.<locals>.sum_sqrt_listTr   r   r   )r   r   ZListTyper   r   )r   r-   r   r   r   r   test_instcombine_effectB   s   z)TestVectorization.test_instcombine_effectN)F)__name__
__module____qualname____doc__r   r   Zrun_test_in_subprocess_skylake_envr    r*   r.   r   r   r   r   r
      s    





r
   __main__)platformnumpyr   Znumbar   Zunittestr   Z
numba.corer   Znumba.tests.supportr   _DEBUGZllvmliter   llvmZ
set_optionr3   ZskipIfmachiner
   r/   mainr   r   r   r   <module>   s&    ?