U
    ¤½|eS  ã                   @   s(  d dl mZmZ d dlmZ d dlmZ dd„ ZG dd„ dejƒZej	ej
j_ej	gej
j_ej	ejgej
j_ej	ejgej
j_ej
jej
jej
jfD ]Zej	ege_q–ej
jej
jfD ]Zej	ge_ee_q¸ej
jej
jej
jfD ]Zej	ege_qäej
jej
jej
jfD ]Zej	ge_ee_�qdS )	é    )Úc_uintÚc_bool)Úffi)Úpassmanagersc                   C   s   t ƒ S ©N)ÚPassManagerBuilder© r   r   úX/var/www/website-v5/atlas_env/lib/python3.8/site-packages/llvmlite/binding/transforms.pyÚcreate_pass_manager_builder   s    r
   c                   @   sÜ   e Zd ZdZd dd„Zedd„ ƒZejdd„ ƒZedd	„ ƒZejd
d	„ ƒZedd„ ƒZ	e	jdd„ ƒZ	edd„ ƒZ
e
jd!dd„ƒZ
edd„ ƒZejd"dd„ƒZedd„ ƒZejd#dd„ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )$r   r   Nc                 C   s$   |d krt j ¡ }t j | |¡ d S r   )r   ÚlibÚLLVMPY_PassManagerBuilderCreateÚ	ObjectRefÚ__init__)ÚselfÚptrr   r   r	   r      s    
zPassManagerBuilder.__init__c                 C   s   t j | ¡S )zO
        The general optimization level as an integer between 0 and 3.
        )r   r   Ú$LLVMPY_PassManagerBuilderGetOptLevel©r   r   r   r	   Ú	opt_level   s    zPassManagerBuilder.opt_levelc                 C   s   t j | |¡ d S r   )r   r   Ú$LLVMPY_PassManagerBuilderSetOptLevel)r   Úlevelr   r   r	   r      s    c                 C   s   t j | ¡S )zY
        Whether and how much to optimize for size.  An integer between 0 and 2.
        )r   r   Ú%LLVMPY_PassManagerBuilderGetSizeLevelr   r   r   r	   Ú
size_level   s    zPassManagerBuilder.size_levelc                 C   s   t j | |¡ d S r   )r   r   Ú%LLVMPY_PassManagerBuilderSetSizeLevel)r   Úsizer   r   r	   r   $   s    c                 C   s   t dƒ‚dS )z©
        The integer threshold for inlining a function into another.  The higher,
        the more likely inlining a function is.  This attribute is write-only.
        z inlining_threshold is write-onlyN)ÚNotImplementedErrorr   r   r   r	   Úinlining_threshold(   s    z%PassManagerBuilder.inlining_thresholdc                 C   s   t j | |¡ d S r   )r   r   Ú0LLVMPY_PassManagerBuilderUseInlinerWithThreshold)r   Ú	thresholdr   r   r	   r   0   s     ÿc                 C   s   t j | ¡S )z2
        If true, disable loop unrolling.
        )r   r   Ú.LLVMPY_PassManagerBuilderGetDisableUnrollLoopsr   r   r   r	   Údisable_unroll_loops5   s    z'PassManagerBuilder.disable_unroll_loopsTc                 C   s   t j | |¡ d S r   )r   r   Ú.LLVMPY_PassManagerBuilderSetDisableUnrollLoops)r   Údisabler   r   r	   r   <   s    c                 C   s   t j | ¡S )z3
        If true, allow vectorizing loops.
        )r   r   Ú)LLVMPY_PassManagerBuilderGetLoopVectorizer   r   r   r	   Úloop_vectorize@   s    z!PassManagerBuilder.loop_vectorizec                 C   s   t j | |¡S r   )r   r   Ú)LLVMPY_PassManagerBuilderSetLoopVectorize©r   Úenabler   r   r	   r#   G   s    c                 C   s   t j | ¡S )z¡
        If true, enable the "SLP vectorizer", which uses a different algorithm
        from the loop vectorizer.  Both may be enabled at the same time.
        )r   r   Ú(LLVMPY_PassManagerBuilderGetSLPVectorizer   r   r   r	   Úslp_vectorizeK   s    z PassManagerBuilder.slp_vectorizec                 C   s   t j | |¡S r   )r   r   Ú(LLVMPY_PassManagerBuilderSetSLPVectorizer%   r   r   r	   r(   S   s    c                 C   s   t j | |¡ d S r   )r   r   Ú2LLVMPY_PassManagerBuilderPopulateModulePassManager©r   Úpmr   r   r	   Ú_populate_module_pmW   s    z&PassManagerBuilder._populate_module_pmc                 C   s   t j | |¡ d S r   )r   r   Ú4LLVMPY_PassManagerBuilderPopulateFunctionPassManagerr+   r   r   r	   Ú_populate_function_pmZ   s    z(PassManagerBuilder._populate_function_pmc                 C   s<   t |tjƒr|  |¡ n t |tjƒr0|  |¡ nt|ƒ‚d S r   )Ú
isinstancer   ÚModulePassManagerr-   ÚFunctionPassManagerr/   Ú	TypeErrorr+   r   r   r	   Úpopulate]   s
    zPassManagerBuilder.populatec                 C   s   | j  | ¡ d S r   )Ú_capiÚ LLVMPY_PassManagerBuilderDisposer   r   r   r	   Ú_disposee   s    zPassManagerBuilder._dispose)N)T)T)T)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   Úpropertyr   Úsetterr   r   r   r#   r(   r-   r/   r4   r7   r   r   r   r	   r   
   s<   









r   N)Úctypesr   r   Úllvmlite.bindingr   r   r
   r   r   ÚLLVMPassManagerBuilderRefr   r   Úrestyper6   ÚargtypesÚLLVMPassManagerRefr*   r.   r   r   r   Ú_funcr   r   r    r$   r)   r   r"   r'   r   r   r   r	   Ú<module>   sD   bÿ
þ
þ
þÿ
þþ
