§
    ‚Ûgl†  ã                   ó´  — d dl mZmZmZmZmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlZd dlmZ d dlmZ  e
dd	¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Zdd„Zd„ Zd„ Zd„ Zd„ Z G d„ de¦  «        Z G d„ dej        ¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z ej!        ej"        j#        _$        ej%        gej"        j&        _'        ej!        ej"        j&        _$        ej!        gej"        j(        _'        ej!        ej%        gej"        j)        _'        eej"        j)        _$        ej!        ej%        eeegej"        j*        _'        eej"        j*        _$        ej!        gej"        j+        _'        eej"        j+        _$        ej!        gej"        j,        _'        eej"        j,        _$        ej!        ej-        gej"        j.        _'        eej"        j.        _$        ej!        ej-        eeegej"        j/        _'        eej"        j/        _$        ej!        gej"        j0        _'        ej!        gej"        j1        _'        ej!        gej"        j2        _'        ej!        gej"        j3        _'        ej!        gej"        j4        _'        ej!        gej"        j5        _'        ej!        gej"        j6        _'        ej!        egej"        j7        _'        ej!        egej"        j8        _'        ej!        gej"        j9        _'        ej!        gej"        j:        _'        ej!        gej"        j;        _'        ej!        gej"        j<        _'        ej!        gej"        j=        _'        ej!        gej"        j>        _'        ej!        gej"        j?        _'        ej!        gej"        j@        _'        ej!        gej"        jA        _'        ej!        egej"        jB        _'        ej!        egej"        jC        _'        ej!        gej"        jD        _'        ej!        gej"        jE        _'        ej!        gej"        jF        _'        ej!        gej"        jG        _'        ej!        gej"        jH        _'        ej!        gej"        jI        _'        ej!        gej"        jJ        _'        ej!        gej"        jK        _'        ej!        gej"        jL        _'        ej!        gej"        jM        _'        ej!        gej"        jN        _'        ej!        gej"        jO        _'        ej!        gej"        jP        _'        ej!        eegej"        jQ        _'        ej!        gej"        jR        _'        ej!        gej"        jS        _'        ej!        gej"        jT        _'        ej!        gej"        jU        _'        ej!        gej"        jV        _'        ej!        gej"        jW        _'        ej!        gej"        jX        _'        ej!        gej"        jY        _'        ej!        gej"        jZ        _'        ej!        gej"        j[        _'        ej!        gej"        j\        _'        ej!        egej"        j]        _'        ej!        gej"        j^        _'        ej!        gej"        j_        _'        ej!        gej"        j`        _'        ej!        gej"        ja        _'        ej!        gej"        jb        _'        ej!        egej"        jc        _'        ej!        gej"        jd        _'        ej!        egej"        je        _'        ej!        gej"        jf        _'        ej!        gej"        jg        _'        ej!        gej"        jh        _'        ej!        gej"        ji        _'        ej!        gej"        jj        _'        ej!        gej"        jk        _'        ej!        gej"        jl        _'        ej!        gej"        jm        _'        ej!        gej"        jn        _'        ej!        gej"        jo        _'        ej!        gej"        jp        _'        ej!        gej"        jq        _'        ej!        egej"        jr        _'        ej!        eegej"        js        _'         ee¦  «        egej"        jt        _'        dS )é    )Úc_boolÚc_char_pÚc_intÚc_size_tÚc_uintÚ	StructureÚbyrefÚPOINTER)Ú
namedtuple)ÚIntFlag)ÚffiN)Úmkstemp)Ú_encode_stringÚ
PruneStatsz&basicblock diamond fanout fanout_raisec                   ó   — e Zd ZdZd„ Zd„ ZdS )r   z4 Holds statistics from reference count pruning.
    c                 ó  — t          |t          ¦  «        s1d}t          |                     t	          |¦  «        ¦  «        ¦  «        ‚t          | j        |j        z   | j        |j        z   | j        |j        z   | j        |j        z   ¦  «        S )Nz;PruneStats can only be added to another PruneStats, got {}.©	Ú
isinstancer   Ú	TypeErrorÚformatÚtypeÚ
basicblockÚdiamondÚfanoutÚfanout_raise©ÚselfÚotherÚmsgs      úS/granary/edev/quantum/lib/python3.11/site-packages/llvmlite/binding/passmanagers.pyÚ__add__zPruneStats.__add__   s€   € Ý˜%¥Ñ,Ô,ð 	5ØOˆCÝ˜CŸJšJ¥t¨E¡{¤{Ñ3Ô3Ñ4Ô4Ð4Ý˜$œ/¨EÔ,<Ñ<Øœ,¨¬Ñ6Øœ+¨¬Ñ4ØÔ+¨eÔ.@Ñ@ñBô Bð 	Bó    c                 ó  — t          |t          ¦  «        s1d}t          |                     t	          |¦  «        ¦  «        ¦  «        ‚t          | j        |j        z
  | j        |j        z
  | j        |j        z
  | j        |j        z
  ¦  «        S )NzBPruneStats can only be subtracted from another PruneStats, got {}.r   r   s      r    Ú__sub__zPruneStats.__sub__   s‚   € Ý˜%¥Ñ,Ô,ð 	5ðˆCå˜CŸJšJ¥t¨E¡{¤{Ñ3Ô3Ñ4Ô4Ð4Ý˜$œ/¨EÔ,<Ñ<Øœ,¨¬Ñ6Øœ+¨¬Ñ4ØÔ+¨eÔ.@Ñ@ñBô Bð 	Br"   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r$   © r"   r    r   r      sD   € € € € € ðð ðBð Bð BðBð Bð Bð Bð Br"   c                   ó*   — e Zd ZdefdefdefdefgZdS )Ú_c_PruneStatsr   r   r   r   N)r%   r&   r'   r   Ú_fields_r)   r"   r    r+   r+   &   s5   € € € € € à	�xÐ Ø	�HÐØ	�8ÐØ	˜Ð"ð	$€H€H€Hr"   r+   Fc                 óê   — t          dddd¦  «        }t          | ¦  «        }t          j                             t          |¦  «        |¦  «         t          |j        |j        |j	        |j
        ¦  «        S )z± Returns a namedtuple containing the current values for the refop pruning
    statistics. If kwarg `printout` is True the stats are printed to stderr,
    default is False.
    r   )r+   r   r   ÚlibÚLLVMPY_DumpRefPruneStatsr	   r   r   r   r   r   )ÚprintoutÚstatsÚdo_prints      r    Údump_refprune_statsr3   .   sg   € õ ˜!˜Q  1Ñ%Ô%€EÝ�hÑÔ€Hå„G×$Ò$¥U¨5¡\¤\°8Ñ<Ô<Ð<Ý�eÔ&¨¬°u´|ØÔ(ñ*ô *ð *r"   c                 ó^   — t           j                             t          | ¦  «        ¦  «         dS )z¸Enable or disable the pass timers.

    Parameters
    ----------
    enable : bool
        Set to True to enable the pass timers.
        Set to False to disable the pass timers.
    N)r   r.   ÚLLVMPY_SetTimePassesr   )Úenables    r    Úset_time_passesr7   <   s&   € õ „G× Ò ¥¨¡¤Ñ0Ô0Ð0Ð0Ð0r"   c                  ó¸   — t          j        ¦   «         5 } t           j                             | ¦  «         t	          | ¦  «        cddd¦  «         S # 1 swxY w Y   dS )a  Returns the pass timings report and resets the LLVM internal timers.

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

    Returns
    -------
    res : str
        LLVM generated timing report.
    N)r   ÚOutputStringr.   ÚLLVMPY_ReportAndResetTimingsÚstr)Úbufs    r    Úreport_and_reset_timingsr=   H   s“   € õ 
Ô	Ñ	Ô	ð ˜sÝŒ×,Ò,¨SÑ1Ô1Ð1Ý�3‰xŒxðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ”.AÁAÁAc                  ó   — t          ¦   «         S ©N)ÚModulePassManagerr)   r"   r    Úcreate_module_pass_managerrA   X   s   € ÝÑÔÐr"   c                 ó    — t          | ¦  «        S r?   )ÚFunctionPassManager)Úmodules    r    Úcreate_function_pass_managerrE   \   s   € Ý˜vÑ&Ô&Ð&r"   c                   ó4   — e Zd ZdZdZdZdZeez  ez  ez  ZdS )ÚRefPruneSubpassesé   é   é   é   N)r%   r&   r'   ÚPER_BBÚDIAMONDÚFANOUTÚFANOUT_RAISEÚALLr)   r"   r    rG   rG   `   s6   € € € € € Ø€FØ€GØ€FØ€LØ
�7Ñ
˜VÑ
# lÑ
2€C€C€Cr"   rG   c                   óÒ  — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ ZdMd„ZdMd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdNd„ZdOd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Zd!„ Z d"„ Z!d#„ Z"d$„ Z#dPd&„Z$d'„ Z%d(„ Z&d)„ Z'd*„ Z(d+„ Z)d,„ Z*d-„ Z+d.„ Z,d/„ Z-d0„ Z.d1„ Z/d2„ Z0	 	 dQd3„Z1d4„ Z2d5„ Z3d6„ Z4d7„ Z5d8„ Z6d9„ Z7d:„ Z8d;„ Z9d<„ Z:d=„ Z;d>„ Z<d?„ Z=dMd@„Z>dA„ Z?dB„ Z@dC„ ZAdD„ ZBdE„ ZCdF„ ZDdG„ ZEdH„ ZFdI„ ZGeHjI        dJfdK„ZJdLS )RÚPassManagerzPassManager
    c                 ó:   — | j                              | ¦  «         d S r?   )Ú_capiÚLLVMPY_DisposePassManager©r   s    r    Ú_disposezPassManager._disposel   s   € ØŒ
×,Ò,¨TÑ2Ô2Ð2Ð2Ð2r"   c                 óD   — t           j                             | ¦  «         dS )z˜
        See https://llvm.org/docs/Passes.html#aa-eval-exhaustive-alias-analysis-precision-evaluator

        LLVM 14: `llvm::createAAEvalPass`
        N)r   r.   ÚLLVMPY_AddAAEvalPassrV   s    r    Úadd_aa_eval_passzPassManager.add_aa_eval_passo   ó    € õ 	Œ×$Ò$ TÑ*Ô*Ð*Ð*Ð*r"   c                 óD   — t           j                             | ¦  «         dS )zš
        See https://llvm.org/docs/Passes.html#basic-aa-basic-alias-analysis-stateless-aa-impl

        LLVM 14: `llvm::createBasicAAWrapperPass`
        N)r   r.   ÚLLVMPY_AddBasicAAWrapperPassrV   s    r    Úadd_basic_aa_passzPassManager.add_basic_aa_passw   ó    € õ 	Œ×,Ò,¨TÑ2Ô2Ð2Ð2Ð2r"   c                 óD   — t           j                             | ¦  «         dS )z�
        See http://llvm.org/docs/Passes.html#constmerge-merge-duplicate-global-constants

        LLVM 14: `LLVMAddConstantMergePass`
        N)r   r.   ÚLLVMPY_AddConstantMergePassrV   s    r    Úadd_constant_merge_passz#PassManager.add_constant_merge_pass   ó    € õ 	Œ×+Ò+¨DÑ1Ô1Ð1Ð1Ð1r"   c                 óD   — t           j                             | ¦  «         dS )zŽ
        See http://llvm.org/docs/Passes.html#deadargelim-dead-argument-elimination

        LLVM 14: `LLVMAddDeadArgEliminationPass`
        N)r   r.   Ú LLVMPY_AddDeadArgEliminationPassrV   s    r    Úadd_dead_arg_elimination_passz)PassManager.add_dead_arg_elimination_pass‡   ó    € õ 	Œ×0Ò0°Ñ6Ô6Ð6Ð6Ð6r"   c                 óD   — t           j                             | ¦  «         dS )zŒ
        See https://llvm.org/docs/Passes.html#da-dependence-analysis

        LLVM 14: `llvm::createDependenceAnalysisWrapperPass`
        N)r   r.   Ú LLVMPY_AddDependenceAnalysisPassrV   s    r    Úadd_dependence_analysis_passz(PassManager.add_dependence_analysis_pass�   rg   r"   c                 óD   — t           j                             | ¦  «         dS )zš
        See https://llvm.org/docs/Passes.html#dot-callgraph-print-call-graph-to-dot-file

        LLVM 14: `llvm::createCallGraphDOTPrinterPass`
        N)r   r.   Ú!LLVMPY_AddCallGraphDOTPrinterPassrV   s    r    Úadd_dot_call_graph_passz#PassManager.add_dot_call_graph_pass—   ó    € õ 	Œ×1Ò1°$Ñ7Ô7Ð7Ð7Ð7r"   c                 óD   — t           j                             | ¦  «         dS )zš
        See https://llvm.org/docs/Passes.html#dot-cfg-print-cfg-of-function-to-dot-file

        LLVM 14: `llvm::createCFGPrinterLegacyPassPass`
        N)r   r.   ÚLLVMPY_AddCFGPrinterPassrV   s    r    Úadd_dot_cfg_printer_passz$PassManager.add_dot_cfg_printer_passŸ   ó    € õ 	Œ×(Ò(¨Ñ.Ô.Ð.Ð.Ð.r"   Fc                 óF   — t           j                             | |¦  «         dS )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   r.   ÚLLVMPY_AddDotDomPrinterPass©r   Ú	show_bodys     r    Úadd_dot_dom_printer_passz$PassManager.add_dot_dom_printer_pass§   ó"   € õ 	Œ×+Ò+¨D°)Ñ<Ô<Ð<Ð<Ð<r"   c                 óF   — t           j                             | |¦  «         dS )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   r.   ÚLLVMPY_AddDotPostDomPrinterPassru   s     r    Úadd_dot_postdom_printer_passz(PassManager.add_dot_postdom_printer_pass¯   s"   € õ 	Œ×/Ò/°°iÑ@Ô@Ð@Ð@Ð@r"   c                 óD   — t           j                             | ¦  «         dS )z¡
        See https://llvm.org/docs/Passes.html#globalsmodref-aa-simple-mod-ref-analysis-for-globals

        LLVM 14: `llvm::createGlobalsAAWrapperPass`
        N)r   r.   ÚLLVMPY_AddGlobalsModRefAAPassrV   s    r    Úadd_globals_mod_ref_aa_passz'PassManager.add_globals_mod_ref_aa_pass·   ó    € õ 	Œ×-Ò-¨dÑ3Ô3Ð3Ð3Ð3r"   c                 óD   — t           j                             | ¦  «         dS )z…
        See https://llvm.org/docs/Passes.html#iv-users-induction-variable-users

        LLVM 14: `llvm::createIVUsersPass`
        N)r   r.   ÚLLVMPY_AddIVUsersPassrV   s    r    Úadd_iv_users_passzPassManager.add_iv_users_pass¿   s    € õ 	Œ×%Ò% dÑ+Ô+Ð+Ð+Ð+r"   c                 óD   — t           j                             | ¦  «         dS )zŽ
        See https://llvm.org/docs/Passes.html#lint-statically-lint-checks-llvm-ir

        LLVM 14: `llvm::createLintLegacyPassPass`
        N)r   r.   ÚLLVMPY_AddLintPassrV   s    r    Úadd_lint_passzPassManager.add_lint_passÇ   ó    € õ 	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r"   c                 óD   — t           j                             | ¦  «         dS )z™
        See https://llvm.org/docs/Passes.html#lazy-value-info-lazy-value-information-analysis

        LLVM 14: `llvm::createLazyValueInfoPass`
        N)r   r.   ÚLLVMPY_AddLazyValueInfoPassrV   s    r    Úadd_lazy_value_info_passz$PassManager.add_lazy_value_info_passÏ   rc   r"   c                 óD   — t           j                             | ¦  «         dS )z£
        See https://llvm.org/docs/Passes.html#module-debuginfo-decodes-module-level-debug-info

        LLVM 14: `llvm::createModuleDebugInfoPrinterPass`
        N)r   r.   Ú$LLVMPY_AddModuleDebugInfoPrinterPassrV   s    r    Úadd_module_debug_info_passz&PassManager.add_module_debug_info_pass×   ó    € õ 	Œ×4Ò4°TÑ:Ô:Ð:Ð:Ð:r"   c                 óD   — t           j                             | ¦  «         dS )z–
        See https://llvm.org/docs/Passes.html#regions-detect-single-entry-single-exit-regions

        LLVM 14: `llvm::createRegionInfoPass`
        N)r   r.   ÚLLVMPY_AddRegionInfoPassrV   s    r    Úadd_region_info_passz PassManager.add_region_info_passß   rr   r"   c                 óD   — t           j                             | ¦  «         dS )z–
        See https://llvm.org/docs/Passes.html#scev-aa-scalarevolution-based-alias-analysis

        LLVM 14: `llvm::createSCEVAAWrapperPass`
        N)r   r.   ÚLLVMPY_AddScalarEvolutionAAPassrV   s    r    Úadd_scalar_evolution_aa_passz(PassManager.add_scalar_evolution_aa_passç   ó    € õ 	Œ×/Ò/°Ñ5Ô5Ð5Ð5Ð5r"   c                 óD   — t           j                             | ¦  «         dS )z�
        See https://llvm.org/docs/Passes.html#adce-aggressive-dead-code-elimination

        LLVM 14: `llvm::createAggressiveDCEPass`
        N)r   r.   ÚLLVMPY_AddAggressiveDCEPassrV   s    r    Ú)add_aggressive_dead_code_elimination_passz5PassManager.add_aggressive_dead_code_elimination_passï   rc   r"   Tc                 óF   — t           j                             | |¦  «         dS )z¡
        See https://llvm.org/docs/Passes.html#always-inline-inliner-for-always-inline-functions

        LLVM 14: `llvm::createAlwaysInlinerLegacyPass`
        N)r   r.   ÚLLVMPY_AddAlwaysInlinerPass)r   Úinsert_lifetimes     r    Úadd_always_inliner_passz#PassManager.add_always_inliner_pass÷   s"   € õ 	Œ×+Ò+¨D°/ÑBÔBÐBÐBÐBr"   é   c                 óF   — t           j                             | |¦  «         dS )z¤
        See https://llvm.org/docs/Passes.html#argpromotion-promote-by-reference-arguments-to-scalars

        LLVM 14: `llvm::createArgumentPromotionPass`
        N)r   r.   ÚLLVMPY_AddArgPromotionPass)r   Úmax_elementss     r    Úadd_arg_promotion_passz"PassManager.add_arg_promotion_passÿ   s"   € õ 	Œ×*Ò*¨4°Ñ>Ô>Ð>Ð>Ð>r"   c                 óD   — t           j                             | ¦  «         dS )z›
        See https://llvm.org/docs/Passes.html#break-crit-edges-break-critical-edges-in-cfg

        LLVM 14: `llvm::createBreakCriticalEdgesPass`
        N)r   r.   Ú LLVMPY_AddBreakCriticalEdgesPassrV   s    r    Úadd_break_critical_edges_passz)PassManager.add_break_critical_edges_pass  rg   r"   c                 óD   — t           j                             | ¦  «         dS )z‹
        See https://llvm.org/docs/Passes.html#dse-dead-store-elimination

        LLVM 14: `llvm::createDeadStoreEliminationPass`
        N)r   r.   Ú"LLVMPY_AddDeadStoreEliminationPassrV   s    r    Úadd_dead_store_elimination_passz+PassManager.add_dead_store_elimination_pass  ó    € õ 	Œ×2Ò2°4Ñ8Ô8Ð8Ð8Ð8r"   c                 óD   — t           j                             | ¦  «         dS )z£
        See https://llvm.org/docs/Passes.html#function-attrs-deduce-function-attributes

        LLVM 14: `llvm::createReversePostOrderFunctionAttrsPass`
        N)r   r.   Ú+LLVMPY_AddReversePostOrderFunctionAttrsPassrV   s    r    Ú*add_reverse_post_order_function_attrs_passz6PassManager.add_reverse_post_order_function_attrs_pass  s    € õ 	Œ×;Ò;¸DÑAÔAÐAÐAÐAr"   c                 óD   — t           j                             | ¦  «         dS )zŒ
        See http://llvm.org/docs/Passes.html#functionattrs-deduce-function-attributes

        LLVM 14: `LLVMAddFunctionAttrsPass`
        N)r   r.   ÚLLVMPY_AddFunctionAttrsPassrV   s    r    Úadd_function_attrs_passz#PassManager.add_function_attrs_pass  rc   r"   c                 óF   — t           j                             | |¦  «         dS )zŠ
        See http://llvm.org/docs/Passes.html#inline-function-integration-inlining

        LLVM 14: `createFunctionInliningPass`
        N)r   r.   ÚLLVMPY_AddFunctionInliningPass©r   Ú	thresholds     r    Úadd_function_inlining_passz&PassManager.add_function_inlining_pass'  s"   € õ 	Œ×.Ò.¨t°YÑ?Ô?Ð?Ð?Ð?r"   c                 óD   — t           j                             | ¦  «         dS )z�
        See http://llvm.org/docs/Passes.html#globaldce-dead-global-elimination

        LLVM 14: `LLVMAddGlobalDCEPass`
        N)r   r.   ÚLLVMPY_AddGlobalDCEPassrV   s    r    Úadd_global_dce_passzPassManager.add_global_dce_pass/  s    € õ 	Œ×'Ò'¨Ñ-Ô-Ð-Ð-Ð-r"   c                 óD   — t           j                             | ¦  «         dS )z‰
        See http://llvm.org/docs/Passes.html#globalopt-global-variable-optimizer

        LLVM 14: `LLVMAddGlobalOptimizerPass`
        N)r   r.   ÚLLVMPY_AddGlobalOptimizerPassrV   s    r    Úadd_global_optimizer_passz%PassManager.add_global_optimizer_pass7  r   r"   c                 óD   — t           j                             | ¦  «         dS )z›
        See http://llvm.org/docs/Passes.html#ipsccp-interprocedural-sparse-conditional-constant-propagation

        LLVM 14: `LLVMAddIPSCCPPass`
        N)r   r.   ÚLLVMPY_AddIPSCCPPassrV   s    r    Úadd_ipsccp_passzPassManager.add_ipsccp_pass?  r[   r"   c                 óD   — t           j                             | ¦  «         dS )z‡
        See http://llvm.org/docs/Passes.html#dce-dead-code-elimination
        LLVM 14: `llvm::createDeadCodeEliminationPass`
        N)r   r.   Ú!LLVMPY_AddDeadCodeEliminationPassrV   s    r    Úadd_dead_code_elimination_passz*PassManager.add_dead_code_elimination_passG  s    € õ
 	Œ×1Ò1°$Ñ7Ô7Ð7Ð7Ð7r"   c                 óD   — t           j                             | ¦  «         dS )z¥
        See https://llvm.org/docs/Passes.html#aggressive-instcombine-combine-expression-patterns

        LLVM 14: `llvm::createAggressiveInstCombinerPass`
        N)r   r.   Ú,LLVMPY_AddAggressiveInstructionCombiningPassrV   s    r    Ú)add_aggressive_instruction_combining_passz5PassManager.add_aggressive_instruction_combining_passN  s    € õ 	Œ×<Ò<¸TÑBÔBÐBÐBÐBr"   c                 óD   — t           j                             | ¦  «         dS )zŽ
        See https://llvm.org/docs/Passes.html#internalize-internalize-global-symbols

        LLVM 14: `llvm::createInternalizePass`
        N)r   r.   ÚLLVMPY_AddInternalizePassrV   s    r    Úadd_internalize_passz PassManager.add_internalize_passV  ó    € õ 	Œ×)Ò)¨$Ñ/Ô/Ð/Ð/Ð/r"   c                 óD   — t           j                             | ¦  «         dS )z„
        See http://llvm.org/docs/Passes.html#simplifycfg-simplify-the-cfg

        LLVM 14: `LLVMAddCFGSimplificationPass`
        N)r   r.   ÚLLVMPY_AddCFGSimplificationPassrV   s    r    Úadd_cfg_simplification_passz'PassManager.add_cfg_simplification_pass^  r”   r"   éÿÿÿÿc                 óF   — t           j                             | |¦  «         dS )z‡
        See https://llvm.org/docs/Passes.html#jump-threading-jump-threading

        LLVM 14: `llvm::createJumpThreadingPass`
        N)r   r.   ÚLLVMPY_AddJumpThreadingPassr°   s     r    Úadd_jump_threading_passz#PassManager.add_jump_threading_passf  rx   r"   c                 óD   — t           j                             | ¦  «         dS )z�
        See https://llvm.org/docs/Passes.html#lcssa-loop-closed-ssa-form-pass

        LLVM 14: `llvm::createLCSSAPass`
        N)r   r.   ÚLLVMPY_AddLCSSAPassrV   s    r    Úadd_lcssa_passzPassManager.add_lcssa_passn  s    € õ 	Œ×#Ò# DÑ)Ô)Ð)Ð)Ð)r"   c                 óD   — t           j                             | ¦  «         dS )zt
        See http://llvm.org/docs/Passes.html#gvn-global-value-numbering

        LLVM 14: `LLVMAddGVNPass`
        N)r   r.   ÚLLVMPY_AddGVNPassrV   s    r    Úadd_gvn_passzPassManager.add_gvn_passv  s    € õ 	Œ×!Ò! $Ñ'Ô'Ð'Ð'Ð'r"   c                 óD   — t           j                             | ¦  «         dS )z}
        See http://llvm.org/docs/Passes.html#passes-instcombine

        LLVM 14: `LLVMAddInstructionCombiningPass`
        N)r   r.   Ú"LLVMPY_AddInstructionCombiningPassrV   s    r    Úadd_instruction_combining_passz*PassManager.add_instruction_combining_pass~  r§   r"   c                 óD   — t           j                             | ¦  «         dS )zz
        See http://llvm.org/docs/Passes.html#licm-loop-invariant-code-motion

        LLVM 14: `LLVMAddLICMPass`
        N)r   r.   ÚLLVMPY_AddLICMPassrV   s    r    Úadd_licm_passzPassManager.add_licm_pass†  r†   r"   c                 óD   — t           j                             | ¦  «         dS )zˆ
        See https://llvm.org/docs/Passes.html#loop-deletion-delete-dead-loops

        LLVM 14: `llvm::createLoopDeletionPass`
        N)r   r.   ÚLLVMPY_AddLoopDeletionPassrV   s    r    Úadd_loop_deletion_passz"PassManager.add_loop_deletion_passŽ  ó    € õ 	Œ×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0r"   c                 óD   — t           j                             | ¦  «         dS )z—
        See https://llvm.org/docs/Passes.html#loop-extract-extract-loops-into-new-functions

        LLVM 14: `llvm::createLoopExtractorPass`
        N)r   r.   ÚLLVMPY_AddLoopExtractorPassrV   s    r    Úadd_loop_extractor_passz#PassManager.add_loop_extractor_pass–  rc   r"   c                 óD   — t           j                             | ¦  «         dS )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   r.   Ú!LLVMPY_AddSingleLoopExtractorPassrV   s    r    Úadd_single_loop_extractor_passz*PassManager.add_single_loop_extractor_passž  rn   r"   c                 óD   — t           j                             | ¦  «         dS )z‡
        See http://llvm.org/docs/Passes.html#sccp-sparse-conditional-constant-propagation

        LLVM 14: `LLVMAddSCCPPass`
        N)r   r.   ÚLLVMPY_AddSCCPPassrV   s    r    Úadd_sccp_passzPassManager.add_sccp_pass¦  r†   r"   c                 óD   — t           j                             | ¦  «         dS )z’
        See https://llvm.org/docs/Passes.html#loop-reduce-loop-strength-reduction

        LLVM 14: `llvm::createLoopStrengthReducePass`
        N)r   r.   Ú LLVMPY_AddLoopStrengthReducePassrV   s    r    Úadd_loop_strength_reduce_passz)PassManager.add_loop_strength_reduce_pass®  rg   r"   c                 óD   — t           j                             | ¦  «         dS )z‘
        See https://llvm.org/docs/Passes.html#loop-simplify-canonicalize-natural-loops

        LLVM 14: `llvm::createLoopSimplifyPass`
        N)r   r.   Ú LLVMPY_AddLoopSimplificationPassrV   s    r    Úadd_loop_simplification_passz(PassManager.add_loop_simplification_pass¶  rg   r"   c                 óD   — t           j                             | ¦  «         dS )zz
        See https://llvm.org/docs/Passes.html#loop-unroll-unroll-loops

        LLVM 14: `LLVMAddLoopUnrollPass`
        N)r   r.   ÚLLVMPY_AddLoopUnrollPassrV   s    r    Úadd_loop_unroll_passz PassManager.add_loop_unroll_pass¾  rr   r"   c                 óD   — t           j                             | ¦  «         dS )z�
        See https://llvm.org/docs/Passes.html#loop-unroll-and-jam-unroll-and-jam-loops

        LLVM 14: `LLVMAddLoopUnrollAndJamPass`
        N)r   r.   ÚLLVMPY_AddLoopUnrollAndJamPassrV   s    r    Úadd_loop_unroll_and_jam_passz(PassManager.add_loop_unroll_and_jam_passÆ  s    € õ 	Œ×.Ò.¨tÑ4Ô4Ð4Ð4Ð4r"   c                 óH   — t           j                             | ||¦  «         dS )z…
        See https://llvm.org/docs/Passes.html#loop-unswitch-unswitch-loops

        LLVM 14: `llvm::createLoopUnswitchPass`
        N)r   r.   ÚLLVMPY_AddLoopUnswitchPass)r   Úoptimize_for_sizeÚhas_branch_divergences      r    Úadd_loop_unswitch_passz"PassManager.add_loop_unswitch_passÎ  s5   € õ 	Œ×*Ò*¨4Ø+<Ø+@ñ	Bô 	Bð 	Bð 	Bð 	Br"   c                 óD   — t           j                             | ¦  «         dS )zž
        See https://llvm.org/docs/Passes.html#loweratomic-lower-atomic-intrinsics-to-non-atomic-form

        LLVM 14: `llvm::createLowerAtomicPass`
        N)r   r.   ÚLLVMPY_AddLowerAtomicPassrV   s    r    Úadd_lower_atomic_passz!PassManager.add_lower_atomic_passÚ  rÅ   r"   c                 óD   — t           j                             | ¦  «         dS )z©
        See https://llvm.org/docs/Passes.html#lowerinvoke-lower-invokes-to-calls-for-unwindless-code-generators

        LLVM 14: `llvm::createLowerInvokePass`
        N)r   r.   ÚLLVMPY_AddLowerInvokePassrV   s    r    Úadd_lower_invoke_passz!PassManager.add_lower_invoke_passâ  rÅ   r"   c                 óD   — t           j                             | ¦  «         dS )z‘
        See https://llvm.org/docs/Passes.html#lowerswitch-lower-switchinsts-to-branches

        LLVM 14: `llvm::createLowerSwitchPass`
        N)r   r.   ÚLLVMPY_AddLowerSwitchPassrV   s    r    Úadd_lower_switch_passz!PassManager.add_lower_switch_passê  rÅ   r"   c                 óD   — t           j                             | ¦  «         dS )zƒ
        See https://llvm.org/docs/Passes.html#memcpyopt-memcpy-optimization

        LLVM 14: `llvm::createMemCpyOptPass`
        N)r   r.   Ú LLVMPY_AddMemCpyOptimizationPassrV   s    r    Úadd_memcpy_optimization_passz(PassManager.add_memcpy_optimization_passò  rg   r"   c                 óD   — t           j                             | ¦  «         dS )z„
        See https://llvm.org/docs/Passes.html#mergefunc-merge-functions

        LLVM 14: `llvm::createMergeFunctionsPass`
        N)r   r.   ÚLLVMPY_AddMergeFunctionsPassrV   s    r    Úadd_merge_functions_passz$PassManager.add_merge_functions_passú  r_   r"   c                 óD   — t           j                             | ¦  «         dS )z˜
        See https://llvm.org/docs/Passes.html#mergereturn-unify-function-exit-nodes

        LLVM 14: `llvm::createUnifyFunctionExitNodesPass`
        N)r   r.   ÚLLVMPY_AddMergeReturnsPassrV   s    r    Úadd_merge_returns_passz"PassManager.add_merge_returns_pass  rÜ   r"   c                 óD   — t           j                             | ¦  «         dS )z‹
        See https://llvm.org/docs/Passes.html#partial-inliner-partial-inliner

        LLVM 14: `llvm::createPartialInliningPass`
        N)r   r.   ÚLLVMPY_AddPartialInliningPassrV   s    r    Úadd_partial_inlining_passz%PassManager.add_partial_inlining_pass
  r   r"   c                 óD   — t           j                             | ¦  «         dS )z’
        See https://llvm.org/docs/Passes.html#prune-eh-remove-unused-exception-handling-info

        LLVM 14: `llvm::createPruneEHPass`
        N)r   r.   Ú$LLVMPY_AddPruneExceptionHandlingPassrV   s    r    Ú!add_prune_exception_handling_passz-PassManager.add_prune_exception_handling_pass  r�   r"   c                 óD   — t           j                             | ¦  «         dS )z‹
        See https://llvm.org/docs/Passes.html#reassociate-reassociate-expressions

        LLVM 14: `llvm::createReassociatePass`
        N)r   r.   ÚLLVMPY_AddReassociatePassrV   s    r    Ú add_reassociate_expressions_passz,PassManager.add_reassociate_expressions_pass  rÅ   r"   c                 óD   — t           j                             | ¦  «         dS )z­
        See https://llvm.org/docs/Passes.html#rel-lookup-table-converter-relative-lookup-table-converter

        LLVM 14: `llvm::createDemoteRegisterToMemoryPass`
        N)r   r.   Ú$LLVMPY_AddDemoteRegisterToMemoryPassrV   s    r    Ú"add_demote_register_to_memory_passz.PassManager.add_demote_register_to_memory_pass"  r�   r"   c                 óD   — t           j                             | ¦  «         dS )a   
        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   r.   ÚLLVMPY_AddSROAPassrV   s    r    Úadd_sroa_passzPassManager.add_sroa_pass*  s    € õ 	Œ×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r"   c                 óD   — t           j                             | ¦  «         dS )zu
        See https://llvm.org/docs/Passes.html#sink-code-sinking

        LLVM 14: `llvm::createSinkingPass`
        N)r   r.   ÚLLVMPY_AddSinkPassrV   s    r    Úadd_sink_passzPassManager.add_sink_pass4  r†   r"   c                 óF   — t           j                             | |¦  «         dS )zŽ
        See https://llvm.org/docs/Passes.html#strip-strip-all-symbols-from-a-module

        LLVM 14: `llvm::createStripSymbolsPass`
        N)r   r.   ÚLLVMPY_AddStripSymbolsPass)r   Ú
only_debugs     r    Úadd_strip_symbols_passz"PassManager.add_strip_symbols_pass<  s"   € õ 	Œ×*Ò*¨4°Ñ<Ô<Ð<Ð<Ð<r"   c                 óD   — t           j                             | ¦  «         dS )z¨
        See https://llvm.org/docs/Passes.html#strip-dead-debug-info-strip-debug-info-for-unused-symbols

        LLVM 14: `llvm::createStripDeadDebugInfoPass`
        N)r   r.   Ú LLVMPY_AddStripDeadDebugInfoPassrV   s    r    Úadd_strip_dead_debug_info_passz*PassManager.add_strip_dead_debug_info_passD  rg   r"   c                 óD   — t           j                             | ¦  «         dS )z¦
        See https://llvm.org/docs/Passes.html#strip-dead-prototypes-strip-unused-function-prototypes

        LLVM 14: `llvm::createStripDeadPrototypesPass`
        N)r   r.   Ú!LLVMPY_AddStripDeadPrototypesPassrV   s    r    Úadd_strip_dead_prototypes_passz*PassManager.add_strip_dead_prototypes_passL  rn   r"   c                 óD   — t           j                             | ¦  «         dS )z§
        See https://llvm.org/docs/Passes.html#strip-debug-declare-strip-all-llvm-dbg-declare-intrinsics

        LLVM 14: `llvm::createStripDebugDeclarePass`
        N)r   r.   Ú)LLVMPY_AddStripDebugDeclarePrototypesPassrV   s    r    Úadd_strip_debug_declare_passz(PassManager.add_strip_debug_declare_passT  s    € õ 	Œ×9Ò9¸$Ñ?Ô?Ð?Ð?Ð?r"   c                 óD   — t           j                             | ¦  «         dS )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   r.   Ú"LLVMPY_AddStripNondebugSymbolsPassrV   s    r    Úadd_strip_nondebug_symbols_passz+PassManager.add_strip_nondebug_symbols_pass\  r§   r"   c                 óD   — t           j                             | ¦  «         dS )z’
        See https://llvm.org/docs/Passes.html#tailcallelim-tail-call-elimination

        LLVM 14: `llvm::createTailCallEliminationPass`
        N)r   r.   Ú!LLVMPY_AddTailCallEliminationPassrV   s    r    Úadd_tail_call_elimination_passz*PassManager.add_tail_call_elimination_passd  rn   r"   c                 óD   — t           j                             | ¦  «         dS )z>
        LLVM 14: `LLVMAddTypeBasedAliasAnalysisPass`
        N)r   r.   Ú$LLVMPY_AddTypeBasedAliasAnalysisPassrV   s    r    Ú"add_type_based_alias_analysis_passz.PassManager.add_type_based_alias_analysis_passl  s    € õ 	Œ×4Ò4°TÑ:Ô:Ð:Ð:Ð:r"   c                 óD   — t           j                             | ¦  «         dS )z€
        See http://llvm.org/docs/AliasAnalysis.html#the-basicaa-pass

        LLVM 14: `LLVMAddBasicAliasAnalysisPass`
        N)r   r.   Ú LLVMPY_AddBasicAliasAnalysisPassrV   s    r    Úadd_basic_alias_analysis_passz)PassManager.add_basic_alias_analysis_passr  rg   r"   c                 óD   — t           j                             | ¦  «         dS )z:http://llvm.org/docs/Passes.html#loop-rotate-rotate-loops.N)r   r.   ÚLLVMPY_LLVMAddLoopRotatePassrV   s    r    Úadd_loop_rotate_passz PassManager.add_loop_rotate_passz  s   € åŒ×,Ò,¨TÑ2Ô2Ð2Ð2Ð2r"   c                 ó`   — t           j                             | t          |¦  «        ¦  «         d S r?   )r   r.   ÚLLVMPY_AddTargetLibraryInfoPassr   )r   Útriples     r    Úadd_target_library_infoz#PassManager.add_target_library_info~  s(   € ÝŒ×/Ò/°µnÀVÑ6LÔ6LÑMÔMÐMÐMÐMr"   iè  c                 óf   — t          |¦  «        }t          j                             | ||¦  «         dS )aá  Add Numba specific Reference count pruning pass.

        Parameters
        ----------
        subpasses_flags : RefPruneSubpasses
            A bitmask to control the subpasses to be enabled.
        subgraph_limit : int
            Limit the fanout pruners to working on a subgraph no bigger than
            this number of basic-blocks to avoid spending too much time in very
            large graphs. Default is 1000. Subject to change in future
            versions.
        N)rG   r   r.   ÚLLVMPY_AddRefPrunePass)r   Úsubpasses_flagsÚsubgraph_limitÚiflagss       r    Úadd_refprune_passzPassManager.add_refprune_passƒ  s1   € õ # ?Ñ3Ô3ˆÝŒ×&Ò& t¨V°^ÑDÔDÐDÐDÐDr"   N©F)T)rœ   )rÉ   )FF)Kr%   r&   r'   r(   rW   rZ   r^   rb   rf   rj   rm   rq   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ÿ   r  r  r  r  r  r  r  r  r  r  r!  r$  r'  r*  r-  r0  r3  r6  r:  rG   rP   r@  r)   r"   r    rR   rR   h   s†  € € € € € ðð ð3ð 3ð 3ð+ð +ð +ð3ð 3ð 3ð2ð 2ð 2ð7ð 7ð 7ð7ð 7ð 7ð8ð 8ð 8ð/ð /ð /ð=ð =ð =ð =ðAð Að Að Að4ð 4ð 4ð,ð ,ð ,ð)ð )ð )ð2ð 2ð 2ð;ð ;ð ;ð/ð /ð /ð6ð 6ð 6ð2ð 2ð 2ðCð Cð Cð Cð?ð ?ð ?ð ?ð7ð 7ð 7ð9ð 9ð 9ðBð Bð Bð2ð 2ð 2ð@ð @ð @ð.ð .ð .ð4ð 4ð 4ð+ð +ð +ð8ð 8ð 8ðCð Cð Cð0ð 0ð 0ð6ð 6ð 6ð=ð =ð =ð =ð*ð *ð *ð(ð (ð (ð9ð 9ð 9ð)ð )ð )ð1ð 1ð 1ð2ð 2ð 2ð8ð 8ð 8ð)ð )ð )ð7ð 7ð 7ð7ð 7ð 7ð/ð /ð /ð5ð 5ð 5ð 27Ø5:ð
Bð 
Bð 
Bð 
Bð0ð 0ð 0ð0ð 0ð 0ð0ð 0ð 0ð7ð 7ð 7ð3ð 3ð 3ð1ð 1ð 1ð4ð 4ð 4ð;ð ;ð ;ð0ð 0ð 0ð;ð ;ð ;ð)ð )ð )ð)ð )ð )ð=ð =ð =ð =ð7ð 7ð 7ð8ð 8ð 8ð@ð @ð @ð9ð 9ð 9ð8ð 8ð 8ð;ð ;ð ;ð7ð 7ð 7ð3ð 3ð 3ðNð Nð Nð
 1BÔ0EØ)-ðEð Eð Eð Eð Eð Er"   rR   c                   ó.   — e Zd Zdd„Z	 	 dd„Z	 	 d	d„ZdS )
r@   Nc                 ó|   — |€t           j                             ¦   «         }t                               | |¦  «         d S r?   )r   r.   ÚLLVMPY_CreatePassManagerrR   Ú__init__)r   Úptrs     r    rE  zModulePassManager.__init__—  s6   € Øˆ;Ý”'×2Ò2Ñ4Ô4ˆCÝ×Ò˜T 3Ñ'Ô'Ð'Ð'Ð'r"   ÚyamlÚ c           	      ó  — |€ t           j                             | |¦  «        S t           j                             | |t	          |¦  «        t	          |¦  «        t	          |¦  «        ¦  «        }|dk    rt          d¦  «        ‚|dk    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.
        NrÉ   ú"Failed to initialize remarks file.r   )r   r.   ÚLLVMPY_RunPassManagerÚ LLVMPY_RunPassManagerWithRemarksr   ÚIOError)r   rD   Úremarks_fileÚremarks_formatÚremarks_filterÚrs         r    ÚrunzModulePassManager.runœ  s�   € ð  ÐÝ”7×0Ò0°°vÑ>Ô>Ð>å”×8Ò8Ø�f�n¨^Ñ<Ô<Ý˜~Ñ.Ô.Ý˜|Ñ,Ô,ñ.ô .ˆAð �BŠwˆwÝÐBÑCÔCÐCØ�q’5ˆLr"   c                 óø  — t          ¦   «         \  }}	 t          j        |d¦  «        5  	 ddd¦  «         n# 1 swxY w Y   |                      ||||¦  «        }|dk    rt	          d¦  «        ‚t          |¦  «        5 }t          |¦  «        |                     ¦   «         fcddd¦  «         t          j        |¦  «         S # 1 swxY w Y   	 t          j        |¦  «         dS # t          j        |¦  «         w xY w)a©  
        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.
        rQ  NrÉ   rJ  ©	r   ÚosÚfdopenrR  rM  ÚopenÚboolÚreadÚunlink)r   rD   rO  rP  Ú
remarkdescÚ
remarkfilerQ  Úfs           r    Úrun_with_remarksz"ModulePassManager.run_with_remarks·  sn  € õ ")¡¤Ñˆ
�Jð		"Ý”˜: sÑ+Ô+ð ð Øðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à—’˜ ¨^¸^ÑLÔLˆAØ�BŠwˆwÝÐBÑCÔCÐCÝ�jÑ!Ô!ð ) QÝ˜A‘w”w §¢¡¤Ð(ð)ð )ð )ð )ñ )ô )ð )õ ŒI�jÑ!Ô!Ð!Ð!ð)ð )ð )ð )øøøð )ð )ð )ð )ð )õ ŒI�jÑ!Ô!Ð!Ð!Ð!ø�BŒI�jÑ!Ô!Ð!Ð!øøøóJ   “C# ¨6ªC# ¶:ºC# ½:¾?C# Á=#CÂ C# ÃCÃC# ÃCÃ	C# Ã#C9r?   ©NrG  rH  ©rG  rH  )r%   r&   r'   rE  rR  r^  r)   r"   r    r@   r@   •  sa   € € € € € ð(ð (ð (ð (ð
 =CØðð ð ð ð6 7=Ø(*ð"ð "ð "ð "ð "ð "r"   r@   c                   ó8   — e Zd Zd„ Zd„ Zd„ Z	 	 d	d„Z	 	 d
d„ZdS )rC   c                 ó–   — t           j                             |¦  «        }|| _        d|_        t
                               | |¦  «         d S )NT)r   r.   Ú LLVMPY_CreateFunctionPassManagerÚ_moduleÚ_ownedrR   rE  )r   rD   rF  s      r    rE  zFunctionPassManager.__init__Õ  sA   € ÝŒg×6Ò6°vÑ>Ô>ˆØˆŒØˆŒÝ×Ò˜T 3Ñ'Ô'Ð'Ð'Ð'r"   c                 ó@   — t           j                             | ¦  «        S )zk
        Initialize the FunctionPassManager.  Returns True if it produced
        any changes (?).
        )r   r.   Ú$LLVMPY_InitializeFunctionPassManagerrV   s    r    Ú
initializezFunctionPassManager.initializeÛ  s   € õ
 Œw×;Ò;¸DÑAÔAÐAr"   c                 ó@   — t           j                             | ¦  «        S )zi
        Finalize the FunctionPassManager.  Returns True if it produced
        any changes (?).
        )r   r.   Ú"LLVMPY_FinalizeFunctionPassManagerrV   s    r    ÚfinalizezFunctionPassManager.finalizeâ  s   € õ
 Œw×9Ò9¸$Ñ?Ô?Ð?r"   NrG  rH  c           	      ó"  — |€ t           j                             | |¦  «        S t           j                             | |t	          |¦  «        t	          |¦  «        t	          |¦  «        ¦  «        }|dk    rt          d¦  «        ‚t          |¦  «        S )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.
        NrÉ   rJ  )r   r.   ÚLLVMPY_RunFunctionPassManagerÚ(LLVMPY_RunFunctionPassManagerWithRemarksr   rM  rX  )r   ÚfunctionrN  rO  rP  rQ  s         r    rR  zFunctionPassManager.runé  sƒ   € ð  ÐÝ”7×8Ò8¸¸xÑHÔHÐHå”×@Ò@Ø�h¥¨~Ñ >Ô >Ý˜~Ñ.Ô.Ý˜|Ñ,Ô,ñ.ô .ˆAð �BŠwˆwÝÐBÑCÔCÐCÝ˜‘7”7ˆNr"   c                 óø  — t          ¦   «         \  }}	 t          j        |d¦  «        5  	 ddd¦  «         n# 1 swxY w Y   |                      ||||¦  «        }|dk    rt	          d¦  «        ‚t          |¦  «        5 }t          |¦  «        |                     ¦   «         fcddd¦  «         t          j        |¦  «         S # 1 swxY w Y   	 t          j        |¦  «         dS # t          j        |¦  «         w xY w)aÏ  
        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.
        rQ  NrÉ   rJ  rT  )r   rp  rO  rP  r[  r\  rQ  r]  s           r    r^  z$FunctionPassManager.run_with_remarks  sp  € õ" ")¡¤Ñˆ
�Jð	"õ ”˜: sÑ+Ô+ð ð Øðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à—’˜ :¨~¸~ÑNÔNˆAØ�BŠwˆwÝÐBÑCÔCÐCÝ�jÑ!Ô!ð ) QÝ˜A‘w”w §¢¡¤Ð(ð)ð )ð )ð )ñ )ô )ð )õ ŒI�jÑ!Ô!Ð!Ð!ð)ð )ð )ð )øøøð )ð )ð )ð )ð )õ ŒI�jÑ!Ô!Ð!Ð!Ð!ø�BŒI�jÑ!Ô!Ð!Ð!øøør_  r`  ra  )r%   r&   r'   rE  ri  rl  rR  r^  r)   r"   r    rC   rC   Ó  s€   € € € € € ð(ð (ð (ðBð Bð Bð@ð @ð @ð ?EØðð ð ð ð6 9?Ø(*ð"ð "ð "ð "ð "ð "r"   rC   rA  )uÚctypesr   r   r   r   r   r   r	   r
   Úcollectionsr   Úenumr   Úllvmlite.bindingr   rU  Útempfiler   Úllvmlite.binding.commonr   Ú_prunestatsr   r+   r3   r7   r=   rA   rE   rG   Ú	ObjectRefrR   r@   rC   ÚLLVMPassManagerRefr.   rD  ÚrestypeÚLLVMModuleRefrd  ÚargtypesrU   rK  rL  rh  rk  ÚLLVMValueRefrn  ro  rY   r]   ra   re   ri   rl   rp   rt   rz   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ó   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/  r2  r8  r<  r/   r)   r"   r    ú<module>r€     sþ  ððð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð à "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2àˆj˜ØBñEô E€ðBð Bð Bð Bð B�ñ Bô Bð Bð0$ð $ð $ð $ð $�Iñ $ô $ð $ð*ð *ð *ð *ð	1ð 	1ð 	1ðð ð ð ð ð ð'ð 'ð 'ð3ð 3ð 3ð 3ð 3˜ñ 3ô 3ð 3ðjEð jEð jEð jEð jE�#”-ñ jEô jEð jEðZ;"ð ;"ð ;"ð ;"ð ;"˜ñ ;"ô ;"ð ;"ð|N"ð N"ð N"ð N"ð N"˜+ñ N"ô N"ð N"ðh ,/Ô+A€„Ô  Ô (à58Ô5FÐ4G€„Ô (Ô 1Ø36Ô3I€„Ô (Ô 0à.1Ô.DÐ-E€„Ô !Ô *à*-Ô*@Ø*-Ô*;ð*=€„Ô Ô &à(.€„Ô Ô %à58Ô5KØ58Ô5FØ5=Ø5=Ø5=ð	5?€„Ô (Ô 1ð
 49€„Ô (Ô 0à9<Ô9OÐ8P€„Ô ,Ô 5Ø7=€„Ô ,Ô 4à7:Ô7MÐ6N€„Ô *Ô 3Ø5;€„Ô *Ô 2à25Ô2HØ25Ô2Bð2D€„Ô %Ô .à06€„Ô %Ô -ð Ô˜CÔ,¨h¸À(ð=€„Ô 0Ô 9ð <A€„Ô 0Ô 8à),Ô)?Ð(@€„Ô Ô %Ø14Ô1GÐ0H€„Ô $Ô -Ø03Ô0FÐ/G€„Ô #Ô ,Ø58Ô5KÐ4L€„Ô (Ô 1Ø58Ô5KÐ4L€„Ô (Ô 1Ø69Ô6LÐ5M€„Ô )Ô 2Ø-0Ô-CÐ,D€„Ô  Ô )Ø03Ô0FÈÐ/O€„Ô #Ô ,àÔØ
ð4€„Ô 'Ô 0ð 36Ô2HÐ1I€„Ô %Ô .Ø36Ô3IÐ2J€„Ô &Ô /Ø*-Ô*@Ð)A€„Ô Ô &Ø03Ô0FÐ/G€„Ô #Ô ,Ø'*Ô'=Ð&>€„Ô Ô #Ø9<Ô9OÐ8P€„Ô ,Ô 5Ø-0Ô-CÐ,D€„Ô  Ô )Ø47Ô4JÐ3K€„Ô 'Ô 0Ø03Ô0FÐ/G€„Ô #Ô ,Ø03Ô0FÈÐ/O€„Ô #Ô ,Ø/2Ô/EÀvÐ.N€„Ô "Ô +Ø58Ô5KÐ4L€„Ô (Ô 1àÔð7€„Ô *Ô 3ð Ôð@€„Ô 3Ô <ð ÔðA€„Ô 4Ô =à.1Ô.DÐ-E€„Ô !Ô *Ø(+Ô(>Ð'?€„Ô Ô $Ø/2Ô/EÐ.F€„Ô "Ô +Ø03Ô0FÐ/G€„Ô #Ô ,Ø69Ô6LÐ5M€„Ô )Ô 2Ø58Ô5KÐ4L€„Ô (Ô 1Ø58Ô5KÐ4L€„Ô (Ô 1Ø-0Ô-CÐ,D€„Ô  Ô )Ø36Ô3IÐ2J€„Ô &Ô /àÔØ
Ø
ð/€„Ô "Ô +ð /2Ô.DÐ-E€„Ô !Ô *Ø.1Ô.DÐ-E€„Ô !Ô *Ø.1Ô.DÐ-E€„Ô !Ô *Ø58Ô5KÐ4L€„Ô (Ô 1Ø14Ô1GÐ0H€„Ô $Ô -Ø/2Ô/EÐ.F€„Ô "Ô +Ø25Ô2HÐ1I€„Ô %Ô .Ø9<Ô9OÐ8P€„Ô ,Ô 5Ø.1Ô.DÐ-E€„Ô !Ô *Ø9<Ô9OÐ8P€„Ô ,Ô 5Ø'*Ô'=Ð&>€„Ô Ô #Ø/2Ô/EÀvÐ.N€„Ô "Ô +Ø58Ô5KÐ4L€„Ô (Ô 1Ø69Ô6LÐ5M€„Ô )Ô 2àÔð>€„Ô 1Ô :à7:Ô7MÐ6N€„Ô *Ô 3Ø69Ô6LÐ5M€„Ô )Ô 2Ø03Ô0FÈÐ/N€„Ô #Ô ,Ø03Ô0FÐ/G€„Ô #Ô ,àÔ˜Eð3#€„Ô &Ô /à,/Ô,BÐ+C€„Ô Ô (Ø25Ô2HÐ1I€„Ô %Ô .Ø),Ô)?Ð(@€„Ô Ô %à69Ô6LÐ5M€„Ô )Ô 2Ø47Ô4JÐ3K€„Ô 'Ô 0Ø&)Ô&<Ð%=€„Ô Ô "Ø7:Ô7MÐ6N€„Ô *Ô 3Ø'*Ô'=Ð&>€„Ô Ô #Ø'*Ô'=Ð&>€„Ô Ô #Ø'*Ô'=Ð&>€„Ô Ô #Ø9<Ô9OÐ8P€„Ô ,Ô 5Ø58Ô5KÐ4L€„Ô (Ô 1Ø47Ô4JØ4<ð4>€„Ô 'Ô 0ð ,/Ô+AÀ5Ø+3ð+5€„Ô Ô 'ð .5¨W°]Ñ-CÔ-CÀVÐ,L€„Ô  Ô )Ð )Ð )r"   