
    6|hP,                        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&                  j0                  _        ej$                  gej&                  j4                  _        ej$                  gej&                  j6                  _        ej$                  gej&                  j8                  _        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&                  jB                  _        ej$                  eegej&                  jD                  _        ejF                  ej&                  jH                  _        ejF                  ejJ                  ej.                  gej&                  jL                  _        ejF                  gej&                  jN                  _        ejF                  gej&                  jP                  _        ejF                  gej&                  jR                  _        ejF                  gej&                  jT                  _        ejF                  gej&                  jV                  _        ejF                  egej&                  jX                  _        ejF                  gej&                  jZ                  _        ejF                  eegej&                  j\                  _        ej^                  ej&                  j`                  _        eej&                  jb                  _        ej^                  gej&                  jb                  _        ej^                  egej&                  jd                  _        eej&                  jf                  _        ej^                  gej&                  jf                  _        ej^                  egej&                  jh                  _        eej&                  jj                  _        ej^                  gej&                  jj                  _        ej^                  egej&                  jl                  _        eej&                  jn                  _        ej^                  gej&                  jn                  _        ej^                  egej&                  jp                  _        ej^                  gej&                  jr                  _        ej.                  ej&                  jt                  _        ejv                  ej^                  gej&                  jt                  _        ej.                  gej&                  jx                  _        ej$                  ej&                  jz                  _        ej.                  eegej&                  jz                  _        ejF                  ej&                  j|                  _        ej.                  eegej&                  j|                  _        y)    )c_boolc_intc_size_t)IntFlag)ffic                      t               S N)ModulePassManager     _/var/www/html/test/engine/venv/lib/python3.12/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9r   c                   2    e Zd ZdZdZdZdZeez  ez  ez  Zy)RefPruneSubpasses            N)__name__
__module____qualname__PER_BBDIAMONDFANOUTFANOUT_RAISEALLr   r   r   r   r      s*    FGFL
7
V
#l
2Cr   r   c                   x     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
   c                 d    |t         j                  j                         }t        |   |       y r	   )r   lib!LLVMPY_CreateNewModulePassManagersuper__init__selfptr	__class__s     r   r/   zModulePassManager.__init__    s'    ;'';;=Cr   c                 F    t         j                  j                  | ||       y r	   )r   r,   LLVMPY_RunNewModulePassManager)r1   modulepbs      r   runzModulePassManager.run%   s    ..tVR@r   c                 B    t         j                  j                  |        y r	   )r   r,   LLVMPY_AddVerifierPassr1   s    r   add_verifierzModulePassManager.add_verifier(   s    &&t,r   c                 B    t         j                  j                  |        y r	   )r   r,   LLVMPY_AddAAEvalPass_moduler;   s    r   add_aa_eval_passz"ModulePassManager.add_aa_eval_pass+   s    ++D1r   c                 B    t         j                  j                  |        y r	   )r   r,    LLVMPY_AddSimplifyCFGPass_moduler;   s    r   add_simplify_cfg_passz'ModulePassManager.add_simplify_cfg_pass.   s    006r   c                 B    t         j                  j                  |        y r	   )r   r,   LLVMPY_AddLoopUnrollPass_moduler;   s    r   add_loop_unroll_passz&ModulePassManager.add_loop_unroll_pass1       //5r   c                 B    t         j                  j                  |        y r	   )r   r,   LLVMPY_AddLoopRotatePass_moduler;   s    r   add_loop_rotate_passz&ModulePassManager.add_loop_rotate_pass4   rF   r   c                 B    t         j                  j                  |        y r	   )r   r,   'LLVMPY_AddInstructionCombinePass_moduler;   s    r   add_instruction_combine_passz.ModulePassManager.add_instruction_combine_pass7   s    77=r   c                 D    t         j                  j                  | |       y r	   )r   r,   "LLVMPY_AddJumpThreadingPass_moduler1   	thresholds     r   add_jump_threading_passz)ModulePassManager.add_jump_threading_pass:   s    224Cr   c                 B    t         j                  j                  |        y r	   )r   r,   !LLVMPY_DisposeNewModulePassMangerr;   s    r   _disposezModulePassManager._dispose=       11$7r     c                 \    t        |      }t        j                  j                  | ||       y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   s$     #?3--dFNKr   r	   )r"   r#   r$   r/   r8   r<   r?   rB   rE   rI   rL   rQ   rT   r   r)   r^   __classcell__r3   s   @r   r
   r
      sL    
A-2766>D8 1B0E0E)-Lr   r
   c                   r     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   c                 d    |t         j                  j                         }t        |   |       y r	   )r   r,   #LLVMPY_CreateNewFunctionPassManagerr.   r/   r0   s     r   r/   zFunctionPassManager.__init__U   s'    ;''==?Cr   c                 F    t         j                  j                  | ||       y r	   )r   r,    LLVMPY_RunNewFunctionPassManager)r1   funr7   s      r   r8   zFunctionPassManager.runZ   s    00sB?r   c                 B    t         j                  j                  |        y r	   )r   r,   LLVMPY_AddAAEvalPass_functionr;   s    r   r?   z$FunctionPassManager.add_aa_eval_pass]   s    --d3r   c                 B    t         j                  j                  |        y r	   )r   r,   "LLVMPY_AddSimplifyCFGPass_functionr;   s    r   rB   z)FunctionPassManager.add_simplify_cfg_pass`   s    2248r   c                 B    t         j                  j                  |        y r	   )r   r,   !LLVMPY_AddLoopUnrollPass_functionr;   s    r   rE   z(FunctionPassManager.add_loop_unroll_passc   rU   r   c                 B    t         j                  j                  |        y r	   )r   r,   !LLVMPY_AddLoopRotatePass_functionr;   s    r   rI   z(FunctionPassManager.add_loop_rotate_passf   rU   r   c                 B    t         j                  j                  |        y r	   )r   r,   )LLVMPY_AddInstructionCombinePass_functionr;   s    r   rL   z0FunctionPassManager.add_instruction_combine_passi   s    99$?r   c                 D    t         j                  j                  | |       y r	   )r   r,   $LLVMPY_AddJumpThreadingPass_functionrO   s     r   rQ   z+FunctionPassManager.add_jump_threading_passl   s    44T9Er   c                 B    t         j                  j                  |        y r	   )r   r,   #LLVMPY_DisposeNewFunctionPassMangerr;   s    r   rT   zFunctionPassManager._disposeo       33D9r   rV   c                 \    t        |      }t        j                  j                  | ||       yrX   )r   r   r,   LLVMPY_AddRefPrunePass_functionrZ   s       r   r^   z%FunctionPassManager.add_refprune_passs   s$     #?3//fnMr   r	   r_   )r"   r#   r$   r/   r8   r?   rB   rE   rI   rL   rQ   rT   r   r)   r^   ra   rb   s   @r   r   r   S   sH    
@4988@F: 1B0E0E)-Nr   r   c                   ^    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   c                     d | _         d | _        || _        || _        t        |   t        j                  j                                y r	   )	_speed_level_size_levelr   r   r.   r/   r   r,   "LLVMPY_CreatePipelineTuningOptions)r1   r   r   r3   s      r   r/   zPipelineTuningOptions.__init__   s<     &$CCEFr   c                     | j                   S r	   )r|   r;   s    r   r   z!PipelineTuningOptions.speed_level   s       r   c                 V    d|cxk  rdk  st        d       t        d      || _        y )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 F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t        d       t        d      |dk7  r| j                  dk7  rt        d      || _        y )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   sX    EQOPP OPPA:$**a/OQ Q r   c                 @    t         j                  j                  |       S r	   )r   r,   LLVMPY_PTOGetLoopInterleavingr;   s    r   loop_interleavingz'PipelineTuningOptions.loop_interleaving       ww44T::r   c                 D    t         j                  j                  | |       y r	   )r   r,   LLVMPY_PTOSetLoopInterleavingr   s     r   r   z'PipelineTuningOptions.loop_interleaving       --dE:r   c                 @    t         j                  j                  |       S r	   )r   r,   LLVMPY_PTOGetLoopVectorizationr;   s    r   loop_vectorizationz(PipelineTuningOptions.loop_vectorization   s    ww55d;;r   c                 D    t         j                  j                  | |       y r	   )r   r,   LLVMPY_PTOSetLoopVectorizationr   s     r   r   z(PipelineTuningOptions.loop_vectorization   s    ..tU;r   c                 @    t         j                  j                  |       S r	   )r   r,   LLVMPY_PTOGetSLPVectorizationr;   s    r   slp_vectorizationz'PipelineTuningOptions.slp_vectorization   r   r   c                 D    t         j                  j                  | |       y r	   )r   r,   LLVMPY_PTOSetSLPVectorizationr   s     r   r   z'PipelineTuningOptions.slp_vectorization   r   r   c                 @    t         j                  j                  |       S r	   )r   r,   LLVMPY_PTOGetLoopUnrollingr;   s    r   loop_unrollingz$PipelineTuningOptions.loop_unrolling   s    ww11$77r   c                 D    t         j                  j                  | |       y r	   )r   r,   LLVMPY_PTOSetLoopUnrollingr   s     r   r   z$PipelineTuningOptions.loop_unrolling   s    **47r   c                 B    t         j                  j                  |        y r	   )r   r,   #LLVMPY_DisposePipelineTuningOptionsr;   s    r   rT   zPipelineTuningOptions._dispose   rw   r   r   r   )r"   r#   r$   r/   propertyr   setterr   r   r   r   r   rT   ra   rb   s   @r   r   r      s"   G ! ! " "     ! ! ; ; ; ; < < < < ; ; ; ; 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                  j	                  ||             || _        || _        y r	   )r.   r/   r   r,   LLVMPY_CreatePassBuilder_pto_tm)r1   r   r   r3   s      r   r/   zPassBuilder.__init__   s/    99"cBC	r   c                     t        t        j                  j                  | | j                  j
                  | j                  j                              S r	   )r
   r   r,   $LLVMPY_buildPerModuleDefaultPipeliner   r   r   r;   s    r   getModulePassManagerz PassBuilder.getModulePassManager   s=     GG88dii++TYY-A-AC
 	
r   c                     t        t        j                  j                  | | j                  j
                  | j                  j                              S r	   )r   r   r,   *LLVMPY_buildFunctionSimplificationPipeliner   r   r   r;   s    r   getFunctionPassManagerz"PassBuilder.getFunctionPassManager   s=    "GG>>dii++TYY-A-AC
 	
r   c                 B    t         j                  j                  |        y r	   )r   r,   LLVMPY_DisposePassBuilderr;   s    r   rT   zPassBuilder._dispose   s    ))$/r   )r"   r#   r$   r/   r   r   rT   ra   rb   s   @r   r   r      s    


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   rN   rS   rY   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2L 2Lj/N#-- /NdK:CMM K:\0#-- 08 584P4P ) ) 1   #"3"33 & & / ,/+G+G*I   '030L0L/N # # ,  5# ( ( 1   4# ' ' 0   4# ' ' 0   <# / / 8   7# * * 3   6# ) ) 2   %2 % % . ""  + + 3 ""C$4$45 ( ( 1
 ""2% % % . ""7% * * 3 ""6% ) ) 2 ""6% ) ) 2 "">% 1 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+A     (-0-E-E-0-M-M-P     ) /2.D.D-F ! ! *
     , , 4 E59* , , 5 ""  2 2 : E5?* 2 2 ;r   