
    |h                     +   S SK JrJrJrJrJrJrJr  S SKJ	r	  S SK
Jr  S SKJr  S rS rS rS S jr\	" S	S
5      r " S S	\5      r " S S\5      rS!S jrS rS r " S S\5      r " S S5      r " S S\R4                  \5      r " S S\R4                  \5      r " S S\R4                  5      r " S S\R4                  5      r " S S\R4                  5      r\" \5      \/\R@                  RB                  l"        \/\R@                  RF                  l"        \" \5      /\R@                  RH                  l"        \RJ                  \R@                  RL                  l'        \RJ                  \RP                  \RR                  /\R@                  RT                  l"        \RJ                  /\R@                  RV                  l"        \RJ                  /\R@                  RX                  l"        \RJ                  /\R@                  RZ                  l"        \RJ                  /\R@                  R\                  l"        \RJ                  /\R@                  R^                  l"        \RJ                  /\R@                  R`                  l"        \RJ                  /\R@                  Rb                  l"        \RJ                  /\R@                  Rd                  l"        \RJ                  /\R@                  Rf                  l"        \RJ                  /\R@                  Rh                  l"        \RJ                  /\R@                  Rj                  l"        \RJ                  /\R@                  Rl                  l"        \RJ                  /\R@                  Rn                  l"        \RJ                  /\R@                  Rp                  l"        \RJ                  /\R@                  Rr                  l"        \RJ                  /\R@                  Rt                  l"        \RJ                  /\R@                  Rv                  l"        \RJ                  /\R@                  Rx                  l"        \RJ                  /\R@                  Rz                  l"        \RJ                  /\R@                  R|                  l"        \RJ                  /\R@                  R~                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  /\R@                  R                  l"        \RJ                  \\/\R@                  R                  l"        \R                  \R@                  R                  l'        \R                  \R                  \RR                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  \/\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  R                  l"        \R                  /\R@                  GR                   l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR
                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                  l"        \R                  /\R@                  GR                   l"        \R                  /\R@                  GR"                  l"        \R                  /\R@                  GR$                  l"        \R                  /\R@                  GR&                  l"        \R                  /\R@                  GR(                  l"        \R                  /\R@                  GR*                  l"        \R                  /\R@                  GR,                  l"        \R                  \\/\R@                  GR.                  l"        \GR0                  \R@                  GR2                  l'        \\R@                  GR4                  l'        \GR0                  /\R@                  GR4                  l"        \GR0                  \/\R@                  GR6                  l"        \\R@                  GR8                  l'        \GR0                  /\R@                  GR8                  l"        \GR0                  \/\R@                  GR:                  l"        \\R@                  GR<                  l'        \GR0                  /\R@                  GR<                  l"        \GR0                  \/\R@                  GR>                  l"        \\R@                  GR@                  l'        \GR0                  /\R@                  GR@                  l"        \GR0                  \/\R@                  GRB                  l"        \\R@                  GRD                  l'        \GR0                  \/\R@                  GRF                  l"        \GR0                  /\R@                  GRH                  l"        \RR                  \R@                  GRJ                  l'        \GRL                  \GR0                  /\R@                  GRJ                  l"        \RR                  /\R@                  GRN                  l"        \GRP                  \R@                  GRR                  l'        \GRP                  /\R@                  GRT                  l"        \RR                  \GRP                  /\R@                  GRV                  l"        \GRP                  \" \5      /\R@                  GRX                  l"        \RJ                  \R@                  GRZ                  l'        \RR                  \\/\R@                  GRZ                  l"        \R                  \R@                  GR\                  l'        \RR                  \\/\R@                  GR\                  l"        g)"    )c_boolc_intc_size_tPOINTER	Structurebyrefc_char_p)
namedtuple)IntFlag)ffic                      [        5       $ N)ModulePassManager     Z/home/james-whalen/.local/lib/python3.13/site-packages/llvmlite/binding/newpassmanagers.pycreate_new_module_pass_managerr      s    r   c                      [        5       $ r   )FunctionPassManagerr   r   r    create_new_function_pass_managerr      s      r   c                     [        X5      $ r   )PassBuilder)tmptos     r   create_pass_builderr      s    rr   c                     [        X5      $ r   )PipelineTuningOptions)speed_level
size_levels     r   create_pipeline_tuning_optionsr       s     99r   
PruneStatsz&basicblock diamond fanout fanout_raisec                   $    \ rS rSrSrS rS rSrg)r!      z3Holds statistics from reference count pruning.
    c                 J   [        U[        5      (       d%  Sn[        UR                  [	        U5      5      5      e[        U R
                  UR
                  -   U R                  UR                  -   U R                  UR                  -   U R                  UR                  -   5      $ )Nz;PruneStats can only be added to another PruneStats, got {}.	
isinstancer!   	TypeErrorformattype
basicblockdiamondfanoutfanout_raiseselfothermsgs      r   __add__PruneStats.__add__   s    %,,OCCJJtE{344$//E,<,<<,,6++4++e.@.@@B 	Br   c                 J   [        U[        5      (       d%  Sn[        UR                  [	        U5      5      5      e[        U R
                  UR
                  -
  U R                  UR                  -
  U R                  UR                  -
  U R                  UR                  -
  5      $ )NzBPruneStats can only be subtracted from another PruneStats, got {}.r%   r.   s      r   __sub__PruneStats.__sub__(   s    %,,CCJJtE{344$//E,<,<<,,6++4++e.@.@@B 	Br   r   N)__name__
__module____qualname____firstlineno____doc__r2   r5   __static_attributes__r   r   r   r!   r!      s    BBr   c                   0    \ rS rSrS\4S\4S\4S\4/rSrg)_c_PruneStats3   r*   r+   r,   r-   r   N)r7   r8   r9   r:   r   _fields_r<   r   r   r   r>   r>   3   s)    	x 	H	8	"	$Hr   r>   c                     [        SSSS5      n[        U 5      n[        R                  R	                  [        U5      U5        [        UR                  UR                  UR                  UR                  5      $ )zReturns 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_statsrG   ;   s`     !Q1%EhHGG$$U5\8<e&&u||((* *r   c                 T    [         R                  R                  [        U 5      5        g)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   rB   LLVMPY_SetTimePassesr   )enables    r   set_time_passesrK   N   s     GG  0r   c                      [         R                  " 5        n [         R                  R                  U 5        [	        U 5      sSSS5        $ ! , (       d  f       g= f)zReturns 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   OutputStringrB   LLVMPY_ReportAndResetTimingsstr)bufs    r   report_and_reset_timingsrQ   Z   s7     
			s,,S13x 
		s   *A


Ac                   :    \ rS rSrSrSrSrSr\\-  \-  \-  rSr	g)RefPruneSubpassesj               r   N)
r7   r8   r9   r:   PER_BBDIAMONDFANOUTFANOUT_RAISEALLr<   r   r   r   rS   rS   j   s*    FGFL
7
V
#l
2Cr   rS   c                      \ rS rSrS rS rS rS rS rS r	S/S jr
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S-r/g.)0NewPassManagerr   c                 >    [        U 5      [        L a  [        S5      eg )Nz*Cannot instantiate NewPassManager directly)r)   r_   r'   r/   s    r   __init__NewPassManager.__init__t   s    :'HII (r   c                     [        U [        5      (       a!  [        R                  R	                  XU5        g [        R                  R                  XU5        g r   )r&   r   r   rB   LLVMPY_RunNewModulePassManager LLVMPY_RunNewFunctionPassManager)r/   IRpbs      r   runNewPassManager.runx   s8    d-..GG224R@GG44TrBr   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddAAEvaluatorLLVMPY_function_AddAAEvaluatorrb   s    r   add_aa_eval_passNewPassManager.add_aa_eval_pass~   4    d-..GG006GG2248r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB    LLVMPY_module_AddSimplifyCFGPass"LLVMPY_function_AddSimplifyCFGPassrb   s    r   add_simplify_cfg_pass$NewPassManager.add_simplify_cfg_pass   4    d-..GG44T:GG66t<r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddLoopUnrollPass!LLVMPY_function_AddLoopUnrollPassrb   s    r   add_loop_unroll_pass#NewPassManager.add_loop_unroll_pass   4    d-..GG33D9GG55d;r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB    LLVMPY_module_AddInstCombinePass"LLVMPY_function_AddInstCombinePassrb   s    r   add_instruction_combine_pass+NewPassManager.add_instruction_combine_pass   rw   r   c                     [        U [        5      (       a   [        R                  R	                  X5        g [        R                  R                  X5        g r   )r&   r   r   rB   "LLVMPY_AddJumpThreadingPass_module$LLVMPY_AddJumpThreadingPass_function)r/   	thresholds     r   add_jump_threading_pass&NewPassManager.add_jump_threading_pass   s4    d-..GG66tGGG88Ir   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddCFGPrinterPass!LLVMPY_function_AddCFGPrinterPassrb   s    r   add_cfg_printer_pass#NewPassManager.add_cfg_printer_pass   r}   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   #LLVMPY_module_AddCFGOnlyPrinterPass%LLVMPY_function_AddCFGOnlyPrinterPassrb   s    r   add_cfg_only_printer_pass(NewPassManager.add_cfg_only_printer_pass   4    d-..GG77=GG99$?r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddDomPrinterLLVMPY_function_AddDomPrinterrb   s    r   add_dom_printer_pass#NewPassManager.add_dom_printer_pass   4    d-..GG//5GG11$7r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddDomOnlyPrinter!LLVMPY_function_AddDomOnlyPrinterrb   s    r   add_dom_only_printer_pass(NewPassManager.add_dom_only_printer_pass   r}   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddPostDomPrinter!LLVMPY_function_AddPostDomPrinterrb   s    r   add_post_dom_printer_pass(NewPassManager.add_post_dom_printer_pass   r}   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   #LLVMPY_module_AddPostDomOnlyPrinter%LLVMPY_function_AddPostDomOnlyPrinterrb   s    r   add_post_dom_only_printer_pass-NewPassManager.add_post_dom_only_printer_pass   r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddDomViewerLLVMPY_function_AddDomViewerrb   s    r   add_dom_viewer_pass"NewPassManager.add_dom_viewer_pass   4    d-..GG..t4GG006r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddDomOnlyViewer LLVMPY_function_AddDomOnlyViewerrb   s    r   add_dom_only_viewer_pass'NewPassManager.add_dom_only_viewer_pass   4    d-..GG2248GG44T:r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddPostDomViewer LLVMPY_function_AddPostDomViewerrb   s    r   add_post_dom_viewer_pass'NewPassManager.add_post_dom_viewer_pass   r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   "LLVMPY_module_AddPostDomOnlyViewer$LLVMPY_function_AddPostDomOnlyViewerrb   s    r   add_post_dom_only_viewer_pass,NewPassManager.add_post_dom_only_viewer_pass   s4    d-..GG66t<GG88>r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddLintPassLLVMPY_function_AddLintPassrb   s    r   add_lint_passNewPassManager.add_lint_pass   4    d-..GG--d3GG//5r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddADCEPassLLVMPY_function_AddADCEPassrb   s    r   add_aggressive_dce_pass&NewPassManager.add_aggressive_dce_pass   r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   'LLVMPY_module_AddBreakCriticalEdgesPass)LLVMPY_function_AddBreakCriticalEdgesPassrb   s    r   add_break_critical_edges_pass,NewPassManager.add_break_critical_edges_pass   4    d-..GG;;DAGG==dCr   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddDSEPassLLVMPY_function_AddDSEPassrb   s    r   add_dead_store_elimination_pass.NewPassManager.add_dead_store_elimination_pass   4    d-..GG,,T2GG..t4r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddDCEPassLLVMPY_function_AddDCEPassrb   s    r   add_dead_code_elimination_pass-NewPassManager.add_dead_code_elimination_pass   r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   *LLVMPY_module_AddAggressiveInstCombinePass,LLVMPY_function_AddAggressiveInstCombinePassrb   s    r   add_aggressive_instcombine_pass.NewPassManager.add_aggressive_instcombine_pass   s4    d-..GG>>tDGG@@Fr   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddLCSSAPassLLVMPY_function_AddLCSSAPassrb   s    r   add_lcssa_passNewPassManager.add_lcssa_pass   r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddNewGVNPassLLVMPY_function_AddNewGVNPassrb   s    r   add_new_gvn_passNewPassManager.add_new_gvn_pass  r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   !LLVMPY_module_AddLoopSimplifyPass#LLVMPY_function_AddLoopSimplifyPassrb   s    r   add_loop_simplify_pass%NewPassManager.add_loop_simplify_pass  4    d-..GG55d;GG77=r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   %LLVMPY_module_AddLoopUnrollAndJamPass'LLVMPY_function_AddLoopUnrollAndJamPassrb   s    r   add_loop_unroll_and_jam_pass+NewPassManager.add_loop_unroll_and_jam_pass  4    d-..GG99$?GG;;DAr   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddSCCPPassLLVMPY_function_AddSCCPPassrb   s    r   add_sccp_passNewPassManager.add_sccp_pass  r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB    LLVMPY_module_AddLowerAtomicPass"LLVMPY_function_AddLowerAtomicPassrb   s    r   add_lower_atomic_pass$NewPassManager.add_lower_atomic_pass  rw   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB    LLVMPY_module_AddLowerInvokePass"LLVMPY_function_AddLowerInvokePassrb   s    r   add_lower_invoke_pass$NewPassManager.add_lower_invoke_pass   rw   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB    LLVMPY_module_AddLowerSwitchPass"LLVMPY_function_AddLowerSwitchPassrb   s    r   add_lower_switch_pass$NewPassManager.add_lower_switch_pass&  rw   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddMemCpyOptPass LLVMPY_function_AddMemCpyOptPassrb   s    r   add_mem_copy_opt_pass$NewPassManager.add_mem_copy_opt_pass,  r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   +LLVMPY_module_AddUnifyFunctionExitNodesPass-LLVMPY_function_AddUnifyFunctionExitNodesPassrb   s    r   "add_unify_function_exit_nodes_pass1NewPassManager.add_unify_function_exit_nodes_pass2  s4    d-..GG??EGGAA$Gr   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB    LLVMPY_module_AddReassociatePass"LLVMPY_function_AddReassociatePassrb   s    r   add_reassociate_pass#NewPassManager.add_reassociate_pass8  rw   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddRegToMemPassLLVMPY_function_AddRegToMemPassrb   s    r   add_register_to_memory_pass*NewPassManager.add_register_to_memory_pass>  s4    d-..GG11$7GG33D9r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddSROAPassLLVMPY_function_AddSROAPassrb   s    r   add_sroa_passNewPassManager.add_sroa_passD  r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddSinkingPassLLVMPY_function_AddSinkingPassrb   s    r   add_sinking_passNewPassManager.add_sinking_passJ  rq   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   !LLVMPY_module_AddTailCallElimPass#LLVMPY_function_AddTailCallElimPassrb   s    r   add_tail_call_elimination_pass-NewPassManager.add_tail_call_elimination_passP  r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   %LLVMPY_module_AddInstructionNamerPass'LLVMPY_function_AddInstructionNamerPassrb   s    r   add_instruction_namer_pass)NewPassManager.add_instruction_namer_passV  r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   !LLVMPY_module_AddLoopDeletionPass#LLVMPY_function_AddLoopDeletionPassrb   s    r   add_loop_deletion_pass%NewPassManager.add_loop_deletion_pass\  r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   'LLVMPY_module_AddLoopStrengthReducePass)LLVMPY_function_AddLoopStrengthReducePassrb   s    r   add_loop_strength_reduce_pass,NewPassManager.add_loop_strength_reduce_passb  r   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   LLVMPY_module_AddLoopRotatePass!LLVMPY_function_AddLoopRotatePassrb   s    r   add_loop_rotate_pass#NewPassManager.add_loop_rotate_passh  r}   r   c                     [        U [        5      (       a   [        R                  R	                  U 5        g [        R                  R                  U 5        g r   )r&   r   r   rB   !LLVMPY_DisposeNewModulePassManger#LLVMPY_DisposeNewFunctionPassMangerrb   s    r   _disposeNewPassManager._disposen  r   r   r   N))0r7   r8   r9   r:   rc   rj   ro   ru   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+  r0  r5  r:  r?  rD  r<   r   r   r   r_   r_   r   s    JC9=<=J<@8<<@7;;?66D55G78>B6===;H=:69>B>D<>r   r_   c                      ^  \ rS rSrSU 4S jjrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS r\R6                  S4S jrSrU =r$ )r   iu  c                 f   > Uc  [         R                  R                  5       n[        TU ]  U5        g r   )r   rB   !LLVMPY_CreateNewModulePassManagersuperrc   r/   ptr	__class__s     r   rc   ModulePassManager.__init__w  s'    ;'';;=Cr   c                 B    [         R                  R                  U 5        g r   )r   rB   LLVMPY_module_AddVerifierPassrb   s    r   add_verifierModulePassManager.add_verifier|  s    --d3r   c                 B    [         R                  R                  U 5        g r   )r   rB   "LLVMPY_module_AddConstantMergePassrb   s    r   add_constant_merge_pass)ModulePassManager.add_constant_merge_pass      2248r   c                 B    [         R                  R                  U 5        g r   )r   rB   ,LLVMPY_module_AddDeadArgumentEliminationPassrb   s    r   add_dead_arg_elimination_pass/ModulePassManager.add_dead_arg_elimination_pass  s    <<TBr   c                 B    [         R                  R                  U 5        g r   )r   rB   (LLVMPY_module_AddCallGraphDOTPrinterPassrb   s    r   add_dot_call_graph_printer_pass1ModulePassManager.add_dot_call_graph_printer_pass      88>r   c                 B    [         R                  R                  U 5        g r   )r   rB   +LLVMPY_module_AddModuleDebugInfoPrinterPassrb   s    r   add_module_debug_info_pass,ModulePassManager.add_module_debug_info_pass      ;;DAr   c                 B    [         R                  R                  U 5        g r   )r   rB   "LLVMPY_module_AddAlwaysInlinerPassrb   s    r   add_always_inliner_pass)ModulePassManager.add_always_inliner_pass  rW  r   c                 B    [         R                  R                  U 5        g r   )r   rB   2LLVMPY_module_AddReversePostOrderFunctionAttrsPassrb   s    r   add_rpo_function_attrs_pass-ModulePassManager.add_rpo_function_attrs_pass  s    BB4Hr   c                 B    [         R                  R                  U 5        g r   )r   rB   LLVMPY_module_AddGlobalDCEPassrb   s    r   #add_global_dead_code_eliminate_pass5ModulePassManager.add_global_dead_code_eliminate_pass      ..t4r   c                 B    [         R                  R                  U 5        g r   )r   rB   LLVMPY_module_AddGlobalOptPassrb   s    r   add_global_opt_pass%ModulePassManager.add_global_opt_pass  rr  r   c                 B    [         R                  R                  U 5        g r   )r   rB   LLVMPY_module_AddIPSCCPPassrb   s    r   add_ipsccp_pass!ModulePassManager.add_ipsccp_pass  s    ++D1r   c                 B    [         R                  R                  U 5        g r   )r   rB    LLVMPY_module_AddInternalizePassrb   s    r   add_internalize_pass&ModulePassManager.add_internalize_pass  s    006r   c                 B    [         R                  R                  U 5        g r   )r   rB   "LLVMPY_module_AddLoopExtractorPassrb   s    r   add_loop_extract_pass'ModulePassManager.add_loop_extract_pass  rW  r   c                 B    [         R                  R                  U 5        g r   )r   rB   #LLVMPY_module_AddMergeFunctionsPassrb   s    r   add_merge_functions_pass*ModulePassManager.add_merge_functions_pass      33D9r   c                 B    [         R                  R                  U 5        g r   )r   rB   #LLVMPY_module_AddPartialInlinerPassrb   s    r   add_partial_inliner_pass*ModulePassManager.add_partial_inliner_pass  r  r   c                 B    [         R                  R                  U 5        g r   )r   rB   !LLVMPY_module_AddStripSymbolsPassrb   s    r   add_strip_symbols_pass(ModulePassManager.add_strip_symbols_pass  s    11$7r   c                 B    [         R                  R                  U 5        g r   )r   rB   'LLVMPY_module_AddStripDeadDebugInfoPassrb   s    r   add_strip_dead_debug_info_pass0ModulePassManager.add_strip_dead_debug_info_pass  s    77=r   c                 B    [         R                  R                  U 5        g r   )r   rB   (LLVMPY_module_AddStripDeadPrototypesPassrb   s    r   add_strip_dead_prototype_pass/ModulePassManager.add_strip_dead_prototype_pass  r`  r   c                 B    [         R                  R                  U 5        g r   )r   rB   &LLVMPY_module_AddStripDebugDeclarePassrb   s    r   add_strip_debug_declare_pass.ModulePassManager.add_strip_debug_declare_pass      66t<r   c                 B    [         R                  R                  U 5        g r   )r   rB   )LLVMPY_module_AddStripNonDebugSymbolsPassrb   s    r    add_strip_non_debug_symbols_pass2ModulePassManager.add_strip_non_debug_symbols_pass  s    99$?r   c                 B    [         R                  R                  U 5        g r   )r   rB   &LLVMPY_module_AddArgumentPromotionPassrb   s    r   add_argument_promotion_pass-ModulePassManager.add_argument_promotion_pass  r  r   c                 B    [         R                  R                  U 5        g r   )r   rB   +LLVMPY_module_AddPostOrderFunctionAttrsPassrb   s    r   'add_post_order_function_attributes_pass9ModulePassManager.add_post_order_function_attributes_pass  re  r     c                 Z    [        U5      n[        R                  R                  XU5        g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)rS   r   rB   LLVMPY_AddRefPrunePass_moduler/   subpasses_flagssubgraph_limitiflagss       r   add_refprune_pass#ModulePassManager.add_refprune_pass  s"     #?3--dNKr   r   r   )r7   r8   r9   r:   rc   rQ  rU  rZ  r^  rc  rh  rl  rp  ru  ry  r}  r  r  r  r  r  r  r  r  r  r  rS   r]   r  r<   __classcell__rM  s   @r   r   r   u  s    
49C?
B9I55279::8>?=@=B 1B0E0E)-L Lr   r   c                   N   ^  \ rS rSrSU 4S jjr\R                  S4S jrSrU =r	$ )r   i  c                 f   > Uc  [         R                  R                  5       n[        TU ]  U5        g r   )r   rB   #LLVMPY_CreateNewFunctionPassManagerrJ  rc   rK  s     r   rc   FunctionPassManager.__init__  s'    ;''==?Cr   r  c                 Z    [        U5      n[        R                  R                  XU5        gr  )rS   r   rB   LLVMPY_AddRefPrunePass_functionr  s       r   r  %FunctionPassManager.add_refprune_pass  s"     #?3//nMr   r   r   )
r7   r8   r9   r:   rc   rS   r]   r  r<   r  r  s   @r   r   r     s#     1B0E0E)-N Nr   r   c                     ^  \ rS rSrSU 4S jjr\S 5       r\R                  S 5       r\S 5       r\R                  S 5       r\S 5       r	\	R                  S 5       r	\S	 5       r
\
R                  S
 5       r
\S 5       r\R                  S 5       r\S 5       r\R                  S 5       r\S 5       r\R                  S 5       rS rSrU =r$ )r   i  c                    > S U l         S U l        Xl        X l        [        TU ]  [        R                  R                  5       5        g r   )	_speed_level_size_levelr   r   rJ  rc   r   rB   "LLVMPY_CreatePipelineTuningOptions)r/   r   r   rM  s      r   rc   PipelineTuningOptions.__init__  s8     &$CCEFr   c                     U R                   $ r   )r  rb   s    r   r   !PipelineTuningOptions.speed_level  s       r   c                 D    SUs=::  a  S::  d  O  [        S5      eXl        g )Nr      z4Optimization level for speed should be 0, 1, 2, or 3)
ValueErrorr  r/   values     r   r   r    s%    EQFH H!r   c                     U R                   $ r   )r  rb   s    r   r    PipelineTuningOptions.size_level  s    r   c                     SUs=::  a  S::  d  O  [        S5      eUS:w  a  U R                  S:w  a  [        S5      eXl        g )Nr   rV   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   r    sE    EQOPPA:$**a/OQ Q r   c                 @    [         R                  R                  U 5      $ r   )r   rB   LLVMPY_PTOGetLoopInterleavingrb   s    r   loop_interleaving'PipelineTuningOptions.loop_interleaving      ww44T::r   c                 B    [         R                  R                  X5        g r   )r   rB   LLVMPY_PTOSetLoopInterleavingr  s     r   r  r        --d:r   c                 @    [         R                  R                  U 5      $ r   )r   rB   LLVMPY_PTOGetLoopVectorizationrb   s    r   loop_vectorization(PipelineTuningOptions.loop_vectorization  s    ww55d;;r   c                 B    [         R                  R                  X5        g r   )r   rB   LLVMPY_PTOSetLoopVectorizationr  s     r   r  r    s    ..t;r   c                 @    [         R                  R                  U 5      $ r   )r   rB   LLVMPY_PTOGetSLPVectorizationrb   s    r   slp_vectorization'PipelineTuningOptions.slp_vectorization  r  r   c                 B    [         R                  R                  X5        g r   )r   rB   LLVMPY_PTOSetSLPVectorizationr  s     r   r  r    r  r   c                 @    [         R                  R                  U 5      $ r   )r   rB   LLVMPY_PTOGetLoopUnrollingrb   s    r   loop_unrolling$PipelineTuningOptions.loop_unrolling#  s    ww11$77r   c                 B    [         R                  R                  X5        g r   )r   rB   LLVMPY_PTOSetLoopUnrollingr  s     r   r  r  '  s    **47r   c                 @    [         R                  R                  U 5      $ r   )r   rB   LLVMPY_PTOGetInlinerThresholdrb   s    r   inlining_threshold(PipelineTuningOptions.inlining_threshold+  r  r   c                 B    [         R                  R                  X5        g r   )r   rB   LLVMPY_PTOSetInlinerThresholdr  s     r   r  r  /  r  r   c                 B    [         R                  R                  U 5        g r   )r   rB   #LLVMPY_DisposePipelineTuningOptionsrb   s    r   rD  PipelineTuningOptions._dispose3  r  r   )r  r  r   r   rV   r   )r7   r8   r9   r:   rc   propertyr   setterr   r  r  r  r  r  rD  r<   r  r  s   @r   r   r     sU   G ! ! " "     ! ! ; ; ; ; < < < < ; ; ; ; 8 8 8 8 ; ; ; ;: :r   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )TimePassesHandleri7  c                 \   > [         TU ]  [        R                  R	                  5       5        g r   )rJ  rc   r   rB   LLVMPY_CreateTimePassesHandler)r/   rM  s    r   rc   TimePassesHandler.__init__8  s    ??ABr   c                 B    [         R                  R                  U 5        g r   )r   rB   LLVMPY_DisposeTimePassesHandlerrb   s    r   rD  TimePassesHandler._dispose;  s    //5r   r   )r7   r8   r9   r:   rc   rD  r<   r  r  s   @r   r  r  7  s    C6 6r   r  c                   F   ^  \ rS rSrU 4S jrS rS rS rS rS r	Sr
U =r$ )	r   i?  c                    > [         TU ]  [        R                  R	                  X5      5        X l        Xl        S U l        g r   )rJ  rc   r   rB   LLVMPY_CreatePassBuilder_pto_tm_time_passes_handler)r/   r   r   rM  s      r   rc   PassBuilder.__init__A  s1    99"BC	$(!r   c                     [        [        R                  R                  X R                  R
                  U R                  R                  5      5      $ r   )r   r   rB   $LLVMPY_buildPerModuleDefaultPipeliner  r   r   rb   s    r   getModulePassManager PassBuilder.getModulePassManagerG  s;     GG88ii++TYY-A-AC
 	
r   c                     [        [        R                  R                  X R                  R
                  U R                  R                  5      5      $ r   )r   r   rB   *LLVMPY_buildFunctionSimplificationPipeliner  r   r   rb   s    r   getFunctionPassManager"PassBuilder.getFunctionPassManagerM  s;    "GG>>ii++TYY-A-AC
 	
r   c                     U R                   (       a  [        S5      e[        5       U l         [        R                  R                  X R                   5        g)z[Enable the pass timers.

Raises
------
RuntimeError
    If pass timing is already enabled.
z!Pass timing can only be done onceN)r  RuntimeErrorr  r   rB   LLVMPY_EnableTimePassesrb   s    r   start_pass_timingPassBuilder.start_pass_timingS  s<     $$BCC$5$7!''.G.GHr   c                    U R                   (       d  [        S5      e[        R                  " 5        n[        R                  R                  U R                   U5        [        U5      sSSS5        $ ! , (       d  f       g= f)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   rM   rB   !LLVMPY_ReportAndDisableTimePassesrO   )r/   rP   s     r   finish_pass_timingPassBuilder.finish_pass_timing`  sW     ((;<<3GG55))30s8  s   5A11
A?c                 B    [         R                  R                  U 5        g r   )r   rB   LLVMPY_DisposePassBuilderrb   s    r   rD  PassBuilder._disposes  s    ))$/r   )r  r  r  )r7   r8   r9   r:   rc   r  r  r  r  rD  r<   r  r  s   @r   r   r   ?  s'    )

I&0 0r   r   Nr  )F)ctypesr   r   r   r   r   r   r	   collectionsr
   enumr   llvmlite.bindingr   r   r   r   r    _prunestatsr!   r>   rG   rK   rQ   rS   r_   	ObjectRefr   r   r   r  r   rB   rC   argtypesrI   rN   LLVMModulePassManagerRefrI  restypeLLVMModuleRefLLVMPassBuilderRefrf   rP  rm   rs   ry   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.  r3  r8  rT  rY  r]  rb  rg  rk  ro  rt  rx  r|  r  r  r  r  r  r  r  r  r  r  rB  r  LLVMFunctionPassManagerRefr  LLVMValueRefrg   rn   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>  r4  r9  rC  r  LLVMPipelineTuningOptionsRefr  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 "   ! : BEB B0$I $*&	1 3 3@> @>FXL~ XLvN#-- N4J:CMM J:Z6 650#-- 50v .5]-CV,L     ))/   %181B0C $ $ - 584P4P ) ) 1   #"3"33 & & / 362N2N1P % % .141M1M0O $ $ -  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 2 ;   /# " " +   0# # # ,   6# ) ) 2   :# - - 6   .# ! ! *   5# ( ( 1   5# ( ( 1   5# ( ( 1   3# & & /   @# 3 3 <   5# ( ( 1   2# % % .   .# ! ! *   1# $ $ -   6# ) ) 2   :# - - 6   6# ) ) 2   <# / / 8   7$ * * 3   A$ 4 4 =   =$ 0 0 9   @$ 3 3 <   7$ * * 3   G$ : : C   3$ & & /   3$ & & /   0$ # # ,   5$ ( ( 1   7$ * * 3   8$ + + 4   8$ + + 4   6$ ) ) 2   <$ / / 8   =$ 0 0 9   ;$ . . 7   >$ 1 1 :   ;$ . . 7   @$ 3 3 <   6# ) ) 2   %2 % % . ""  + + 3 ""C$4$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 1 : ""/& " " + ""/& " " + ""A& 4 4 = ""1& $ $ - ""2& % % . ""8& + + 4 ""<& / / 8 ""0& # # , ""7& * * 3 ""7& * * 3 ""7& * * 3 ""5& ( ( 1 ""B& 5 5 > ""7& * * 3 ""4& ' ' 0 ""0& # # , ""3& & & / ""8& + + 4 ""<& / / 8 ""6& ) ) 2 ""8& + + 4 "">& 1 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+A     ($$-     )
 /2.D.D-F ! ! *     & & .   4# ' ' 0   ,   (   H6 ) ) 2     , , 4 E59* , , 5 ""  2 2 : E5?* 2 2 ;r   