U
    +dH                     @   s  d dl Z d dlmZ d dlmZ d dlZed ejZG dd de	Z
e  Zdd Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Z e Z!e Z"e Z#e Z$e Z%d	Z&d
Z'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2G dd de3Z4G dd de3Z5G dd dej6Z6G dd dej7Z7ededed ed!ed"ed#iZ8ed ed!ed"ed#iZ9eded"ed#ed ed!eded$iZ:ede d"e!d#e"d e#d!e$de%d%iZ;G d&d' d'ej<Z=G d(d) d)ej>Z>G d*d+ d+e3Z?G d,d- d-ej@Z@dS ).    N)ir)bindingzThe module `llvmlite.llvmpy.core` is deprecated and will be removed in the future. Equivalent functionality is provided by `llvmlite.ir`.c                   @   s   e Zd ZdS )LLVMExceptionN)__name__
__module____qualname__ r   r   8/tmp/pip-unpacked-wheel-stw2luzp/llvmlite/llvmpy/core.pyr      s   r   c                   C   s   t tS N)next_icmp_ctr   r   r   r	   	_icmp_get   s    r   z	llvm.fabszllvm.expzllvm.logz
llvm.log10zllvm.sinzllvm.cosz	llvm.powizllvm.powz
llvm.floorZexternalZinternalZlinkonce_odrZ	nocapturec                   @   s~   e Zd ZedddZedd Zedd Zedd	 ZedddZedddZ	edd Z
edd Zedd ZdS )Type    c                 C   s
   t | S r
   )r   IntType)widthr   r   r	   intG   s    zType.intc                   C   s   t  S r
   )r   Z	FloatTyper   r   r   r	   floatK   s    z
Type.floatc                   C   s   t  S r
   )r   ZHalfTyper   r   r   r	   halfO   s    z	Type.halfc                   C   s   t  S r
   )r   Z
DoubleTyper   r   r   r	   doubleS   s    zType.doubler   c                 C   s   t | |S r
   )r   ZPointerType)ty	addrspacer   r   r	   pointerW   s    zType.pointerFc                 C   s   t j| ||dS )N)var_arg)r   FunctionType)resargsr   r   r   r	   function[   s    zType.functionc                 C   s
   t | S r
   )r   ZLiteralStructType)membersr   r   r	   struct_   s    zType.structc                 C   s   t | |S r
   )r   	ArrayType)elementcountr   r   r	   arrayc   s    z
Type.arrayc                   C   s   t  S r
   )r   ZVoidTyper   r   r   r	   voidg   s    z	Type.voidN)r   )r   )F)r   r   r   staticmethodr   r   r   r   r   r   r   r#   r$   r   r   r   r	   r   F   s$   




r   c                   @   s   e Zd Zedd Zedd Zedd Zedd Zed	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd ZdS )Constantc                 C   s0   t | tjr$t| td| j dS t| d S )N1   )
isinstancer   r   r&   r   r   NotImplementedErrorr   r   r   r	   all_onesm   s    zConstant.all_onesc                 C   s   t | |S r
   r   r&   r   nr   r   r	   r   t   s    zConstant.intc                 C   s   t | |S r
   r-   r.   r   r   r	   int_signextendx   s    zConstant.int_signextendc                 C   s   t | |S r
   r-   r.   r   r   r	   real|   s    zConstant.realc                 C   s   t j| S r
   )r   r&   Zliteral_struct)elemsr   r   r	   r      s    zConstant.structc                 C   s   t | d S r
   r-   r+   r   r   r	   null   s    zConstant.nullc                 C   s   t | t jS r
   )r   r&   	Undefinedr+   r   r   r	   undef   s    zConstant.undefc                 C   sR   t | d }td| d}d|d< | d|d d< tttd||S )N    asciir   zutf-8   )len	bytearrayencoder   r&   r    r   )stringr/   bufr   r   r	   stringz   s
    zConstant.stringzc                 C   s   t t | t||S r
   )r   r&   r    r;   )typvalr   r   r	   r#      s    zConstant.arrayc                 C   s
   |  |S r
   )bitcastconstrA   r   r   r	   rC      s    zConstant.bitcastc                 C   s
   |  |S r
   )inttoptrrD   r   r   r	   rF      s    zConstant.inttoptrc                 C   s
   |  |S r
   )gep)rE   indicesr   r   r	   rG      s    zConstant.gepN)r   r   r   r%   r,   r   r0   r1   r   r3   r5   r@   r#   rC   rF   rG   r   r   r   r	   r&   l   s0   










r&   c                   @   s>   e Zd Zdd Zdd Zdd Zddd	Zd
d Zdd ZdS )Modulec                 C   s&   || j kr| j | S t| ||S d S r
   )globalsr   FunctionselfZfntynamer   r   r	   get_or_insert_function   s    

zModule.get_or_insert_functionc                 C   s   t t|  d S r
   )llvmZparse_assemblystr)rM   r   r   r	   verify   s    zModule.verifyc                 C   s   t | ||S r
   )r   rK   rL   r   r   r	   add_function   s    zModule.add_functionr   c                 C   s   t | || ||S r
   )r   ZGlobalVariableZget_unique_name)rM   r   rN   r   r   r   r	   add_global_variable   s    zModule.add_global_variablec                 C   s.   z| j | W S  tk
r(   t|Y nX d S r
   )rJ   KeyErrorr   rM   rN   r   r   r	   get_global_variable_named   s    z Module.get_global_variable_namedc                 C   s0   z|  |W S  tk
r*   | | Y S X d S r
   )Zget_named_metadatarU   Zadd_named_metadatarV   r   r   r	   get_or_insert_named_metadata   s    z#Module.get_or_insert_named_metadataN)r   )	r   r   r   rO   rR   rS   rT   rW   rX   r   r   r   r	   rI      s   
rI   c                   @   s&   e Zd ZedddZedd ZdS )rK    c                 C   s   | |||S r
   r   )clsZ
module_objZfunctyrN   r   r   r	   new   s    zFunction.newc                 C   s   |  ||S r
   )Zdeclare_intrinsic)module	intrinsicZtysr   r   r	   r]      s    zFunction.intrinsicN)rY   )r   r   r   classmethodr[   r%   r]   r   r   r   r	   rK      s   rK   z==z!=<z<=>z>=ordZunoc                   @   s    e Zd ZdddZdddZdS )	BuilderrY   c                 C   s8   |t kr| jt | |||dS | jt| |||dS d S N)rN   )
_icmp_umapZicmp_unsignedZicmp_signed
_icmp_smaprM   predlhsrhsrN   r   r   r	   icmp   s    zBuilder.icmpc                 C   s8   |t kr| jt | |||dS | jt| |||dS d S rc   )
_fcmp_umapZfcmp_unorderedZfcmp_ordered
_fcmp_omaprf   r   r   r	   fcmp   s    zBuilder.fcmpN)rY   )rY   )r   r   r   rj   rm   r   r   r   r	   rb      s   
rb   c                   @   s   e Zd Zedd ZdS )MetaDataStringc                 C   s
   t | |S r
   )rn   )r\   textr   r   r	   get  s    zMetaDataString.getNr   r   r   r%   rp   r   r   r   r	   rn     s   rn   c                   @   s   e Zd Zedd ZdS )MetaDatac                 C   s
   |  |S r
   )Zadd_metadata)r\   valuesr   r   r	   rp   
  s    zMetaData.getNrq   r   r   r   r	   rr   	  s   rr   c                   @   s   e Zd Zedd ZdS )	InlineAsmc                  O   s
   t | |S r
   )rt   )r   kwargsr   r   r	   rp     s    zInlineAsm.getNrq   r   r   r   r	   rt     s   rt   )A	itertoolsZllvmliter   r   rP   warningswarnZ	CallInstrZCallOrInvokeInstruction	Exceptionr   r"   r   r   ZICMP_EQZICMP_NEZICMP_SLTZICMP_SLEZICMP_SGTZICMP_SGEZICMP_ULTZICMP_ULEZICMP_UGTZICMP_UGEZFCMP_OEQZFCMP_OGTZFCMP_OGEZFCMP_OLTZFCMP_OLEZFCMP_ONEZFCMP_ORDZFCMP_UEQZFCMP_UGTZFCMP_UGEZFCMP_ULTZFCMP_ULEZFCMP_UNEZFCMP_UNOZ	INTR_FABSZINTR_EXPZINTR_LOGZ
INTR_LOG10ZINTR_SINZINTR_COSZ	INTR_POWIZINTR_POWZ
INTR_FLOORZLINKAGE_EXTERNALZLINKAGE_INTERNALZLINKAGE_LINKONCE_ODRZATTR_NO_CAPTUREobjectr   r&   rI   rK   rd   re   rl   rk   Z	IRBuilderrb   rn   rr   rt   r   r   r   r	   <module>   s   &9      
                  