o
    UÛ·iS  ã                   @   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_qKe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_qre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   úQ/home/ubuntu/vllm_env/lib/python3.10/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 u 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   ó   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   ó   zPassManagerBuilder.opt_levelc                 C   ó   t j | |¡ d S r   )r   r   Ú$LLVMPY_PassManagerBuilderSetOptLevel)r   Úlevelr   r   r	   r      ó   c                 C   r   )zY
        Whether and how much to optimize for size.  An integer between 0 and 2.
        )r   r   Ú%LLVMPY_PassManagerBuilderGetSizeLevelr   r   r   r	   Ú
size_level   r   zPassManagerBuilder.size_levelc                 C   r   r   )r   r   Ú%LLVMPY_PassManagerBuilderSetSizeLevel)r   Úsizer   r   r	   r   $   r   c                 C   s   t dƒ‚)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-only)ÚNotImplementedErrorr   r   r   r	   Úinlining_threshold(   s   z%PassManagerBuilder.inlining_thresholdc                 C   r   r   )r   r   Ú0LLVMPY_PassManagerBuilderUseInlinerWithThreshold)r   Ú	thresholdr   r   r	   r   0   s   ÿc                 C   r   )z2
        If true, disable loop unrolling.
        )r   r   Ú.LLVMPY_PassManagerBuilderGetDisableUnrollLoopsr   r   r   r	   Údisable_unroll_loops5   r   z'PassManagerBuilder.disable_unroll_loopsTc                 C   r   r   )r   r   Ú.LLVMPY_PassManagerBuilderSetDisableUnrollLoops)r   Údisabler   r   r	   r#   <   r   c                 C   r   )z3
        If true, allow vectorizing loops.
        )r   r   Ú)LLVMPY_PassManagerBuilderGetLoopVectorizer   r   r   r	   Úloop_vectorize@   r   z!PassManagerBuilder.loop_vectorizec                 C   ó   t j | |¡S r   )r   r   Ú)LLVMPY_PassManagerBuilderSetLoopVectorize©r   Úenabler   r   r	   r'   G   ó   c                 C   r   )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   r(   r   )r   r   Ú(LLVMPY_PassManagerBuilderSetSLPVectorizer*   r   r   r	   r.   S   r,   c                 C   r   r   )r   r   Ú2LLVMPY_PassManagerBuilderPopulateModulePassManager©r   Úpmr   r   r	   Ú_populate_module_pmW   ó   z&PassManagerBuilder._populate_module_pmc                 C   r   r   )r   r   Ú4LLVMPY_PassManagerBuilderPopulateFunctionPassManagerr1   r   r   r	   Ú_populate_function_pmZ   r4   z(PassManagerBuilder._populate_function_pmc                 C   s<   t |tjƒr|  |¡ d S t |tjƒr|  |¡ d S t|ƒ‚r   )Ú
isinstancer   ÚModulePassManagerr3   ÚFunctionPassManagerr6   Ú	TypeErrorr1   r   r   r	   Úpopulate]   s
   zPassManagerBuilder.populatec                 C   s   | j  | ¡ d S r   )Ú_capiÚ LLVMPY_PassManagerBuilderDisposer   r   r   r	   Ú_disposee   s   zPassManagerBuilder._disposer   )T)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   Úpropertyr   Úsetterr   r   r#   r'   r.   r3   r6   r;   r>   r   r   r   r	   r   
   s>    









r   N)Úctypesr   r   Úllvmlite.bindingr   r   r
   r   r   ÚLLVMPassManagerBuilderRefr   r   Úrestyper=   ÚargtypesÚLLVMPassManagerRefr0   r5   r   r   r    Ú_funcr   r   r$   r)   r/   r"   r&   r-   r   r   r   r	   Ú<module>   sH    b
ÿ
þ
þþÿ
þþ
û