
    I/Phr#                     B    d dl Z d dlmZmZmZmZ  G d de          ZdS )    N)contextvaluestypes_utilsc                       e Zd Zdej        fdZd Zd Zd ZddZ	dd	Z
d
 Zed             Zed             Zd Zd ZddZddZd Zd Zd Zd Zd Zd ZdS )Module c                     || _         || _        d| _        t          j                    | _        d| _        t          j                    | _	        g | _
        i | _        i | _        d S )Nr	   zunknown-unknown-unknown)r   namedata_layoutr   	NameScopescopetriplecollectionsOrderedDictglobalsmetadatanamedmetadata_metadatacache)selfr   r   s      R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/llvmlite/ir/module.py__init__zModule.__init__   s\    	%''
/".00     c                 4   g }|D ]}| t          j                    d           }n\t          |t                    rt	          j        | |          }n1t          |t          t          f          r|                     |          }|	                    |           |S N)
r   MetaDataType
isinstancestrr   MetaDataStringlisttupleadd_metadataappend)r   operands	fixed_opsops       r   _fix_metadata_operandszModule._fix_metadata_operands   s    	 
	! 
	!Bz)U'))$//B$$ +*444Bu.. +&&r**R    r   c                     g }|D ]M\  }}t          |t          t          f          r|                     |          }|                    ||f           N|S r   )r   r    r!   r"   r#   )r   r$   r%   r   r&   s        r   _fix_di_operandszModule._fix_di_operands$   sd    	  	) 	)HD""tUm,, +&&r**dBZ((((r   c                 \   t          |t          t          f          st          d|          |                     |          }t          |          }|| j        vrCt          | j                  }t          j	        | |t          |                    }|| j        |<   n| j        |         }|S )z
        Add an unnamed metadata to the module with the given *operands*
        (a sequence of values) or return a previous equivalent metadata.
        A MDValue instance is returned, it can then be associated to
        e.g. an instruction.
        z1expected a list or tuple of metadata values, got r   )r   r    r!   	TypeErrorr'   r   lenr   r   MDValuer   )r   r$   keynmds        r   r"   zModule.add_metadata-   s     (T5M22 	4)(03 4 4 4..x88Hood)))DM""AhSVV<<<B')D$$$S)B	r   Fc           	      H   t          t          |                     |                                                              }|||f}|| j        vrEt          | j                  }t          j        | |||t          |                    }|| j        |<   n| j        |         }|S )ak  
        Add debug information metadata to the module with the given
        *operands* (a dict of values with string keys) or return
        a previous equivalent metadata.  *kind* is a string of the
        debug information kind (e.g. "DICompileUnit").

        A DIValue instance is returned, it can then be associated to e.g.
        an instruction.
        r+   )
r!   sortedr)   itemsr   r-   r   r   DIValuer   )r   kindr$   is_distinctr/   r0   dis          r   add_debug_infozModule.add_debug_infoA   s      5 5hnn6F6F G GHHIIX{+d)))DM""Ak4AOOOB')D$$$S)B	r   Nc                 ^   || j         v r| j         |         }nt          j        |           x}| j         |<   |ut          |t          j                  s|                     |          }t          |j        t          j                  st          d|          |
                    |           |S )a  
        Add a named metadata node to the module, if it doesn't exist,
        or return the existing node.
        If *element* is given, it will append a new element to
        the named metadata node.  If *element* is a sequence of values
        (rather than a metadata value), a new unnamed node will first be
        created.

        Example::
            module.add_named_metadata("llvm.ident", ["llvmlite/1.0"])
        Nz%wrong type for metadata element: got )r   r   NamedMetaDatar   Valuer"   typer   r   r,   add)r   r   elementnmds       r   add_named_metadatazModule.add_named_metadataU   s     4%%%$T*CC-3-A$-G-GGC$$T*gv|44 5++G44glE,>?? .i#*7!- . . .GGG
r   c                     | j         |         S )z
        Return the metadata node with the given *name*.  KeyError is raised
        if no such node exists (contrast with add_named_metadata()).
        )r   r   r   s     r   get_named_metadatazModule.get_named_metadatan   s    
 !$''r   c                 H    d | j                                         D             S )zI
        A list of functions declared or defined in this module.
        c                 F    g | ]}t          |t          j                  |S  )r   r   Function.0vs     r   
<listcomp>z$Module.functions.<locals>.<listcomp>z   s8     3 3 3aa113 3 3 3r   r   r   r   s    r   	functionszModule.functionsu   s0    
3 34<..00 3 3 3 	3r   c                 4    | j                                         S )z>
        An iterable of global values in this module.
        rM   rN   s    r   global_valueszModule.global_values}   s    
 |""$$$r   c                     | j         |         S )z-
        Get a global value by name.
        )r   rC   s     r   
get_globalzModule.get_global   s     |D!!r   c                 D    |j         | j        vsJ || j        |j         <   dS )z)
        Add a new global value.
        N)r   r   )r   globalvalues     r   
add_globalzModule.add_global   s/     t|3333)4[%&&&r   c                 6    | j                             |          S )zJ
        Get a unique global name with the following *name* hint.
        )r   deduplicaterC   s     r   get_unique_namezModule.get_unique_name   s     z%%d+++r   rG   c                 (   fd}dv rd         j         g}nd D             }d                    g|z             }|| j        v r| j        |         S |nt                    dk    rAdk    r;t	          j        t	          j                    t	          j        d          g          }nNt                    dk    rdk    r7t	          j        d         d         t	          j        d	          g          }nd
k    r t	          j        d         dz            }n؉dk    r0t	          j        d         t	          j        d          g          }ndk    r)t	          j        t	          j        d                    }nst	          j        d                   }nVt                    dk    rdk    r]d         t	          j        d          d         t	          j        d          gt	          j        t	          j                              }ndv r8d         t	          j        d          gt	          j        d                   }n |             nt                    dk    r|dv r?t	          j        d          gz   t	          j        t	          j                              }nCdk    r(d         gdz  t	          j        d                   }n |             n
 |             t          j	        | ||          S )Nc                  F    t          d t                    fz            )Nz"unknown intrinsic %r with %d types)NotImplementedErrorr-   )	intrinsictyss   r   _errorz(Module.declare_intrinsic.<locals>._error   s+    %&J)2CHH(='> ? ? ?r   >   llvm.fma	llvm.ctlz	llvm.cttzr   c                     g | ]	}|j         
S rG   )intrinsic_name)rJ   ts     r   rL   z,Module.declare_intrinsic.<locals>.<listcomp>   s    666Q(666r   .zllvm.assume   z	llvm.powi    zllvm.pow   zllvm.convert.from.fp16   zllvm.convert.to.fp16zllvm.memset   >   ra   rb      )zllvm.memcpyzllvm.memmover`   r+   )
rd   joinr   r-   r   FunctionTypeVoidTypeIntTyper   rH   )r   r]   r^   fntyr_   suffixesr   s    ``    r   declare_intrinsiczModule.declare_intrinsic   s   	? 	? 	? 	? 	? 	? >>>A-.HH66#666Hxxh.//4<<%%XX]]yM99%en&6&6q9I9I8JKKDDXX]]K'')#a&3q65=;L;L2MNNj(()#a&#'::666)#a&5=3D3D2EFF444)%-*;*;SAA)#a&#66XX]]M))1vu}Q//Q}Q''))%.*:*:C@@8881vu}Q//0)#a&#66XX]];;;U]1--..)%.*:*:C@@j((1vhl)#a&#66FHHHtT5555r   c                     | j         j        S r   )r   identified_typesrN   s    r   get_identified_typeszModule.get_identified_types   s    |,,r   c                     d |                                                                  D             }|d | j                                        D             z  }|S )Nc                 6    g | ]}|                                 S rG   )get_declaration)rJ   its     r   rL   z*Module._get_body_lines.<locals>.<listcomp>   s:     A A A ##%% A A Ar   c                 ,    g | ]}t          |          S rG   )r   rI   s     r   rL   z*Module._get_body_lines.<locals>.<listcomp>   s    888Q#a&&888r   )rv   r   r   r   liness     r   _get_body_lineszModule._get_body_lines   sk    A A4466==??A A A 	88$,"5"5"7"78888r   c           
      8   g }| j                                         D ]Q\  }}|                    d                    |d                    d |j        D                                            R| j        D ]$}|                    t          |                     %|S )Nz!{name} = !{{ {operands} }}z, c              3   >   K   | ]}|                                 V  d S r   )get_reference)rJ   is     r   	<genexpr>z-Module._get_metadata_lines.<locals>.<genexpr>   sH       +@ +@/0 ,-??+<+< +@ +@ +@ +@ +@ +@r   )r   r$   )r   r4   r#   formatrm   r$   r   r   )r   mdbufkrK   r1   s        r   _get_metadata_lineszModule._get_metadata_lines   s    &,,.. 	B 	BDAqLL6== +@ +@45J+@ +@ +@ "@ "@ > A A B B B B - 	" 	"BLLR!!!!r   c                 P    d                     |                                           S N
)rm   r~   rN   s    r   _stringify_bodyzModule._stringify_body   s     yy--//000r   c                 P    d                     |                                           S r   )rm   r   rN   s    r   _stringify_metadatazModule._stringify_metadata   s     yy1133444r   c                     g }|d| j         dd| j        dd| j        ddgz  }||                                 z  }||                                 z  }d                    |          S )Nz; ModuleID = ""ztarget triple = "ztarget datalayout = "r	   r   )r   r   r   r~   r   rm   r|   s     r   __repr__zModule.__repr__   s    #'999..&*kkk33*.*:*:*:<	 	 	%%'''))+++yyr   )Fr   )r	   )rG   N)__name__
__module____qualname__r   global_contextr   r'   r)   r"   r9   rA   rD   propertyrO   rQ   rS   rV   rY   rs   rv   r~   r   r   r   r   rG   r   r   r   r      sk       (> ! ! ! !      (   (   2( ( ( 3 3 X3 % % X%" " "5 5 5, , , ,36 36 36 36j- - -    1 1 15 5 5         r   r   )r   llvmlite.irr   r   r   r   objectr   rG   r   r   <module>r      ss        6 6 6 6 6 6 6 6 6 6 6 6p  p  p  p  p V p  p  p  p  p r   