§
    ƒÛgTÜ  ã                   óD  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ	 d dl
mZ d dlmZmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
l m!Z!  e"g d¢¦  «        Z#d„ Z$d„ Z%d„ Z& G d„ de'¦  «        Z( G d„ de¬¦  «        Z) G d„ de)¦  «        Z* G d„ de*¦  «        Z+ G d„ de*¦  «        Z, G d„ de'¦  «        Z-d„ Z. G d„ de'¦  «        Z/ G d„ d e¬¦  «        Z0 G d!„ d"e0¦  «        Z1 G d#„ d$e1¦  «        Z2 G d%„ d&e1¦  «        Z3d'„ Z4d(„ Z5dS ))é    N)ÚabstractmethodÚABCMeta)ÚutilsÚconfigÚcgutils)Úcreate_pass_manager_builder)Úremove_redundant_nrt_refct)Úrtsys)Úrequire_global_compiler_lock)ÚNumbaInvalidConfigWarning)Údisassemble_elf_to_cfg)ÚPassTimingsCollection)Úx86Úi386Úi486Úi586Úi686Úi786Úi886Úi986c                 óJ   — |                       d¦  «        d         }|t          v S )Nú-r   )ÚsplitÚ_x86arch)ÚtripleÚarchs     úH/granary/edev/quantum/lib/python3.11/site-packages/numba/core/codegen.pyÚ_is_x86r      s#   € Ø�<Š<˜ÑÔ˜QÔ€DØ•8ÐÐó    c                  ó<  — t           j                             d¦  «        } | sdS d}| D ]s}|                     ¦   «         }	 |t	          t
          j        |                     ¦   «         ¦  «        z  }ŒG# t          $ r  t          j
        d|›�t          ¦  «         Y Œpw xY w|S )zÌParse refprune flags from the `config`.

    Invalid values are ignored an warn via a `NumbaInvalidConfigWarning`
    category.

    Returns
    -------
    flags : llvmlite.binding.RefPruneSubpasses
    ú,r   zinvalid refprune flags )r   ÚLLVM_REFPRUNE_FLAGSr   ÚstripÚgetattrÚllÚRefPruneSubpassesÚupperÚAttributeErrorÚwarningsÚwarnr   )ÚflagsÚvalÚitems      r   Ú_parse_refprune_flagsr.       s¼   € õ Ô&×,Ò,¨SÑ1Ô1€EØð ØˆqØ
€CØð 5ð 5ˆØ�zŠz‰|Œ|ˆð	5Ø•7�2Ô/°·²±´Ñ>Ô>Ñ>ˆCˆCøÝð 	5ð 	5ð 	5ÝŒMÐ<°DÐ<Ð<Ý3ñ5ô 5ð 5ð 5ð 5ð	5øøøð €Js   ¿/A/Á/'BÂBc                 ó|  ‡	‡
‡‡— t           j        rX	 dd l}ddlmŠ ddlm} ddlm} ddlmŠ	 ddl	m
Š
 ||dœ}||         Šˆ	ˆ
ˆˆfd„}n&# t          $ r d	}t          |¦  «        ‚w xY wt          }t          d
¦  «         t          |                      dd¦  «        ¦  «          ||¦  «         t          d
¦  «         d S )Nr   )Ú	highlight)ÚGasLexer)Ú	LlvmLexer)ÚTerminal256Formatter)Úby_colorscheme)ÚllvmÚasmc           
      óp   •— t           ‰|  ‰¦   «          ‰ ‰¦   «         ¬¦  «        ¦  «        ¦  «         d S )N)Ústyle)Úprint)Úargr3   r4   r0   Úlexers    €€€€r   Úprinterzdump.<locals>.printerH   sW   ø€ Ý�i�i  U U¡W¤WØ*Ð*°°Ñ1AÔ1AÐBÑBÔBñDô Dñ Eô Eð Eð Eð Er   z0Please install pygments to see highlighted dumpszP================================================================================éP   r   )r   ÚHIGHLIGHT_DUMPSÚpygmentsr0   Úpygments.lexersr1   r2   Úpygments.formattersr3   Únumba.misc.dump_styler4   ÚImportErrorÚ
ValueErrorr9   Úcenter)ÚheaderÚbodyÚlangr?   Ú	gas_lexerÚ
llvm_lexerÚ	lexer_mapr<   Úmsgr3   r4   r0   r;   s            @@@@r   ÚdumprM   8   s@  øøøø€ ÝÔð ð	EØˆOˆOˆOð
 +Ð*Ð*Ð*Ð*Ð*Ø=Ð=Ð=Ð=Ð=Ð=Ø?Ð?Ð?Ð?Ð?Ð?Ø@Ð@Ð@Ð@Ð@Ð@Ø<Ð<Ð<Ð<Ð<Ð<à!+°IÐ>Ð>ˆIØ˜d”OˆEðEð Eð Eð Eð Eð Eð Eð Eð Eøõ ð 	"ð 	"ð 	"ØDˆCÝ˜S‘/”/Ð!ð	"øøøõ  ˆÝ	ˆ(�O„O€OÝ	ˆ&�-Š-˜˜CÑ
 Ô
 Ñ!Ô!Ð!Ø€GˆD�M„M€MÝ	ˆ(�O„O€O€O€Os   ’A
 Á
A&c                   ó<   — e Zd ZdZd„ Z	 	 	 	 dd„Zdd	„Zd
„ Zd„ ZdS )Ú_CFGa  
    Wraps the CFG graph for different display method.

    Instance of the class can be stringified (``__repr__`` is defined) to get
    the graph in DOT format.  The ``.display()`` method plots the graph in
    PDF.  If in IPython notebook, the returned image can be inlined.
    c                 óš   — || _         || _        || _        |                     |¦  «        }t	          j        |¦  «        | _        || _        d S ©N)ÚcresÚnameÚpy_funcÚget_functionr%   Úget_function_cfgÚdotÚkwargs)ÚselfrR   rS   rT   rX   Úfns         r   Ú__init__z_CFG.__init__[   sG   € ØˆŒ	ØˆŒ	ØˆŒØ×Ò˜tÑ$Ô$ˆÝÔ& rÑ*Ô*ˆŒØˆŒˆˆr   NTFé
   c	                 óÚ  ‡K‡L‡M‡N‡O‡P‡Q‡R‡S‡T‡U‡V‡W‡X— ddl ŠSddlŠWddl}	ddl}
ddlm} ddlm} ddlm	} ddl
m} d} |||||||||¬¦  «        } |||¬	¦  «        ŠKd
„ } |||¦  «          |‰K|¦  «          |d„ ¦  «        ŠNd‰Nd<   d‰Nd<   d‰Nd<   d‰Nd<   d‰Nd<   d‰Nd<   d‰Nd<   d‰Nd<   d‰Nd<   d‰Nd<   d ‰Nd!<   | j                             | j        ¦  «        }| j                             ¦   «         }ˆWfd"„} ||¦  «        ŠUˆSfd#„} || j        | j        |¦  «        }‰W                     d$¦  «        }‰W                     d%¦  «        }‰W                     d&¦  «        ŠVd'}‰W                     |¦  «        ŠT‰W                     d(¦  «        }‰W                     d)¦  «        }‰W                     d*¦  «        }‰W                     d+¦  «        }‰W                     d,¦  «        }‰W                     d-¦  «        }‰W                     d.¦  «        } ‰W                     d/¦  «        }!d0„ }"d1„ ŠLi }#i }$‰Kj        r|
                     | j        ¦  «        \  ŠXŠQ |j        |¦  «                             d2d3¦  «        }%‰S                     |%¦  «                             d4¬5¦  «        }&|	                     |&                     d6¦  «        ¦  «        }'d}(|'d7         D �]Ð})d8\  ŠPŠO|)d9         }*|)d:         }+|)d;         },|+|#|,<   |*d<d=…         }*|*                     d>¦  «        }-g }.d<ŠMd3}/|                     |-d=         ¦  «        }0|-}1|0�ë|0                     ¦   «         d         }2|2                     d?¦  «        }3t;          |3¦  «        ŠMd@}4g }5|j        r‰Nd         ‰Nd         dAœ}6ni }6|3D ]l}7|                     |7¦  «                             ¦   «         \  }8}9|6                     |9dB¦  «        }:|5                      |4 !                    |:|8|9¦  «        ¦  «         Œmd3 "                    |5¦  «        }/|-dd=…         }1dC};|.                      |; !                    ‰NdD         ‰M ‰L|1d          #                    ¦   «         ¦  «        ¦  «        ¦  «         dEŠRˆKˆLˆMˆNˆOˆPˆQˆRˆTˆUˆVˆXfdF„}<|1d<d…         D �]’}=|                     |=¦  «        rŒ‰Kj$        s‰Kj        r |<|=|.¦  «        }>|>�|>\  ŠPŠO|j%        r| &                    |=¦  «        r	‰Nd         }?næ|j'        r| &                    |=¦  «        r	‰Nd         }?nÁ|j(        r| &                    |=¦  «        r	‰Nd         }?nœ|j)        r|  &                    |=¦  «        r	‰Nd         }?nw|j*        r|! &                    |=¦  «        r	‰Nd         }?nR|j+        r| &                    |=¦  «        r	‰Nd         }?n-|j,        r| &                    |=¦  «        r	‰Nd!         }?n‰NdD         }?|?‰NdD         us|sA |" ‰L|=¦  «        ¦  «        D ],}@|.                      ‰R !                    |?‰M|@¦  «        ¦  «         Œ-�Œ”|/r(|.                      dG !                    |/¦  «        ¦  «         d3 "                    |.¦  «        }A|ArdH|(›dI|A›dJ�}BdK !                    |B¦  «        }*nd3}*| -                    |+|*¬L¦  «         �ŒÒdM|'v r=|'dM         D ]4}C|Cd;         },|C                     dNd¦  «        }D|CdO         |CdP         |Df|$|,<   Œ5|$ .                    ¦   «         D ]I\  },}C|#|Cd<                  }E|#|Cd                  }F|CdQ         }G|G�|EdR|Gz  z  }E| /                    |E|F¦  «         ŒJ|r‚g }H‰N .                    ¦   «         D ].\  }I}J|H                      dS !                    |J|I¦  «        ¦  «         Œ/| -                    dTdU !                    d3 "                    |H¦  «        ¦  «        ¬L¦  «         |€|�| 0                    |||¬V¦  «         |                     dW¬5¦  «        S )Xz§
        "Pretty" prints the DOT graph of the CFG.
        For explanation of the parameters see the docstring for
        numba.core.dispatcher::inspect_cfg.
        r   N)Úbinding)ÚList)ÚSimpleNamespace)ÚdefaultdictF)ÚincrefÚdecrefÚreturnsÚraisesÚmeminfoÚbranchesÚllvm_intrin_callsÚfunction_calls)ÚpythonÚlineinfoc                 óH  — t          |t          ¦  «        r| j        D ]}t          | ||¦  «         ŒdS t          |t          ¦  «        rs|                     ¦   «         D ]\\  }}|| j        vrt          d|z  ¦  «        ‚t          |t          ¦  «        rt          | ||¦  «         ŒGd}t          |||fz  ¦  «        ‚dS t          |t          ¦  «        r3|D ].}|| j        vrt          d|z  ¦  «        ‚t          | |d¦  «         Œ/dS d}t          |t          |¦  «        z  ¦  «        ‚)zß Parses the kwarg into a consistent format for use in configuring
            the Digraph rendering. _config is the configuration instance to
            update, kwarg is the kwarg on which to base the updates.
            zUnexpected key in kwarg: %sz$Unexpected value for key: %s, got:%sTz)Unhandled configuration type for kwarg %sN)	Ú
isinstanceÚboolÚ__dict__ÚsetattrÚdictÚitemsrD   ÚsetÚtype)Ú_configÚkwargÚattrÚkÚvrL   r-   s          r   Úparse_configz)_CFG.pretty_printer.<locals>.parse_config€   sg  € õ
 ˜%¥Ñ&Ô&ð 4Ø#Ô,ð 2ð 2�DÝ˜G T¨5Ñ1Ô1Ð1Ð1ð2ð 2å˜E¥4Ñ(Ô(ð 4Ø!ŸKšK™MœMð 7ð 7‘D�A�qØ Ô 0Ð0Ð0Ý(Ð)FÈÑ)JÑKÔKÐKÝ! !¥TÑ*Ô*ð 7Ý ¨¨AÑ.Ô.Ð.Ð.àD˜Ý(¨°°1¨v©Ñ6Ô6Ð6ð7ð 7õ ˜E¥3Ñ'Ô'ð 4Ø!ð 5ð 5�DØ 7Ô#3Ð3Ð3Ý(Ð)FÈÑ)MÑNÔNÐNå ¨¨tÑ4Ô4Ð4Ð4ð	5ð 5ð B�Ý  ¥t¨E¡{¤{Ñ!2Ñ3Ô3Ð3r   c                  ó   — dS )NÚwhite© r}   r   r   ú<lambda>z%_CFG.pretty_printer.<locals>.<lambda>    s   €  € r   ÚorangeÚmarkerÚyellowrj   ÚgreenÚtruebrÚredÚfalsebrÚcyanrb   Ú	turquoiserc   Ú	lightpinkÚraiseÚlightseagreenrf   ÚpurpleÚreturnÚ	rosybrownrh   Útomatori   c                 ó
  •— i }‰                      d¦  «        }|                      ¦   «         D ]U}|                     |¦  «        }|�<|                     ¦   «         }|�&t	          |¦  «        dk    sJ ‚|d         ||d         <   ŒV|S )zÑ Gets the metadata entries from the LLVM IR, these look something
            like '!123 = INFORMATION'. Returns a map of metadata key to metadata
            value, i.e. from the example {'!123': INFORMATION}z(^[!][0-9]+)(\s+=\s+.*)Né   é   r   )ÚcompileÚ
splitlinesÚmatchÚgroupsÚlen)Úllvm_strÚmdÚmetadata_entryÚxr”   ÚgÚres         €r   Úget_metadataz)_CFG.pretty_printer.<locals>.get_metadata²   sŒ   ø€ ð ˆBØŸZšZÐ(BÑCÔCˆNØ×(Ò(Ñ*Ô*ð (ð (�Ø&×,Ò,¨QÑ/Ô/�ØÐ$ØŸš™œ�AØ�}Ý" 1™vœv¨š{˜{˜{˜{Ø#$ Q¤4˜˜1˜Qœ4™øØˆIr   c                 ó0  •— d}t          |¦  «        |k    r*d|› d�}t          j        |t          ¦  «         |d |…         }‰                     | |¬¦  «        }|                     d¬¦  «         |                     ddd	t          |¦  «        z  ¬
¦  «         |S )NéÈ   zCFG output filename "z9" exceeds maximum supported length, it will be truncated.)ÚfilenameÚTB)ÚrankdirÚnodeÚnonez%s)ÚshapeÚfontsize)r–   r)   r*   r   ÚDigraphrw   Ústr)rS   Úfnamer¦   ÚcmaxÚwstrÚfÚgvs         €r   Úinit_digraphz)_CFG.pretty_printer.<locals>.init_digraphÄ   s¨   ø€ ð ˆDÝ�5‰zŒz˜DÒ Ð ðC°ð Cð Cð C�å”˜dÕ$=Ñ>Ô>Ð>Ø˜e˜t˜eœ�Ø—
’
˜4¨%�
Ñ0Ô0ˆAØ�FŠF˜4ˆFÑ Ô Ð Ø�FŠF�6 °$½¸X¹¼Ñ2FˆFÑGÔGÐGØˆHr   z
.*{(.*)}.*z.*<(.*)>(.*)z.*!dbg\s+(![0-9]+).*z7.*!DILocation\(line:\s+([0-9]+),\s+column:\s+([0-9]),.*z.*call void @llvm.dbg.value.*z@NRT_incref\bz@NRT_decref\bz@NRT_MemInfoz.*call.*@llvm\..*z.*call.*@.*z"store .*\!numba_exception_output.*zret i32 [^1],?.*c                 ó0   — t          j        | dd¬¦  «        S )Néx   z... )ÚwidthÚsubsequent_indent)ÚtextwrapÚwrap)Úss    r   r´   z!_CFG.pretty_printer.<locals>.wrapñ   s   € Ý”= ¨#ÀÐHÑHÔHÐHr   c                 ó¨  — d}t          | ¦  «        |k    r:t          t          | ¦  «        ¦  «        }d                     | d |…         |¦  «        } t	          j        | ¦  «        } |                      dd¦  «        } |                      dd¦  «        } |                      dd¦  «        } |                      d	d
¦  «        } |                      dd¦  «        } | S )Ni,  z{}...<hash={}>z\{z&#123;z\}z&#125;ú\z&#92;ú%z&#37;ú!z&#33;)r–   r¨   ÚhashÚformatÚhtmlÚescapeÚreplace)rµ   ÚnÚhss      r   Úcleanz"_CFG.pretty_printer.<locals>.cleanö   s·   € ð ˆAÝ�1‰vŒv˜ŠzˆzÝ�˜a™œ‘\”\�Ø$×+Ò+¨A¨b¨q¨b¬E°2Ñ6Ô6�Ý”˜A‘”ˆAØ—	’	˜% Ñ*Ô*ˆAØ—	’	˜% Ñ*Ô*ˆAØ—	’	˜$ Ñ(Ô(ˆAØ—	’	˜#˜wÑ'Ô'ˆAØ—	’	˜#˜wÑ'Ô'ˆAØˆHr   z\l...Ú Údot_json)r»   úutf-8Úobjects)éÿÿÿÿrÆ   ÚlabelrS   Ú_gvidr‘   rÆ   z\lú|z<<td BGCOLOR="{}" BORDER="1" ALIGN="center" PORT="{}">{}</td>)ÚTÚFr|   zF<tr><td BGCOLOR="{}" BORDER="1" ALIGN="left" COLSPAN="{}">{}</td></tr>ÚdefaultzF<tr><td BGCOLOR="{}" BORDER="0" ALIGN="left" COLSPAN="{}">{}</td></tr>c                 ó*  •— ‰                      | ¦  «        }|��q|                     ¦   «         }|��\t          |¦  «        dk    s
J |¦   «         ‚|d         }‰                     |d¦  «        }|�� ‰                      |¦  «        }|��
t          |                     ¦   «         ¦  «        dk    s
J |¦   «         ‚|                     ¦   «         \  }}|‰k    s|‰k    rº‰j        rEd}	|	|||fz  }
‰                     ‰d         ‰ ‰|
¦  «        ¦  «        }|                     |¦  «         ‰j        r[t          |¦  «        ‰dz   z
  }‰|dz            }‰                     ‰d         ‰ ‰|¦  «        ¦  «        }|                     |¦  «         ||fS dS dS dS dS dS )zŸ
                Search line `l` for metadata associated with python or line info
                and inject it into `new_lines` if requested.
                Nr‘   r   r�   zMarker %s, Line %s, column %sr€   rj   )	r”   r•   r–   Úgetrk   r»   Úappendrj   Úint)ÚlÚ	new_linesÚmatchedr›   r€   Ú
debug_dataÚldÚlineÚcolÚmfmtÚ	mark_lineÚlnÚlidxÚsource_lineÚ_interleaverÁ   Úcol_spanÚcsÚcur_colÚcur_lineÚfirstlinenoÚfmtÚlocation_entryr˜   Úmetadata_markerÚsrc_codes                 €€€€€€€€€€€€r   Úmetadata_interleavez0_CFG.pretty_printer.<locals>.metadata_interleavei  sÓ  ø€ ð
 *×/Ò/°Ñ2Ô2�ØÑ&àŸšÑ(Ô(�AØ‘}Ý" 1™vœv¨š{˜{˜{¨A™{œ{˜{Ø!" 1¤˜Ø%'§V¢V¨F°DÑ%9Ô%9˜
Ø%Ñ1ð "0×!5Ò!5°jÑ!AÔ!A˜BØ!™~å'*¨2¯9ª9©;¬;Ñ'7Ô'7¸1Ò'<Ð'<Ð'<¸bÑ'<Ô'<Ð'<Ø,.¯IªI©K¬K¡	  cð $(¨8Ò#3Ð#3°s¸g²~°~Ø'2Ô';ð %=Ø/N¨Ø48¸FÀDÈ#Ð;NÑ4N¨	Ø-0¯ZªZ¸¸8¼ÀhØ8=¸¸iÑ8HÔ8Hñ.Jô .J¨à(1×(8Ò(8¸Ñ(<Ô(<Ð(<Ø'2Ô'9ð 
%=õ 03°4©y¬y¸KÈ!¹OÑ/L¨Ø6>¸tÀa¹xÔ6H¨Ø-0¯ZªZ¸¸8¼ÀhØ8=¸¸kÑ8JÔ8Jñ.Lô .L¨à(1×(8Ò(8¸Ñ(<Ô(<Ð(<Ø+/°¨9Ð$4ðG 'Ð&ð %�}ð 2Ð1ð  .˜~ð 8F°~r   z<tr>{}</tr>z<table id="z<" BORDER="1" CELLBORDER="0" CELLPADDING="0" CELLSPACING="0">z</table>z<{}>)rÇ   ÚedgesÚtailportÚheadÚtailr�   z:%sz;<tr><td BGCOLOR="{}" BORDER="0" ALIGN="center">{}</td></tr>ÚKeyzn<<table BORDER="1" CELLBORDER="1" CELLPADDING="2" CELLSPACING="1"><tr><td BORDER="0">Key:</td></tr>{}</table>>)r    Úviewr»   Úsvg)1Úgraphvizrœ   ÚjsonÚinspectÚllvmliter^   Únumba.typedr_   Útypesr`   Úcollectionsra   rR   rU   rS   Úget_llvm_strr’   rj   ÚgetsourcelinesrT   rV   r¾   ÚSourceÚpipeÚloadsÚdecoder   r”   r•   r–   rg   rÎ   rÏ   r»   Újoinr#   rk   rb   Úsearchrc   rf   re   rd   rh   ri   r£   rr   ÚedgeÚrender)YrY   r    rí   Úrender_formatr0   Ú
interleaveÚstrip_irÚshow_keyr¦   rð   rñ   r%   r_   r`   ra   Ú_defaultÚ
_highlightrz   rZ   r—   r�   r®   r¬   Ú
port_matchÚport_jmp_matchÚlocation_exprÚ	dbg_valueÚ
nrt_increfÚ
nrt_decrefÚnrt_meminfoÚll_intrin_callsÚll_function_callÚll_raiseÚ	ll_returnr´   Únode_idsÚedge_idsÚraw_dotÚ
json_bytesÚjzonÚidcÚobjrÇ   rS   ÚgvidÚlinesrÒ   Ú	port_linerÓ   Úsliced_linesÚportsÚports_tokensÚtdfmtÚtbl_dataÚcolorsÚtokÚtargetÚvalueÚcolorÚ	fmtheaderrç   rÑ   Úupdated_lineinfoÚcolourrš   ÚdatÚtabrþ   Útprë   rê   ÚportÚkey_tabrx   ry   rÝ   rÁ   rÞ   rß   rà   rá   râ   rã   r­   rä   r˜   rå   rœ   ræ   sY                                                                              @@@@@@@@@@@@@@r   Úpretty_printerz_CFG.pretty_printerc   s
  øøøøøøøøøøøøøø€ ð 	ÐÐÐØˆ	ˆ	ˆ	ØˆˆˆØˆˆˆØ*Ð*Ð*Ð*Ð*Ð*Ø$Ð$Ð$Ð$Ð$Ð$Ø)Ð)Ð)Ð)Ð)Ð)Ø+Ð+Ð+Ð+Ð+Ð+àˆØ$�_¨HØ+3Ø,4Ø+3Ø,4Ø-5Ø6>Ø3;ð>ñ >ô >ˆ
ð &�o¨XÀÐIÑIÔIˆð	4ð 	4ð 	4ð6 	ˆ�Z Ñ+Ô+Ð+Øˆ�[ *Ñ-Ô-Ð-ð ˆ[˜˜Ñ)Ô)ˆØˆˆ8‰Øˆˆ8‰Øˆˆ8‰Øˆˆ9‰Øˆˆ8‰Ø"ˆˆ8‰Ø!ˆˆ7‰Ø'ˆˆ9‰Øˆˆ8‰Ø"-ˆÐÑØ'ˆÐÑð ŒY×#Ò# D¤IÑ.Ô.ˆà”9×)Ò)Ñ+Ô+ˆð	ð 	ð 	ð 	ð 	ð ˆ\˜(Ñ#Ô#ˆð	ð 	ð 	ð 	ð 	ð$ ˆL˜œ D¤I¨xÑ8Ô8ˆð —Z’Z Ñ-Ô-ˆ
àŸš NÑ3Ô3ˆàŸ*š*Ð%<Ñ=Ô=ˆð4ˆàŸš MÑ2Ô2ˆà—J’JÐ?Ñ@Ô@ˆ	à—Z’ZÐ 0Ñ1Ô1ˆ
Ø—Z’ZÐ 0Ñ1Ô1ˆ
Ø—j’j Ñ0Ô0ˆØŸ*š*Ð%9Ñ:Ô:ˆØŸ:š: nÑ5Ô5ÐØ—:’:ÐCÑDÔDˆØ—J’JÐ1Ñ2Ô2ˆ	ð	Ið 	Ið 	Ið
	ð 	ð 	ð, ˆØˆð Ôð 	IØ$+×$:Ò$:¸4¼<Ñ$HÔ$HÑ!ˆH�kð
 &�"Ô% bÑ)Ô)×1Ò1°(¸BÑ?Ô?ˆØ—Y’Y˜wÑ'Ô'×,Ò,°JÐ,Ñ?Ô?ˆ
Ø�zŠz˜*×+Ò+¨GÑ4Ô4Ñ5Ô5ˆàˆà˜	”?ð q	&ñ q	&ˆCð !'ÑˆH�gØ˜”LˆEØ�v”;ˆDØ�w”<ˆDØ!ˆH�T‰Nð ˜!˜B˜$”KˆEØ—K’K Ñ&Ô&ˆEð ˆIð, ˆHð ˆIØ ×&Ò& u¨R¤yÑ1Ô1ˆGØ ˆLØÐ"àŸšÑ(Ô(¨Ô+�Ø$Ÿ{š{¨3Ñ/Ô/�Ý˜|Ñ,Ô,�ð-�à�ØÔ&ð  Ø#% h¤<°b¸´mÐDÐD�F�Fà�FØ'ð Hð H�CØ$2×$8Ò$8¸Ñ$=Ô$=×$DÒ$DÑ$FÔ$F‘M�F˜EØ"ŸJšJ u¨gÑ6Ô6�EØ—O’O E§L¢L°¸ÀÑ$FÔ$FÑGÔGÐGÐGØŸGšG HÑ-Ô-�	ð  % S b Sœz�ð5ˆIà×Ò˜Y×-Ò-¨b°¬m¸XØ.3¨e°LÀ´O×4IÒ4IÑ4KÔ4KÑ.LÔ.LñNô Nñ Oô Oð Oð/ˆCð)5ð )5ð )5ð )5ð )5ð )5ð )5ð )5ð )5ð )5ð )5ð )5ð )5ð )5ð )5ð )5ðV " ! " "Ô%ð &Jñ &J�ð —?’? 1Ñ%Ô%ð Øð Ô'ð =¨;Ô+=ð =Ø':Ð':¸1¸iÑ'HÔ'HÐ$Ø'Ð3Ø,<Ñ)˜ 'ð Ô$ð +¨×):Ò):¸1Ñ)=Ô)=ð +Ø œ\�F�FØÔ&ð +¨:×+<Ò+<¸QÑ+?Ô+?ð +Ø œ\�F�FØÔ'ð +¨K×,>Ò,>¸qÑ,AÔ,Að +Ø 	œ]�F�FØÔ&ð 
+¨8¯?ª?¸1Ñ+=Ô+=ð 
+à œ[�F�FØÔ'ð +¨I×,<Ò,<¸QÑ,?Ô,?ð +Ø œ\�F�FØÔ1ð +°o×6LÒ6LÈQÑ6OÔ6Oð +ØÐ 3Ô4�F�FØÔ.ð +Ð3C×3JÒ3JÈ1Ñ3MÔ3Mð +ØÐ 0Ô1�F�Fà 	œ]�Fð
   I¤Ð.Ð.°hÐ.Ø!˜T % %¨¡(¤(™^œ^ð Jð J˜Ø!×(Ò(¨¯ª°F¸HÀaÑ)HÔ)HÑIÔIÐIÐIùð ð BØ× Ò  ×!5Ò!5°iÑ!@Ô!@ÑAÔAÐAð —'’'˜)Ñ$Ô$ˆCØð ð àHKÈÈØHKÈÈðM�ð Ÿš cÑ*Ô*��à�ð �FŠF�4˜uˆFÑ%Ô%Ð%Ñ%ð �dˆ?ˆ?Ø˜Wœð Bð B�Ø˜G”}�Ø—X’X˜j¨$Ñ/Ô/�Ø"& v¤,°°V´¸bÐ!A�˜‘�ð #Ÿ.š.Ñ*Ô*ð 	ð 	‰JˆD�$Ø˜D œGÔ$ˆDØ˜D œGÔ$ˆDØ˜”7ˆDØÐØ˜ ™Ñ$�Ø�FŠF�4˜ÑÔÐÐð ð 	KØˆGØŸš™
œ
ð ?ð ?‘��1Ø—’ð !0ß17²¸¸1±´ñ?ô ?ð ?ð ?ð �FŠF�5ð "0ç17²¸¿ºÀÑ8HÔ8HÑ1IÔ1Ið ñ Kô Kð Kð
 Ð 4Ð#3Ø�HŠH˜h¨T¸-ˆHÑHÔHÐHð �vŠv˜UˆvÑ#Ô#Ð#r   Úpdfc                 óX   —  | j         d|||dœ| j        ¤Ž}|                     d¦  «        S )a›  
        Plot the CFG.  In IPython notebook, the return image object can be
        inlined.

        The *filename* option can be set to a specific path for the rendered
        output to write to.  If *view* option is True, the plot is opened by
        the system default application for the image format (PDF). *format* can
        be any valid format string accepted by graphviz, default is 'pdf'.
        )r    rí   r   rÄ   r}   ©r-  rX   rû   )rY   r    r»   rí   Úrawbyts        r   Údisplayz_CFG.displayñ  sJ   € ð %�Ô$ð J¨h¸TØ39ðJð JØ=A¼[ðJð Jˆà�}Š}˜WÑ%Ô%Ð%r   c                 óL   —  | j         di | j        ¤Ž                     d¦  «        S )NrÄ   r}   r0  ©rY   s    r   Ú
_repr_svg_z_CFG._repr_svg_ÿ  s+   € Ø"ˆtÔ"Ð1Ð1 T¤[Ð1Ð1×8Ò8¸ÑAÔAÐAr   c                 ó   — | j         S rQ   )rW   r4  s    r   Ú__repr__z_CFG.__repr__  s	   € ØŒxˆr   )NNNTFFTr\   )Nr.  F)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r[   r-  r2  r5  r7  r}   r   r   rO   rO   S   s‹   € € € € € ðð ðð ð ð FJØ!%ØBFØ "ðL$ð L$ð L$ð L$ð\&ð &ð &ð &ðBð Bð Bðð ð ð ð r   rO   c                   ó4  — e Zd ZdZdZdZdZdddefd„Ze	d„ ¦   «         Z
e	d„ ¦   «         Ze	d	„ ¦   «         Ze	d
„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ ZdS )ÚCodeLibraryzÒ
    An interface for bundling LLVM code together and compiling it.
    It is tied to a *codegen* instance (e.g. JITCPUCodegen) that will
    determine how the LLVM code is transformed and linked together.
    FÚcodegenÚ
CPUCodegenrS   c                 ó†   — || _         || _        | j        j        › d| j        ›d�}t	          |¦  «        | _        g | _        d S )Nú(ú))Ú_codegenÚ_nameÚ	__class__r8  r   Ú_recorded_timingsÚ_dynamic_globals)rY   r>  rS   Úptc_names       r   r[   zCodeLibrary.__init__  sK   € ØˆŒØˆŒ
Ø”nÔ-Ð?Ð?°´
Ð?Ð?Ð?ˆÝ!6°xÑ!@Ô!@ˆÔà "ˆÔÐÐr   c                 óZ   — |                       ¦   «          t          | j        ¦  «        dk    S )Nr   )Ú_ensure_finalizedr–   rG  r4  s    r   Úhas_dynamic_globalszCodeLibrary.has_dynamic_globals  s*   € à×ÒÑ Ô Ð Ý�4Ô(Ñ)Ô)¨AÒ-Ð-r   c                 ó   — | j         S rQ   )rF  r4  s    r   Úrecorded_timingszCodeLibrary.recorded_timings  s   € àÔ%Ð%r   c                 ó   — | j         S )z9
        The codegen object owning this library.
        )rC  r4  s    r   r>  zCodeLibrary.codegen"  s   € ð
 Œ}Ðr   c                 ó   — | j         S rQ   )rD  r4  s    r   rS   zCodeLibrary.name)  s
   € àŒzÐr   c                 ó4   — d| j         t          | ¦  «        fz  S )Nz<Library %r at 0x%x>)rS   Úidr4  s    r   r7  zCodeLibrary.__repr__-  s   € Ø%¨¬µB°t±H´HÐ(=Ñ=Ð=r   c                 ó8   — | j         rt          d| ›�¦  «        ‚d S )Nz)operation impossible on finalized object )Ú
_finalizedÚRuntimeErrorr4  s    r   Ú_raise_if_finalizedzCodeLibrary._raise_if_finalized0  s4   € ØŒ?ð 	*Ý�,Ø"& $ð )ñ *ô *ð *ð	*ð 	*r   c                 ó@   — | j         s|                      ¦   «          d S d S rQ   )rS  Úfinalizer4  s    r   rJ  zCodeLibrary._ensure_finalized5  s'   € ØŒð 	Ø�MŠM‰OŒOˆOˆOˆOð	ð 	r   c                 ób   — |                       ¦   «          | j                             |¦  «        }|S )zC
        Create an LLVM IR module for use by this library.
        )rU  rC  Ú_create_empty_module©rY   rS   Ú	ir_modules      r   Úcreate_ir_modulezCodeLibrary.create_ir_module9  s1   € ð 	× Ò Ñ"Ô"Ð"Ø”M×6Ò6°tÑ<Ô<ˆ	ØÐr   c                 ó   — dS )zk
        Add a library for linking into this library, without losing
        the original library.
        Nr}   ©rY   Úlibrarys     r   Úadd_linking_libraryzCodeLibrary.add_linking_libraryA  ó   € € € r   c                 ó   — dS )zC
        Add an LLVM IR module's contents to this library.
        Nr}   )rY   r[  s     r   Úadd_ir_modulezCodeLibrary.add_ir_moduleH  ra  r   c                 ó   — dS )z®
        Finalize the library.  After this call, nothing can be added anymore.
        Finalization involves various stages of code optimization and
        linking.
        Nr}   r4  s    r   rW  zCodeLibrary.finalizeN  ra  r   c                 ó   — dS )z5
        Return the function named ``name``.
        Nr}   ©rY   rS   s     r   rU   zCodeLibrary.get_functionV  ra  r   c                 ó   — dS )zA
        Get the human-readable form of the LLVM module.
        Nr}   r4  s    r   rö   zCodeLibrary.get_llvm_str\  ra  r   c                 ó   — dS )z2
        Get the human-readable assembly.
        Nr}   r4  s    r   Úget_asm_strzCodeLibrary.get_asm_strb  ra  r   c                 ó0   — d| _         d | _        d| _        d S )NTF)Ú_object_caching_enabledÚ_compiled_objectÚ	_compiledr4  s    r   Úenable_object_cachingz!CodeLibrary.enable_object_cachingl  s   € Ø'+ˆÔ$Ø $ˆÔØˆŒˆˆr   c                 ót   — | j         st          d| ›�¦  «        ‚| j        €t          d| ›�¦  «        ‚| j        S )Núobject caching not enabled in zno compiled object yet for )rk  rD   rl  rT  r4  s    r   Ú_get_compiled_objectz CodeLibrary._get_compiled_objectq  sJ   € ØÔ+ð 	KÝ�*À4À4ÐIÑJÔJÐJØÔ Ð(Ý�,À$À$ÐHÑIÔIÐIØÔ$Ð$r   c                 ó†   — | j         st          d| ›�¦  «        ‚| j        rt          d| ›�¦  «        ‚|| _        d| _        d S )Nrp  zlibrary already compiled: T)rk  rD   rm  rl  Ú_disable_inspection)rY   r#  s     r   Ú_set_compiled_objectz CodeLibrary._set_compiled_objectx  sY   € ØÔ+ð 	KÝ�*À4À4ÐIÑJÔJÐJØŒ>ð 	GÝ�*¸t¸tÐEÑFÔFÐFØ %ˆÔØ#'ˆÔ Ð Ð r   N)r8  r9  r:  r;  rS  rk  rs  r¨   r[   ÚpropertyrK  rM  r>  rS   r7  rU  rJ  r\  r   r`  rc  rW  rU   rö   ri  rn  rq  rt  r}   r   r   r=  r=    sÊ  € € € € € ðð ð €JØ#ÐØÐð# ð #°Cð #ð #ð #ð #ð ð.ð .ñ „Xð.ð ð&ð &ñ „Xð&ð ðð ñ „Xðð ðð ñ „Xðð>ð >ð >ð*ð *ð *ð
ð ð ðð ð ð ðð ñ „^ðð ðð ñ „^ðð
 ðð ñ „^ðð ðð ñ „^ðð
 ðð ñ „^ðð
 ðð ñ „^ððð ð ð
%ð %ð %ð(ð (ð (ð (ð (r   r=  )Ú	metaclassc                   óê   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zed„ ¦   «         Zˆ xZS )ÚCPUCodeLibraryc                 ó4  •— t          ¦   «                              ||¦  «         g | _        t          j        t          | j                             | j        ¦  «        ¦  «        ¦  «        | _	        t          j        | j        ¦  «        | j	        _        d | _        d S rQ   )Úsuperr[   Ú_linking_librariesr%   Úparse_assemblyr¨   rC  rY  rS   Ú_final_moduler   Únormalize_ir_textÚ_shared_module)rY   r>  rS   rE  s      €r   r[   zCPUCodeLibrary.__init__ƒ  s   ø€ Ý‰Œ×Ò˜ $Ñ'Ô'Ð'Ø"$ˆÔÝÔ.Ý�”×2Ò2°4´9Ñ=Ô=Ñ>Ô>ñ@ô @ˆÔå")Ô";¸D¼IÑ"FÔ"FˆÔÔØ"ˆÔÐÐr   c                 ó–  — | j         j        |_        | j                              |¦  «        5 }|j        D ]{}d|j        ›�}| j                             |¦  «        5  |                     ¦   «          | 	                    |¦  «         | 
                    ¦   «          ddd¦  «         n# 1 swxY w Y   Œ|	 ddd¦  «         dS # 1 swxY w Y   dS )zP
        Internal: run function-level optimizations inside *ll_module*.
        zFunction passes on N)rC  Ú_data_layoutÚdata_layoutÚ_function_pass_managerÚ	functionsrS   rF  ÚrecordÚ
initializeÚrunrW  )rY   Ú	ll_moduleÚfpmÚfuncrx   s        r   Ú_optimize_functionsz"CPUCodeLibrary._optimize_functions‹  sI  € ð
 !%¤Ô :ˆ	ÔØŒ]×1Ò1°)Ñ<Ô<ð 	#Àð "Ô+ð #ð #�Ø7¨$¬)Ð7Ð7�ØÔ+×2Ò2°1Ñ5Ô5ð #ð #Ø—N’NÑ$Ô$Ð$Ø—G’G˜D‘M”M�MØ—L’L‘N”N�Nð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #øð#ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#s5   ¬.B>Á>B$ÂB>Â$B(Â(B>Â+B(Â,B>Â>CÃCc                 ó²  — d}| j                              |¦  «        5  | j        j                             | j        ¦  «         ddd¦  «         n# 1 swxY w Y   t          j        st          | j        ¦  «        | _        d}| j                              |¦  «        5  | j        j	                             | j        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zA
        Internal: optimize this library's final module.
        z/Module passes (cheap optimization for refprune)Nz!Module passes (full optimization))
rF  r…  rC  Ú
_mpm_cheapr‡  r}  r   ÚLLVM_REFPRUNE_PASSr	   Ú	_mpm_full)rY   Ú
cheap_nameÚ	full_names      r   Ú_optimize_final_modulez%CPUCodeLibrary._optimize_final_module›  sQ  € ð Gˆ
ØÔ#×*Ò*¨:Ñ6Ô6ð 	=ð 	=ð ŒMÔ$×(Ò(¨Ô);Ñ<Ô<Ð<ð	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=õ
 Ô(ð 	PÝ!;¸DÔ<NÑ!OÔ!OˆDÔØ7ˆ	ØÔ#×*Ò*¨9Ñ5Ô5ð 	<ð 	<àŒMÔ#×'Ò'¨Ô(:Ñ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	<ð 	<s#   �%AÁAÁAÂ%CÃCÃCc                 óœ  — |                       ¦   «          | j        �| j        S | j        }g }d}|j        D ]B}|dz  }|j        s4|j        t          j        j        k    r| 	                    |j
        ¦  «         ŒC|dk    rt          d| ›�¦  «        ‚|r3|                     ¦   «         }|D ]}d|                     |¦  «        _        Œ|| _        |S )a:  
        Internal: get a LLVM module suitable for linking multiple times
        into another library.  Exported functions are made "linkonce_odr"
        to allow for multiple definitions, inlining, and removal of
        unused exports.

        See discussion in https://github.com/numba/numba/pull/890
        Nr   r‘   z5library unfit for linking: no available functions in Úlinkonce_odr)rJ  r  r}  r„  Úis_declarationÚlinkager%   ÚLinkageÚexternalrÏ   rS   rT  ÚclonerU   )rY   ÚmodÚto_fixÚnfuncsrZ   rS   s         r   Ú_get_module_for_linkingz&CPUCodeLibrary._get_module_for_linking¬  s   € ð 	×ÒÑ Ô Ð ØÔÐ*ØÔ&Ð&ØÔ ˆØˆØˆØ”-ð 	'ð 	'ˆBØ�a‰KˆFØÔ$ð '¨¬µr´zÔ7JÒ)JÐ)JØ—’˜bœgÑ&Ô&Ð&øØ�QŠ;ˆ;õ �,à"& $ð )ñ *ô *ð *ð ð 	@Ø—)’)‘+”+ˆCØð @ð @�ð 2@�× Ò  Ñ&Ô&Ô.Ð.Ø!ˆÔØˆ
r   c                 ób   — |                      ¦   «          | j                             |¦  «         d S rQ   )rJ  r{  rÏ   r^  s     r   r`  z"CPUCodeLibrary.add_linking_libraryÏ  s1   € Ø×!Ò!Ñ#Ô#Ð#ØÔ×&Ò& wÑ/Ô/Ð/Ð/Ð/r   c                 ó:  — |                       ¦   «          t          |t          j        ¦  «        sJ ‚t	          j        t          |¦  «        ¦  «        }t          j        |¦  «        }|j	        |_	        | 
                    ¦   «          |                      |¦  «         d S rQ   )rU  rm   ÚllvmirÚModuler   r~  r¨   r%   r|  rS   ÚverifyÚadd_llvm_module)rY   r[  Úirrˆ  s       r   rc  zCPUCodeLibrary.add_ir_moduleÓ  s‡   € Ø× Ò Ñ"Ô"Ð"Ý˜)¥V¤]Ñ3Ô3Ð3Ð3Ð3ÝÔ&¥s¨9¡~¤~Ñ6Ô6ˆÝÔ% bÑ)Ô)ˆ	Ø"œˆ	ŒØ×ÒÑÔÐØ×Ò˜YÑ'Ô'Ð'Ð'Ð'r   c                 óš   — |                       |¦  «         t          j        st          |¦  «        }| j                             |¦  «         d S rQ   )r‹  r   rŽ  r	   r}  Úlink_in)rY   rˆ  s     r   r£  zCPUCodeLibrary.add_llvm_moduleÜ  sK   € Ø× Ò  Ñ+Ô+Ð+åÔ(ð 	>Ý2°9Ñ=Ô=ˆIØÔ×"Ò" 9Ñ-Ô-Ð-Ð-Ð-r   c                 ó*  — t          ¦   «          | j                             ¦   «          |                      ¦   «          t          j        r+t          d| j        z  |                      ¦   «         d¦  «         t          ¦   «         }| j
        D ]I}||vrC|                     |¦  «         | j                             |                     ¦   «         d¬¦  «         ŒJ|                      ¦   «          | j                             ¦   «          |                      ¦   «          d S )NzFUNCTION OPTIMIZED DUMP %sr5   T)Úpreserve)r   rC  Ú_check_llvm_bugsrU  r   ÚDUMP_FUNC_OPTrM   rS   rö   rs   r{  Úaddr}  r¦  r�  r’  r¢  Ú_finalize_final_module)rY   Úseenr_  s      r   rW  zCPUCodeLibrary.finalizeã  s  € Ý$Ñ&Ô&Ð&ð 	Œ×&Ò&Ñ(Ô(Ð(à× Ò Ñ"Ô"Ð"åÔð 	.ÝÐ-°´	Ñ9Ø×"Ò"Ñ$Ô$ fñ.ô .ð .õ ‰uŒuˆØÔ.ð 	ð 	ˆGØ˜dÐ"Ð"Ø—’˜Ñ!Ô!Ð!ØÔ"×*Ò*Ø×3Ò3Ñ5Ô5Àð +ñ ô ð øð 	×#Ò#Ñ%Ô%Ð%àÔ×!Ò!Ñ#Ô#Ð#Ø×#Ò#Ñ%Ô%Ð%Ð%Ð%r   c                 ó–   — | j         j        D ];}|j                             d¦  «        r| j                             |j        ¦  «         Œ<d S )Nznumba.dynamic.globals)r}  Úglobal_variablesrS   Ú
startswithrG  rÏ   )rY   r­   s     r   Ú_finalize_dynamic_globalsz(CPUCodeLibrary._finalize_dynamic_globalsÿ  sT   € àÔ$Ô5ð 	6ð 	6ˆBØŒw×!Ò!Ð"9Ñ:Ô:ð 6ØÔ%×,Ò,¨R¬WÑ5Ô5Ð5øð	6ð 	6r   c                 ó¸   — | j         j        D ]L}|j        rC|j                             d¦  «        r)d}t          |                     |j        ¦  «        ¦  «        ‚ŒMd S )NÚ	_ZN5numbazSymbol {} not linked properly)r}  r„  r•  rS   r°  ÚAssertionErrorr»   )rY   rZ   rL   s      r   Ú_verify_declare_only_symbolsz+CPUCodeLibrary._verify_declare_only_symbols  se   € àÔ$Ô.ð 	:ð 	:ˆBàÔ ð : R¤W×%7Ò%7¸Ñ%DÔ%Dð :Ø5�Ý$ S§Z¢Z°´Ñ%8Ô%8Ñ9Ô9Ð9øð		:ð 	:r   c                 ó  — |                       ¦   «          |                      ¦   «          t          j        | ¦  «        | j        _        | j                             | j        ¦  «        }|rt          j        | |¦  «         |  	                    ¦   «          d| _
        t          j        r+t          d| j        z  |                      ¦   «         d¦  «         t          j        r-t          d| j        z  |                      ¦   «         d¦  «         dS dS )z?
        Make the underlying LLVM module ready to use.
        TzOPTIMIZED DUMP %sr5   zASSEMBLY %sr6   N)r±  rµ  ÚweakrefÚproxyr}  Ú_CPUCodeLibrary__libraryrC  Ú_add_modulerW  Ú_finalize_specificrS  r   ÚDUMP_OPTIMIZEDrM   rS   rö   ÚDUMP_ASSEMBLYri  )rY   Úcleanups     r   r¬  z%CPUCodeLibrary._finalize_final_module  s  € ð 	×&Ò&Ñ(Ô(Ð(Ø×)Ò)Ñ+Ô+Ð+õ (/¤}°TÑ':Ô':ˆÔÔ$ð
 ”-×+Ò+¨DÔ,>Ñ?Ô?ˆØð 	,ÝÔ˜T 7Ñ+Ô+Ð+Ø×ÒÑ!Ô!Ð!àˆŒåÔ ð 	OÝÐ$ t¤yÑ0°$×2CÒ2CÑ2EÔ2EÀvÑNÔNÐNåÔð 	GÝ� ¤Ñ*¨D×,<Ò,<Ñ,>Ô,>ÀÑFÔFÐFÐFÐFð	Gð 	Gr   c              #   óB   K  — | j         }|j        D ]}|j        s|V — ŒdS )zj
        Get all functions defined in the library.  The library must have
        been finalized.
        N)r}  r„  r•  )rY   rš  rZ   s      r   Úget_defined_functionsz$CPUCodeLibrary.get_defined_functions'  s@   è è € ð
 Ô ˆØ”-ð 	ð 	ˆBØÔ$ð Ø���øð	ð 	r   c                 ó6   — | j                              |¦  «        S rQ   )r}  rU   rf  s     r   rU   zCPUCodeLibrary.get_function1  s   € ØÔ!×.Ò.¨tÑ4Ô4Ð4r   c                 ó@   — | j         rt          j        d¦  «         d S d S )Nz@Inspection disabled for cached code. Invalid result is returned.)rs  r)   r*   r4  s    r   Ú _sentry_cache_disable_inspectionz/CPUCodeLibrary._sentry_cache_disable_inspection4  s:   € ØÔ#ð 	9ÝŒMð 8ñ 9ô 9ð 9ð 9ð 9ð	9ð 	9r   c                 óR   — |                       ¦   «          t          | j        ¦  «        S rQ   )rÃ  r¨   r}  r4  s    r   rö   zCPUCodeLibrary.get_llvm_str9  s%   € Ø×-Ò-Ñ/Ô/Ð/Ý�4Ô%Ñ&Ô&Ð&r   c                 óŒ   — |                       ¦   «          t          | j        j                             | j        ¦  «        ¦  «        S rQ   )rÃ  r¨   rC  Ú_tmÚemit_assemblyr}  r4  s    r   ri  zCPUCodeLibrary.get_asm_str=  s8   € Ø×-Ò-Ñ/Ô/Ð/Ý�4”=Ô$×2Ò2°4Ô3EÑFÔFÑGÔGÐGr   Nc                 óH   — |                       ¦   «          t          | ||fi |¤ŽS )z=
        Get control-flow graph of the LLVM function
        )rÃ  rO   )rY   rS   rT   rX   s       r   rV   zCPUCodeLibrary.get_function_cfgA  s0   € ð 	×-Ò-Ñ/Ô/Ð/Ý�D˜$ Ð2Ð2¨6Ð2Ð2Ð2r   c                 óJ   — |                       ¦   «         }t          ||¦  «        S )aa  
        Get the CFG of the disassembly of the ELF object at symbol mangled_name.

        Requires python package: r2pipe
        Requires radare2 binary on $PATH.
        Notebook rendering requires python package: graphviz
        Optionally requires a compiler toolchain (via pycc) to link the ELF to
        get better disassembly results.
        )rq  r   )rY   Úmangled_nameÚelfs      r   Úget_disasm_cfgzCPUCodeLibrary.get_disasm_cfgH  s%   € ð ×'Ò'Ñ)Ô)ˆÝ% c¨<Ñ8Ô8Ð8r   c                 óB  — ddl m} ddlm} ddlm}  | ||¦  «        ¦  «        }t          d¦  «         |                     ¦   «         D ]Æ}|d         dk    r¸t          | 	                    ¦   «         d„ ¬	¦  «        }t          d
¦  «         |D ]‚}|j
        sŒ
t          d|j
                             ¦   «         |d         |d         |                     |d         d         ¦  «        |                     |d         d         ¦  «        fz  ¦  «         ŒƒŒÇt          ¦   «          dS )zw
        Dump the symbol table of an ELF file.
        Needs pyelftools (https://github.com/eliben/pyelftools)
        r   )ÚELFFile)Údescriptions)ÚBytesIOz	ELF file:Úsh_typeÚ
SHT_SYMTABc                 ó   — | j         S rQ   ©rS   )Úsyms    r   r~   z*CPUCodeLibrary._dump_elf.<locals>.<lambda>b  s   € ÀSÄX€ r   )Úkeyz    symbols:z/    - %r: size=%d, value=0x%x, type=%s, bind=%sÚst_sizeÚst_valueÚst_infort   ÚbindN)Úelftools.elf.elffilerÎ  Úelftools.elfrÏ  ÚiorÐ  r9   Úiter_sectionsÚsortedÚiter_symbolsrS   rû   Údescribe_symbol_typeÚdescribe_symbol_bind)	ÚclsÚbufrÎ  rÏ  rÐ  r¬   ÚsecÚsymbolsrÕ  s	            r   Ú	_dump_elfzCPUCodeLibrary._dump_elfU  sX  € ð 	1Ð0Ð0Ð0Ð0Ð0Ø-Ð-Ð-Ð-Ð-Ð-ØÐÐÐÐÐØˆG�G�G˜C‘L”LÑ!Ô!ˆÝˆkÑÔÐØ—?’?Ñ$Ô$ð 	 ð 	 ˆCØ�9Œ~ Ò-Ð-Ý  ×!1Ò!1Ñ!3Ô!3Ð9MÐ9MÐNÑNÔN�Ý�nÑ%Ô%Ð%Ø"ð 	 ð 	 �CØœ8ð !Ø ÝÐKØ œXŸ_š_Ñ.Ô.Ø  œ^Ø  œ_Ø)×>Ò>¸sÀ9¼~ÈfÔ?UÑVÔVØ)×>Ò>¸sÀ9¼~ÈfÔ?UÑVÔVð	ññ  ô  ð  ð  øõ 	‰Œˆˆˆr   c                 óh   — 	 |j         }n# t          $ r Y dS w xY w|j        rd|_        ||_        dS dS )zB
        `ll_module` was compiled into object code `buf`.
        NT)r¹  r(   rk  rm  rl  )rã  rˆ  rä  rY   s       r   Ú_object_compiled_hookz$CPUCodeLibrary._object_compiled_hookp  s]   € ð
	ØÔ&ˆDˆDøÝð 	ð 	ð 	ØˆFˆFð	øøøàÔ'ð 	(Ø!ˆDŒNØ$'ˆDÔ!Ð!Ð!ð	(ð 	(ó   ‚
 Š
—c                 óz   — 	 |j         }n# t          $ r Y dS w xY w|j        r|j        r|j        }d|_        |S dS dS )z>
        Return a cached object code for `ll_module`.
        N)r¹  r(   rk  rl  )rã  rˆ  rY   rä  s       r   Ú_object_getbuffer_hookz%CPUCodeLibrary._object_getbuffer_hook}  sq   € ð
	ØÔ&ˆDˆDøÝð 	ð 	ð 	ØˆFˆFð	øøøàÔ'ð 	¨DÔ,Að 	ØÔ'ˆCØ$(ˆDÔ!ØˆJð	ð 	ð 	ð 	rê  c                 ól   — |                       ¦   «          | j        d| j                             ¦   «         fS )zX
        Serialize this library using its bitcode as the cached representation.
        Úbitcode)rJ  rS   r}  Ú
as_bitcoder4  s    r   Úserialize_using_bitcodez&CPUCodeLibrary.serialize_using_bitcode‹  s4   € ð 	×ÒÑ Ô Ð Ø”	˜9 dÔ&8×&CÒ&CÑ&EÔ&EÐFÐFr   c                 ó²   — |                       ¦   «          |                      ¦   «         |                      ¦   «                              ¦   «         f}| j        d|fS )z´
        Serialize this library using its object code as the cached
        representation.  We also include its bitcode for further inlining
        with other libraries.
        Úobject)rJ  rq  r�  rï  rS   )rY   Údatas     r   Úserialize_using_object_codez*CPUCodeLibrary.serialize_using_object_code’  sV   € ð 	×ÒÑ Ô Ð Ø×)Ò)Ñ+Ô+Ø×,Ò,Ñ.Ô.×9Ò9Ñ;Ô;ð=ˆà”	˜8 TÐ*Ð*r   c                 óø  — |\  }}}|                      |¦  «        }t          || ¦  «        sJ ‚|dk    r/t          j        |¦  «        |_        |                     ¦   «          |S |dk    r�|\  }}|                     ¦   «          |                     |¦  «         t          j        |¦  «        |_        |                     ¦   «          |j	        j
                             |j        ¦  «         |S t          d|›�¦  «        ‚)Nrî  rò  zunsupported serialization kind )Úcreate_libraryrm   r%   Úparse_bitcoder}  r¬  rn  rt  r  rC  Ú_engineÚ_load_defined_symbolsrD   )	rã  r>  ÚstaterS   Úkindró  rY   Úobject_codeÚshared_bitcodes	            r   Ú_unserializezCPUCodeLibrary._unserialize�  s  € à Ñˆˆd�DØ×%Ò% dÑ+Ô+ˆÝ˜$ Ñ$Ô$Ð$Ð$Ð$Ø�9ÒÐå!#Ô!1°$Ñ!7Ô!7ˆDÔØ×'Ò'Ñ)Ô)Ð)ØˆKØ�XÒÐØ*.Ñ'ˆK˜Ø×&Ò&Ñ(Ô(Ð(Ø×%Ò% kÑ2Ô2Ð2Ý"$Ô"2°>Ñ"BÔ"BˆDÔØ×'Ò'Ñ)Ô)Ð)àŒMÔ!×7Ò7¸Ô8KÑLÔLÐLØˆKå�*ÀDÀDÐJÑKÔKÐKr   rQ   )r8  r9  r:  r[   r‹  r’  r�  r`  rc  r£  rW  r±  rµ  r¬  rÀ  rU   rÃ  rö   ri  rV   rÌ  Úclassmethodrç  ré  rì  rð  rô  rþ  Ú__classcell__)rE  s   @r   rx  rx  �  s×  ø€ € € € € ð#ð #ð #ð #ð #ð#ð #ð #ð <ð <ð <ð"!ð !ð !ðF0ð 0ð 0ð(ð (ð (ð.ð .ð .ð&ð &ð &ð86ð 6ð 6ð:ð :ð :ðGð Gð Gð4ð ð ð5ð 5ð 5ð9ð 9ð 9ð
'ð 'ð 'ðHð Hð Hð3ð 3ð 3ð 3ð9ð 9ð 9ð ðð ñ „[ðð4 ð
(ð 
(ñ „[ð
(ð ðð ñ „[ððGð Gð Gð	+ð 	+ð 	+ð ðLð Lñ „[ðLð Lð Lð Lð Lr   rx  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚAOTCodeLibraryc                 ór   — |                       ¦   «          | j        j                             | j        ¦  «        S )z¤
        Return this library as a native object (a bytestring) -- for example
        ELF under Linux.

        This function implicitly calls .finalize().
        )rJ  rC  rÆ  Úemit_objectr}  r4  s    r   Úemit_native_objectz!AOTCodeLibrary.emit_native_object¶  s2   € ð 	×ÒÑ Ô Ð ØŒ}Ô ×,Ò,¨TÔ-?Ñ@Ô@Ð@r   c                 ó\   — |                       ¦   «          | j                             ¦   «         S )zz
        Return this library as LLVM bitcode (a bytestring).

        This function implicitly calls .finalize().
        )rJ  r}  rï  r4  s    r   Úemit_bitcodezAOTCodeLibrary.emit_bitcodeÀ  s+   € ð 	×ÒÑ Ô Ð ØÔ!×,Ò,Ñ.Ô.Ð.r   c                 ó   — d S rQ   r}   r4  s    r   r»  z!AOTCodeLibrary._finalize_specificÉ  ó   € Øˆr   N)r8  r9  r:  r  r  r»  r}   r   r   r  r  ´  sD   € € € € € ðAð Að Að/ð /ð /ðð ð ð ð r   r  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚJITCodeLibraryc                 ó®   — |                       ¦   «          | j        j        }|                     |¦  «        sdS | j        j                             |¦  «        S )aˆ  
        Generate native code for function named *name* and return a pointer
        to the start of the function (as an integer).

        This function implicitly calls .finalize().

        Returns
        -------
        pointer : int
            - zero (null) if no symbol of *name* is defined by this code
              library.
            - non-zero if the symbol is defined.
        r   )rJ  rC  rø  Úis_symbol_definedÚget_function_address)rY   rS   Úees      r   Úget_pointer_to_functionz&JITCodeLibrary.get_pointer_to_functionÏ  sU   € ð 	×ÒÑ Ô Ð ØŒ]Ô"ˆØ×#Ò# DÑ)Ô)ð 	DØ�1à”=Ô(×=Ò=¸dÑCÔCÐCr   c                 óæ   — | j                              | j        ¦  «         | j                             d¦  «        5  | j         j                             ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )NzFinalize object)rC  Ú_scan_and_fix_unresolved_refsr}  rF  r…  rø  Úfinalize_objectr4  s    r   r»  z!JITCodeLibrary._finalize_specificä  s®   € ØŒ×3Ò3°DÔ4FÑGÔGÐGØÔ#×*Ò*Ð+<Ñ=Ô=ð 	4ð 	4ØŒMÔ!×1Ò1Ñ3Ô3Ð3ð	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4ð 	4ð 	4s   ºA&Á&A*Á-A*N)r8  r9  r:  r  r»  r}   r   r   r  r  Í  s5   € € € € € ðDð Dð Dð*4ð 4ð 4ð 4ð 4r   r  c                   ó.   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ ZdS )ÚRuntimeLinkerzP
    For tracking unresolved symbols generated at runtime due to recursion.
    z.numba.unresolved$c                 ój   — t          j        ¦   «         | _        t          ¦   «         | _        g | _        d S rQ   )r   Ú
UniqueDictÚ_unresolvedrs   Ú_definedÚ	_resolvedr4  s    r   r[   zRuntimeLinker.__init__ð  s)   € Ý Ô+Ñ-Ô-ˆÔÝ™œˆŒØˆŒˆˆr   c                 ó”  — | j         }|j        D ]¸}|j                             |¦  «        rœ|j        t	          |¦  «        d…         }|                     |j        ¦  «        rŒSt          j                             d¦  «        }t          j
        |¦  «        }|                     |t          j        |¦  «        ¦  «         || j        |<   Œ¹dS )zr
        Scan and track all unresolved external symbols in the module and
        allocate memory for it.
        NÚnrt_unresolved_abort)ÚPREFIXr¯  rS   r°  r–   r  r
   r_  r  ÚctypesÚc_void_pÚadd_global_mappingÚ	addressofr  )rY   ÚmoduleÚengineÚprefixr­   rÕ  ÚabortfnÚptrs           r   Úscan_unresolved_symbolsz%RuntimeLinker.scan_unresolved_symbolsõ  sÄ   € ð
 ”ˆàÔ)ð 
	,ð 
	,ˆBØŒw×!Ò! &Ñ)Ô)ð 	,Ø”g�c &™kœk˜l˜lÔ+�à×+Ò+¨B¬GÑ4Ô4ð Øåœ-×?Ò?Ð@VÑWÔW�Ý”o gÑ.Ô.�Ø×)Ò)¨"­fÔ.>¸sÑ.CÔ.CÑDÔDÐDØ(+�Ô  Ñ%øð
	,ð 
	,r   c                 óf   — |j         D ](}|j        s| j                             |j        ¦  «         Œ)dS )z5
        Scan and track all defined symbols.
        N)r„  r•  r  r«  rS   )rY   r"  rZ   s      r   Úscan_defined_symbolsz"RuntimeLinker.scan_defined_symbols  sD   € ð Ô"ð 	+ð 	+ˆBØÔ$ð +Ø”×!Ò! "¤'Ñ*Ô*Ð*øð	+ð 	+r   c                 óÒ   ‡ — ˆ fd„‰ j         D ¦   «         }|D ]O}|                     |¦  «        }‰ j         |         }||_        ‰ j                             ||f¦  «         ‰ j         |= ŒPdS )z=
        Fix unresolved symbols if they are defined.
        c                 ó&   •— g | ]}|‰j         v ¯|‘ŒS r}   )r  )Ú.0rS   rY   s     €r   ú
<listcomp>z)RuntimeLinker.resolve.<locals>.<listcomp>  s%   ø€ ÐNÐNÐN˜D¸ÀÄÐ8MÐ8M�4Ð8MÐ8MÐ8Mr   N)r  r  r#  r  rÏ   )rY   r#  ÚpendingrS   Úfnptrr&  s   `     r   ÚresolvezRuntimeLinker.resolve  sŠ   ø€ ð
 OÐNÐNÐN DÔ$4ÐNÑNÔNˆàð 	'ð 	'ˆDà×/Ò/°Ñ5Ô5ˆEàÔ" 4Ô(ˆCØˆCŒIØŒN×!Ò! 4¨ +Ñ.Ô.Ð.àÔ  Ð&Ð&ð	'ð 	'r   N)	r8  r9  r:  r;  r  r[   r'  r)  r0  r}   r   r   r  r  ê  sa   € € € € € ðð ð "€Fðð ð ð
,ð ,ð ,ð&+ð +ð +ð'ð 'ð 'ð 'ð 'r   r  c                 óF   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }|S )Nc                 ó&   •—  ‰| j         g|¢R i |¤ŽS rQ   )Ú_ee)rY   ÚargsrX   Úolds      €r   Úwrapperz_proxy.<locals>.wrapper"  s%   ø€ àˆs�4”8Ð-˜dÐ-Ð-Ð- fÐ-Ð-Ð-r   )Ú	functoolsÚwraps)r5  r6  s   ` r   Ú_proxyr9  !  s6   ø€ Ý„_�SÑÔð.ð .ð .ð .ñ Ôð.à€Nr   c                   óØ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Z e	e
j        j        ¦  «        Z e	e
j        j        ¦  «        Z e	e
j        j        ¦  «        Z e	e
j        j        ¦  «        ZdS )Ú	JitEnginez»Wraps an ExecutionEngine to provide custom symbol tracking.
    Since the symbol tracking is incomplete  (doesn't consider
    loaded code object), we are not putting it in llvmlite.
    c                 ó:   — || _         t          ¦   «         | _        d S rQ   )r3  rs   Ú_defined_symbols)rY   r  s     r   r[   zJitEngine.__init__-  s   € ØˆŒõ !$¡¤ˆÔÐÐr   c                 ó   — || j         v S )z/Is the symbol defined in this session?
        )r=  rf  s     r   r  zJitEngine.is_symbol_defined:  s   € ð �tÔ,Ð,Ð,r   c                 ó\   — |j         |j        fD ]}| xj        d„ |D ¦   «         z  c_        ŒdS )z(Extract symbols from the module
        c                 ó*   — h | ]}|j         °	|j        ’ŒS r}   )r•  rS   )r,  r­   s     r   ú	<setcomp>z2JitEngine._load_defined_symbols.<locals>.<setcomp>C  s8   € ð &@ð &@ð &@°"Ø-/Ô->ð&@ b¤gð &@ð &@ð &@r   N)r„  r¯  r=  )rY   rš  Úgsetss      r   rù  zJitEngine._load_defined_symbols?  sc   € ð ”m SÔ%9Ð:ð 	@ð 	@ˆEØÐ!Ô!ð &@ð &@¸ð &@ñ &@ô &@ñ @Ð!Ô!Ð!ð	@ð 	@r   c                 ó`   — |                       |¦  «         | j                             |¦  «        S )zXOverride ExecutionEngine.add_module
        to keep info about defined symbols.
        )rù  r3  Ú
add_module©rY   r"  s     r   rD  zJitEngine.add_moduleF  s.   € ð 	×"Ò" 6Ñ*Ô*Ð*ØŒx×"Ò" 6Ñ*Ô*Ð*r   c                 óv   — | j                              |j        ¦  «         | j                             ||¦  «        S )z`Override ExecutionEngine.add_global_mapping
        to keep info about defined symbols.
        )r=  r«  rS   r3  r   )rY   r­   Úaddrs      r   r   zJitEngine.add_global_mappingM  s5   € ð 	Ô×!Ò! "¤'Ñ*Ô*Ð*ØŒx×*Ò*¨2¨tÑ4Ô4Ð4r   N)r8  r9  r:  r;  r[   r  rù  rD  r   r9  r%   ÚExecutionEngineÚset_object_cacher  r  Úget_global_value_addressr}   r   r   r;  r;  (  sÆ   € € € € € ðð ð&ð &ð &ð-ð -ð -ð
@ð @ð @ð+ð +ð +ð5ð 5ð 5ð �v˜bÔ0ÔAÑBÔBÐØ�f˜RÔ/Ô?Ñ@Ô@€OØ!˜6 "Ô"4Ô"IÑJÔJÐØ%˜vØ
ÔÔ3ñ 
ô  
ÐÐÐr   r;  c                   ó`   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	d„ Z
dS )ÚCodegenaM  
    Base Codegen class. It is expected that subclasses set the class attribute
    ``_library_class``, indicating the CodeLibrary class for the target.

    Subclasses should also initialize:

    ``self._data_layout``: the data layout for the target.
    ``self._target_data``: the binding layer ``TargetData`` for the target.
    c                 ó   — dS )zD
        Create a new empty module suitable for the target.
        Nr}   rf  s     r   rY  zCodegen._create_empty_modulej  ra  r   c                 ó   — dS )zu
        Add a module to the execution engine. Ownership of the module is
        transferred to the engine.
        Nr}   rE  s     r   rº  zCodegen._add_modulep  ra  r   c                 ó   — | j         S )zJ
        The LLVM "target data" object for this codegen instance.
        )Ú_target_datar4  s    r   Útarget_datazCodegen.target_dataw  s   € ð
 Ô Ð r   c                 ó    —  | j         | |fi |¤ŽS )zb
        Create a :class:`CodeLibrary` object for use with this codegen
        instance.
        )Ú_library_class)rY   rS   rX   s      r   rö  zCodegen.create_library~  s!   € ð
 #ˆtÔ" 4¨Ð8Ð8°Ð8Ð8Ð8r   c                 ó8   — | j                              | |¦  «        S rQ   )rS  rþ  )rY   Ú
serializeds     r   Úunserialize_libraryzCodegen.unserialize_library…  s   € ØÔ"×/Ò/°°jÑAÔAÐAr   N)r8  r9  r:  r;  r   rY  rº  ru  rQ  rö  rV  r}   r   r   rL  rL  _  s’   € € € € € ðð ð ðð ñ „^ðð
 ðð ñ „^ðð ð!ð !ñ „Xð!ð9ð 9ð 9ðBð Bð Bð Bð Br   rL  c                   óV   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )r?  c                 ó  — t          ¦   «          d | _        t          j        t	          |                      |¦  «        ¦  «        ¦  «        | _        d| j        _        t          ¦   «         | _	        |  
                    | j        ¦  «         d S )NÚglobal_codegen_module)Úinitialize_llvmr�  r%   r|  r¨   rY  Ú_llvm_modulerS   r  Ú	_rtlinkerÚ_init)rY   Úmodule_names     r   r[   zCPUCodegen.__init__‹  su   € ÝÑÔÐà ˆÔÝÔ-Ý�×)Ò)¨+Ñ6Ô6Ñ7Ô7ñ9ô 9ˆÔà!8ˆÔÔÝ&™œˆŒØ�
Š
�4Ô$Ñ%Ô%Ð%Ð%Ð%r   c                 ó>  — t          |j        ¦  «        g k    s
J d¦   «         ‚t          j                             t          j        ¦   «         ¦  «        }t          t          j        ¬¦  «        }|  	                    ¦   «         | _
        |                      |¦  «          |j        d	i |¤Ž}t          j        ||¦  «        }t          j        r|                     ¦   «          || _        t#          |¦  «        | _        |j        | _        t+          | j        ¦  «        | _        t          j        j        rd}d}nd}d}|                      |d|d¬¦  «        | _        |                      ¦   «         | _        | j                             | j        j        | j        j        ¦  «         d S )
NzModule isn't empty)ÚoptTé   Fr   Úcheap)Úloop_vectorizeÚslp_vectorizer`  Úcostr}   )Úlistr¯  r%   ÚTargetÚfrom_tripleÚget_process_triplerq   r   ÚOPTÚ_customize_tm_featuresÚ_tm_featuresÚ_customize_tm_optionsÚcreate_target_machineÚcreate_mcjit_compilerÚENABLE_PROFILINGÚenable_jit_eventsrÆ  r;  rø  rQ  rP  r¨   r�  Ú
is_opt_maxÚ_module_pass_managerr�  r�  rI  rS  ré  rì  )rY   Úllvm_moduler"  Ú
tm_optionsÚtmr#  ÚloopvectÚ	opt_levels           r   r]  zCPUCodegen._init•  s™  € Ý�KÔ0Ñ1Ô1°RÒ7Ð7Ð7Ð9MÑ7Ô7Ð7å”×&Ò&¥rÔ'<Ñ'>Ô'>Ñ?Ô?ˆÝ�fœjÐ)Ñ)Ô)ˆ
Ø ×7Ò7Ñ9Ô9ˆÔØ×"Ò" :Ñ.Ô.Ð.Ø)ˆVÔ)Ð7Ð7¨JÐ7Ð7ˆÝÔ)¨+°rÑ:Ô:ˆåÔ"ð 	'Ø×$Ò$Ñ&Ô&Ð&àˆŒÝ  Ñ(Ô(ˆŒØ"Ô.ˆÔÝ Ô 1Ñ2Ô2ˆÔåŒ:Ô ð 	ð ˆHØˆIˆIð ˆHØˆIà×3Ò3À8ØBGØ8AØ9@ð 4ñ Bô BˆŒð
 ×2Ò2Ñ4Ô4ˆŒàŒ×%Ò% dÔ&9Ô&OØ&*Ô&9Ô&Pñ	Rô 	Rð 	Rð 	Rð 	Rr   c                 ó¨   — t          j        t          j        |¦  «        ¦  «        }t	          j        ¦   «         |_        | j        r| j        |_        |S rQ   )	r   r¡  r   r~  r%   ri  r   r�  r‚  rZ  s      r   rY  zCPUCodegen._create_empty_moduleÃ  sI   € Ý”M¥'Ô";¸DÑ"AÔ"AÑBÔBˆ	ÝÔ0Ñ2Ô2ˆ	ÔØÔð 	6Ø$(Ô$5ˆIÔ!ØÐr   c                 ó€  — t          j        ¦   «         }| j                             |¦  «         |                     dd ¦  «        } | j        di |¤Ž5 }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |�‘|dk    r‹t          j        dk    r{| 	                    ¦   «          t           j
        d         dk     r)|                     ¦   «          |                     ¦   «          n(|                     ¦   «          |                     ¦   «          t          j        r!|                     t#          ¦   «         ¦  «         |S )Nre  rb  r   é   r}   )r%   Úcreate_module_pass_managerrÆ  Úadd_analysis_passesÚpopÚ_pass_manager_builderÚpopulater   rj  Úadd_loop_rotate_passÚllvm_version_infoÚadd_licm_passÚadd_cfg_simplification_passÚadd_instruction_combining_passÚadd_jump_threading_passrŽ  Úadd_refprune_passr.   )rY   rX   Úpmre  Úpmbs        r   rs  zCPUCodegen._module_pass_managerÊ  sq  € ÝÔ*Ñ,Ô,ˆØŒ×$Ò$ RÑ(Ô(Ð(Ø�zŠz˜& $Ñ'Ô'ˆØ'ˆTÔ'Ð1Ð1¨&Ð1Ð1ð 	°SØ�LŠL˜ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð Ð ¨¢ µF´JÀ!²O°Oð ×#Ò#Ñ%Ô%Ð%ÝÔ# AÔ&¨Ò+Ð+ð × Ò Ñ"Ô"Ð"Ø×.Ò.Ñ0Ô0Ð0Ð0ð ×1Ò1Ñ3Ô3Ð3Ø×*Ò*Ñ,Ô,Ð,åÔ$ð 	:Ø× Ò Õ!6Ñ!8Ô!8Ñ9Ô9Ð9Øˆ	s   ÁA3Á3A7Á:A7c                 ó0  — t          j        |¦  «        }| j                             |¦  «          | j        di |¤Ž5 }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        r!|                     t          ¦   «         ¦  «         |S )Nr}   )
r%   Úcreate_function_pass_managerrÆ  r}  r  r€  r   rŽ  r‡  r.   )rY   rt  rX   rˆ  r‰  s        r   rƒ  z!CPUCodegen._function_pass_manageré  sÐ   € ÝÔ,¨[Ñ9Ô9ˆØŒ×$Ò$ RÑ(Ô(Ð(Ø'ˆTÔ'Ð1Ð1¨&Ð1Ð1ð 	°SØ�LŠL˜ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	åÔ$ð 	:Ø× Ò Õ!6Ñ!8Ô!8Ñ9Ô9Ð9Øˆ	s   ¼AÁA"Á%A"c                 óæ   — |                      dt          j        ¦  «        }|                      dt          j        ¦  «        }|                      dt          j        ¦  «        }t          d|||dœ|¤Ž}|S )a  
        Create a PassManagerBuilder.

        Note: a PassManagerBuilder seems good only for one use, so you
        should call this method each time you want to populate a module
        or function pass manager.  Otherwise some optimizations will be
        missed...
        r`  rc  rd  )r`  rc  rd  r}   )r~  r   rj  ÚLOOP_VECTORIZEÚSLP_VECTORIZEr   )rY   rX   rx  rc  rd  r‰  s         r   r  z CPUCodegen._pass_manager_builderò  sx   € ð —J’J˜u¥f¤jÑ1Ô1ˆ	ØŸšÐ$4µfÔ6KÑLÔLˆØŸ
š
 ?µFÔ4HÑIÔIˆå)ð 4¨iØ9GØ8Eð4ð 4ð -3ð4ð 4ˆð
 ˆ
r   c                 óÚ   — d}t          j        |¦  «        }t          |¦  «        }d|v sd|v rdS d|v r&t          j        ¦   «         }t          d|›d�¦  «        ‚t          d|›d	�¦  «        ‚)
z<
        Guard against some well-known LLVM bug(s).
        zo
            define double @func()
            {
                ret double 1.23e+01
            }
            z12.3z1.23Nz1.0zFLLVM will produce incorrect floating-point code in the current locale zh.
Please read https://numba.readthedocs.io/en/stable/user/faq.html#llvm-locale-bug for more information.zUnexpected IR:
ú
)r%   r|  r¨   ÚlocaleÚ	getlocalerT  r´  )rY   r¤  rš  Úir_outÚlocs        r   r©  zCPUCodegen._check_llvm_bugs  s’   € ðˆõ Ô Ñ#Ô#ˆÝ�S‘”ˆØ�VÐÐ˜v¨Ð/Ð/àˆFØ�Fˆ?ˆ?ÝÔ"Ñ$Ô$ˆCÝ�,ð
 �3�3ð	ñô ð õ ˆn°v°v°vÐ?Ñ@Ô@Ð@r   c                 óN   — | j         j        |                      ¦   «         | j        fS )zP
        Return a tuple unambiguously describing the codegen behaviour.
        )r[  r   Ú_get_host_cpu_namerl  r4  s    r   Úmagic_tuplezCPUCodegen.magic_tuple$  s+   € ð Ô!Ô(¨$×*AÒ*AÑ*CÔ*CØÔ!ð#ð 	#r   c                 ó¸   — | j                              || j        ¦  «         | j                              |¦  «         | j                              | j        ¦  «         d S rQ   )r\  r'  rø  r)  r0  rE  s     r   r  z(CPUCodegen._scan_and_fix_unresolved_refs+  sP   € ØŒ×.Ò.¨v°t´|ÑDÔDÐDØŒ×+Ò+¨FÑ3Ô3Ð3ØŒ×Ò˜tœ|Ñ,Ô,Ð,Ð,Ð,r   c                 óz  — t          j        d¦  «                             ¦   «         }| j        j        |z   }|j        }	 |                     |¦  «        }n.# t          $ r! t          j        |||¬¦  «        }d|_	        Y nw xY w| 
                    |                     |¦  «        |                     ¦   «         ¦  «        S )Né   rÔ  r˜  )r   ÚIntTypeÚ
as_pointerr\  r  r"  Ú
get_globalÚKeyErrorÚGlobalVariabler–  ÚbitcastÚload)rY   ÚbuilderÚfntyrS   ÚvoidptrÚptrnameÚllvm_modr/  s           r   Úinsert_unresolved_refz CPUCodegen.insert_unresolved_ref0  s¶   € Ý”. Ñ#Ô#×.Ò.Ñ0Ô0ˆØ”.Ô'¨$Ñ.ˆØ”>ˆð	'Ø×'Ò'¨Ñ0Ô0ˆEˆEøÝð 	'ð 	'ð 	'åÔ)¨(°GÀ'ÐJÑJÔJˆEØ&ˆEŒMˆMˆMð	'øøøð �Š˜wŸ|š|¨EÑ2Ô2°D·O²OÑ4EÔ4EÑFÔFÐFs   ¾A Á(A?Á>A?c                 óX   — t           j        €t          j        ¦   «         nt           j        S rQ   )r   ÚCPU_NAMEr%   Úget_host_cpu_namer4  s    r   r–  zCPUCodegen._get_host_cpu_name<  s%   € å”?Ð*õ Ô$Ñ&Ô&Ð&å”_ð	&r   c                 óN   — t           j        �t           j        S t          ¦   «         S rQ   )r   ÚCPU_FEATURESÚget_host_cpu_featuresr4  s    r   Ú_get_host_cpu_featuresz!CPUCodegen._get_host_cpu_featuresA  s    € ÝÔÐ*ÝÔ&Ð&Ý$Ñ&Ô&Ð&r   N)r8  r9  r:  r[   r]  rY  rs  rƒ  r  r©  r—  r  r§  r–  r®  r}   r   r   r?  r?  ‰  sÒ   € € € € € ð&ð &ð &ð,Rð ,Rð ,Rð\ð ð ðð ð ð>ð ð ðð ð ð(Að Að Að<#ð #ð #ð-ð -ð -ð

Gð 
Gð 
Gð&ð &ð &ð
'ð 'ð 'ð 'ð 'r   r?  c                   ó0   — e Zd ZdZeZdd„Zd„ Zd„ Zd„ Z	dS )ÚAOTCPUCodegenzp
    A codegen implementation suitable for Ahead-Of-Time compilation
    (e.g. generation of object files).
    Nc                 óN   — |pd| _         t                               | |¦  «         d S ©NrÂ   )Ú	_cpu_namer?  r[   )rY   r^  Úcpu_names      r   r[   zAOTCPUCodegen.__init__O  s)   € à!˜ RˆŒÝ×Ò˜D +Ñ.Ô.Ð.Ð.Ð.r   c                 óz   — | j         }|dk    r|                      ¦   «         }||d<   d|d<   d|d<   | j        |d<   d S )NÚhostÚcpuÚpicÚrelocrÌ   Ú	codemodelÚfeatures)r³  r–  rl  )rY   Úoptionsr´  s      r   rm  z#AOTCPUCodegen._customize_tm_optionsT  sU   € Ø”>ˆØ�vÒÐØ×.Ò.Ñ0Ô0ˆHØ!ˆ�‰Ø ˆ�ÑØ(ˆ�ÑØ"Ô/ˆ�
ÑÐÐr   c                 ó   — dS r²  r}   r4  s    r   rk  z$AOTCPUCodegen._customize_tm_features]  s	   € ð ˆrr   c                 ó   — d S rQ   r}   rE  s     r   rº  zAOTCPUCodegen._add_moduleb  r	  r   rQ   )
r8  r9  r:  r;  r  rS  r[   rm  rk  rº  r}   r   r   r°  r°  G  sf   € € € € € ðð ð
 $€Nð/ð /ð /ð /ð
0ð 0ð 0ðð ð ð
ð ð ð ð r   r°  c                   ó.   — e Zd ZdZeZd„ Zd„ Zd„ Zd„ Z	dS )ÚJITCPUCodegenzI
    A codegen implementation suitable for Just-In-Time compilation.
    c                 ól  — |                       ¦   «         |d<   t          j                             ¦   «         j        }|                     d¦  «        rd}n|                     d¦  «        rd}nd}||d<   d|d	<   | j        |d
<   t          j        t          j        j	        ¦  «        }d|j
        v rd|d<   d S d S )Nr·  r   ÚstaticÚppcr¸  rÌ   r¹  Ú
jitdefaultrº  r»  ÚjitT)r–  r%   rg  Úfrom_default_triplerS   r°  rl  r   Úpysignaturern  Ú
parameters)rY   r¼  r   Úreloc_modelÚsigs        r   rm  z#JITCPUCodegen._customize_tm_optionsm  sÈ   € ð ×0Ò0Ñ2Ô2ˆ�‰õ Œy×,Ò,Ñ.Ô.Ô3ˆØ�?Š?˜5Ñ!Ô!ð 	$Ø"ˆKˆKØ�_Š_˜UÑ#Ô#ð 	$ØˆKˆKà#ˆKØ&ˆ�ÑØ+ˆ�Ñð #Ô/ˆ�
Ñõ Ô¥¤	Ô ?Ñ@Ô@ˆØ�C”NÐ"Ð"à!ˆG�E‰NˆNˆNð #Ð"r   c                 ó*   — |                       ¦   «         S rQ   )r®  r4  s    r   rk  z$JITCPUCodegen._customize_tm_featuresˆ  s   € à×*Ò*Ñ,Ô,Ð,r   c                 ó:   — | j                              |¦  «         d S rQ   )rø  rD  rE  s     r   rº  zJITCPUCodegen._add_moduleŒ  s   € ØŒ×Ò Ñ'Ô'Ð'Ð'Ð'r   c                 óÆ   — | j                              |¦  «        }t          j        dz                       |¦  «        }t          j        t          |¦  «        ¦  «        |d<   dS )zrSet the environment address.

        Update the GlobalVariable named *env_name* to the address of *env*.
        r‘   r   N)rø  rJ  r  r  Úfrom_addressrQ  )rY   Úenv_nameÚenvÚgvaddrÚenvptrs        r   Úset_envzJITCPUCodegen.set_env”  sP   € ð
 ”×6Ò6°xÑ@Ô@ˆÝ”/ AÑ%×3Ò3°FÑ;Ô;ˆÝ”O¥B s¡G¤GÑ,Ô,ˆˆq‰	ˆ	ˆ	r   N)
r8  r9  r:  r;  r  rS  rm  rk  rº  rÓ  r}   r   r   rÀ  rÀ  f  sa   € € € € € ðð ð $€Nð"ð "ð "ð6-ð -ð -ð(ð (ð (ð-ð -ð -ð -ð -r   rÀ  c                  óx   — t          j        ¦   «          t          j        ¦   «          t          j        ¦   «          dS )z Safe to use multiple times.
    N)r%   r†  Úinitialize_native_targetÚinitialize_native_asmprinterr}   r   r   rZ  rZ  ž  s3   € õ „M�O„O€OÝÔÑ!Ô!Ð!ÝÔ#Ñ%Ô%Ð%Ð%Ð%r   c                  óÊ   — 	 t          j        ¦   «         } t          j        s| D ]}|                     d¦  «        rd| |<   Œ|                      ¦   «         S # t          $ r Y dS w xY w)z~Get host CPU features using LLVM.

    The features may be modified due to user setting.
    See numba.config.ENABLE_AVX.
    ÚavxFrÂ   )r%   r­  r   Ú
ENABLE_AVXr°  ÚflattenrT  )r»  rx   s     r   r­  r­  ¦  s‡   € ð"ÝÔ+Ñ-Ô-ˆõ Ô ð 	(àð (ð (�Ø—<’< Ñ&Ô&ð (Ø"'�H˜Q‘Køð ×ÒÑ!Ô!Ð!øõ ð ð ð Øˆrˆrðøøøs   ‚A Á
A"Á!A")6r)   r7  r‘  r·  r  r¼   r³   Úllvmlite.bindingr^   r%   Úllvmlite.irr¤  r   Úabcr   r   Ú
numba.corer   r   r   Únumba.core.llvm_bindingsr   Únumba.core.runtime.nrtoptr	   Únumba.core.runtimer
   Únumba.core.compiler_lockr   Únumba.core.errorsr   Únumba.misc.inspectionr   Únumba.misc.llvm_pass_timingsr   Ú	frozensetr   r   r.   rM   rò  rO   r=  rx  r  r  r  r9  r;  rL  r?  r°  rÀ  rZ  r­  r}   r   r   ú<module>rç     s·  ðØ €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø @Ð @Ð @Ð @Ð @Ð @Ø @Ð @Ð @Ð @Ð @Ð @Ø $Ð $Ð $Ð $Ð $Ð $Ø AÐ AÐ AÐ AÐ AÐ AØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø >Ð >Ð >Ð >Ð >Ð >ð ˆ9ð &ð &ð &ñ 'ô '€ðð ð ð
ð ð ð0ð ð ð6pð pð pð pð pˆ6ñ pô pð pðfx(ð x(ð x(ð x(ð x(˜Gð x(ñ x(ô x(ð x(ðvpLð pLð pLð pLð pL�[ñ pLô pLð pLðf	ð ð ð ð �^ñ ô ð ð24ð 4ð 4ð 4ð 4�^ñ 4ô 4ð 4ð:5'ð 5'ð 5'ð 5'ð 5'�Fñ 5'ô 5'ð 5'ðnð ð ð4
ð 4
ð 4
ð 4
ð 4
�ñ 4
ô 4
ð 4
ðn'Bð 'Bð 'Bð 'Bð 'B˜ð 'Bñ 'Bô 'Bð 'BðT{'ð {'ð {'ð {'ð {'�ñ {'ô {'ð {'ð|ð ð ð ð �Jñ ô ð ð>5-ð 5-ð 5-ð 5-ð 5-�Jñ 5-ô 5-ð 5-ðp&ð &ð &ð"ð "ð "ð "ð "r   