
    J/PhP,                        d dl mZmZmZ d dlmZ d dlmZ d Zd Z	d Z
ddZ G d	 d
e          Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Zej        ej        j        _        ej        ej        ej        gej        j        _        ej        gej        j        _        ej        gej        j        _        ej        gej        j        _        ej        gej        j        _        ej        gej        j        _        ej        gej        j        _        ej        gej        j         _        ej        gej        j!        _        ej        eegej        j"        _        ej#        ej        j$        _        ej#        ej%        ej        gej        j&        _        ej#        gej        j'        _        ej#        gej        j(        _        ej#        gej        j)        _        ej#        gej        j*        _        ej#        gej        j+        _        ej#        egej        j,        _        ej#        gej        j-        _        ej#        eegej        j.        _        ej/        ej        j0        _        eej        j1        _        ej/        gej        j1        _        ej/        egej        j2        _        eej        j3        _        ej/        gej        j3        _        ej/        egej        j4        _        eej        j5        _        ej/        gej        j5        _        ej/        egej        j6        _        eej        j7        _        ej/        gej        j7        _        ej/        egej        j8        _        ej/        gej        j9        _        ej        ej        j:        _        ej;        ej/        gej        j:        _        ej        gej        j<        _        ej        ej        j=        _        ej        eegej        j=        _        ej#        ej        j>        _        ej        eegej        j>        _        dS )    )c_boolc_intc_size_t)IntFlag)ffic                      t                      S N)ModulePassManager     `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/llvmlite/binding/newpassmanagers.pycreate_new_module_pass_managerr      s    r   c                      t                      S r	   )FunctionPassManagerr   r   r    create_new_function_pass_managerr   
   s       r   c                 "    t          | |          S r	   )PassBuilder)tmptos     r   create_pass_builderr      s    r3r      c                 "    t          | |          S r	   )PipelineTuningOptions)speed_level
size_levels     r   create_pipeline_tuning_optionsr      s     j999r   c                   4    e Zd ZdZdZdZdZeez  ez  ez  ZdS )RefPruneSubpasses   r         N)__name__
__module____qualname__PER_BBDIAMONDFANOUTFANOUT_RAISEALLr   r   r   r   r      s6        FGFL
7
V
#l
2CCCr   r   c                   n     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	d	 Z
ddZd Zej        dfdZ xZS )r
   Nc                     |t           j                                        }t                                          |           d S r	   )r   lib!LLVMPY_CreateNewModulePassManagersuper__init__selfptr	__class__s     r   r/   zModulePassManager.__init__    s9    ;';;==Cr   c                 H    t           j                            | ||           d S r	   )r   r,   LLVMPY_RunNewModulePassManager)r1   modulepbs      r   runzModulePassManager.run%   s"    ..tVR@@@@@r   c                 D    t           j                            |            d S r	   )r   r,   LLVMPY_AddVerifierPassr1   s    r   add_verifierzModulePassManager.add_verifier(   s    &&t,,,,,r   c                 D    t           j                            |            d S r	   )r   r,   LLVMPY_AddAAEvalPass_moduler;   s    r   add_aa_eval_passz"ModulePassManager.add_aa_eval_pass+   s    ++D11111r   c                 D    t           j                            |            d S r	   )r   r,    LLVMPY_AddSimplifyCFGPass_moduler;   s    r   add_simplify_cfg_passz'ModulePassManager.add_simplify_cfg_pass.   s    0066666r   c                 D    t           j                            |            d S r	   )r   r,   LLVMPY_AddLoopUnrollPass_moduler;   s    r   add_loop_unroll_passz&ModulePassManager.add_loop_unroll_pass1       //55555r   c                 D    t           j                            |            d S r	   )r   r,   LLVMPY_AddLoopRotatePass_moduler;   s    r   add_loop_rotate_passz&ModulePassManager.add_loop_rotate_pass4   rF   r   c                 D    t           j                            |            d S r	   )r   r,   'LLVMPY_AddInstructionCombinePass_moduler;   s    r   add_instruction_combine_passz.ModulePassManager.add_instruction_combine_pass7   s    77=====r   c                 F    t           j                            | |           d S r	   )r   r,   "LLVMPY_AddJumpThreadingPass_moduler1   	thresholds     r   add_jump_threading_passz)ModulePassManager.add_jump_threading_pass:   s     224CCCCCr   c                 D    t           j                            |            d S r	   )r   r,   !LLVMPY_DisposeNewModulePassMangerr;   s    r   _disposezModulePassManager._dispose=       11$77777r     c                 f    t          |          }t          j                            | ||           dS a  Add Numba specific Reference count pruning pass.

        Parameters
        ----------
        subpasses_flags : RefPruneSubpasses
            A bitmask to control the subpasses to be enabled.
        subgraph_limit : int
            Limit the fanout pruners to working on a subgraph no bigger than
            this number of basic-blocks to avoid spending too much time in very
            large graphs. Default is 1000. Subject to change in future
            versions.
        N)r   r   r,   LLVMPY_AddRefPrunePass_moduler1   subpasses_flagssubgraph_limitiflagss       r   add_refprune_passz#ModulePassManager.add_refprune_passA   s1     #?33--dFNKKKKKr   r	   rM   )r"   r#   r$   r/   r8   r<   r?   rB   rE   rI   rL   rR   rU   r   r)   r_   __classcell__r3   s   @r   r
   r
      s             
A A A- - -2 2 27 7 76 6 66 6 6> > >D D D D8 8 8 1B0E)-L L L L L L L Lr   r
   c                   h     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	dd
Z
d Zej        dfdZ xZS )r   Nc                     |t           j                                        }t                                          |           d S r	   )r   r,   #LLVMPY_CreateNewFunctionPassManagerr.   r/   r0   s     r   r/   zFunctionPassManager.__init__U   s9    ;'==??Cr   c                 H    t           j                            | ||           d S r	   )r   r,    LLVMPY_RunNewFunctionPassManager)r1   funr7   s      r   r8   zFunctionPassManager.runZ   s"    00sB?????r   c                 D    t           j                            |            d S r	   )r   r,   LLVMPY_AddAAEvalPass_functionr;   s    r   r?   z$FunctionPassManager.add_aa_eval_pass]   s    --d33333r   c                 D    t           j                            |            d S r	   )r   r,   "LLVMPY_AddSimplifyCFGPass_functionr;   s    r   rB   z)FunctionPassManager.add_simplify_cfg_pass`   s    22488888r   c                 D    t           j                            |            d S r	   )r   r,   !LLVMPY_AddLoopUnrollPass_functionr;   s    r   rE   z(FunctionPassManager.add_loop_unroll_passc   rV   r   c                 D    t           j                            |            d S r	   )r   r,   !LLVMPY_AddLoopRotatePass_functionr;   s    r   rI   z(FunctionPassManager.add_loop_rotate_passf   rV   r   c                 D    t           j                            |            d S r	   )r   r,   )LLVMPY_AddInstructionCombinePass_functionr;   s    r   rL   z0FunctionPassManager.add_instruction_combine_passi   s    99$?????r   rM   c                 F    t           j                            | |           d S r	   )r   r,   $LLVMPY_AddJumpThreadingPass_functionrP   s     r   rR   z+FunctionPassManager.add_jump_threading_passl   s     44T9EEEEEr   c                 D    t           j                            |            d S r	   )r   r,   #LLVMPY_DisposeNewFunctionPassMangerr;   s    r   rU   zFunctionPassManager._disposeo       33D99999r   rW   c                 f    t          |          }t          j                            | ||           dS rY   )r   r   r,   LLVMPY_AddRefPrunePass_functionr[   s       r   r_   z%FunctionPassManager.add_refprune_passs   s1     #?33//fnMMMMMr   r	   r`   )r"   r#   r$   r/   r8   r?   rB   rE   rI   rL   rR   rU   r   r)   r_   ra   rb   s   @r   r   r   S   s             
@ @ @4 4 49 9 98 8 88 8 8@ @ @F F F F: : : 1B0E)-N N N N N N N Nr   r   c                   j    e Zd Zd f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             Z	ed             Z
e
j        d             Z
ed             Zej        d             Zd Z xZS )r   r   r   c                     d | _         d | _        || _        || _        t	                                          t          j                                                   d S r	   )	_speed_level_size_levelr   r   r.   r/   r   r,   "LLVMPY_CreatePipelineTuningOptions)r1   r   r   r3   s      r   r/   zPipelineTuningOptions.__init__   sN     &$CCEEFFFFFr   c                     | j         S r	   )r|   r;   s    r   r   z!PipelineTuningOptions.speed_level   s      r   c                 P    d|cxk    rdk    sn t          d          || _        d S )Nr      z4Optimization level for speed should be 0, 1, 2, or 3)
ValueErrorr|   r1   values     r   r   z!PipelineTuningOptions.speed_level   s?    EQFH H H!r   c                     | j         S r	   )r}   r;   s    r   r   z PipelineTuningOptions.size_level   s    r   c                     d|cxk    rdk    sn t          d          |dk    r| j        dk    rt          d          || _        d S )Nr   r   z0Optimization level for size should be 0, 1, or 2z=Optimization for size should be encoded with speed level == 2)r   r   r}   r   s     r   r   z PipelineTuningOptions.size_level   sd    EQOPPPA::$*a//OQ Q Q r   c                 @    t           j                            |           S r	   )r   r,   LLVMPY_PTOGetLoopInterleavingr;   s    r   loop_interleavingz'PipelineTuningOptions.loop_interleaving       w44T:::r   c                 F    t           j                            | |           d S r	   )r   r,   LLVMPY_PTOSetLoopInterleavingr   s     r   r   z'PipelineTuningOptions.loop_interleaving        --dE:::::r   c                 @    t           j                            |           S r	   )r   r,   LLVMPY_PTOGetLoopVectorizationr;   s    r   loop_vectorizationz(PipelineTuningOptions.loop_vectorization   s    w55d;;;r   c                 F    t           j                            | |           d S r	   )r   r,   LLVMPY_PTOSetLoopVectorizationr   s     r   r   z(PipelineTuningOptions.loop_vectorization   s     ..tU;;;;;r   c                 @    t           j                            |           S r	   )r   r,   LLVMPY_PTOGetSLPVectorizationr;   s    r   slp_vectorizationz'PipelineTuningOptions.slp_vectorization   r   r   c                 F    t           j                            | |           d S r	   )r   r,   LLVMPY_PTOSetSLPVectorizationr   s     r   r   z'PipelineTuningOptions.slp_vectorization   r   r   c                 @    t           j                            |           S r	   )r   r,   LLVMPY_PTOGetLoopUnrollingr;   s    r   loop_unrollingz$PipelineTuningOptions.loop_unrolling   s    w11$777r   c                 F    t           j                            | |           d S r	   )r   r,   LLVMPY_PTOSetLoopUnrollingr   s     r   r   z$PipelineTuningOptions.loop_unrolling   s     **477777r   c                 D    t           j                            |            d S r	   )r   r,   #LLVMPY_DisposePipelineTuningOptionsr;   s    r   rU   zPipelineTuningOptions._dispose   rw   r   r   r   )r"   r#   r$   r/   propertyr   setterr   r   r   r   r   rU   ra   rb   s   @r   r   r      s       G G G G G G ! ! X! " " "     X  ! ! ! ; ; X; ; ; ; < < X< < < < ; ; X; ; ; ; 8 8 X8 8 8 8: : : : : : :r   r   c                   0     e Zd Z fdZd Zd Zd Z xZS )r   c                     t                                          t          j                            ||                     || _        || _        d S r	   )r.   r/   r   r,   LLVMPY_CreatePassBuilder_pto_tm)r1   r   r   r3   s      r   r/   zPassBuilder.__init__   s?    99"cBBCCC	r   c                     t          t          j                            | | j        j        | j        j                            S r	   )r
   r   r,   $LLVMPY_buildPerModuleDefaultPipeliner   r   r   r;   s    r   getModulePassManagerz PassBuilder.getModulePassManager   s<     G88di+TY-AC C
 
 	
r   c                     t          t          j                            | | j        j        | j        j                            S r	   )r   r   r,   *LLVMPY_buildFunctionSimplificationPipeliner   r   r   r;   s    r   getFunctionPassManagerz"PassBuilder.getFunctionPassManager   s<    "G>>di+TY-AC C
 
 	
r   c                 D    t           j                            |            d S r	   )r   r,   LLVMPY_DisposePassBuilderr;   s    r   rU   zPassBuilder._dispose   s    ))$/////r   )r"   r#   r$   r/   r   r   rU   ra   rb   s   @r   r   r      se            

 
 

 
 
0 0 0 0 0 0 0r   r   Nr   )?ctypesr   r   r   enumr   llvmlite.bindingr   r   r   r   r   r   	ObjectRefr
   r   r   r   LLVMModulePassManagerRefr,   r-   restypeLLVMModuleRefLLVMPassBuilderRefr5   argtypesr:   r>   rA   rD   rH   rK   rO   rT   rZ   LLVMFunctionPassManagerRefre   LLVMValueRefrg   rj   rl   rn   rp   rr   rt   rv   ry   LLVMPipelineTuningOptionsRefr~   r   r   r   r   r   r   r   r   r   r   LLVMTargetMachineRefr   r   r   r   r   r   <module>r      s;   * * * * * * * * * *                    ! ! !     : : : :3 3 3 3 3 3 3 32L 2L 2L 2L 2L 2L 2L 2Lj/N /N /N /N /N#- /N /N /NdK: K: K: K: K:CM K: K: K:\0 0 0 0 0#- 0 0 08 584P ) 1  #"33 & / ,/+G*I  '030L/N # , 5# ( 1  4# ' 0  4# ' 0  <# / 8  7# * 3  6# ) 2  %2 % . "  + 3 "C$45 ( 1
 "2% % . "7% * 3 "6% ) 2 "6% ) 2 ">% 1 : "E9, , 5 "8% + 4 "E84 ' 0 $  * 2 17 % -$2' % . $f2. % . 28 & .$3' & / $f3. & / 17 % -$2' % . $f2. % . .4 " *$/' " + $f/. " + 	%'  + 4
 ,/+A   (-0-E-0-M-P   ) /2.D-F ! *
    , 4 E59* , 5 "  2 : E5?* 2 ; ; ;r   