U
    +dS                     @   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_qej
jej
jfD ]Zej	ge_ee_qej
jej
jej
jfD ]Zej	ege_qe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   ?/tmp/pip-unpacked-wheel-stw2luzp/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   Z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   ZModulePassManagerr,   ZFunctionPassManagerr.   	TypeErrorr+   r   r   r	   populate]   s
    zPassManagerBuilder.populatec                 C   s   | j |  d S r   )Z_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.   r1   r3   r   r   r   r	   r   
   s<   









r   N)ctypesr   r   Zllvmlite.bindingr   r   r
   r   r   ZLLVMPassManagerBuilderRefr   r   restyper2   argtypesZLLVMPassManagerRefr*   r-   r   r   r   Z_funcr   r   r    r$   r)   r   r"   r'   r   r   r   r	   <module>   sD   b




