
    sh                        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 SKJr  S SKrS SKJr  S SKJr  \S    r\	" S	S
5      r " S S	\5      r " S S\5      rSS jrS rS rS rS r " S S\5      r " S S\R>                  5      r  " S S\ 5      r! " S S\ 5      r"\RF                  \RH                  RJ                  l&        \RN                  /\RH                  RP                  l)        \RF                  \RH                  RP                  l&        \RF                  /\RH                  RT                  l)        \RF                  \RN                  /\RH                  RV                  l)        \\RH                  RV                  l&        \RF                  \RN                  \\\/\RH                  RX                  l)        \\RH                  RX                  l&        \RF                  /\RH                  RZ                  l)        \\RH                  RZ                  l&        \RF                  /\RH                  R\                  l)        \\RH                  R\                  l&        \RF                  \R^                  /\RH                  R`                  l)        \\RH                  R`                  l&        \RF                  \R^                  \\\/\RH                  Rb                  l)        \\RH                  Rb                  l&        \RF                  /\RH                  Rd                  l)        \RF                  /\RH                  Rf                  l)        \RF                  /\RH                  Rh                  l)        \RF                  /\RH                  Rj                  l)        \RF                  /\RH                  Rl                  l)        \RF                  /\RH                  Rn                  l)        \RF                  /\RH                  Rp                  l)        \RF                  \/\RH                  Rr                  l)        \RF                  \/\RH                  Rt                  l)        \RF                  /\RH                  Rv                  l)        \RF                  /\RH                  Rx                  l)        \RF                  /\RH                  Rz                  l)        \RF                  /\RH                  R|                  l)        \RF                  /\RH                  R~                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  \/\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \S:  a&  \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  \\/\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \S:  a&  \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  \/\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  \/\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  \/\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  \/\RH                  R                  l)        \RF                  /\RH                  R                  l)        \RF                  \\/\RH                  R                  l)        \" \5      \/\RH                  R                  l)        g)    )c_boolc_char_pc_intc_size_t	StructurebyrefPOINTER)
namedtuple)IntFlag)ffi)llvm_version_infoN)mkstemp)_encode_string
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      q/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/llvmlite/binding/passmanagers.py__add__PruneStats.__add__   s    %,,OCCJJtE{344$//E,<,<<,,6++4++e.@.@@B 	B    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$    N)__name__
__module____qualname____firstlineno____doc__r"   r&   __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_PruneStats)   r   r   r   r   r(   N)r)   r*   r+   r,   r   _fields_r.   r(   r$   r!   r0   r0   )   s)    	x 	H	8	"	$Hr$   r0   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   )r0   r   r   libLLVMPY_DumpRefPruneStatsr   r   r   r   r   r   )printoutstatsdo_prints      r!   dump_refprune_statsr9   1   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   r4   LLVMPY_SetTimePassesr   )enables    r!   set_time_passesr=   ?   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   OutputStringr4   LLVMPY_ReportAndResetTimingsstr)bufs    r!   report_and_reset_timingsrC   K   s7     
			s,,S13x 
		s   *A


Ac                      [        5       $ N)ModulePassManagerr(   r$   r!   create_module_pass_managerrG   [   s    r$   c                     [        U 5      $ rE   )FunctionPassManager)modules    r!   create_function_pass_managerrK   _   s    v&&r$   c                   :    \ rS rSrSrSrSrSr\\-  \-  \-  rSr	g)RefPruneSubpassesc               r(   N)
r)   r*   r+   r,   PER_BBDIAMONDFANOUTFANOUT_RAISEALLr.   r(   r$   r!   rM   rM   c   s*    FGFL
7
V
#l
2Cr$   rM   c                      \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSLS jrSLS jrS rS rS rS rS rS rS rS rSMS jrSNS 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$SOS# jr%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1  SPS0 jr2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8S7 r9S8 r:S9 r;S: r<S; r=S< r>SLS= jr?S> r@S? rAS@ rBSA rCSB rDSC rESD rFSE rGSF rHSG rI\JR                  SH4SI jrLSJrMgK)QPassManagerk   zPassManager
    c                 :    U R                   R                  U 5        g rE   )_capiLLVMPY_DisposePassManagerr   s    r!   _disposePassManager._disposeo   s    

,,T2r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#aa-eval-exhaustive-alias-analysis-precision-evaluator

LLVM 14: `llvm::createAAEvalPass`
N)r   r4   LLVMPY_AddAAEvalPassr^   s    r!   add_aa_eval_passPassManager.add_aa_eval_passr        	$$T*r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#basic-aa-basic-alias-analysis-stateless-aa-impl

LLVM 14: `llvm::createBasicAAWrapperPass`
N)r   r4   LLVMPY_AddBasicAAWrapperPassr^   s    r!   add_basic_aa_passPassManager.add_basic_aa_passz        	,,T2r$   c                 B    [         R                  R                  U 5        g)zw
See http://llvm.org/docs/Passes.html#constmerge-merge-duplicate-global-constants

LLVM 14: `LLVMAddConstantMergePass`
N)r   r4   LLVMPY_AddConstantMergePassr^   s    r!   add_constant_merge_pass#PassManager.add_constant_merge_pass        	++D1r$   c                 B    [         R                  R                  U 5        g)zv
See http://llvm.org/docs/Passes.html#deadargelim-dead-argument-elimination

LLVM 14: `LLVMAddDeadArgEliminationPass`
N)r   r4    LLVMPY_AddDeadArgEliminationPassr^   s    r!   add_dead_arg_elimination_pass)PassManager.add_dead_arg_elimination_pass        	006r$   c                 B    [         R                  R                  U 5        g)zt
See https://llvm.org/docs/Passes.html#da-dependence-analysis

LLVM 14: `llvm::createDependenceAnalysisWrapperPass`
N)r   r4    LLVMPY_AddDependenceAnalysisPassr^   s    r!   add_dependence_analysis_pass(PassManager.add_dependence_analysis_pass   rt   r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#dot-callgraph-print-call-graph-to-dot-file

LLVM 14: `llvm::createCallGraphDOTPrinterPass`
N)r   r4   !LLVMPY_AddCallGraphDOTPrinterPassr^   s    r!   add_dot_call_graph_pass#PassManager.add_dot_call_graph_pass        	11$7r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#dot-cfg-print-cfg-of-function-to-dot-file

LLVM 14: `llvm::createCFGPrinterLegacyPassPass`
N)r   r4   LLVMPY_AddCFGPrinterPassr^   s    r!   add_dot_cfg_printer_pass$PassManager.add_dot_cfg_printer_pass        	((.r$   c                 B    [         R                  R                  X5        g)z
See https://llvm.org/docs/Passes.html#dot-dom-print-dominance-tree-of-function-to-dot-file

LLVM 14: `llvm::createDomPrinterPass` and `llvm::createDomOnlyPrinterPass`
N)r   r4   LLVMPY_AddDotDomPrinterPassr   	show_bodys     r!   add_dot_dom_printer_pass$PassManager.add_dot_dom_printer_pass        	++D<r$   c                 B    [         R                  R                  X5        g)z
See https://llvm.org/docs/Passes.html#dot-postdom-print-postdominance-tree-of-function-to-dot-file

LLVM 14: `llvm::createPostDomPrinterPass` and `llvm::createPostDomOnlyPrinterPass`
N)r   r4   LLVMPY_AddDotPostDomPrinterPassr   s     r!   add_dot_postdom_printer_pass(PassManager.add_dot_postdom_printer_pass   s     	//@r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#globalsmodref-aa-simple-mod-ref-analysis-for-globals

LLVM 14: `llvm::createGlobalsAAWrapperPass`
N)r   r4   LLVMPY_AddGlobalsModRefAAPassr^   s    r!   add_globals_mod_ref_aa_pass'PassManager.add_globals_mod_ref_aa_pass        	--d3r$   c                 B    [         R                  R                  U 5        g)zm
See https://llvm.org/docs/Passes.html#iv-users-induction-variable-users

LLVM 14: `llvm::createIVUsersPass`
N)r   r4   LLVMPY_AddIVUsersPassr^   s    r!   add_iv_users_passPassManager.add_iv_users_pass   s     	%%d+r$   c                 B    [         R                  R                  U 5        g)zv
See https://llvm.org/docs/Passes.html#lint-statically-lint-checks-llvm-ir

LLVM 14: `llvm::createLintLegacyPassPass`
N)r   r4   LLVMPY_AddLintPassr^   s    r!   add_lint_passPassManager.add_lint_pass        	""4(r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#lazy-value-info-lazy-value-information-analysis

LLVM 14: `llvm::createLazyValueInfoPass`
N)r   r4   LLVMPY_AddLazyValueInfoPassr^   s    r!   add_lazy_value_info_pass$PassManager.add_lazy_value_info_pass   ro   r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#module-debuginfo-decodes-module-level-debug-info

LLVM 14: `llvm::createModuleDebugInfoPrinterPass`
N)r   r4   $LLVMPY_AddModuleDebugInfoPrinterPassr^   s    r!   add_module_debug_info_pass&PassManager.add_module_debug_info_pass        	44T:r$   c                 B    [         R                  R                  U 5        g)z~
See https://llvm.org/docs/Passes.html#regions-detect-single-entry-single-exit-regions

LLVM 14: `llvm::createRegionInfoPass`
N)r   r4   LLVMPY_AddRegionInfoPassr^   s    r!   add_region_info_pass PassManager.add_region_info_pass   r   r$   c                 B    [         R                  R                  U 5        g)z~
See https://llvm.org/docs/Passes.html#scev-aa-scalarevolution-based-alias-analysis

LLVM 14: `llvm::createSCEVAAWrapperPass`
N)r   r4   LLVMPY_AddScalarEvolutionAAPassr^   s    r!   add_scalar_evolution_aa_pass(PassManager.add_scalar_evolution_aa_pass        	//5r$   c                 B    [         R                  R                  U 5        g)zw
See https://llvm.org/docs/Passes.html#adce-aggressive-dead-code-elimination

LLVM 14: `llvm::createAggressiveDCEPass`
N)r   r4   LLVMPY_AddAggressiveDCEPassr^   s    r!   )add_aggressive_dead_code_elimination_pass5PassManager.add_aggressive_dead_code_elimination_pass   ro   r$   c                 B    [         R                  R                  X5        g)z
See https://llvm.org/docs/Passes.html#always-inline-inliner-for-always-inline-functions

LLVM 14: `llvm::createAlwaysInlinerLegacyPass`
N)r   r4   LLVMPY_AddAlwaysInlinerPass)r   insert_lifetimes     r!   add_always_inliner_pass#PassManager.add_always_inliner_pass   s     	++DBr$   c                     [        S5      e)z
See https://llvm.org/docs/Passes.html#argpromotion-promote-by-reference-arguments-to-scalars

LLVM 14: `llvm::createArgumentPromotionPass`
z.ArgumentPromotionPass unavailable in LLVM > 14)RuntimeError)r   max_elementss     r!   add_arg_promotion_pass"PassManager.add_arg_promotion_pass  s     KLLr$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#break-crit-edges-break-critical-edges-in-cfg

LLVM 14: `llvm::createBreakCriticalEdgesPass`
N)r   r4    LLVMPY_AddBreakCriticalEdgesPassr^   s    r!   add_break_critical_edges_pass)PassManager.add_break_critical_edges_pass
  rt   r$   c                 B    [         R                  R                  U 5        g)zs
See https://llvm.org/docs/Passes.html#dse-dead-store-elimination

LLVM 14: `llvm::createDeadStoreEliminationPass`
N)r   r4   "LLVMPY_AddDeadStoreEliminationPassr^   s    r!   add_dead_store_elimination_pass+PassManager.add_dead_store_elimination_pass       	2248r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#function-attrs-deduce-function-attributes

LLVM 14: `llvm::createReversePostOrderFunctionAttrsPass`
N)r   r4   +LLVMPY_AddReversePostOrderFunctionAttrsPassr^   s    r!   *add_reverse_post_order_function_attrs_pass6PassManager.add_reverse_post_order_function_attrs_pass  s     	;;DAr$   c                 B    [         R                  R                  U 5        g)zt
See http://llvm.org/docs/Passes.html#functionattrs-deduce-function-attributes

LLVM 14: `LLVMAddFunctionAttrsPass`
N)r   r4   LLVMPY_AddFunctionAttrsPassr^   s    r!   add_function_attrs_pass#PassManager.add_function_attrs_pass"  ro   r$   c                 B    [         R                  R                  X5        g)zr
See http://llvm.org/docs/Passes.html#inline-function-integration-inlining

LLVM 14: `createFunctionInliningPass`
N)r   r4   LLVMPY_AddFunctionInliningPassr   	thresholds     r!   add_function_inlining_pass&PassManager.add_function_inlining_pass*  s     	..t?r$   c                 B    [         R                  R                  U 5        g)zi
See http://llvm.org/docs/Passes.html#globaldce-dead-global-elimination

LLVM 14: `LLVMAddGlobalDCEPass`
N)r   r4   LLVMPY_AddGlobalDCEPassr^   s    r!   add_global_dce_passPassManager.add_global_dce_pass2  s     	''-r$   c                 B    [         R                  R                  U 5        g)zq
See http://llvm.org/docs/Passes.html#globalopt-global-variable-optimizer

LLVM 14: `LLVMAddGlobalOptimizerPass`
N)r   r4   LLVMPY_AddGlobalOptimizerPassr^   s    r!   add_global_optimizer_pass%PassManager.add_global_optimizer_pass:  r   r$   c                 B    [         R                  R                  U 5        g)z
See http://llvm.org/docs/Passes.html#ipsccp-interprocedural-sparse-conditional-constant-propagation

LLVM 14: `LLVMAddIPSCCPPass`
N)r   r4   LLVMPY_AddIPSCCPPassr^   s    r!   add_ipsccp_passPassManager.add_ipsccp_passB  re   r$   c                 B    [         R                  R                  U 5        g)zo
See http://llvm.org/docs/Passes.html#dce-dead-code-elimination
LLVM 14: `llvm::createDeadCodeEliminationPass`
N)r   r4   !LLVMPY_AddDeadCodeEliminationPassr^   s    r!   add_dead_code_elimination_pass*PassManager.add_dead_code_elimination_passJ  s    
 	11$7r$   c                 p    [         S:  a  Sn[        U5      e[        R                  R	                  U 5        g)z
See https://llvm.org/docs/Passes.html#aggressive-instcombine-combine-expression-patterns

LLVM 14: `llvm::createAggressiveInstCombinerPass`
   z4AggressiveInstrCombinerPass unavailable in LLVM > 15N)llvm_version_majorr   r   r4   ,LLVMPY_AddAggressiveInstructionCombiningPass)r   r    s     r!   )add_aggressive_instruction_combining_pass5PassManager.add_aggressive_instruction_combining_passQ  s.     "HCs##<<TBr$   c                 B    [         R                  R                  U 5        g)zv
See https://llvm.org/docs/Passes.html#internalize-internalize-global-symbols

LLVM 14: `llvm::createInternalizePass`
N)r   r4   LLVMPY_AddInternalizePassr^   s    r!   add_internalize_pass PassManager.add_internalize_pass]       	))$/r$   c                 B    [         R                  R                  U 5        g)zl
See http://llvm.org/docs/Passes.html#simplifycfg-simplify-the-cfg

LLVM 14: `LLVMAddCFGSimplificationPass`
N)r   r4   LLVMPY_AddCFGSimplificationPassr^   s    r!   add_cfg_simplification_pass'PassManager.add_cfg_simplification_passe  r   r$   c                 B    [         R                  R                  X5        g)zo
See https://llvm.org/docs/Passes.html#jump-threading-jump-threading

LLVM 14: `llvm::createJumpThreadingPass`
N)r   r4   LLVMPY_AddJumpThreadingPassr   s     r!   add_jump_threading_pass#PassManager.add_jump_threading_passm  r   r$   c                 B    [         R                  R                  U 5        g)zi
See https://llvm.org/docs/Passes.html#lcssa-loop-closed-ssa-form-pass

LLVM 14: `llvm::createLCSSAPass`
N)r   r4   LLVMPY_AddLCSSAPassr^   s    r!   add_lcssa_passPassManager.add_lcssa_passu  s     	##D)r$   c                 B    [         R                  R                  U 5        g)z\
See http://llvm.org/docs/Passes.html#gvn-global-value-numbering

LLVM 14: `LLVMAddGVNPass`
N)r   r4   LLVMPY_AddGVNPassr^   s    r!   add_gvn_passPassManager.add_gvn_pass}  s     	!!$'r$   c                 B    [         R                  R                  U 5        g)ze
See http://llvm.org/docs/Passes.html#passes-instcombine

LLVM 14: `LLVMAddInstructionCombiningPass`
N)r   r4   "LLVMPY_AddInstructionCombiningPassr^   s    r!   add_instruction_combining_pass*PassManager.add_instruction_combining_pass  r   r$   c                 B    [         R                  R                  U 5        g)zb
See http://llvm.org/docs/Passes.html#licm-loop-invariant-code-motion

LLVM 14: `LLVMAddLICMPass`
N)r   r4   LLVMPY_AddLICMPassr^   s    r!   add_licm_passPassManager.add_licm_pass  r   r$   c                 B    [         R                  R                  U 5        g)zp
See https://llvm.org/docs/Passes.html#loop-deletion-delete-dead-loops

LLVM 14: `llvm::createLoopDeletionPass`
N)r   r4   LLVMPY_AddLoopDeletionPassr^   s    r!   add_loop_deletion_pass"PassManager.add_loop_deletion_pass       	**40r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#loop-extract-extract-loops-into-new-functions

LLVM 14: `llvm::createLoopExtractorPass`
N)r   r4   LLVMPY_AddLoopExtractorPassr^   s    r!   add_loop_extractor_pass#PassManager.add_loop_extractor_pass  ro   r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#loop-extract-single-extract-at-most-one-loop-into-a-new-function

LLVM 14: `llvm::createSingleLoopExtractorPass`
N)r   r4   !LLVMPY_AddSingleLoopExtractorPassr^   s    r!   add_single_loop_extractor_pass*PassManager.add_single_loop_extractor_pass  r}   r$   c                 B    [         R                  R                  U 5        g)zo
See http://llvm.org/docs/Passes.html#sccp-sparse-conditional-constant-propagation

LLVM 14: `LLVMAddSCCPPass`
N)r   r4   LLVMPY_AddSCCPPassr^   s    r!   add_sccp_passPassManager.add_sccp_pass  r   r$   c                 B    [         R                  R                  U 5        g)zz
See https://llvm.org/docs/Passes.html#loop-reduce-loop-strength-reduction

LLVM 14: `llvm::createLoopStrengthReducePass`
N)r   r4    LLVMPY_AddLoopStrengthReducePassr^   s    r!   add_loop_strength_reduce_pass)PassManager.add_loop_strength_reduce_pass  rt   r$   c                 B    [         R                  R                  U 5        g)zy
See https://llvm.org/docs/Passes.html#loop-simplify-canonicalize-natural-loops

LLVM 14: `llvm::createLoopSimplifyPass`
N)r   r4    LLVMPY_AddLoopSimplificationPassr^   s    r!   add_loop_simplification_pass(PassManager.add_loop_simplification_pass  rt   r$   c                 B    [         R                  R                  U 5        g)zb
See https://llvm.org/docs/Passes.html#loop-unroll-unroll-loops

LLVM 14: `LLVMAddLoopUnrollPass`
N)r   r4   LLVMPY_AddLoopUnrollPassr^   s    r!   add_loop_unroll_pass PassManager.add_loop_unroll_pass  r   r$   c                 B    [         R                  R                  U 5        g)zx
See https://llvm.org/docs/Passes.html#loop-unroll-and-jam-unroll-and-jam-loops

LLVM 14: `LLVMAddLoopUnrollAndJamPass`
N)r   r4   LLVMPY_AddLoopUnrollAndJamPassr^   s    r!   add_loop_unroll_and_jam_pass(PassManager.add_loop_unroll_and_jam_pass       	..t4r$   c                 D    [         R                  R                  XU5        g)z
See https://llvm.org/docs/Passes.html#loop-unswitch-unswitch-loops

LLVM 14: `llvm::createLoopUnswitchPass`
LLVM 15: `llvm::createSimpleLoopUnswitchLegacyPass`
N)r   r4   LLVMPY_AddLoopUnswitchPass)r   optimize_for_sizehas_branch_divergences      r!   add_loop_unswitch_pass"PassManager.add_loop_unswitch_pass  s     	**4+@	Br$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#loweratomic-lower-atomic-intrinsics-to-non-atomic-form

LLVM 14: `llvm::createLowerAtomicPass`
N)r   r4   LLVMPY_AddLowerAtomicPassr^   s    r!   add_lower_atomic_pass!PassManager.add_lower_atomic_pass  r   r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#lowerinvoke-lower-invokes-to-calls-for-unwindless-code-generators

LLVM 14: `llvm::createLowerInvokePass`
N)r   r4   LLVMPY_AddLowerInvokePassr^   s    r!   add_lower_invoke_pass!PassManager.add_lower_invoke_pass  r   r$   c                 B    [         R                  R                  U 5        g)zy
See https://llvm.org/docs/Passes.html#lowerswitch-lower-switchinsts-to-branches

LLVM 14: `llvm::createLowerSwitchPass`
N)r   r4   LLVMPY_AddLowerSwitchPassr^   s    r!   add_lower_switch_pass!PassManager.add_lower_switch_pass  r   r$   c                 B    [         R                  R                  U 5        g)zk
See https://llvm.org/docs/Passes.html#memcpyopt-memcpy-optimization

LLVM 14: `llvm::createMemCpyOptPass`
N)r   r4    LLVMPY_AddMemCpyOptimizationPassr^   s    r!   add_memcpy_optimization_pass(PassManager.add_memcpy_optimization_pass  rt   r$   c                 B    [         R                  R                  U 5        g)zl
See https://llvm.org/docs/Passes.html#mergefunc-merge-functions

LLVM 14: `llvm::createMergeFunctionsPass`
N)r   r4   LLVMPY_AddMergeFunctionsPassr^   s    r!   add_merge_functions_pass$PassManager.add_merge_functions_pass  rj   r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#mergereturn-unify-function-exit-nodes

LLVM 14: `llvm::createUnifyFunctionExitNodesPass`
N)r   r4   LLVMPY_AddMergeReturnsPassr^   s    r!   add_merge_returns_pass"PassManager.add_merge_returns_pass	  r
  r$   c                 B    [         R                  R                  U 5        g)zs
See https://llvm.org/docs/Passes.html#partial-inliner-partial-inliner

LLVM 14: `llvm::createPartialInliningPass`
N)r   r4   LLVMPY_AddPartialInliningPassr^   s    r!   add_partial_inlining_pass%PassManager.add_partial_inlining_pass  r   r$   c                 l    [         S:  a  [        S5      e[        R                  R	                  U 5        g)zz
See https://llvm.org/docs/Passes.html#prune-eh-remove-unused-exception-handling-info

LLVM 14: `llvm::createPruneEHPass`
r   z$PruneEHPass unavailable in LLVM > 15N)r   r   r   r4   $LLVMPY_AddPruneExceptionHandlingPassr^   s    r!   !add_prune_exception_handling_pass-PassManager.add_prune_exception_handling_pass  s*     "EFF44T:r$   c                 B    [         R                  R                  U 5        g)zs
See https://llvm.org/docs/Passes.html#reassociate-reassociate-expressions

LLVM 14: `llvm::createReassociatePass`
N)r   r4   LLVMPY_AddReassociatePassr^   s    r!    add_reassociate_expressions_pass,PassManager.add_reassociate_expressions_pass#  r   r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#rel-lookup-table-converter-relative-lookup-table-converter

LLVM 14: `llvm::createDemoteRegisterToMemoryPass`
N)r   r4   $LLVMPY_AddDemoteRegisterToMemoryPassr^   s    r!   "add_demote_register_to_memory_pass.PassManager.add_demote_register_to_memory_pass+  r   r$   c                 B    [         R                  R                  U 5        g)z
See http://llvm.org/docs/Passes.html#scalarrepl-scalar-replacement-of-aggregates-dt
Note that this pass corresponds to the ``opt -sroa`` command-line option,
despite the link above.

LLVM 14: `llvm::createSROAPass`
N)r   r4   LLVMPY_AddSROAPassr^   s    r!   add_sroa_passPassManager.add_sroa_pass3  s     	""4(r$   c                 B    [         R                  R                  U 5        g)z]
See https://llvm.org/docs/Passes.html#sink-code-sinking

LLVM 14: `llvm::createSinkingPass`
N)r   r4   LLVMPY_AddSinkPassr^   s    r!   add_sink_passPassManager.add_sink_pass=  r   r$   c                 B    [         R                  R                  X5        g)zv
See https://llvm.org/docs/Passes.html#strip-strip-all-symbols-from-a-module

LLVM 14: `llvm::createStripSymbolsPass`
N)r   r4   LLVMPY_AddStripSymbolsPass)r   
only_debugs     r!   add_strip_symbols_pass"PassManager.add_strip_symbols_passE  s     	**4<r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#strip-dead-debug-info-strip-debug-info-for-unused-symbols

LLVM 14: `llvm::createStripDeadDebugInfoPass`
N)r   r4    LLVMPY_AddStripDeadDebugInfoPassr^   s    r!   add_strip_dead_debug_info_pass*PassManager.add_strip_dead_debug_info_passM  rt   r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#strip-dead-prototypes-strip-unused-function-prototypes

LLVM 14: `llvm::createStripDeadPrototypesPass`
N)r   r4   !LLVMPY_AddStripDeadPrototypesPassr^   s    r!   add_strip_dead_prototypes_pass*PassManager.add_strip_dead_prototypes_passU  r}   r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#strip-debug-declare-strip-all-llvm-dbg-declare-intrinsics

LLVM 14: `llvm::createStripDebugDeclarePass`
N)r   r4   )LLVMPY_AddStripDebugDeclarePrototypesPassr^   s    r!   add_strip_debug_declare_pass(PassManager.add_strip_debug_declare_pass]  s     	99$?r$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#strip-nondebug-strip-all-symbols-except-dbg-symbols-from-a-module

LLVM 14: `llvm::createStripNonDebugSymbolsPass`
N)r   r4   "LLVMPY_AddStripNondebugSymbolsPassr^   s    r!   add_strip_nondebug_symbols_pass+PassManager.add_strip_nondebug_symbols_passe  r   r$   c                 B    [         R                  R                  U 5        g)zz
See https://llvm.org/docs/Passes.html#tailcallelim-tail-call-elimination

LLVM 14: `llvm::createTailCallEliminationPass`
N)r   r4   !LLVMPY_AddTailCallEliminationPassr^   s    r!   add_tail_call_elimination_pass*PassManager.add_tail_call_elimination_passm  r}   r$   c                 B    [         R                  R                  U 5        g)z.
LLVM 14: `LLVMAddTypeBasedAliasAnalysisPass`
N)r   r4   $LLVMPY_AddTypeBasedAliasAnalysisPassr^   s    r!   "add_type_based_alias_analysis_pass.PassManager.add_type_based_alias_analysis_passu  s     	44T:r$   c                 B    [         R                  R                  U 5        g)zh
See http://llvm.org/docs/AliasAnalysis.html#the-basicaa-pass

LLVM 14: `LLVMAddBasicAliasAnalysisPass`
N)r   r4    LLVMPY_AddBasicAliasAnalysisPassr^   s    r!   add_basic_alias_analysis_pass)PassManager.add_basic_alias_analysis_pass{  rt   r$   c                 B    [         R                  R                  U 5        g)z:http://llvm.org/docs/Passes.html#loop-rotate-rotate-loops.N)r   r4   LLVMPY_AddLoopRotatePassr^   s    r!   add_loop_rotate_pass PassManager.add_loop_rotate_pass  s    ((.r$   c                 V    [         R                  R                  U [        U5      5        g rE   )r   r4   LLVMPY_AddTargetLibraryInfoPassr   )r   triples     r!   add_target_library_info#PassManager.add_target_library_info  s    //nV6LMr$   c                 B    [         R                  R                  U 5        g)z
See https://llvm.org/docs/Passes.html#instnamer-assign-names-to-anonymous-instructions.

LLVM 14: `llvm::createInstructionNamerPass`
N)r   r4   LLVMPY_AddInstructionNamerPassr^   s    r!   add_instruction_namer_pass&PassManager.add_instruction_namer_pass  r'  r$   i  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)rM   r   r4   LLVMPY_AddLegacyRefPrunePass)r   subpasses_flagssubgraph_limitiflagss       r!   add_refprune_passPassManager.add_refprune_pass  s"     #?3,,T>Jr$   r(   NF)T)   ))FF)Nr)   r*   r+   r,   r-   r_   rc   rh   rm   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%  r,  r0  r4  r8  r<  r@  rD  rH  rL  rP  rT  rX  r\  ra  re  ri  rm  rq  ru  ry  r}  r  r  r  rM   rW   r  r.   r(   r$   r!   rY   rY   k   s   3+32778/=A4,)2;/62CM79B2@.4+8
C06=*(9)128)77/5 275:
B0007314;0;))=78@98;7/N5 1B0E0E)-Kr$   rY   c                   :    \ rS rSrSS jr  SS jr  S	S jrSrg)
rF   i  Nc                 p    Uc  [         R                  R                  5       n[        R	                  X5        g rE   )r   r4   LLVMPY_CreatePassManagerrY   __init__)r   ptrs     r!   r  ModulePassManager.__init__  s'    ;''224CT'r$   c           	          Uc  [         R                  R                  X5      $ [         R                  R                  X[	        U5      [	        U5      [	        U5      5      nUS:X  a  [        S5      eUS:  $ )a  
Run optimization passes on the given module.

Parameters
----------
module : llvmlite.binding.ModuleRef
    The module to be optimized inplace
remarks_file : str; optional
    If not `None`, it is the file to store the optimization remarks.
remarks_format : str; optional
    The format to write; YAML is default
remarks_filter : str; optional
    The filter that should be applied to the remarks output.
r  "Failed to initialize remarks file.r   )r   r4   LLVMPY_RunPassManager LLVMPY_RunPassManagerWithRemarksr   IOError)r   rJ   remarks_fileremarks_formatremarks_filterrs         r!   runModulePassManager.run  sk      7700>>88n^<~.|,.A BwBCCq5Lr$   c                    [        5       u  pE [        R                  " US5          SSS5        U R                  XX#5      nUS:X  a  [	        S5      e[        U5       n[        U5      UR                  5       4sSSS5        [        R                  " U5        $ ! , (       d  f       Nw= f! , (       d  f       O= f [        R                  " U5        g! [        R                  " U5        f = f)aQ  
Run optimization passes on the given module and returns the result and
the remarks data.

Parameters
----------
module : llvmlite.binding.ModuleRef
    The module to be optimized
remarks_format : str
    The remarks output; YAML is the default
remarks_filter : str; optional
    The filter that should be applied to the remarks output.
r  Nr  r  	r   osfdopenr  r  openboolreadunlink)r   rJ   r  r  
remarkdesc
remarkfiler  fs           r!   run_with_remarks"ModulePassManager.run_with_remarks  s     ")
		":s+ ,^LABwBCCj!QAw( "! IIj! ,+
 "!! IIj!BIIj!9   C B6C B)8	C 
B&"C )
B73C C*r(   rE   Nyaml r  r  )r)   r*   r+   r,   r  r  r  r.   r(   r$   r!   rF   rF     s"    (
 =C6 7=(*"r$   rF   c                   B    \ rS rSrS rS rS r  S	S jr  S
S jrSr	g)rI   i  c                     [         R                  R                  U5      nXl        SUl        [
        R                  X5        g )NT)r   r4    LLVMPY_CreateFunctionPassManager_module_ownedrY   r  )r   rJ   r  s      r!   r  FunctionPassManager.__init__  s0    gg66v>T'r$   c                 @    [         R                  R                  U 5      $ )zS
Initialize the FunctionPassManager.  Returns True if it produced
any changes (?).
)r   r4   $LLVMPY_InitializeFunctionPassManagerr^   s    r!   
initializeFunctionPassManager.initialize  s    
 ww;;DAAr$   c                 @    [         R                  R                  U 5      $ )zQ
Finalize the FunctionPassManager.  Returns True if it produced
any changes (?).
)r   r4   "LLVMPY_FinalizeFunctionPassManagerr^   s    r!   finalizeFunctionPassManager.finalize  s    
 ww99$??r$   Nc           	          Uc  [         R                  R                  X5      $ [         R                  R                  X[	        U5      [	        U5      [	        U5      5      nUS:X  a  [        S5      e[        U5      $ )a  
Run optimization passes on the given function.

Parameters
----------
function : llvmlite.binding.FunctionRef
    The function to be optimized inplace
remarks_file : str; optional
    If not `None`, it is the file to store the optimization remarks.
remarks_format : str; optional
    The format of the remarks file; the default is YAML
remarks_filter : str; optional
    The filter that should be applied to the remarks output.
r  r  )r   r4   LLVMPY_RunFunctionPassManager(LLVMPY_RunFunctionPassManagerWithRemarksr   r  r  )r   functionr  r  r  r  s         r!   r  FunctionPassManager.run  sk      7788HH@@~ >~.|,.A BwBCC7Nr$   c                    [        5       u  pE [        R                  " US5          SSS5        U R                  XX#5      nUS:X  a  [	        S5      e[        U5       n[        U5      UR                  5       4sSSS5        [        R                  " U5        $ ! , (       d  f       Nw= f! , (       d  f       O= f [        R                  " U5        g! [        R                  " U5        f = f)aw  
Run optimization passes on the given function and returns the result
and the remarks data.

Parameters
----------
function : llvmlite.binding.FunctionRef
    The function to be optimized inplace
remarks_format : str; optional
    The format of the remarks file; the default is YAML
remarks_filter : str; optional
    The filter that should be applied to the remarks output.
r  Nr  r  r  )r   r  r  r  r  r  r  r  s           r!   r  $FunctionPassManager.run_with_remarks  s    " ")
	" :s+ ,~NABwBCCj!QAw( "! IIj! ,+
 "!! IIj!BIIj!r  )r  r  r  )
r)   r*   r+   r,   r  r  r  r  r  r.   r(   r$   r!   rI   rI     s.    (B@ ?E6 9?(*"r$   rI      r  )wctypesr   r   r   r   r   r   r	   collectionsr
   enumr   llvmlite.bindingr   llvmlite.binding.initfinir   r  tempfiler   llvmlite.binding.commonr   r   _prunestatsr   r0   r9   r=   rC   rG   rK   rM   	ObjectRefrY   rF   rI   LLVMPassManagerRefr4   r  restypeLLVMModuleRefr  argtypesr]   r  r  r  r  LLVMValueRefr  r  rb   rg   rl   rq   rv   rz   r   r   r   r   LLVMPY_AddInstructionCountPassr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r$  r)  r/  r3  r7  r;  r?  rC  rG  rK  rO  rS  r[  r_  rd  rh  rl  rp  rt  r   r   r   r   r   r   r   r   r   r   r  r  rW  rx  r|  r  r  r  r5   r(   r$   r!   <module>r     s 
     "    7 	  2&q) BEB B0$I $*	1 '3 3xK#-- xKv;" ;"|N"+ N"h ,/+A+A     (585F5F4G ( ( 1363I3I ( ( 0.1.D.D-E ! ! **-*@*@*-*;*;*=   &(.   %585K5K585F5F5=5=5=	5? ( ( 1
 49 ( ( 09<9O9O8P , , 57= , , 47:7M7M6N * * 35; * * 2252H2H252B2B2D % % .06 % % - C,,h(= 0 0 9 <A 0 0 8),)?)?(@   %141G1G0H $ $ -030F0F/G # # ,585K5K4L ( ( 1585K5K4L ( ( 1696L6L5M ) ) 2-0-C-C,D     )030F0F/O # # ,
4 ' ' 0 362H2H1I % % .363I3I2J & & /*-*@*@)A   &030F0F/G # # ,'*'='=&>   #9<9O9O8P , , 5-0-C-C,D     )474J4J3K ' ' 0030F0F/G # # ,030F0F/O # # ,585K5K4L ( ( 17 * * 3 @ 3 3 < E CGG88A /2.D.D-E ! ! *(+(>(>'?   $/2/E/E.F " " +030F0F/G # # ,696L6L5M ) ) 2585K5K4L ( ( 1585K5K4L ( ( 1-0-C-C,D     )363I3I2J & & //2/E/Ev/5/7 " " +.1.D.D-E ! ! *.1.D.D-E ! ! *.1.D.D-E ! ! *585K5K4L ( ( 1141G1G0H $ $ -/2/E/E.F " " +252H2H1I % % .=CGG009 /2.D.D-E ! ! *9<9O9O8P , , 5'*'='=&>   #/2/E/Ev.N " " +585K5K4L ( ( 1696L6L5M ) ) 2> 1 1 :7:7M7M6N * * 3696L6L5M ) ) 2030F0F/N # # ,030F0F/G # # ,E3# & & /,/,B,B+C   (252H2H1I % % .),)?)?(@   %696L6L5M ) ) 2474J4J3K ' ' 0&)&<&<%=   "7:7M7M6N * * 3'*'='=&>   #'*'='=&>   #'*'='=&>   #9<9O9O8P , , 5585K5K4L ( ( 1474J4J4<4> ' ' 0363I3I2J & & /141G1G191; $ $ - .5]-CV,L     )r$   