Ë
    pPêjk  ã                  óŽ   — d Z ddlmZ ddlmZ ddl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mZ dd	„Z G d
„ de«      Zy)zßSimple copy propagation optimization.

Example input:

    x = f()
    y = x

The register x is redundant and we can directly assign its value to y:

    y = f()

This can optimize away registers that are assigned to once.
é    )Úannotations)ÚFuncIR)ÚAssignÚAssignMultiÚLoadAddressÚLoadErrorValueÚRegisterÚValue)ÚLowLevelIRBuilder)ÚCompilerOptions)Úis_same_type)ÚIRTransformc                ó¨  — i }i }| j                   D ]  }d||<   Œ	 | j                  D �]z  }|j                  D �]g  }t        |t        «      r¾|j                  |j                  d«      }|dz   ||j                  <   |dk(  rht        |j                  j                  |j                  j                  «      r4t        |j                  t        «      s|j                  ||j                  <   Œ¯|dk(  sŒµ|j                  |j                  d«       ŒÒt        |t        «      r-d||j                  <   |j                  |j                  d«       �Œt        |t        «      s�Œ!t        |j                  t        «      s�Œ=d||j                  <   |j                  |j                  d«       �Œj �Œ} t        |j!                  «       «      D ]N  \  }}	|j                  |	d«      dkD  r||= n&|	|v r"||	   }	|j                  |	d«      dkD  r||= |	|v rŒ"||v sŒJ|	||<   ŒP t#        d|«      }
t%        |
|«      }|j'                  | j                  «       |
j                  | _        y)z-Perform copy propagation optimization for fn.é   r   é   N)Úarg_regsÚblocksÚopsÚ
isinstancer   ÚgetÚdestr   ÚtypeÚsrcr   Úpopr   r   r	   ÚlistÚitemsr   ÚCopyPropagationTransformÚtransform_blocks)ÚfnÚoptionsÚcountsÚreplacementsÚargÚblockÚopÚcr   ÚdstÚbuilderÚ	transforms               úe/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/transform/copy_propagation.pyÚdo_copy_propagationr+      s  € ð  "€FØ')€LØ�{‰{ò ˆàˆˆsŠðð —‘ó 0ˆØ—)‘)ó 	0ˆBÜ˜"œfÔ%Ø—J‘J˜rŸw™w¨Ó*�Ø"# a¡%��r—w‘w‘ð ˜’FÜ$ R§W¡W§\¡\°2·6±6·;±;Ô?Ü& r§v¡v¬~Ô>à,.¯F©F�L §¡Ò)Ø˜!“Và ×$Ñ$ R§W¡W¨aÕ0Ü˜B¤Ô,à"#��r—w‘w‘Ø× Ñ  §¡¨!Ö,Ü˜B¤Ö,ô ˜bŸf™f¤hÖ/Ø%&�F˜2Ÿ6™6‘NØ ×$Ñ$ R§V¡V¨QÖ/ò1	0ð0ô8 ˜×+Ñ+Ó-Ó.ò $‰ˆˆSØ�:‰:�c˜1Ó Ò!à˜SÑ!à˜Ñ%Ø" 3Ñ'�Ø—:‘:˜c 1Ó%¨Ò)à$ SÐ)ð	 ˜Ò%ð
 �,ÒØ #ˆL˜Òð$ô    gÓ.€GÜ(¨°,Ó?€IØ×Ñ˜rŸy™yÔ)Ø—‘€B…Ió    c                  ó(   ‡ — e Zd Zdˆ fd„Zdd„Zˆ xZS )r   c                óz   •— t         ‰| �  |«       | j                  j                  |«       t	        |«      | _        y ©N)ÚsuperÚ__init__Úop_mapÚupdateÚsetÚremoved)Úselfr(   ÚmapÚ	__class__s      €r*   r1   z!CopyPropagationTransform.__init__V   s-   ø€ Ü‰Ñ˜Ô!Ø�‰×Ñ˜3ÔÜ˜3“xˆ�r,   c                óV   — |j                   | j                  v ry | j                  |«      S r/   )r   r5   Úadd)r6   r%   s     r*   Úvisit_assignz%CopyPropagationTransform.visit_assign[   s#   € Ø�7‰7�d—l‘lÑ"ØØ�x‰x˜‹|Ðr,   )r(   r   r7   zdict[Value, Value]ÚreturnÚNone)r%   r   r<   zValue | None)Ú__name__Ú
__module__Ú__qualname__r1   r;   Ú__classcell__)r8   s   @r*   r   r   U   s   ø„ õ ÷
r,   r   N)r   r   r    r   r<   r=   )Ú__doc__Ú
__future__r   Úmypyc.ir.func_irr   Úmypyc.ir.opsr   r   r   r   r	   r
   Úmypyc.irbuild.ll_builderr   Úmypyc.optionsr   Úmypyc.sametyper   Úmypyc.transform.ir_transformr   r+   r   © r,   r*   ú<module>rK      s6   ðñõ #å #ß Z× ZÝ 6Ý )Ý 'Ý 4ó9ôx	˜{õ 	r,   