B
    Ꮚ\`                 @   sH  d dl mZmZ 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_x*ejjejjejjfD ]Zejege_qW x(ejjejjfD ]Zejge_ee_qW x*ejjejjejjfD ]Zejege_qW x0ejjejjejj fD ]Zejge_ee_q*W d
S )    )print_functionabsolute_import)c_uintc_bool   )ffi)passmanagersc               C   s   t  S )N)PassManagerBuilder r
   r
   :lib/python3.7/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 )N)r   libLLVMPY_PassManagerBuilderCreate	ObjectRef__init__)selfZ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 )N)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_PassManagerBuilderGetSizeLevel)r   r
   r
   r   
size_level   s    zPassManagerBuilder.size_levelc             C   s   t j| | d S )N)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)NotImplementedError)r   r
   r
   r   inlining_threshold)   s    z%PassManagerBuilder.inlining_thresholdc             C   s   t j| | d S )N)r   r   0LLVMPY_PassManagerBuilderUseInlinerWithThreshold)r   Z	thresholdr
   r
   r   r   1   s    c             C   s   t j| S )z2
        If true, disable loop unrolling.
        )r   r   .LLVMPY_PassManagerBuilderGetDisableUnrollLoops)r   r
   r
   r   disable_unroll_loops5   s    z'PassManagerBuilder.disable_unroll_loopsTc             C   s   t j| | d S )N)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_PassManagerBuilderGetLoopVectorize)r   r
   r
   r   loop_vectorize@   s    z!PassManagerBuilder.loop_vectorizec             C   s   t j| |S )N)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_PassManagerBuilderGetSLPVectorize)r   r
   r
   r   slp_vectorizeK   s    z PassManagerBuilder.slp_vectorizec             C   s   t j| |S )N)r   r   (LLVMPY_PassManagerBuilderSetSLPVectorize)r   r$   r
   r
   r   r&   S   s    c             C   s   t j| | d S )N)r   r   2LLVMPY_PassManagerBuilderPopulateModulePassManager)r   pmr
   r
   r   _populate_module_pmW   s    z&PassManagerBuilder._populate_module_pmc             C   s   t j| | d S )N)r   r   4LLVMPY_PassManagerBuilderPopulateFunctionPassManager)r   r)   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 )N)
isinstancer   ZModulePassManagerr*   ZFunctionPassManagerr,   	TypeError)r   r)   r
   r
   r   populate]   s
    zPassManagerBuilder.populatec             C   s   | j |  d S )N)Z_capi LLVMPY_PassManagerBuilderDispose)r   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,   r/   r1   r
   r
   r
   r   r	      s*   
r	   N)!Z
__future__r   r   Zctypesr   r    r   r   r   r   r	   ZLLVMPassManagerBuilderRefr   r   Zrestyper0   ZargtypesZLLVMPassManagerRefr(   r+   r   r   r   Z_funcr   r   r   r#   r'   r   r!   r%   r
   r
   r
   r   <module>   s8   a


