o
    D2hP,                     @   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
   t/var/www/html/alexa/alex_system/speach-to-text/venv/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__PER_BBDIAMONDFANOUT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__self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   r8   r   )r   r(   LLVMPY_AddAAEvalPass_moduler:   r
   r
   r   add_aa_eval_pass+   r<   z"ModulePassManager.add_aa_eval_passc                 C   r8   r   )r   r(    LLVMPY_AddSimplifyCFGPass_moduler:   r
   r
   r   add_simplify_cfg_pass.   r<   z'ModulePassManager.add_simplify_cfg_passc                 C   r8   r   )r   r(   LLVMPY_AddLoopUnrollPass_moduler:   r
   r
   r   add_loop_unroll_pass1   r<   z&ModulePassManager.add_loop_unroll_passc                 C   r8   r   )r   r(   LLVMPY_AddLoopRotatePass_moduler:   r
   r
   r   add_loop_rotate_pass4   r<   z&ModulePassManager.add_loop_rotate_passc                 C   r8   r   )r   r(   'LLVMPY_AddInstructionCombinePass_moduler:   r
   r
   r   add_instruction_combine_pass7   r<   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   r8   r   )r   r(   !LLVMPY_DisposeNewModulePassMangerr:   r
   r
   r   _dispose=   r<   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-   subpasses_flagssubgraph_limitiflagsr
   r
   r   add_refprune_passA      z#ModulePassManager.add_refprune_passr   rG   )r   r    r!   r+   r6   r;   r>   r@   rB   rD   rF   rL   rO   r   r&   rX   __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   r1   zFunctionPassManager.__init__c                 C   r2   r   )r   r(    LLVMPY_RunNewFunctionPassManager)r-   funr5   r
   r
   r   r6   Z   r7   zFunctionPassManager.runc                 C   r8   r   )r   r(   LLVMPY_AddAAEvalPass_functionr:   r
   r
   r   r>   ]   r<   z$FunctionPassManager.add_aa_eval_passc                 C   r8   r   )r   r(   "LLVMPY_AddSimplifyCFGPass_functionr:   r
   r
   r   r@   `   r<   z)FunctionPassManager.add_simplify_cfg_passc                 C   r8   r   )r   r(   !LLVMPY_AddLoopUnrollPass_functionr:   r
   r
   r   rB   c   r<   z(FunctionPassManager.add_loop_unroll_passc                 C   r8   r   )r   r(   !LLVMPY_AddLoopRotatePass_functionr:   r
   r
   r   rD   f   r<   z(FunctionPassManager.add_loop_rotate_passc                 C   r8   r   )r   r(   )LLVMPY_AddInstructionCombinePass_functionr:   r
   r
   r   rF   i   r<   z0FunctionPassManager.add_instruction_combine_passrG   c                 C   rH   r   )r   r(   $LLVMPY_AddJumpThreadingPass_functionrJ   r
   r
   r   rL   l   rM   z+FunctionPassManager.add_jump_threading_passc                 C   r8   r   )r   r(   #LLVMPY_DisposeNewFunctionPassMangerr:   r
   r
   r   rO   o   r<   zFunctionPassManager._disposerP   c                 C   rQ   rR   )r   r   r(   LLVMPY_AddRefPrunePass_functionrT   r
   r
   r   rX   s   rY   z%FunctionPassManager.add_refprune_passr   rZ   )r   r    r!   r+   r6   r>   r@   rB   rD   rF   rL   rO   r   r&   rX   r[   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   )rg   r:   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)
ValueErrorrg   r-   valuer
   r
   r   r      s   
c                 C   rj   r   )rh   r:   r
   r
   r   r      rk   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)rm   r   rh   rn   r
   r
   r   r      s   
c                 C      t j| S r   )r   r(   LLVMPY_PTOGetLoopInterleavingr:   r
   r
   r   loop_interleaving      z'PipelineTuningOptions.loop_interleavingc                 C   rH   r   )r   r(   LLVMPY_PTOSetLoopInterleavingrn   r
   r
   r   rr         c                 C   rp   r   )r   r(   LLVMPY_PTOGetLoopVectorizationr:   r
   r
   r   loop_vectorization   rs   z(PipelineTuningOptions.loop_vectorizationc                 C   rH   r   )r   r(   LLVMPY_PTOSetLoopVectorizationrn   r
   r
   r   rw      ru   c                 C   rp   r   )r   r(   LLVMPY_PTOGetSLPVectorizationr:   r
   r
   r   slp_vectorization   rs   z'PipelineTuningOptions.slp_vectorizationc                 C   rH   r   )r   r(   LLVMPY_PTOSetSLPVectorizationrn   r
   r
   r   rz      ru   c                 C   rp   r   )r   r(   LLVMPY_PTOGetLoopUnrollingr:   r
   r
   r   loop_unrolling   rs   z$PipelineTuningOptions.loop_unrollingc                 C   rH   r   )r   r(   LLVMPY_PTOSetLoopUnrollingrn   r
   r
   r   r}      ru   c                 C   r8   r   )r   r(   #LLVMPY_DisposePipelineTuningOptionsr:   r
   r
   r   rO      r<   zPipelineTuningOptions._disposer   r   )r   r    r!   r+   propertyr   setterr   rr   rw   rz   r}   rO   r[   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_pto_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   r:   r
   r
   r   getModulePassManager   
   z PassBuilder.getModulePassManagerc                 C   r   r   )r   r   r(   *LLVMPY_buildFunctionSimplificationPipeliner   r   r   r:   r
   r
   r   getFunctionPassManager   r   z"PassBuilder.getFunctionPassManagerc                 C   r8   r   )r   r(   LLVMPY_DisposePassBuilderr:   r
   r
   r   rO      r<   zPassBuilder._dispose)r   r    r!   r+   r   r   rO   r[   r
   r
   r/   r   r      s
    r   Nr   )?ctypesr   r   r   enumr   llvmlite.bindingr   r   r   r   r   r   	ObjectRefr	   r   r   r   LLVMModulePassManagerRefr(   r)   restypeLLVMModuleRefLLVMPassBuilderRefr3   argtypesr9   r=   r?   rA   rC   rE   rI   rN   rS   LLVMFunctionPassManagerRefr\   LLVMValueRefr]   r_   r`   ra   rb   rc   rd   re   rf   LLVMPipelineTuningOptionsRefri   rq   rt   rv   rx   ry   r{   r|   r~   r   r   LLVMTargetMachineRefr   r   r   r
   r
   r
   r   <module>   s    
52N


























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