o
    0 iP,                     @   s  d dl mZmZmZ d dlmZ d dlmZ dd Zdd Z	dd	 Z
dddZG dd deZG dd dejZG dd dejZG dd dejZG d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                   C      t  S N)ModulePassManager r
   r
   l/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/llvmlite/binding/newpassmanagers.pycreate_new_module_pass_manager      r   c                   C   r   r   )FunctionPassManagerr
   r
   r
   r    create_new_function_pass_manager
   r   r   c                 C   
   t | |S r   )PassBuilder)tmptor
   r
   r   create_pass_builder      
r      c                 C   r   r   )PipelineTuningOptions)speed_level
size_levelr
   r
   r   create_pipeline_tuning_options   r   r   c                   @   s,   e Zd ZdZdZdZdZeeB eB eB ZdS )RefPruneSubpasses   r         N)__name__
__module____qualname__ZPER_BBZDIAMONDZFANOUTZFANOUT_RAISEALLr
   r
   r
   r   r      s    r   c                       sx   e Zd Zd fdd	Zdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dddZdd ZejdfddZ  ZS )r	   Nc                    "   |d u r	t j }t | d S r   )r   lib!LLVMPY_CreateNewModulePassManagersuper__init__selfZptr	__class__r
   r   r'          
zModulePassManager.__init__c                 C      t j| || d S r   )r   r$   LLVMPY_RunNewModulePassManager)r)   modulepbr
   r
   r   run%      zModulePassManager.runc                 C      t j|  d S r   )r   r$   LLVMPY_AddVerifierPassr)   r
   r
   r   add_verifier(      zModulePassManager.add_verifierc                 C   r3   r   )r   r$   LLVMPY_AddAAEvalPass_moduler5   r
   r
   r   add_aa_eval_pass+   r7   z"ModulePassManager.add_aa_eval_passc                 C   r3   r   )r   r$    LLVMPY_AddSimplifyCFGPass_moduler5   r
   r
   r   add_simplify_cfg_pass.   r7   z'ModulePassManager.add_simplify_cfg_passc                 C   r3   r   )r   r$   LLVMPY_AddLoopUnrollPass_moduler5   r
   r
   r   add_loop_unroll_pass1   r7   z&ModulePassManager.add_loop_unroll_passc                 C   r3   r   )r   r$   LLVMPY_AddLoopRotatePass_moduler5   r
   r
   r   add_loop_rotate_pass4   r7   z&ModulePassManager.add_loop_rotate_passc                 C   r3   r   )r   r$   'LLVMPY_AddInstructionCombinePass_moduler5   r
   r
   r   add_instruction_combine_pass7   r7   z.ModulePassManager.add_instruction_combine_passc                 C      t j| | d S r   )r   r$   "LLVMPY_AddJumpThreadingPass_moduler)   	thresholdr
   r
   r   add_jump_threading_pass:      z)ModulePassManager.add_jump_threading_passc                 C   r3   r   )r   r$   !LLVMPY_DisposeNewModulePassMangerr5   r
   r
   r   _dispose=   r7   zModulePassManager._dispose  c                 C      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r)   Zsubpasses_flagsZsubgraph_limitZiflagsr
   r
   r   add_refprune_passA      z#ModulePassManager.add_refprune_passr   rB   )r   r    r!   r'   r1   r6   r9   r;   r=   r?   rA   rG   rJ   r   r"   rP   __classcell__r
   r
   r*   r   r	      s    
r	   c                       sp   e Zd Zd fdd	Zdd Zdd Zdd	 Zd
d Zdd Zdd Z	dddZ
dd ZejdfddZ  ZS )r   Nc                    r#   r   )r   r$   #LLVMPY_CreateNewFunctionPassManagerr&   r'   r(   r*   r
   r   r'   U   r,   zFunctionPassManager.__init__c                 C   r-   r   )r   r$    LLVMPY_RunNewFunctionPassManager)r)   Zfunr0   r
   r
   r   r1   Z   r2   zFunctionPassManager.runc                 C   r3   r   )r   r$   LLVMPY_AddAAEvalPass_functionr5   r
   r
   r   r9   ]   r7   z$FunctionPassManager.add_aa_eval_passc                 C   r3   r   )r   r$   "LLVMPY_AddSimplifyCFGPass_functionr5   r
   r
   r   r;   `   r7   z)FunctionPassManager.add_simplify_cfg_passc                 C   r3   r   )r   r$   !LLVMPY_AddLoopUnrollPass_functionr5   r
   r
   r   r=   c   r7   z(FunctionPassManager.add_loop_unroll_passc                 C   r3   r   )r   r$   !LLVMPY_AddLoopRotatePass_functionr5   r
   r
   r   r?   f   r7   z(FunctionPassManager.add_loop_rotate_passc                 C   r3   r   )r   r$   )LLVMPY_AddInstructionCombinePass_functionr5   r
   r
   r   rA   i   r7   z0FunctionPassManager.add_instruction_combine_passrB   c                 C   rC   r   )r   r$   $LLVMPY_AddJumpThreadingPass_functionrE   r
   r
   r   rG   l   rH   z+FunctionPassManager.add_jump_threading_passc                 C   r3   r   )r   r$   #LLVMPY_DisposeNewFunctionPassMangerr5   r
   r
   r   rJ   o   r7   zFunctionPassManager._disposerK   c                 C   rL   rM   )r   r   r$   LLVMPY_AddRefPrunePass_functionrO   r
   r
   r   rP   s   rQ   z%FunctionPassManager.add_refprune_passr   rR   )r   r    r!   r'   r1   r9   r;   r=   r?   rA   rG   rJ   r   r"   rP   rS   r
   r
   r*   r   r   S   s    
r   c                       s   e Zd Zd f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 Z	edd Z
e
jdd Z
edd Zejdd Zdd Z  ZS )r   r   r   c                    s.   d | _ d | _|| _|| _t tj  d S r   )	_speed_level_size_levelr   r   r&   r'   r   r$   "LLVMPY_CreatePipelineTuningOptions)r)   r   r   r*   r
   r   r'      s
   zPipelineTuningOptions.__init__c                 C      | j S r   )r^   r5   r
   r
   r   r         z!PipelineTuningOptions.speed_levelc                 C   s.   d|  krdkst d t d|| _d S )Nr      z4Optimization level for speed should be 0, 1, 2, or 3)
ValueErrorr^   r)   valuer
   r
   r   r      s   
c                 C   ra   r   )r_   r5   r
   r
   r   r      rb   z PipelineTuningOptions.size_levelc                 C   sH   d|  krdkst d 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)rd   r   r_   re   r
   r
   r   r      s   
c                 C      t j| S r   )r   r$   LLVMPY_PTOGetLoopInterleavingr5   r
   r
   r   loop_interleaving      z'PipelineTuningOptions.loop_interleavingc                 C   rC   r   )r   r$   LLVMPY_PTOSetLoopInterleavingre   r
   r
   r   ri         c                 C   rg   r   )r   r$   LLVMPY_PTOGetLoopVectorizationr5   r
   r
   r   loop_vectorization   rj   z(PipelineTuningOptions.loop_vectorizationc                 C   rC   r   )r   r$   LLVMPY_PTOSetLoopVectorizationre   r
   r
   r   rn      rl   c                 C   rg   r   )r   r$   LLVMPY_PTOGetSLPVectorizationr5   r
   r
   r   slp_vectorization   rj   z'PipelineTuningOptions.slp_vectorizationc                 C   rC   r   )r   r$   LLVMPY_PTOSetSLPVectorizationre   r
   r
   r   rq      rl   c                 C   rg   r   )r   r$   LLVMPY_PTOGetLoopUnrollingr5   r
   r
   r   loop_unrolling   rj   z$PipelineTuningOptions.loop_unrollingc                 C   rC   r   )r   r$   LLVMPY_PTOSetLoopUnrollingre   r
   r
   r   rt      rl   c                 C   r3   r   )r   r$   #LLVMPY_DisposePipelineTuningOptionsr5   r
   r
   r   rJ      r7   zPipelineTuningOptions._disposer   r   )r   r    r!   r'   propertyr   setterr   ri   rn   rq   rt   rJ   rS   r
   r
   r*   r   r      s6    











r   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	r   c                    s&   t  tj|| || _|| _d S r   )r&   r'   r   r$   LLVMPY_CreatePassBuilder_ptoZ_tm)r)   r   r   r*   r
   r   r'      s   
zPassBuilder.__init__c                 C      t tj| | jj| jjS r   )r	   r   r$   $LLVMPY_buildPerModuleDefaultPipeliner{   r   r   r5   r
   r
   r   getModulePassManager   
   z PassBuilder.getModulePassManagerc                 C   r|   r   )r   r   r$   *LLVMPY_buildFunctionSimplificationPipeliner{   r   r   r5   r
   r
   r   getFunctionPassManager   r   z"PassBuilder.getFunctionPassManagerc                 C   r3   r   )r   r$   LLVMPY_DisposePassBuilderr5   r
   r
   r   rJ      r7   zPassBuilder._dispose)r   r    r!   r'   r~   r   rJ   rS   r
   r
   r*   r   r      s
    r   Nrw   )?ctypesr   r   r   enumr   Zllvmlite.bindingr   r   r   r   r   r   Z	ObjectRefr	   r   r   r   ZLLVMModulePassManagerRefr$   r%   restypeZLLVMModuleRefZLLVMPassBuilderRefr.   argtypesr4   r8   r:   r<   r>   r@   rD   rI   rN   ZLLVMFunctionPassManagerRefrT   ZLLVMValueRefrU   rV   rW   rX   rY   rZ   r[   r\   r]   ZLLVMPipelineTuningOptionsRefr`   rh   rk   rm   ro   rp   rr   rs   ru   rv   rz   ZLLVMTargetMachineRefr   r}   r   r
   r
   r
   r   <module>   s    
52N






























