o
    ØÝ2g  ã                   @   sz   d Z ddlmZ ddl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ed	ed
dfdd„ZG dd„ deƒZdS )aq  Transform IR to lower-level ops.

Higher-level ops are used in earlier compiler passes, as they make
various analyses, optimizations and transforms easier to implement.
Later passes use lower-level ops, as they are easier to generate code
from, and they help with lower-level optimizations.

Lowering of various primitive ops is implemented in the mypyc.lower
package.
é    )ÚFuncIR)ÚPrimitiveOpÚValue)ÚLowLevelIRBuilder)Úlowering_registry)ÚCompilerOptions)ÚIRTransformÚirÚoptionsÚreturnNc                 C   s*   t d |ƒ}t|ƒ}| | j¡ |j| _d S ©N)r   ÚLoweringVisitorÚtransform_blocksÚblocks)r	   r
   ÚbuilderÚvisitor© r   úM/home/garg/my-data/venv/lib/python3.10/site-packages/mypyc/transform/lower.pyÚlower_ir   s   
r   c                   @   s   e Zd Zdedefdd„ZdS )r   Úopr   c                 C   s   t |jj }|| j|j|jƒS r   )r   ÚdescÚnamer   ÚargsÚline)Úselfr   Úlower_fnr   r   r   Úvisit_primitive_op   s   z"LoweringVisitor.visit_primitive_opN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s    r   )Ú__doc__Úmypyc.ir.func_irr   Úmypyc.ir.opsr   r   Úmypyc.irbuild.ll_builderr   Úmypyc.lower.registryr   Úmypyc.optionsr   Úmypyc.transform.ir_transformr   r   r   r   r   r   r   Ú<module>   s    