o
    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_qdS )	    )c_uintc_bool)ffi)passmanagersc                   C   s   t  S N)PassManagerBuilder r   r   X/home/ubuntu/veenaModal/venv/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




