
    sKgS                     l   d dl mZmZ d dlmZ d dlmZ d Z G 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_         ej                  j,                  ej                  j.                  fD ]  Zej                  ge_        ee_         ej                  j0                  ej                  j2                  ej                  j4                  fD ]  Zej                  ege_         ej                  j6                  ej                  j8                  ej                  j:                  fD ]  Zej                  ge_        ee_         y)    )c_uintc_bool)ffi)passmanagersc                      t               S N)PassManagerBuilder     _/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/llvmlite/binding/transforms.pycreate_pass_manager_builderr      s    r   c                   n   e Zd ZdZddZed        Zej                  d        Zed        Zej                  d        Zed        Z	e	j                  d	        Z	ed
        Z
e
j                  dd       Z
ed        Zej                  dd       Zed        Zej                  dd       Zd Zd Zd Zd Zy)r	   r
   Nc                     |t         j                  j                         }t         j                  j	                  | |       y r   )r   libLLVMPY_PassManagerBuilderCreate	ObjectRef__init__)selfptrs     r   r   zPassManagerBuilder.__init__   s-    ;''99;CtS)r   c                 @    t         j                  j                  |       S )zO
        The general optimization level as an integer between 0 and 3.
        )r   r   $LLVMPY_PassManagerBuilderGetOptLevelr   s    r   	opt_levelzPassManagerBuilder.opt_level   s    
 ww;;DAAr   c                 D    t         j                  j                  | |       y r   )r   r   $LLVMPY_PassManagerBuilderSetOptLevel)r   levels     r   r   zPassManagerBuilder.opt_level   s    44T5Ar   c                 @    t         j                  j                  |       S )zY
        Whether and how much to optimize for size.  An integer between 0 and 2.
        )r   r   %LLVMPY_PassManagerBuilderGetSizeLevelr   s    r   
size_levelzPassManagerBuilder.size_level   s    
 ww<<TBBr   c                 D    t         j                  j                  | |       y r   )r   r   %LLVMPY_PassManagerBuilderSetSizeLevel)r   sizes     r   r   zPassManagerBuilder.size_level$   s    55dDAr   c                     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   s    r   inlining_thresholdz%PassManagerBuilder.inlining_threshold(   s     ""DEEr   c                 D    t         j                  j                  | |       y r   )r   r   0LLVMPY_PassManagerBuilderUseInlinerWithThreshold)r   	thresholds     r   r%   z%PassManagerBuilder.inlining_threshold0   s    @@)	r   c                 @    t         j                  j                  |       S )z2
        If true, disable loop unrolling.
        )r   r   .LLVMPY_PassManagerBuilderGetDisableUnrollLoopsr   s    r   disable_unroll_loopsz'PassManagerBuilder.disable_unroll_loops5   s    
 wwEEdKKr   c                 D    t         j                  j                  | |       y r   )r   r   .LLVMPY_PassManagerBuilderSetDisableUnrollLoops)r   disables     r   r+   z'PassManagerBuilder.disable_unroll_loops<   s    >>tWMr   c                 @    t         j                  j                  |       S )z3
        If true, allow vectorizing loops.
        )r   r   )LLVMPY_PassManagerBuilderGetLoopVectorizer   s    r   loop_vectorizez!PassManagerBuilder.loop_vectorize@   s    
 ww@@FFr   c                 B    t         j                  j                  | |      S r   )r   r   )LLVMPY_PassManagerBuilderSetLoopVectorizer   enables     r   r1   z!PassManagerBuilder.loop_vectorizeG   s    ww@@vNNr   c                 @    t         j                  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   s    r   slp_vectorizez PassManagerBuilder.slp_vectorizeK   s     ww??EEr   c                 B    t         j                  j                  | |      S r   )r   r   (LLVMPY_PassManagerBuilderSetSLPVectorizer4   s     r   r8   z PassManagerBuilder.slp_vectorizeS   s    ww??fMMr   c                 D    t         j                  j                  | |       y r   )r   r   2LLVMPY_PassManagerBuilderPopulateModulePassManagerr   pms     r   _populate_module_pmz&PassManagerBuilder._populate_module_pmW   s    BB4Lr   c                 D    t         j                  j                  | |       y r   )r   r   4LLVMPY_PassManagerBuilderPopulateFunctionPassManagerr=   s     r   _populate_function_pmz(PassManagerBuilder._populate_function_pmZ   s    DDT2Nr   c                     t        |t        j                        r| j                  |       y t        |t        j                        r| j                  |       y t        |      r   )
isinstancer   ModulePassManagerr?   FunctionPassManagerrB   	TypeErrorr=   s     r   populatezPassManagerBuilder.populate]   sH    b,889$$R(L<<=&&r*B-r   c                 :    | j                   j                  |        y r   )_capi LLVMPY_PassManagerBuilderDisposer   s    r   _disposezPassManagerBuilder._disposee   s    

33D9r   r   )T)__name__
__module____qualname__	__slots__r   propertyr   setterr   r%   r+   r1   r8   r?   rB   rH   rL   r
   r   r   r	   r	   
   sL   I*
 B B B B C C B B F F   L L   N !N G G O O F F N NMO :r   r	   N)ctypesr   r   llvmlite.bindingr   r   r   r   r	   LLVMPassManagerBuilderRefr   r   restyperK   argtypesLLVMPassManagerRefr<   rA   r   r!   r'   _funcr   r   r-   r3   r:   r*   r0   r7   r
   r   r   <module>rZ      s   !   ) \: \:D 362O2O ' ' / !!5 ( ( 1
 !!G : : C !!I < < E gg::gg;;ggFFE 33V<EN	 gg::gg;;E 334ENEM	 ggDDgg??gg>>E 33V<EN	 ggDDgg??gg>>E 334ENEMr   