o
    i                     @   sH   d dl mZ G dd deZG dd deZG dd deZdd	 Zd
S )    )	CallInstrc                   @   sP   e Zd Zdd Zdd Zdd Zdd Zed	d
 Zedd Z	edd Z
dS )Visitorc                 C       || _ |jD ]}| | qd S N)_module	functionsvisit_Function)selfmodulefunc r   S/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/llvmlite/ir/transforms.pyvisit      
zVisitor.visitc                 C   r   r   )	_functionblocksvisit_BasicBlock)r	   r   bbr   r   r   r   
   r   zVisitor.visit_Functionc                 C   r   r   )_basic_blockinstructionsvisit_Instruction)r	   r   instrr   r   r   r      r   zVisitor.visit_BasicBlockc                 C      t r   NotImplementedErrorr	   r   r   r   r   r         zVisitor.visit_Instructionc                 C      | j S r   )r   r	   r   r   r   r
         zVisitor.modulec                 C   r   r   )r   r   r   r   r   function   r   zVisitor.functionc                 C   r   r   )r   r   r   r   r   basic_block   r   zVisitor.basic_blockN)__name__
__module____qualname__r   r   r   r   propertyr
   r    r!   r   r   r   r   r      s    

r   c                   @   s   e Zd Zdd Zdd ZdS )CallVisitorc                 C   s   t |tr| | d S d S r   )
isinstancer   
visit_Callr   r   r   r   r   %   s   
zCallVisitor.visit_Instructionc                 C   r   r   r   r   r   r   r   r(   )   r   zCallVisitor.visit_CallN)r"   r#   r$   r   r(   r   r   r   r   r&   $   s    r&   c                       s$   e Zd Z fddZdd Z  ZS )ReplaceCallsc                    s$   t t|   || _|| _g | _d S r   )superr)   __init__origreplcalls)r	   r,   r-   	__class__r   r   r+   .   s   
zReplaceCalls.__init__c                 C   s,   |j | jkr|| j | j| d S d S r   )calleer,   replace_calleer-   r.   appendr   r   r   r   r(   4   s   zReplaceCalls.visit_Call)r"   r#   r$   r+   r(   __classcell__r   r   r/   r   r)   -   s    r)   c                 C   s   t ||}||  |jS )zlReplace all calls to `orig` to `repl` in module `mod`.
    Returns the references to the returned calls
    )r)   r   r.   )modr,   r-   rcr   r   r   replace_all_calls:   s   

r7   N)llvmlite.irr   objectr   r&   r)   r7   r   r   r   r   <module>   s
     	