NL ik dZddlmZddlmZddlmZmZmZm Z m Z m Z ddl m Z ddlmZddlmZddlmZd d ZGd d eZy )zSimple 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 LoadAddressLoadErrorValueRegisterValue)LowLevelIRBuilder)CompilerOptions) is_same_type) IRTransformci}i}|jD]}d||< |jD]z}|jD]g}t|tr|j |j d}|dz||j <|dk(rht|j j|jjr4t|jts|j||j <|dk(s|j|j dt|tr-d||j <|j|j dt|ts!t|jts=d||j<|j|jdj}t|j!D]N\}} |j | ddkDr||=n&| |vr"|| } |j | ddkDr||=| |vr"||vsJ| ||<Pt#d|} t%| |} | j'|j| j|_y)z-Perform copy propagation optimization for fn.rN)arg_regsblocksops isinstancergetdestr typesrcrpoprrr listitemsr CopyPropagationTransformtransform_blocks) fnoptionscounts replacementsargblockopcrdstbuilder transforms f/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypyc/transform/copy_propagation.pydo_copy_propagationr+s "F')L{{s 0)) 0B"f%JJrww*"#a%rwwF$RWW\\266;;?&rvv~>,.FFL)!V $$RWWa0B ,"#rww  !,B ,bffh/%&F266N $$RVVQ/1 008++-. $S ::c1  !S!%"3'::c1%)$S) % ,  #L  $ g.G(,?I ryy)BIc(eZdZdfd ZddZxZS)rczt|||jj|t ||_yN)super__init__op_mapupdatesetremoved)selfr(map __class__s r*r1z!CopyPropagationTransform.__init__Vs- ! 33x r,cV|j|jvry|j|Sr/)rr5add)r6r%s r* visit_assignz%CopyPropagationTransform.visit_assign[s# 77dll "xx|r,)r(r r7zdict[Value, Value]returnNone)r%rr<z Value | None)__name__ __module__ __qualname__r1r; __classcell__)r8s@r*rrUs  r,rN)rrr r r<r=)__doc__ __future__rmypyc.ir.func_irr mypyc.ir.opsrrrrr r mypyc.irbuild.ll_builderr mypyc.optionsr mypyc.sametyper mypyc.transform.ir_transformrr+rr,r*rKs6 ##ZZ6)'49x { r,