U
    +‰dƒ
  ã                   @   sN   d Z ddlmZ ddlmZ ddlZe d¡ 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)Ú
namedtupleNzœThe module `llvmlite.llvmpy.passes` is deprecated and will be removed in the future. If you are using this code, it should be inlined into your own project.c                 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	   ú:/tmp/pip-unpacked-wheel-stw2luzp/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   sp  |   d¡}|stdƒ‚t ¡ }|   dd¡rFt|tjƒs:t‚t |¡}nd }t ¡ }|   dd¡ |_	}|   dd¡|_
|   d	d¡|_t|d
|_|røt |j¡}|   dd¡r¶| ¡  n&|   dd¡D ]}| |¡}| |¡ qÂ| |¡ |d k	rø| |¡ |   d¡}	|	r&|	 |¡ |d k	r&|	 |¡ | |¡ |d k	rD| |¡ tdddgƒ||dW  5 Q R £ 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   )
Úkwsr   r   r   r   r   ZtliÚkZlibfr   r	   r	   r   Úbuild_pass_managers1   s@    











r   )r   )r   FF)Ú__doc__Zllvmliter   r   Úcollectionsr   ÚwarningsÚwarnr   r   r   r	   r	   r	   r   Ú<module>   s   ÿ
  ÿ

