ó
C]c           @@ sæ  d  Z  d d l m Z m Z d d l m Z d d l m Z m Z m	 Z	 m
 Z
 m Z m Z m Z m Z m Z d d l m Z d e
 e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e f d  „  ƒ  YZ d! e f d" „  ƒ  YZ d# e f d$ „  ƒ  YZ  d% e  f d& „  ƒ  YZ! d' e  f d( „  ƒ  YZ" d) e f d* „  ƒ  YZ# d+ e f d, „  ƒ  YZ$ d- e f d. „  ƒ  YZ% d/ e f d0 „  ƒ  YZ& d1 e f d2 „  ƒ  YZ' d3 e f d4 „  ƒ  YZ( d5 e f d6 „  ƒ  YZ) d7 e f d8 „  ƒ  YZ* d9 e f d: „  ƒ  YZ+ d; e f d< „  ƒ  YZ, d= e f d> „  ƒ  YZ- d? e f d@ „  ƒ  YZ. dA e f dB „  ƒ  YZ/ dC e f dD „  ƒ  YZ0 dE e1 f dF „  ƒ  YZ2 dG e f dH „  ƒ  YZ3 dI e f dJ „  ƒ  YZ4 dK e1 f dL „  ƒ  YZ5 dM e5 f dN „  ƒ  YZ6 dO e5 f dP „  ƒ  YZ7 dQ e f dR „  ƒ  YZ8 dS e f dT „  ƒ  YZ9 dU S(V   s)   
Implementation of LLVM IR instructions.
i    (   t   print_functiont   absolute_importi   (   t   types(	   t   Blockt   Functiont   Valuet
   NamedValuet   Constantt   MetaDataArgumentt   MetaDataStringt   AttributeSett	   Undefined(   t   _HasMetadatat   Instructionc           B@ sP   e  Z d  d d „ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z RS(   t    c         C@ s}   t  t |  ƒ j | | d | ƒt | t ƒ s4 t ‚ t | t t f ƒ sO t ‚ | |  _ | |  _	 t | ƒ |  _
 i  |  _ d  S(   Nt   name(   t   superR   t   __init__t
   isinstanceR   t   AssertionErrort   tuplet   listt   opnamet   operandst   flagst   metadata(   t   selft   parentt   typR   R   R   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR      s    		c         C@ s
   |  j  j S(   N(   R   t   function(   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR      s    c         C@ s   |  j  j j S(   N(   R   R   t   module(   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR      s    c         C@ s—   |  j  } |  j r. d j | g |  j ƒ } n  d j g  |  j D] } | j ƒ  ^ q> ƒ } |  j } |  j d t ƒ } | j d j	 | | | | ƒ ƒ d  S(   Nt    s   , t   leading_commas   {0} {1} {2}{3}
(
   R   R   t   joinR   t   get_referencet   typet   _stringify_metadatat   Truet   appendt   format(   R   t   bufR   t   opR   R   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   descr   s    		+	c         C@ sh   | |  j  k rd g  } x0 |  j  D]% } | j | | k r= | n | ƒ q Wt | ƒ |  _  |  j ƒ  n  d  S(   N(   R   R&   R   t   _clear_string_cache(   R   t   oldt   newt   opsR)   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   replace_usage)   s    #c         C@ s)   d |  j  j |  j |  j |  j |  j f S(   Ns/   <ir.%s %r of type '%s', opname %r, operands %r>(   t	   __class__t   __name__R   R#   R   R   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   __repr__1   s    (    (	   R1   t
   __module__R   t   propertyR   R   R*   R/   R2   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR      s   		
	t   CallInstrAttributesc           B@ s    e  Z e d  d d d g ƒ Z RS(   t   noreturnt   nounwindt   readonlyt   readnone(   R1   R3   t	   frozensett   _known(    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR5   7   s   t   FastMathFlagsc        	   B@ s,   e  Z e d  d d d d d d d g ƒ Z RS(   t   fastt   nnant   ninft   nszt   arcpt   contractt   afnt   reassoc(   R1   R3   R:   R;   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR<   ;   s   t	   CallInstrc           B@ sw   e  Z d  d	 e d
 d „ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z d „  Z	 e d „  ƒ Z
 d „  Z d „  Z RS(   R   c         C@ sJ  | d  k r$ t | t ƒ r$ | j n | |  _ | |  _ t | ƒ |  _ t ƒ  |  _	 t
 | ƒ } x® t t | j j ƒ ƒ D]” } | | }	 | j j | }
 t |
 t j ƒ rÆ |	 j |
 k rÆ t |	 ƒ }	 n  |	 j |
 k r d j d | |
 |	 j ƒ } t | ƒ ‚ n  |	 | | <qv Wt t |  ƒ j | | j j d | g t
 | ƒ d | ƒd  S(   Ns%   Type of #{0} arg mismatch: {1} != {2}i   t   callR   (   t   NoneR   R   t   calling_conventiont   cconvt   tailR<   t   fastmathR5   t
   attributesR   t   ranget   lent   function_typet   argsR   t   MetaDataTypeR#   R   R'   t	   TypeErrorR   RE   R   t   return_type(   R   R   t   funcRP   R   RI   RJ   RK   t   it   argt   expected_typet   msg(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   @   s&    $		
c         C@ s   |  j  d S(   Ni    (   R   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   calleeZ   s    c         C@ s   | |  j  d <d  S(   Ni    (   R   (   R   t	   newcallee(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRY   ^   s    c         C@ s   |  j  d S(   Ni   (   R   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRP   b   s    c         C@ s1   | j  |  j j  k r$ t d ƒ ‚ n  | |  _ d  S(   Ns"   New function has incompatible type(   RO   RY   RR   (   R   t   newfunc(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   replace_calleef   s    c         C@ s   |  j  S(   s   Alias for llvmpy(   RY   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   called_functionk   s    c   	      C@ sN  d j  g  |  j D]! } d j | j | j ƒ  ƒ ^ q ƒ } |  j j } | j rX | } n	 | j } d j | |  j j ƒ  ƒ } |  j	 r d j |  j	 | ƒ } n  | j
 d j d |  j r» d n d d |  j d | d	 d j  g  |  j D] } d
 | ^ qà ƒ d | d d j  g  |  j D] } d
 | ^ qƒ d | r@|  j d t ƒ n d ƒ ƒ d  S(   Ns   , s   {0} {1}s2   {tail}{op}{fastmath} {callee}({args}){attr}{meta}
RJ   s   tail R   R)   RY   RK   R   RP   t   attrt   metaR    (   R!   RP   R'   R#   R"   RY   RO   t   var_argRS   RI   R&   RJ   R   RK   RL   R$   R%   (	   R   R(   t   add_metadatat   aRP   t   fntyt   tyt
   callee_refR^   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   _descrp   s"    	1					))c         C@ s   |  j  | d t ƒd  S(   NRa   (   Rf   R%   (   R   R(   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   Š   s    N(    (   R1   R3   RG   t   FalseR   R4   RY   t   setterRP   R\   R]   Rf   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRE   ?   s   			t   InvokeInstrc           B@ s    e  Z d  d d „ Z d „  Z RS(   R   c         C@ sk   t  | t ƒ s t ‚ t  | t ƒ s* t ‚ t t |  ƒ j | | | | | ƒ d |  _ | |  _ | |  _ d  S(   Nt   invoke(	   R   R   R   R   Ri   R   R   t	   normal_tot	   unwind_to(   R   R   RT   RP   Rk   Rl   R   RI   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR      s    "		c         C@ s]   t  t |  ƒ j | d t ƒ| j d j |  j j ƒ  |  j j ƒ  d |  j	 d t
 ƒ ƒƒ d  S(   NRa   s.         to label {0} unwind label {1}{metadata}
R   R    (   R   Ri   Rf   Rg   R&   R'   Rk   R"   Rl   R$   R%   (   R   R(   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   —   s
    N(   R1   R3   RG   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRi   Ž   s   t
   Terminatorc           B@ s   e  Z d  „  Z d „  Z RS(   c         C@ s)   t  t |  ƒ j | t j ƒ  | | ƒ d  S(   N(   R   Rm   R   R   t   VoidType(   R   R   R   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   ¡   s    c         C@ su   |  j  } d j g  |  j D]! } d j | j | j ƒ  ƒ ^ q ƒ } |  j d t ƒ } | j d j | | | ƒ ƒ d  S(   Ns   , s   {0} {1}R    s
   {0} {1}{2}(	   R   R!   R   R'   R#   R"   R$   R%   R&   (   R   R(   R   R)   R   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   ¥   s
    		1(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRm       s   	t   PredictableInstrc           B@ s   e  Z d  „  Z RS(   c         C@ s†   t  |  j d ƒ g } xH | D]@ } | d k  r= t d ƒ ‚ n  | j t t j d ƒ | ƒ ƒ q W|  j j | ƒ } |  j d | ƒ d  S(   Nt   branch_weightsi    s(   branch weight must be a positive integeri    t   prof(	   R	   R   t
   ValueErrorR&   R   R   t   IntTypeRa   t   set_metadata(   R   t   weightsR   t   wt   md(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   set_weights¯   s    #(   R1   R3   Rx   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRo   ­   s   t   Retc           B@ s,   e  Z d d  „ Z e d „  ƒ Z d „  Z RS(   c         C@ s;   | d  k	 r | g n g  } t t |  ƒ j | | | ƒ d  S(   N(   RG   R   Ry   R   (   R   R   R   t   return_valueR   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   º   s    c         C@ s   |  j  r |  j  d Sd  Sd  S(   Ni    (   R   RG   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRz   ¾   s    	c         C@ su   |  j  } |  j d t ƒ } | d  k	 rU | j d j |  j | j | j ƒ  | ƒ ƒ n | j d j |  j | ƒ ƒ d  S(   NR    s   {0} {1} {2}{3}
s   {0}{1}
(	   Rz   R$   R%   RG   R&   R'   R   R#   R"   (   R   R(   Rz   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   Å   s    		N(   R1   R3   RG   R   R4   Rz   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRy   ¹   s   t   Branchc           B@ s   e  Z RS(    (   R1   R3   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR{   Ñ   s   t   ConditionalBranchc           B@ s   e  Z RS(    (   R1   R3   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR|   Õ   s   t   IndirectBranchc           B@ s2   e  Z d  „  Z e d „  ƒ Z d „  Z d „  Z RS(   c         C@ s,   t  t |  ƒ j | | | g ƒ g  |  _ d  S(   N(   R   R}   R   t   destinations(   R   R   R   t   addr(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   Ú   s    c         C@ s   |  j  d S(   Ni    (   R   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   addressÞ   s    c         C@ s)   t  | t ƒ s t ‚ |  j j | ƒ d  S(   N(   R   R   R   R~   R&   (   R   t   block(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   add_destinationâ   s    c         C@ sr   g  |  j  D] } d j | j ƒ  ƒ ^ q
 } | j d j |  j j |  j j ƒ  d j | ƒ |  j d t ƒ ƒ ƒ d  S(   Ns	   label {0}s   indirectbr {0} {1}, [{2}]  {3}
s   , R    (	   R~   R'   R"   R&   R€   R#   R!   R$   R%   (   R   R(   t   blkR~   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   æ   s    (	(   R1   R3   R   R4   R€   R‚   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR}   Ù   s   		t   SwitchInstrc           B@ s2   e  Z d  „  Z e d „  ƒ Z d „  Z d „  Z RS(   c         C@ s5   t  t |  ƒ j | | | g ƒ | |  _ g  |  _ d  S(   N(   R   R„   R   t   defaultt   cases(   R   R   R   t   valR…   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   ó   s    	c         C@ s   |  j  d S(   Ni    (   R   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   valueø   s    c         C@ sV   t  | t ƒ s t ‚ t  | t ƒ s< t |  j j | ƒ } n  |  j j | | f ƒ d  S(   N(	   R   R   R   R   R   Rˆ   R#   R†   R&   (   R   R‡   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   add_caseü   s    c      	   C@ s“   g  |  j  D]0 \ } } d j | j | j ƒ  | j ƒ  ƒ ^ q
 } | j d j |  j j |  j j ƒ  |  j j ƒ  d j | ƒ |  j d t	 ƒ ƒ ƒ d  S(   Ns   {0} {1}, label {2}s%   switch {0} {1}, label {2} [{3}]  {4}
R   R    (
   R†   R'   R#   R"   R&   Rˆ   R…   R!   R$   R%   (   R   R(   R‡   Rƒ   R†   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*     s    =	(   R1   R3   R   R4   Rˆ   R‰   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR„   ñ   s   		t   Resumec           B@ s   e  Z RS(    (   R1   R3   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRŠ     s   t   SelectInstrc           B@ sJ   e  Z d  d „ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z RS(   R   c         C@ sM   | j  | j  k s t ‚ t t |  ƒ j | | j  d | | | g d | ƒd  S(   Nt   selectR   (   R#   R   R   R‹   R   (   R   R   t   condt   lhst   rhsR   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR     s    c         C@ s   |  j  d S(   Ni    (   R   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR     s    c         C@ s   |  j  d S(   Ni   (   R   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRŽ     s    c         C@ s   |  j  d S(   Ni   (   R   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   !  s    c         C@ se   | j  d j |  j j |  j j ƒ  |  j j |  j j ƒ  |  j j |  j j ƒ  |  j d t ƒ ƒ ƒ d  S(   Ns%   select {0} {1}, {2} {3}, {4} {5} {6}
R    (	   R&   R'   R   R#   R"   RŽ   R   R$   R%   (   R   R(   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   %  s
    (   R1   R3   R   R4   R   RŽ   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR‹     s
   t   CompareInstrc           B@ s,   e  Z d  Z i  Z d g  d „ Z d „  Z RS(   s   invalid-compareR   c   
   	   C@ sö   | |  j  k r+ t d | |  j f ƒ ‚ n  x9 | D]1 } | |  j k r2 t d | |  j f ƒ ‚ q2 q2 W|  j } t | j t j ƒ r© t j t j d ƒ | j j	 ƒ }	 n t j d ƒ }	 t
 t |  ƒ j | |	 | | | g d | d | ƒ| |  _ d  S(   Ns   invalid comparison %r for %ss   invalid flag %r for %si   R   R   (   t   VALID_OPRr   t   OPNAMEt
   VALID_FLAGR   R#   R   t
   VectorTypeRs   t   countR   R   R   R)   (
   R   R   R)   RŽ   R   R   R   t   flagR   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   3  s     	$c         C@ s   | j  d j d |  j d d j d „  |  j Dƒ ƒ d |  j d |  j d j d	 |  j d j ƒ  d
 |  j d j ƒ  d |  j	 d t
 ƒ ƒ ƒ d  S(   Ns.   {opname}{flags} {op} {ty} {lhs}, {rhs} {meta}
R   R   R   c         s@ s   |  ] } d  | Vq d S(   R   N(    (   t   .0t   it(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pys	   <genexpr>F  s    R)   Rd   i    RŽ   R   i   R_   R    (   R&   R'   R   R!   R   R)   R   R#   R"   R$   R%   (   R   R(   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   C  s    		(   R1   R3   R’   R‘   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   .  s   t	   ICMPInstrc           B@ sc   e  Z d  Z i
 d d 6d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6Z e ƒ  Z RS(   t   icmpt   equalt   eqs	   not equalt   nes   unsigned greater thant   ugts   unsigned greater or equalt   uges   unsigned less thant   ults   unsigned less or equalt   ules   signed greater thant   sgts   signed greater or equalt   sges   signed less thant   slts   signed less or equalt   sle(   R1   R3   R’   R‘   t   setR“   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR™   O  s   
t	   FCMPInstrc           B@ s¢   e  Z d  Z i d d 6d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6Z d! d" d# d$ d% d& d' d( h Z RS()   t   fcmps#   no comparison, always returns falset   falses   ordered and equalt   oeqs   ordered and greater thant   ogts!   ordered and greater than or equalt   oges   ordered and less thant   olts   ordered and less than or equalt   oles   ordered and not equalt   ones   ordered (no nans)t   ords   unordered or equalt   ueqs   unordered or greater thanRž   s"   unordered or greater than or equalRŸ   s   unordered or less thanR    s   unordered or less than or equalR¡   s   unordered or not equalt   unes   unordered (either nans)t   unos"   no comparison, always returns truet   trueR>   R?   R@   RA   RB   RC   RD   R=   (   R1   R3   R’   R‘   R“   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR§   `  s&   
t	   CastInstrc           B@ s   e  Z d  d „ Z d „  Z RS(   R   c         C@ s,   t  t |  ƒ j | | | | g d | ƒd  S(   NR   (   R   Rµ   R   (   R   R   R)   R‡   R   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   x  s    c      	   C@ sO   | j  d j |  j |  j d j |  j d j ƒ  |  j |  j d t ƒ ƒ ƒ d  S(   Ns   {0} {1} {2} to {3} {4}
i    R    (   R&   R'   R   R   R#   R"   R$   R%   (   R   R(   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   {  s    (   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRµ   w  s   t	   LoadInstrc           B@ s   e  Z d  d „ Z d „  Z RS(   R   c         C@ s;   t  t |  ƒ j | | j j d | g d | ƒd  |  _ d  S(   Nt   loadR   (   R   R¶   R   R#   t   pointeeRG   t   align(   R   R   t   ptrR   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   ‡  s    c      	   C@ sr   |  j  \ } |  j d  k	 r+ d |  j } n d } | j d j | j j | j | j ƒ  | |  j d t	 ƒ ƒ ƒ d  S(   Ns
   , align %dR   s   load {0}, {1} {2}{3}{4}
R    (
   R   R¹   RG   R&   R'   R#   R¸   R"   R$   R%   (   R   R(   R‡   R¹   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   Œ  s    		(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR¶   …  s   t
   StoreInstrc           B@ s   e  Z d  „  Z d „  Z RS(   c         C@ s/   t  t |  ƒ j | t j ƒ  d | | g ƒ d  S(   Nt   store(   R   R»   R   R   Rn   (   R   R   R‡   Rº   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   œ  s    c      
   C@ s{   |  j  \ } } |  j d  k	 r. d |  j } n d } | j d j | j | j ƒ  | j | j ƒ  | |  j d t ƒ ƒ ƒ d  S(   Ns
   , align %dR   s   store {0} {1}, {2} {3}{4}{5}
R    (	   R   R¹   RG   R&   R'   R#   R"   R$   R%   (   R   R(   R‡   Rº   R¹   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*      s    		(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR»   ›  s   	t   LoadAtomicInstrc           B@ s   e  Z d  d „ Z d „  Z RS(   R   c         C@ sD   t  t |  ƒ j | | j j d | g d | ƒ| |  _ | |  _ d  S(   Ns   load atomicR   (   R   R½   R   R#   R¸   t   orderingR¹   (   R   R   Rº   R¾   R¹   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   ±  s    	c      
   C@ sV   |  j  \ } | j d j | j j | j | j ƒ  |  j |  j |  j d t	 ƒ ƒ ƒ d  S(   Ns+   load atomic {0}, {1} {2} {3}, align {4}{5}
R    (
   R   R&   R'   R#   R¸   R"   R¾   R¹   R$   R%   (   R   R(   R‡   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   ·  s    		(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR½   °  s   t   StoreAtomicInstrc           B@ s   e  Z d  „  Z d „  Z RS(   c         C@ sA   t  t |  ƒ j | t j ƒ  d | | g ƒ | |  _ | |  _ d  S(   Ns   store atomic(   R   R¿   R   R   Rn   R¾   R¹   (   R   R   R‡   Rº   R¾   R¹   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   Ä  s    	c         C@ s_   |  j  \ } } | j d j | j | j ƒ  | j | j ƒ  |  j |  j |  j d t ƒ ƒ ƒ d  S(   Ns0   store atomic {0} {1}, {2} {3} {4}, align {5}{6}
R    (	   R   R&   R'   R#   R"   R¾   R¹   R$   R%   (   R   R(   R‡   Rº   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   Ê  s    		(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR¿   Ã  s   	t   AllocaInstrc           B@ s   e  Z d  „  Z d „  Z RS(   c         C@ sJ   | r | g n d } t  t |  ƒ j | | j ƒ  d | | ƒ d  |  _ d  S(   Nt   alloca(    (   R   RÀ   R   t
   as_pointerRG   R¹   (   R   R   R   R•   R   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   Ø  s    
c         C@ s°   | j  d j |  j |  j j ƒ ƒ |  j r\ |  j \ } | j  d j | j | j ƒ  ƒ ƒ n  |  j d  k	 r‡ | j  d j |  j ƒ ƒ n  |  j	 r¬ | j  |  j
 d t ƒ ƒ n  d  S(   Ns   {0} {1}s	   , {0} {1}s   , align {0}R    (   R&   R'   R   R#   R¸   R   R"   R¹   RG   R   R$   R%   (   R   R(   R)   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   Þ  s    "	%	(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRÀ   ×  s   	t   GEPInstrc           B@ s   e  Z d  „  Z d „  Z RS(   c   
      C@ sè   | j  } d  } d } xB | D]: }	 | | j |	 ƒ } } t | t j ƒ r | j } q q Wt | t j ƒ rˆ t | t j ƒ rˆ | } n | j | ƒ } t t	 |  ƒ j
 | | d | g t | ƒ d | ƒ| |  _ | |  _ | |  _ d  S(   Ni    t   getelementptrR   (   R#   RG   t   gepR   R   t   PointerTypet	   addrspaceRÂ   R   RÃ   R   R   t   pointert   indicest   inbounds(
   R   R   Rº   RÉ   RÊ   R   R   t   lasttypt   lastaddrspaceRU   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   ê  s     				c      
   C@ sœ   g  |  j  D]! } d j | j | j ƒ  ƒ ^ q
 } |  j r@ d n d } | j d j | |  j j j |  j j |  j j ƒ  d j | ƒ |  j	 d t
 ƒ ƒ ƒ d  S(   Ns   {0} {1}s   getelementptr inboundsRÄ   s   {0} {1}, {2} {3}, {4} {5}
s   , R    (   RÉ   R'   R#   R"   RÊ   R&   RÈ   R¸   R!   R$   R%   (   R   R(   RU   RÉ   R)   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*      s    .	(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRÃ   é  s   	t   PhiInstrc           B@ s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C@ s2   t  t |  ƒ j | | d d d | ƒg  |  _ d  S(   Nt   phiR   (    (   R   RÍ   R   t	   incomings(   R   R   R   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR     s    %c         C@ sK   d j  d „  |  j Dƒ ƒ } | j d j |  j | |  j d t ƒ ƒ ƒ d  S(   Ns   , c         s@ s3   |  ]) \ } } d  j  | j ƒ  | j ƒ  ƒ Vq d S(   s
   [{0}, {1}]N(   R'   R"   (   R—   t   vt   b(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pys	   <genexpr>  s   s   phi {0} {1} {2}
R    (   R!   RÏ   R&   R'   R#   R$   R%   (   R   R(   t   incs(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*     s    c         C@ s/   t  | t ƒ s t ‚ |  j j | | f ƒ d  S(   N(   R   R   R   RÏ   R&   (   R   Rˆ   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   add_incoming  s    c         C@ sA   g  |  j  D]* \ } } | | k r( | n | | f ^ q
 |  _  d  S(   N(   RÏ   (   R   R,   R-   R‡   Rƒ   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR/   !  s    (   R1   R3   R   R*   RÓ   R/   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRÍ     s   		
	t   ExtractElementc           B@ s   e  Z d  d „ Z d „  Z RS(   R   c         C@ sƒ   t  | j t j ƒ s$ t d ƒ ‚ n  t  | j t j ƒ sH t d ƒ ‚ n  | j j } t t |  ƒ j	 | | d | | g d | ƒd  S(   Ns!   vector needs to be of VectorType.s   index needs to be of IntType.t   extractelementR   (
   R   R#   R   R”   RR   Rs   t   elementR   RÔ   R   (   R   R   t   vectort   indexR   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   &  s    c         C@ sB   d j  d „  |  j Dƒ ƒ } | j d j d |  j d | ƒ ƒ d  S(   Ns   , c         s@ s*   |  ]  } d  j  | j | j ƒ  ƒ Vq d S(   s   {0} {1}N(   R'   R#   R"   (   R—   R)   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pys	   <genexpr>0  s   s   {opname} {operands}
R   R   (   R!   R   R&   R'   R   (   R   R(   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   /  s    (   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRÔ   %  s   	t   InsertElementc           B@ s   e  Z d  d „ Z d „  Z RS(   R   c         C@ sº   t  | j t j ƒ s$ t d ƒ ‚ n  | j | j j k s[ t d | j j | j f ƒ ‚ n  t  | j t j ƒ s t d ƒ ‚ n  | j } t t |  ƒ j	 | | d | | | g d | ƒd  S(   Ns!   vector needs to be of VectorType.s"   value needs to be of type % not %.s   index needs to be of IntType.t   insertelementR   (
   R   R#   R   R”   RR   RÖ   Rs   R   RÙ   R   (   R   R   R×   Rˆ   RØ   R   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   6  s    	c         C@ sB   d j  d „  |  j Dƒ ƒ } | j d j d |  j d | ƒ ƒ d  S(   Ns   , c         s@ s*   |  ]  } d  j  | j | j ƒ  ƒ Vq d S(   s   {0} {1}N(   R'   R#   R"   (   R—   R)   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pys	   <genexpr>C  s   s   {opname} {operands}
R   R   (   R!   R   R&   R'   R   (   R   R(   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   B  s    (   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRÙ   5  s   t   ShuffleVectorc           B@ s   e  Z d  d „ Z d „  Z RS(   R   c         @ s]  t  | j t j ƒ s$ t d ƒ ‚ n  | t k rX | j | j k rX t d d ƒ ‚ qX n  t  | t ƒ s™ t  | j t j ƒ s™ | j j t j d ƒ k r¨ t d ƒ ‚ n  t j | j j | j j	 ƒ } t
 | t k rá | j j	 n d | j j	 ƒ ‰  t ‡  f d †  | j Dƒ ƒ s+t d j ˆ  ƒ ƒ ‚ n  t t |  ƒ j | | d	 | | | g d
 | ƒd  S(   Ns"   vector1 needs to be of VectorType.s   vector2 needs to be s)   Undefined or of the same type as vector1.i    s'   mask needs to be a constant i32 vector.i   c         3@ s   |  ] } | j  ˆ  k Vq d  S(   N(   t   constant(   R—   t   ii(   t   index_range(    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pys	   <genexpr>X  s    s   mask values need to be in {0}t   shufflevectorR   (   R   R#   R   R”   RR   R   R   RÖ   Rs   R•   RM   t   allRÜ   t
   IndexErrorR'   R   RÛ   R   (   R   R   t   vector1t   vector2t   maskR   R   (    (   RÞ   s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   I  s&    c         C@ s?   | j  d j d j d „  |  j Dƒ ƒ |  j d t ƒ ƒ ƒ d  S(   Ns   shufflevector {0} {1}
s   , c         s@ s*   |  ]  } d  j  | j | j ƒ  ƒ Vq d S(   s   {0} {1}N(   R'   R#   R"   (   R—   R)   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pys	   <genexpr>a  s   R    (   R&   R'   R!   R   R$   R%   (   R   R(   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   _  s    (   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRÛ   H  s   t   ExtractValuec           B@ s   e  Z d  d „ Z d „  Z RS(   R   c         C@ s¢   | j  } y" x | D] } | j | } q WWn6 t t f k
 rc t d t | ƒ | j  f ƒ ‚ n Xt t |  ƒ j | | d | g d | ƒ| |  _	 | |  _
 d  S(   Ns   Can't index at %r in %st   extractvalueR   (   R#   t   elementst   AttributeErrorRá   RR   R   R   Rå   R   t	   aggregateRÉ   (   R   R   t   aggRÉ   R   R   RU   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   g  s    		c         C@ si   g  |  j  D] } t | ƒ ^ q
 } | j d j |  j j |  j j ƒ  d j | ƒ |  j d t	 ƒ ƒ ƒ d  S(   Ns   extractvalue {0} {1}, {2} {3}
s   , R    (
   RÉ   t   strR&   R'   Ré   R#   R"   R!   R$   R%   (   R   R(   RU   RÉ   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   v  s    "	(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRå   f  s   t   InsertValuec           B@ s   e  Z d  d „ Z d „  Z RS(   R   c         C@ së   | j  } y" x | D] } | j | } q WWn6 t t f k
 rc t d t | ƒ | j  f ƒ ‚ n X| j  | k rž t d | t | ƒ | j  | j  f ƒ ‚ n  t t |  ƒ j | | j  d | | g d | ƒ| |  _	 | |  _
 | |  _ d  S(   Ns   Can't index at %r in %ss&   Can only insert %s at %r in %s: got %st   insertvalueR   (   R#   Rç   Rè   Rá   RR   R   R   Rì   R   Ré   Rˆ   RÉ   (   R   R   Rê   t   elemRÉ   R   R   RU   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   ‚  s    	%		c      
   C@ s~   g  |  j  D] } t | ƒ ^ q
 } | j d j |  j j |  j j ƒ  |  j j |  j j ƒ  d j | ƒ |  j	 d t
 ƒ ƒ ƒ d  S(   Ns&   insertvalue {0} {1}, {2} {3}, {4} {5}
s   , R    (   RÉ   Rë   R&   R'   Ré   R#   R"   Rˆ   R!   R$   R%   (   R   R(   RU   RÉ   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   ”  s    "(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRì     s   t   Unreachablec           B@ s   e  Z d  „  Z d „  Z RS(   c         C@ s/   t  t |  ƒ j | t j ƒ  d d d d ƒd  S(   Nt   unreachableR   R   (    (   R   Rï   R   R   Rn   (   R   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR      s    c         C@ s   | |  j  d f 7} d  S(   Ns   
(   R   (   R   R(   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   ¤  s    (   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRï   Ÿ  s   	t	   InlineAsmc           B@ s/   e  Z e d  „ Z d „  Z d „  Z d „  Z RS(   c         C@ s4   | j  |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   RS   R#   RO   t   asmt
   constraintt   side_effect(   R   t   ftypeRò   Ró   Rô   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   ©  s
    			c         C@ sJ   |  j  r d n d } d } | j | j d | d |  j d |  j ƒ ƒ d  S(   Nt
   sideeffectR   s)   asm {sideeffect} "{asm}", "{constraint}"
Rò   Ró   (   Rô   R&   R'   Rò   Ró   (   R   R(   Rö   t   fmt(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   °  s    c         C@ s    g  } |  j  | ƒ d j | ƒ S(   NR   (   R*   R!   (   R   R(   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR"   ¶  s    c         C@ s   d j  |  j |  j ƒ  ƒ S(   Ns   {0} {1}(   R'   R#   R"   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   __str__»  s    (   R1   R3   Rg   R   R*   R"   Rø   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRñ   ¨  s   		t	   AtomicRMWc           B@ s   e  Z d  „  Z d „  Z RS(   c         C@ sD   t  t |  ƒ j | | j d | | f d | ƒ| |  _ | |  _ d  S(   Nt	   atomicrmwR   (   R   Rù   R   R#   t	   operationR¾   (   R   R   R)   Rº   R‡   R¾   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   À  s    	c         C@ sz   |  j  \ } } d } | j | j d |  j d | j d | j ƒ  d | j d | j ƒ  d |  j d |  j d	 t ƒ ƒ ƒ d  S(
   NsB   atomicrmw {op} {ptrty} {ptr}, {valty} {val} {ordering} {metadata}
R)   t   ptrtyRº   t   valtyR‡   R¾   R   R    (	   R   R&   R'   Rû   R#   R"   R¾   R$   R%   (   R   R(   Rº   R‡   R÷   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   Æ  s    			(   R1   R3   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRù   ¿  s   	t   CmpXchgc           B@ s    e  Z d  Z d „  Z d „  Z RS(   sd   This instruction has changed since llvm3.5.  It is not compatible with
    older llvm versions.
    c   	      C@ se   t  j | j t  j d ƒ g ƒ } t t |  ƒ j | | d | | | f d | ƒ| |  _ | |  _ d  S(   Ni   t   cmpxchgR   (	   R   t   LiteralStructTypeR#   Rs   R   Rþ   R   R¾   t   failordering(	   R   R   Rº   t   cmpR‡   R¾   R  R   t   outtype(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   ×  s
    !	c         C@ s‰   |  j  \ } } } d } | j | j d | j d | j ƒ  d | j d | j ƒ  d | j ƒ  d |  j d |  j d	 |  j d
 t ƒ ƒ ƒ d  S(   NsS   cmpxchg {ptrty} {ptr}, {ty} {cmp}, {ty} {val} {ordering} {failordering} {metadata}
Rü   Rº   Rd   R  R‡   R¾   R  R   R    (	   R   R&   R'   R#   R"   R¾   R  R$   R%   (   R   R(   Rº   t   cmpvalR‡   R÷   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   Þ  s    			(   R1   R3   t   __doc__R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRþ   Ó  s   	t   _LandingPadClausec           B@ s   e  Z d  „  Z d „  Z RS(   c         C@ s   | |  _  d  S(   N(   Rˆ   (   R   Rˆ   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   î  s    c         C@ s.   d j  d |  j d |  j j d |  j j ƒ  ƒ S(   Ns   {kind} {type} {value}t   kindR#   Rˆ   (   R'   R  Rˆ   R#   R"   (   R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyRø   ñ  s    		(   R1   R3   R   Rø   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR  í  s   	t   CatchClausec           B@ s   e  Z d  Z RS(   t   catch(   R1   R3   R  (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR  ÷  s   t   FilterClausec           B@ s   e  Z d  Z d „  Z RS(   t   filterc         C@ sJ   t  | t ƒ s t ‚ t  | j t j ƒ s0 t ‚ t t |  ƒ j | ƒ d  S(   N(	   R   R   R   R#   R   t	   ArrayTypeR   R
  R   (   R   Rˆ   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR   ý  s    (   R1   R3   R  R   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR
  ú  s   t   LandingPadInstrc           B@ s)   e  Z d  e d „ Z d „  Z d „  Z RS(   R   c         C@ s;   t  t |  ƒ j | | d g  d | ƒ| |  _ g  |  _ d  S(   Nt
   landingpadR   (   R   R  R   t   cleanupt   clauses(   R   R   R   R   R  (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR     s    %	c         C@ s)   t  | t ƒ s t ‚ |  j j | ƒ d  S(   N(   R   R  R   R  R&   (   R   t   clause(    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt
   add_clause  s    c         C@ si   d } | j  | j d |  j d |  j r- d n d d d j g  |  j D] } d j | ƒ ^ qC ƒ ƒ ƒ d  S(   Ns$   landingpad {type}{cleanup}{clauses}
R#   R  s    cleanupR   R  s
   
      {0}(   R&   R'   R#   R  R!   R  (   R   R(   R÷   R  (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*     s
    	(   R1   R3   Rg   R   R  R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR    s   	t   Fencec           B@ s8   e  Z d  Z d d d d h Z d d d „ Z d „  Z RS(	   s|   
    The `fence` instruction.

    As of LLVM 5.0.1:

    fence [syncscope("<target-scope>")] <ordering>  ; yields void
    t   acquiret   releaset   acq_relt   seq_cstR   c         C@ sw   t  t |  ƒ j | t j ƒ  d d d | ƒ| |  j k ra t d j | d j |  j ƒ ƒ ƒ ‚ n  | |  _	 | |  _
 d  S(   Nt   fenceR   s3   Invalid fence ordering "{0}"! Should be one of {1}.s   , (    (   R   R  R   R   Rn   t   VALID_FENCE_ORDERINGSRr   R'   R!   R¾   t   targetscope(   R   R   R¾   R  R   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR     s    +		c         C@ sV   |  j  d  k r d } n d j |  j  ƒ } d } | j | j d | d |  j ƒ ƒ d  S(   NR   s   syncscope("{0}") s   fence {syncscope}{ordering}
t	   syncscopeR¾   (   R  RG   R'   R&   R¾   (   R   R(   R  R÷   (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR*   '  s    	N(   R1   R3   R  R  RG   R   R*   (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyR    s   N(:   R  t
   __future__R    R   R   R   t   valuesR   R   R   R   R   R   R	   R
   R   t   _utilsR   R   R5   R<   RE   Ri   Rm   Ro   Ry   R{   R|   R}   R„   RŠ   R‹   R   R™   R§   Rµ   R¶   R»   R½   R¿   RÀ   RÃ   RÍ   RÔ   RÙ   RÛ   Rå   Rì   Rï   t   objectRñ   Rù   Rþ   R  R  R
  R  R  (    (    (    s7   lib/python2.7/site-packages/llvmlite/ir/instructions.pyt   <module>   sV   @*O!%	
