B
    Ꮚ\	                 @   s<   d Z ddlmZ ddlmZ dddZddd	Zd
d ZdS )aH  
Useful options to debug LLVM passes

llvm.set_option("test", "-debug-pass=Details")
llvm.set_option("test", "-debug-pass=Executions")
llvm.set_option("test", "-debug-pass=Arguments")
llvm.set_option("test", "-debug-pass=Structure")
llvm.set_option("test", "-debug-only=loop-vectorize")
llvm.set_option("test", "-help-hidden")

    )binding)
namedtuplec             C   s(   | dkrdS |dkrdS |dkr$dS dS )N   i     K          )optlevelZ	sizelevelr	   r	   5lib/python3.7/site-packages/llvmlite/llvmpy/passes.py_inlining_threshold   s    r   r   Fc             C   s(   t  }| |_||_||_t| |_|S )N)llvmcreate_pass_manager_builder	opt_levelloop_vectorizeslp_vectorizer   inlining_threshold)optr   r   pmbr	   r	   r   r   !   s    
r   c        
   	   K   sh  |  d}|stdt }|  ddrFt|tjs:tt|}nd }t 
}|  dd |_	}|  dd|_
|  d	d|_t|d
|_|rt|j}|  ddr|  n*x(|  ddD ]}||}|| qW || |d k	r|| |  d}	|	r*|	| |d k	r*|	| || |d k	rH|| tdddg||dS Q R X d S )Nmodzmodule must be providedfpmTr   r   r   Fr   )r
   Z
nobuiltinsZdisable_builtinsr	   tmZpmspm)r   r   )get	NameErrorr   Zcreate_module_pass_manager
isinstanceZ	ModuleRefAssertionErrorZcreate_function_pass_managerr   r   r   r   r   r   Zcreate_target_library_infoZtripleZdisable_allZget_libfuncZset_unavailableZadd_passZadd_analysis_passesZpopulater   )
Zkwsr   r   r   r   r   ZtlikZlibfr   r	   r	   r   build_pass_managers+   s@    











r   N)r   )r   FF)	__doc__Zllvmliter   r   collectionsr   r   r   r   r	   r	   r	   r   <module>   s   
 
	