
    <;ji                        d dl mZmZmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d Zd Zd Zd"d	Z e	d
d          Z G d d
e          Z G d de          Zd#dZd Zd Z G d de          Z G d d          Z G d dej        e          Z G d dej        e          Z G d dej                  Z G d dej                  Z G d d ej                  Z ee          egej         j!        _"        egej         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%        gej         j0        _"        ej%        gej         j1        _"        ej%        gej         j2        _"        ej%        gej         j3        _"        ej%        gej         j4        _"        ej%        gej         j5        _"        ej%        gej         j6        _"        ej%        gej         j7        _"        ej%        gej         j8        _"        ej%        gej         j9        _"        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         jA        _"        ej%        gej         jB        _"        ej%        gej         jC        _"        ej%        gej         jD        _"        ej%        gej         jE        _"        ej%        gej         jF        _"        ej%        gej         jG        _"        ej%        gej         jH        _"        ej%        gej         jI        _"        ej%        gej         jJ        _"        ej%        gej         jK        _"        ej%        gej         jL        _"        ej%        gej         jM        _"        ej%        gej         jN        _"        ej%        gej         jO        _"        ej%        gej         jP        _"        ej%        gej         jQ        _"        ej%        gej         jR        _"        ej%        gej         jS        _"        ej%        gej         jT        _"        ej%        gej         jU        _"        ej%        gej         jV        _"        ej%        gej         jW        _"        ej%        gej         jX        _"        ej%        gej         jY        _"        ej%        gej         jZ        _"        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         ja        _"        ej%        gej         jb        _"        ej%        gej         jc        _"        ej%        gej         jd        _"        ej%        gej         je        _"        ej%        gej         jf        _"        ej%        gej         jg        _"        ej%        gej         jh        _"        ej%        eegej         ji        _"        ejj        ej         jk        _'        ejj        ejl        ej)        gej         jm        _"        ejj        gej         jn        _"        ejj        gej         jo        _"        ejj        gej         jp        _"        ejj        gej         jq        _"        ejj        egej         jr        _"        ejj        gej         js        _"        ejj        gej         jt        _"        ejj        gej         ju        _"        ejj        gej         jv        _"        ejj        gej         jw        _"        ejj        gej         jx        _"        ejj        gej         jy        _"        ejj        gej         jz        _"        ejj        gej         j{        _"        ejj        gej         j|        _"        ejj        gej         j}        _"        ejj        gej         j~        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        gej         j        _"        ejj        eegej         j        _"        ej        ej         j        _'        eej         j        _'        ej        gej         j        _"        ej        egej         j        _"        eej         j        _'        ej        gej         j        _"        ej        egej         j        _"        eej         j        _'        ej        gej         j        _"        ej        egej         j        _"        eej         j        _'        ej        gej         j        _"        ej        egej         j        _"        eej         j        _'        ej        egej         j        _"        ej        gej         j        _"        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        gej         j        _"        ej)        ej        gej         j        _"        ej         ee          gej         j        _"        ej%        ej         j        _'        ej)        eegej         j        _"        ejj        ej         j        _'        ej)        eegej         j        _"        d!S )$    )c_boolc_intc_size_tPOINTER	Structurebyrefc_char_p)
namedtuple)IntFlag)ffic                      t                      S N)ModulePassManager     Z/root/voice-cloning/.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   
PruneStatsz&basicblock diamond fanout fanout_raisec                       e Zd ZdZd Zd ZdS )r"   z4 Holds statistics from reference count pruning.
    c                    t          |t                    s1d}t          |                    t	          |                              t          | j        |j        z   | j        |j        z   | j        |j        z   | j        |j        z             S )Nz;PruneStats can only be added to another PruneStats, got {}.	
isinstancer"   	TypeErrorformattype
basicblockdiamondfanoutfanout_raiseselfothermsgs      r   __add__zPruneStats.__add__   s    %,, 	5OCCJJtE{{33444$/E,<<,6+4+e.@@B B 	Br   c                    t          |t                    s1d}t          |                    t	          |                              t          | j        |j        z
  | j        |j        z
  | j        |j        z
  | j        |j        z
            S )NzBPruneStats can only be subtracted from another PruneStats, got {}.r%   r.   s      r   __sub__zPruneStats.__sub__(   s    %,, 	5CCJJtE{{33444$/E,<<,6+4+e.@@B B 	Br   N)__name__
__module____qualname____doc__r2   r4   r   r   r   r"   r"      sD         B B BB B B B Br   c                   *    e Zd ZdefdefdefdefgZdS )_c_PruneStatsr*   r+   r,   r-   N)r5   r6   r7   r   _fields_r   r   r   r:   r:   3   s5        	x 	H	8	"	$HHHr   r:   Fc                     t          dddd          }t          |           }t          j                            t          |          |           t          |j        |j        |j	        |j
                  S )z Returns a namedtuple containing the current values for the refop pruning
    statistics. If kwarg `printout` is True the stats are printed to stderr,
    default is False.
    r   )r:   r   r   libLLVMPY_DumpRefPruneStatsr   r"   r*   r+   r,   r-   )printoutstatsdo_prints      r   dump_refprune_statsrB   ;   sg     !Q1%%EhHG$$U5\\8<<<e&u|(* * *r   c                 ^    t           j                            t          |                      dS )zEnable or disable the pass timers.

    Parameters
    ----------
    enable : bool
        Set to True to enable the pass timers.
        Set to False to disable the pass timers.
    N)r   r=   LLVMPY_SetTimePassesr   )enables    r   set_time_passesrF   N   s&     G  00000r   c                      t          j                    5 } t           j                            |            t	          |           cddd           S # 1 swxY w Y   dS )a  Returns the pass timings report and resets the LLVM internal timers.

    Pass timers are enabled by ``set_time_passes()``. If the timers are not
    enabled, this function will return an empty string.

    Returns
    -------
    res : str
        LLVM generated timing report.
    N)r   OutputStringr=   LLVMPY_ReportAndResetTimingsstr)bufs    r   report_and_reset_timingsrL   Z   s     
			 s,,S1113xx                 s   .AAA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)r5   r6   r7   PER_BBDIAMONDFANOUTFANOUT_RAISEALLr   r   r   rN   rN   j   s6        FGFL
7
V
#l
2CCCr   rN   c                      e Zd Zd Zd Zd Zd Zd Zd Zd.dZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d-S )/NewPassManagerc                 P    t          |           t          u rt          d          d S )Nz*Cannot instantiate NewPassManager directly)r)   rX   r'   r/   s    r   __init__zNewPassManager.__init__t   s*    ::''HIII ('r   c                     t          | t                    r#t          j                            | ||           d S t          j                            | ||           d S r   )r&   r   r   r=   LLVMPY_RunNewModulePassManager LLVMPY_RunNewFunctionPassManager)r/   IRpbs      r   runzNewPassManager.runx   sV    d-.. 	CG224R@@@@@G44T2rBBBBBr   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddAAEvaluatorLLVMPY_function_AddAAEvaluatorrZ   s    r   add_aa_eval_passzNewPassManager.add_aa_eval_pass~   M    d-.. 	9G0066666G22488888r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=    LLVMPY_module_AddSimplifyCFGPass"LLVMPY_function_AddSimplifyCFGPassrZ   s    r   add_simplify_cfg_passz$NewPassManager.add_simplify_cfg_pass   M    d-.. 	=G44T:::::G66t<<<<<r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddLoopUnrollPass!LLVMPY_function_AddLoopUnrollPassrZ   s    r   add_loop_unroll_passz#NewPassManager.add_loop_unroll_pass   M    d-.. 	<G33D99999G55d;;;;;r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=    LLVMPY_module_AddInstCombinePass"LLVMPY_function_AddInstCombinePassrZ   s    r   add_instruction_combine_passz+NewPassManager.add_instruction_combine_pass   rk   r   c                     t          | t                    r"t          j                            | |           d S t          j                            | |           d S r   )r&   r   r   r=   "LLVMPY_AddJumpThreadingPass_module$LLVMPY_AddJumpThreadingPass_function)r/   	thresholds     r   add_jump_threading_passz&NewPassManager.add_jump_threading_pass   sR    d-.. 	JG66tYGGGGGG88yIIIIIr   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddCFGPrinterPass!LLVMPY_function_AddCFGPrinterPassrZ   s    r   add_cfg_printer_passz#NewPassManager.add_cfg_printer_pass   rp   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   #LLVMPY_module_AddCFGOnlyPrinterPass%LLVMPY_function_AddCFGOnlyPrinterPassrZ   s    r   add_cfg_only_printer_passz(NewPassManager.add_cfg_only_printer_pass   N    d-.. 	@G77=====G99$?????r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddDomPrinterLLVMPY_function_AddDomPrinterrZ   s    r   add_dom_printer_passz#NewPassManager.add_dom_printer_pass   M    d-.. 	8G//55555G11$77777r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddDomOnlyPrinter!LLVMPY_function_AddDomOnlyPrinterrZ   s    r   add_dom_only_printer_passz(NewPassManager.add_dom_only_printer_pass   rp   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddPostDomPrinter!LLVMPY_function_AddPostDomPrinterrZ   s    r   add_post_dom_printer_passz(NewPassManager.add_post_dom_printer_pass   rp   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   #LLVMPY_module_AddPostDomOnlyPrinter%LLVMPY_function_AddPostDomOnlyPrinterrZ   s    r   add_post_dom_only_printer_passz-NewPassManager.add_post_dom_only_printer_pass   r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddDomViewerLLVMPY_function_AddDomViewerrZ   s    r   add_dom_viewer_passz"NewPassManager.add_dom_viewer_pass   M    d-.. 	7G..t44444G0066666r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddDomOnlyViewer LLVMPY_function_AddDomOnlyViewerrZ   s    r   add_dom_only_viewer_passz'NewPassManager.add_dom_only_viewer_pass   M    d-.. 	;G22488888G44T:::::r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddPostDomViewer LLVMPY_function_AddPostDomViewerrZ   s    r   add_post_dom_viewer_passz'NewPassManager.add_post_dom_viewer_pass   r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   "LLVMPY_module_AddPostDomOnlyViewer$LLVMPY_function_AddPostDomOnlyViewerrZ   s    r   add_post_dom_only_viewer_passz,NewPassManager.add_post_dom_only_viewer_pass   sM    d-.. 	?G66t<<<<<G88>>>>>r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddLintPassLLVMPY_function_AddLintPassrZ   s    r   add_lint_passzNewPassManager.add_lint_pass   M    d-.. 	6G--d33333G//55555r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddADCEPassLLVMPY_function_AddADCEPassrZ   s    r   add_aggressive_dce_passz&NewPassManager.add_aggressive_dce_pass   r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   'LLVMPY_module_AddBreakCriticalEdgesPass)LLVMPY_function_AddBreakCriticalEdgesPassrZ   s    r   add_break_critical_edges_passz,NewPassManager.add_break_critical_edges_pass   N    d-.. 	DG;;DAAAAAG==dCCCCCr   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddDSEPassLLVMPY_function_AddDSEPassrZ   s    r   add_dead_store_elimination_passz.NewPassManager.add_dead_store_elimination_pass   M    d-.. 	5G,,T22222G..t44444r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddDCEPassLLVMPY_function_AddDCEPassrZ   s    r   add_dead_code_elimination_passz-NewPassManager.add_dead_code_elimination_pass   r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   *LLVMPY_module_AddAggressiveInstCombinePass,LLVMPY_function_AddAggressiveInstCombinePassrZ   s    r   add_aggressive_instcombine_passz.NewPassManager.add_aggressive_instcombine_pass   sN    d-.. 	GG>>tDDDDDG@@FFFFFr   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddLCSSAPassLLVMPY_function_AddLCSSAPassrZ   s    r   add_lcssa_passzNewPassManager.add_lcssa_pass   r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddNewGVNPassLLVMPY_function_AddNewGVNPassrZ   s    r   add_new_gvn_passzNewPassManager.add_new_gvn_pass  r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   !LLVMPY_module_AddLoopSimplifyPass#LLVMPY_function_AddLoopSimplifyPassrZ   s    r   add_loop_simplify_passz%NewPassManager.add_loop_simplify_pass  M    d-.. 	>G55d;;;;;G77=====r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   %LLVMPY_module_AddLoopUnrollAndJamPass'LLVMPY_function_AddLoopUnrollAndJamPassrZ   s    r   add_loop_unroll_and_jam_passz+NewPassManager.add_loop_unroll_and_jam_pass  N    d-.. 	BG99$?????G;;DAAAAAr   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddSCCPPassLLVMPY_function_AddSCCPPassrZ   s    r   add_sccp_passzNewPassManager.add_sccp_pass  r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=    LLVMPY_module_AddLowerAtomicPass"LLVMPY_function_AddLowerAtomicPassrZ   s    r   add_lower_atomic_passz$NewPassManager.add_lower_atomic_pass  rk   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=    LLVMPY_module_AddLowerInvokePass"LLVMPY_function_AddLowerInvokePassrZ   s    r   add_lower_invoke_passz$NewPassManager.add_lower_invoke_pass   rk   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=    LLVMPY_module_AddLowerSwitchPass"LLVMPY_function_AddLowerSwitchPassrZ   s    r   add_lower_switch_passz$NewPassManager.add_lower_switch_pass&  rk   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddMemCpyOptPass LLVMPY_function_AddMemCpyOptPassrZ   s    r   add_mem_copy_opt_passz$NewPassManager.add_mem_copy_opt_pass,  r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   +LLVMPY_module_AddUnifyFunctionExitNodesPass-LLVMPY_function_AddUnifyFunctionExitNodesPassrZ   s    r   "add_unify_function_exit_nodes_passz1NewPassManager.add_unify_function_exit_nodes_pass2  sN    d-.. 	HG??EEEEEGAA$GGGGGr   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=    LLVMPY_module_AddReassociatePass"LLVMPY_function_AddReassociatePassrZ   s    r   add_reassociate_passz#NewPassManager.add_reassociate_pass8  rk   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddRegToMemPassLLVMPY_function_AddRegToMemPassrZ   s    r   add_register_to_memory_passz*NewPassManager.add_register_to_memory_pass>  sM    d-.. 	:G11$77777G33D99999r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddSROAPassLLVMPY_function_AddSROAPassrZ   s    r   add_sroa_passzNewPassManager.add_sroa_passD  r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddSinkingPassLLVMPY_function_AddSinkingPassrZ   s    r   add_sinking_passzNewPassManager.add_sinking_passJ  rf   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   !LLVMPY_module_AddTailCallElimPass#LLVMPY_function_AddTailCallElimPassrZ   s    r   add_tail_call_elimination_passz-NewPassManager.add_tail_call_elimination_passP  r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   %LLVMPY_module_AddInstructionNamerPass'LLVMPY_function_AddInstructionNamerPassrZ   s    r   add_instruction_namer_passz)NewPassManager.add_instruction_namer_passV  r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   !LLVMPY_module_AddLoopDeletionPass#LLVMPY_function_AddLoopDeletionPassrZ   s    r   add_loop_deletion_passz%NewPassManager.add_loop_deletion_pass\  r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   'LLVMPY_module_AddLoopStrengthReducePass)LLVMPY_function_AddLoopStrengthReducePassrZ   s    r   add_loop_strength_reduce_passz,NewPassManager.add_loop_strength_reduce_passb  r   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   LLVMPY_module_AddLoopRotatePass!LLVMPY_function_AddLoopRotatePassrZ   s    r   add_loop_rotate_passz#NewPassManager.add_loop_rotate_passh  rp   r   c                     t          | t                    r!t          j                            |            d S t          j                            |            d S r   )r&   r   r   r=   !LLVMPY_DisposeNewModulePassManger#LLVMPY_DisposeNewFunctionPassMangerrZ   s    r   _disposezNewPassManager._disposen  r   r   N)ru   ).r5   r6   r7   r[   ra   re   rj   ro   rt   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r   r   rX   rX   r   s       J J JC C C9 9 9= = =< < <= = =J J J J< < <@ @ @8 8 8< < << < <@ @ @7 7 7; ; ;; ; ;? ? ?6 6 66 6 6D D D5 5 55 5 5G G G7 7 78 8 8> > >B B B6 6 6= = == = == = =; ; ;H H H= = =: : :6 6 69 9 9> > >B B B> > >D D D< < <> > > > >r   rX   c                        e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej        dfdZ xZS )r   Nc                     |t           j                                        }t                                          |           d S r   )r   r=   !LLVMPY_CreateNewModulePassManagersuperr[   r/   ptr	__class__s     r   r[   zModulePassManager.__init__w  s9    ;';;==Cr   c                 D    t           j                            |            d S r   )r   r=   LLVMPY_module_AddVerifierPassrZ   s    r   add_verifierzModulePassManager.add_verifier|  s    --d33333r   c                 D    t           j                            |            d S r   )r   r=   "LLVMPY_module_AddConstantMergePassrZ   s    r   add_constant_merge_passz)ModulePassManager.add_constant_merge_pass      22488888r   c                 D    t           j                            |            d S r   )r   r=   ,LLVMPY_module_AddDeadArgumentEliminationPassrZ   s    r   add_dead_arg_elimination_passz/ModulePassManager.add_dead_arg_elimination_pass  s    <<TBBBBBr   c                 D    t           j                            |            d S r   )r   r=   (LLVMPY_module_AddCallGraphDOTPrinterPassrZ   s    r   add_dot_call_graph_printer_passz1ModulePassManager.add_dot_call_graph_printer_pass      88>>>>>r   c                 D    t           j                            |            d S r   )r   r=   +LLVMPY_module_AddModuleDebugInfoPrinterPassrZ   s    r   add_module_debug_info_passz,ModulePassManager.add_module_debug_info_pass      ;;DAAAAAr   c                 D    t           j                            |            d S r   )r   r=   "LLVMPY_module_AddAlwaysInlinerPassrZ   s    r   add_always_inliner_passz)ModulePassManager.add_always_inliner_pass  r!  r   c                 D    t           j                            |            d S r   )r   r=   2LLVMPY_module_AddReversePostOrderFunctionAttrsPassrZ   s    r   add_rpo_function_attrs_passz-ModulePassManager.add_rpo_function_attrs_pass  s    BB4HHHHHr   c                 D    t           j                            |            d S r   )r   r=   LLVMPY_module_AddGlobalDCEPassrZ   s    r   #add_global_dead_code_eliminate_passz5ModulePassManager.add_global_dead_code_eliminate_pass      ..t44444r   c                 D    t           j                            |            d S r   )r   r=   LLVMPY_module_AddGlobalOptPassrZ   s    r   add_global_opt_passz%ModulePassManager.add_global_opt_pass  r6  r   c                 D    t           j                            |            d S r   )r   r=   LLVMPY_module_AddIPSCCPPassrZ   s    r   add_ipsccp_passz!ModulePassManager.add_ipsccp_pass  s    ++D11111r   c                 D    t           j                            |            d S r   )r   r=    LLVMPY_module_AddInternalizePassrZ   s    r   add_internalize_passz&ModulePassManager.add_internalize_pass  s    0066666r   c                 D    t           j                            |            d S r   )r   r=   "LLVMPY_module_AddLoopExtractorPassrZ   s    r   add_loop_extract_passz'ModulePassManager.add_loop_extract_pass  r!  r   c                 D    t           j                            |            d S r   )r   r=   #LLVMPY_module_AddMergeFunctionsPassrZ   s    r   add_merge_functions_passz*ModulePassManager.add_merge_functions_pass      33D99999r   c                 D    t           j                            |            d S r   )r   r=   #LLVMPY_module_AddPartialInlinerPassrZ   s    r   add_partial_inliner_passz*ModulePassManager.add_partial_inliner_pass  rF  r   c                 D    t           j                            |            d S r   )r   r=   !LLVMPY_module_AddStripSymbolsPassrZ   s    r   add_strip_symbols_passz(ModulePassManager.add_strip_symbols_pass  s    11$77777r   c                 D    t           j                            |            d S r   )r   r=   'LLVMPY_module_AddStripDeadDebugInfoPassrZ   s    r   add_strip_dead_debug_info_passz0ModulePassManager.add_strip_dead_debug_info_pass  s    77=====r   c                 D    t           j                            |            d S r   )r   r=   (LLVMPY_module_AddStripDeadPrototypesPassrZ   s    r   add_strip_dead_prototype_passz/ModulePassManager.add_strip_dead_prototype_pass  r(  r   c                 D    t           j                            |            d S r   )r   r=   &LLVMPY_module_AddStripDebugDeclarePassrZ   s    r   add_strip_debug_declare_passz.ModulePassManager.add_strip_debug_declare_pass      66t<<<<<r   c                 D    t           j                            |            d S r   )r   r=   )LLVMPY_module_AddStripNonDebugSymbolsPassrZ   s    r    add_strip_non_debug_symbols_passz2ModulePassManager.add_strip_non_debug_symbols_pass  s    99$?????r   c                 D    t           j                            |            d S r   )r   r=   &LLVMPY_module_AddArgumentPromotionPassrZ   s    r   add_argument_promotion_passz-ModulePassManager.add_argument_promotion_pass  rV  r   c                 D    t           j                            |            d S r   )r   r=   +LLVMPY_module_AddPostOrderFunctionAttrsPassrZ   s    r   'add_post_order_function_attributes_passz9ModulePassManager.add_post_order_function_attributes_pass  r,  r     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)rN   r   r=   LLVMPY_AddRefPrunePass_moduler/   subpasses_flagssubgraph_limitiflagss       r   add_refprune_passz#ModulePassManager.add_refprune_pass  s1     #?33--dFNKKKKKr   r   )r5   r6   r7   r[   r  r   r$  r'  r+  r/  r2  r5  r9  r<  r?  rB  rE  rI  rL  rO  rR  rU  rY  r\  r_  rN   rV   rh  __classcell__r  s   @r   r   r   u  s            
4 4 49 9 9C C C? ? ?
B B B9 9 9I I I5 5 55 5 52 2 27 7 79 9 9: : :: : :8 8 8> > >? ? ?= = =@ @ @= = =B B B 1B0E)-L L L L L L L Lr   r   c                   6     e Zd Zd fd	Zej        dfdZ xZS )r   Nc                     |t           j                                        }t                                          |           d S r   )r   r=   #LLVMPY_CreateNewFunctionPassManagerr  r[   r  s     r   r[   zFunctionPassManager.__init__  s9    ;'==??Cr   r`  c                 f    t          |          }t          j                            | ||           dS rb  )rN   r   r=   LLVMPY_AddRefPrunePass_functionrd  s       r   rh  z%FunctionPassManager.add_refprune_pass  s1     #?33//fnMMMMMr   r   )r5   r6   r7   r[   rN   rV   rh  ri  rj  s   @r   r   r     se              1B0E)-N N N N N N N 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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)r/   r   r    r  s      r   r[   zPipelineTuningOptions.__init__  sN     &$CCEEFFFFFr   c                     | j         S r   )rr  rZ   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)
ValueErrorrr  r/   values     r   r   z!PipelineTuningOptions.speed_level  s?    EQFH H H!r   c                     | j         S r   )rs  rZ   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)rx  r   rs  ry  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_PTOGetLoopInterleavingrZ   s    r   loop_interleavingz'PipelineTuningOptions.loop_interleaving      w44T:::r   c                 F    t           j                            | |           d S r   )r   r=   LLVMPY_PTOSetLoopInterleavingry  s     r   r  z'PipelineTuningOptions.loop_interleaving       --dE:::::r   c                 @    t           j                            |           S r   )r   r=   LLVMPY_PTOGetLoopVectorizationrZ   s    r   loop_vectorizationz(PipelineTuningOptions.loop_vectorization  s    w55d;;;r   c                 F    t           j                            | |           d S r   )r   r=   LLVMPY_PTOSetLoopVectorizationry  s     r   r  z(PipelineTuningOptions.loop_vectorization  s     ..tU;;;;;r   c                 @    t           j                            |           S r   )r   r=   LLVMPY_PTOGetSLPVectorizationrZ   s    r   slp_vectorizationz'PipelineTuningOptions.slp_vectorization  r  r   c                 F    t           j                            | |           d S r   )r   r=   LLVMPY_PTOSetSLPVectorizationry  s     r   r  z'PipelineTuningOptions.slp_vectorization  r  r   c                 @    t           j                            |           S r   )r   r=   LLVMPY_PTOGetLoopUnrollingrZ   s    r   loop_unrollingz$PipelineTuningOptions.loop_unrolling#  s    w11$777r   c                 F    t           j                            | |           d S r   )r   r=   LLVMPY_PTOSetLoopUnrollingry  s     r   r  z$PipelineTuningOptions.loop_unrolling'  s     **477777r   c                 @    t           j                            |           S r   )r   r=   LLVMPY_PTOGetInlinerThresholdrZ   s    r   inlining_thresholdz(PipelineTuningOptions.inlining_threshold+  r  r   c                 F    t           j                            | |           d S r   )r   r=   LLVMPY_PTOSetInlinerThresholdry  s     r   r  z(PipelineTuningOptions.inlining_threshold/  r  r   c                 D    t           j                            |            d S r   )r   r=   #LLVMPY_DisposePipelineTuningOptionsrZ   s    r   r  zPipelineTuningOptions._dispose3  rF  r   r   r   )r5   r6   r7   r[   propertyr   setterr    r  r  r  r  r  r  ri  rj  s   @r   r   r     s       G G G G G G ! ! X! " " "     X  ! ! ! ; ; X; ; ; ; < < X< < < < ; ; X; ; ; ; 8 8 X8 8 8 8 ; ; X; ; ; ;: : : : : : :r   r   c                   $     e Zd Z fdZd Z xZS )TimePassesHandlerc                     t                                          t          j                                                   d S r   )r  r[   r   r=   LLVMPY_CreateTimePassesHandler)r/   r  s    r   r[   zTimePassesHandler.__init__8  s/    ??AABBBBBr   c                 D    t           j                            |            d S r   )r   r=   LLVMPY_DisposeTimePassesHandlerrZ   s    r   r  zTimePassesHandler._dispose;  s    //55555r   )r5   r6   r7   r[   r  ri  rj  s   @r   r  r  7  sL        C C C C C6 6 6 6 6 6 6r   r  c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )r   c                     t                                          t          j                            ||                     || _        || _        d | _        d S r   )r  r[   r   r=   LLVMPY_CreatePassBuilder_pto_tm_time_passes_handler)r/   r   r   r  s      r   r[   zPassBuilder.__init__A  sI    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    rZ   s    r   getModulePassManagerz PassBuilder.getModulePassManagerG  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    rZ   s    r   getFunctionPassManagerz"PassBuilder.getFunctionPassManagerM  s<    "G>>di+TY-AC C
 
 	
r   c                     | j         rt          d          t                      | _         t          j                            | | j                    dS )zEnable the pass timers.

        Raises
        ------
        RuntimeError
            If pass timing is already enabled.
        z!Pass timing can only be done onceN)r  RuntimeErrorr  r   r=   LLVMPY_EnableTimePassesrZ   s    r   start_pass_timingzPassBuilder.start_pass_timingS  sN     $ 	DBCCC$5$7$7!''d.GHHHHHr   c                     | j         st          d          t          j                    5 }t          j                            | j         |           t          |          cddd           S # 1 swxY w Y   dS )a:  Returns the pass timings report and disables the LLVM internal
        timers. Pass timers are enabled by ``start_pass_timing()``. If the
        timers are not enabled, this function will return an empty string.

        Returns
        -------
        res : str
            LLVM generated timing report.
        zPass timing is not enabledN)r  r  r   rH   r=   !LLVMPY_ReportAndDisableTimePassesrJ   )r/   rK   s     r   finish_pass_timingzPassBuilder.finish_pass_timing`  s     ( 	=;<<< 	3G55)30 0 0s88	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   4A++A/2A/c                 D    t           j                            |            d S r   )r   r=   LLVMPY_DisposePassBuilderrZ   s    r   r  zPassBuilder._disposes  s    ))$/////r   )
r5   r6   r7   r[   r  r  r  r  r  ri  rj  s   @r   r   r   ?  s        ) ) ) ) )
 
 

 
 
I I I  &0 0 0 0 0 0 0r   r   Nr  )F)ctypesr   r   r   r   r   r   r	   collectionsr
   enumr   llvmlite.bindingr   r   r   r   r!   _prunestatsr"   r:   rB   rF   rL   rN   rX   	ObjectRefr   r   r   r  r   r=   r>   argtypesrD   rI   LLVMModulePassManagerRefr  restypeLLVMModuleRefLLVMPassBuilderRefr]   r  rc   rh   rm   r  rr   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r#  r&  r*  r.  r1  r4  r8  r;  r>  rA  rD  rH  rK  rN  rQ  rT  rX  r[  r^  r  rc  LLVMFunctionPassManagerRefrm  LLVMValueRefr^   rd   ri   rn   rs   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  ro  LLVMPipelineTuningOptionsRefrt  r~  r  r  r  r  r  r  r  r  r  r  r  LLVMTargetMachineRefr  LLVMTimePassesHandlerRefr  r  r  r  r  r  r   r   r   <module>r     s@   O O O O O O O O O O O O O O O O O O " " " " " "                    ! ! !     : : : : jBE EB B B B B B B B0$ $ $ $ $I $ $ $* * * *&	1 	1 	1   3 3 3 3 3 3 3 3@> @> @> @> @> @> @> @>FXL XL XL XL XL~ XL XL XLvN N N N N#- N N N4J: J: J: J: J:CM J: J: J:Z6 6 6 6 6 6 6 650 50 50 50 50#- 50 50 50v .5W]-C-CV,L   ))/  %181B1B0C $ - 584P ) 1  #"33 & / 362N1P % .141M0O $ - 5# ( 1  4# ' 0  4# ' 0  5# ( 1  7# * 3  4# ' 0  8# + 4  0# # ,  4# ' 0  4# ' 0  8# + 4  /# " +  3# & /  3# & /  7# * 3  .# ! *  .# ! *  <# / 8  -#   )  -#   )  ?# 2 ;  /# " +  0# # ,  6# ) 2  :# - 6  .# ! *  5# ( 1  5# ( 1  5# ( 1  3# & /  @# 3 <  5# ( 1  2# % .  .# ! *  1# $ -  6# ) 2  :# - 6  6# ) 2  <# / 8  7$ * 3  A$ 4 =  =$ 0 9  @$ 3 <  7$ * 3  G$ : C  3$ & /  3$ & /  0$ # ,  5$ ( 1  7$ * 3  8$ + 4  8$ + 4  6$ ) 2  <$ / 8  =$ 0 9  ;$ . 7  >$ 1 :  ;$ . 7  @$ 3 <  6# ) 2  %2 % . "  + 3 "C$45 ( 1
 "3% & / "7% * 3 "6% ) 2 "7% * 3 "E9, , 5 "6& ) 2 ":& - 6 "2& % . "6& ) 2 "6& ) 2 ":& - 6 "1& $ - "5& ( 1 "5& ( 1 "9& , 5 "0& # , "0& # , ">& 1 : "/& " + "/& " + "A& 4 = "1& $ - "2& % . "8& + 4 "<& / 8 "0& # , "7& * 3 "7& * 3 "7& * 3 "5& ( 1 "B& 5 > "7& * 3 "4& ' 0 "0& # , "3& & / "8& + 4 "<& / 8 "6& ) 2 "8& + 4 ">& 1 : "8% + 4 "E84 ' 0 $  * 2 17 % -$2' % . $f2. % . 28 & .$3' & / $f3. & / 17 % -$2' % . $f2. % . .4 " *$/' " + $f/. " + 16 % - $e2- % . 	%'  + 4
 ,/+A   ($-   )
 /2.D-F ! *    & .  4# ' 0  ,  (  GH6 ) 2    , 4 E59* , 5 "  2 : E5?* 2 ; ; ;r   