ó
C]c           @@ s.  d  Z  d d l m Z m Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 Z
 d d l m Z d d l m Z d d l m Z e j d ƒ Z e j d ƒ Z e j d	 ƒ Z e j d
 ƒ Z e j d ƒ Z e j ƒ  Z e j ƒ  Z e j d d k Z 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 „  Z% d e f d „  ƒ  YZ& d  e f d! „  ƒ  YZ' d" e f d# „  ƒ  YZ( e) d$ k r*e
 j* ƒ  n  d S(%   s   
IR Construction Tests
i    (   t   print_functiont   absolute_importNi   (   t   TestCase(   t   ir(   t   bindingi   i   i    i@   i   t   TestBasec           B@ s˜   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d d „ Z	 d d d	 „ Z
 d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s!   
    Utilities for IR tests.
    c         C@ sc   d „  } d j  t | | ƒ ƒ } t j d d | ƒ } t rO |  j | | ƒ n |  j | | ƒ d S(   sr   
        Assert *pattern* is in *text*, ignoring any whitespace differences
        (including newlines).
        c         S@ s&   |  j  ƒ  r" |  j ƒ  r" d |  S|  S(   Ns   \(   t   isalnumt   isspace(   t   c(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   escape+   s    t    s   \s+s   \\s*N(   t   joint   mapt   ret   subt   PY2t   assertRegexpMatchest   assertRegex(   t   selft   patternt   textR	   t   regex(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   assertInText%   s    	c         C@ s?   g  t  | ƒ j ƒ  D] } | j ƒ  ^ q } |  j | | ƒ d  S(   N(   t   strt
   splitlinest   stript   assertIn(   R   t   linet   modt   lines(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   assert_ir_line7   s    +c         C@ s   t  j t | ƒ ƒ d  S(   N(   t   llvmt   parse_assemblyR   (   R   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   assert_valid_ir;   s    c         C@ sT   t  j t  j | d d ƒƒ } |  j | j | j ƒ |  j t | ƒ t | ƒ ƒ | S(   s   Assert that the IR object pickles and unpickles correctly.
        The IR string is equal and that their type is equal
        t   protocoliÿÿÿÿ(   t   picklet   loadst   dumpst   assertIst	   __class__t   assertEqualR   (   R   t   irobjectt	   newobject(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   assert_pickle_correctly>   s    c         C@ s
   t  j ƒ  S(   N(   R   t   Module(   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   moduleG   s    t   my_funcc         C@ sR   | p |  j  ƒ  } t j t t t t t j t ƒ f ƒ } t j |  j  ƒ  | | ƒ S(   N(   R-   R   t   FunctionTypet   int32t   dblt   PointerTypet   Function(   R   R-   t   namet   fnty(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   functionJ   s    'R
   c         C@ s   | p |  j  ƒ  } | j | ƒ S(   N(   R6   t   append_basic_block(   R   t   funcR4   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   blockO   s    c         C@ s    g  } | j  | ƒ d j | ƒ S(   NR
   (   t   descrR   (   R   t   thingt   buf(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyR:   S   s    c         C@ s%   t  j | ƒ } | j d d ƒ } | S(   Ns   
    s   
  (   t   textwrapt   dedentt   replace(   R   t   asm(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   _normalize_asmX   s    c         C@ s#   |  j  | ƒ } |  j | | ƒ d  S(   N(   RA   R(   (   R   R:   R@   t   expected(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   check_descr^   s    c         C@ s   |  j  |  j | ƒ | ƒ d  S(   N(   RC   R:   (   R   R9   R@   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   check_blockb   s    c         C@ s;   |  j  | ƒ } | j ƒ  } |  j | j ƒ  | j ƒ  ƒ d  S(   N(   RA   t   _stringify_bodyR(   R   (   R   R-   R@   RB   t   actual(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   check_module_bodye   s    c         C@ s;   |  j  | ƒ } | j ƒ  } |  j | j ƒ  | j ƒ  ƒ d S(   s6   
        Check module metadata against *asm*.
        N(   RA   t   _stringify_metadataR(   R   (   R   R-   R@   RB   RF   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   check_metadataj   s    c         C@ s^   |  j  | ƒ } |  j | ƒ } | j d ƒ d j d ƒ d } |  j | j ƒ  | j ƒ  ƒ d  S(   Nt   {i   t   }i    (   RA   R:   t	   partitiont
   rpartitionR(   R   (   R   R8   R@   RB   RF   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   check_func_bodyr   s     N(   t   __name__t
   __module__t   __doc__R   R   R!   R+   R-   t   NoneR6   R9   R:   RA   RC   RD   RG   RI   RN   (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyR       s   												t   TestFunctionc           B@ sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s>   i32 @"my_func"(i32 %".1", i32 %".2", double %".3", i32* %".4")c         C@ sB   |  j  ƒ  } |  j | ƒ j ƒ  } |  j | j ƒ  d |  j ƒ d  S(   Ns
   declare %s(   R6   R:   R   R(   t   proto(   R   R8   R@   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_declare}   s    c         C@ s´   |  j  ƒ  } | j j d ƒ | j j d ƒ d | j _ t j t d d t ƒ} t j |  j	 ƒ  | d ƒ } | | j _
 |  j | ƒ j ƒ  } |  j | d |  j ƒ |  j | ƒ d  S(   Nt   optsizet   alwaysinlinei   t   var_argt   __gxx_personality_v0s\   declare %s alwaysinline optsize alignstack(16) personality i8 (...)* @"__gxx_personality_v0"(    (   R6   t
   attributest   addt
   alignstackR   R/   t   int8t   TrueR3   R-   t   personalityR:   R   R(   RT   R+   (   R   R8   t   tp_perst   persR@   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_declare_attributesƒ   s    	c         C@ s³   |  j  ƒ  } | j d j d ƒ d | j d j _ d | j d j _ d | j d j _ | j d j d ƒ | j j d	 ƒ |  j | ƒ j	 ƒ  } |  j
 | d
 ƒ |  j | ƒ d  S(   Ni    t   zeroexti   i   i
   i   i   t   nonnullt   noaliass•   declare noalias i32 @"my_func"(i32 zeroext %".1", i32 dereferenceable(5) dereferenceable_or_null(10) %".2", double %".3", i32* nonnull align 4 %".4")(   R6   t   argst   add_attributeRZ   t   dereferenceablet   dereferenceable_or_nullt   alignt   return_valueR:   R   R(   R+   (   R   R8   R@   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_function_attributes“   s    	c         C@ sj   |  j  ƒ  } |  j | ƒ } | j d | j g  ƒ ƒ |  j | ƒ j ƒ  } |  j | d ƒ |  j | ƒ d  S(   Nt   dbgsN   declare i32 @"my_func"(i32 %".1", i32 %".2", double %".3", i32* %".4") !dbg !0(   R-   R6   t   set_metadatat   add_metadataR:   R   R(   R+   (   R   R-   R8   R@   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_function_metadata£   s    	c         C@ sv   |  j  ƒ  } | j j d ƒ | j d ƒ } t j | ƒ } | j ƒ  |  j | ƒ } |  j | d j	 d |  j
 ƒ ƒ d  S(   NRW   t   my_blocks               define {proto} alwaysinline
            {{
            my_block:
                ret void
            }}
            RT   (   R6   RZ   R[   R7   R   t	   IRBuildert   ret_voidR:   RC   t   formatRT   (   R   R8   R9   t   builderR@   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_define¯   s    
	c         C@ sï   |  j  ƒ  } t j ƒ  } | j d t g ƒ } | j d | t g ƒ } | j d | | t g ƒ } | j d ƒ } |  j |  j | ƒ j ƒ  d ƒ |  j |  j | ƒ j ƒ  d ƒ |  j |  j | ƒ j ƒ  d ƒ |  j |  j | ƒ j ƒ  d ƒ d  S(	   Ns	   llvm.powis   llvm.memsets   llvm.memcpys   llvm.assumesD               declare double @"llvm.powi.f64"(double %".1", i32 %".2")se               declare void @"llvm.memset.p0i8.i32"(i8* %".1", i8 %".2", i32 %".3", i32 %".4", i1 %".5")sk               declare void @"llvm.memcpy.p0i8.p0i8.i32"(i8* %".1", i8* %".2", i32 %".3", i32 %".4", i1 %".5")s1               declare void @"llvm.assume"(i1 %".1")(	   R-   R]   t
   as_pointert   declare_intrinsicR1   R0   RC   R:   R   (   R   R-   t   pint8t   powit   memsett   memcpyt   assume(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_declare_intrinsics¿   s    c         C@ sJ   |  j  ƒ  } | j d t g ƒ } | j d t g ƒ } |  j | | ƒ d  S(   Ns	   llvm.powi(   R-   Rx   R1   R&   (   R   R-   Rz   t   powi2(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_redeclare_intrinsicÐ   s    c         C@ s   |  j  ƒ  } |  j | ƒ d  S(   N(   R6   R+   (   R   t   fn(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_picklingÖ   s    (   RO   RP   RT   RU   Rb   Rl   Rp   Rv   R~   R€   R‚   (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRS   y   s   							t   TestIRc           B@ s˜   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e j e d	 ƒ d
 „  ƒ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C@ sN   |  j  ƒ  } | j t d ƒ t d ƒ g ƒ } |  j d | ƒ |  j | ƒ d  S(   Ni{   i*   s   !0 = !{ i32 123, i8 42 }(   R-   Ro   R0   R]   R   R!   (   R   R   t   md(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_unnamed_metadataÝ   s    !c         C@ s¹   |  j  ƒ  } | j t d ƒ d g ƒ } | j t d ƒ | g ƒ } | j t d ƒ | g ƒ } |  j | | ƒ | j | | | g ƒ } |  j d | ƒ |  j d | ƒ |  j d | ƒ d  S(   Ni{   t   kerneliÈ  s   !0 = !{ i32 123, !"kernel" }s   !1 = !{ i64 456, !0 }s   !2 = !{ !0, !1, !1 }(   R-   Ro   R0   t   int64R&   R   (   R   R   t   m0t   m1t   m2t   m3(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_unnamed_metadata_2ä   s    c         C@ sz   |  j  ƒ  } | j t d ƒ t d ƒ g t d ƒ g t d ƒ g g ƒ |  j d | ƒ |  j d | ƒ |  j d | ƒ d  S(   Ni{   iÈ  i  s   !0 = !{ i32 456 }s   !1 = !{ i32 789 }s   !2 = !{ i32 123, !0, !1, !0 }(   R-   Ro   R0   R   (   R   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_unnamed_metadata_3ô   s
    :c         C@ s0   |  j  ƒ  } | j d g ƒ |  j d | ƒ d  S(   Ns   "\$s   !0 = !{ !"\22\5c$" }(   R-   Ro   R   (   R   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_metadata_stringü   s    c         C@ sÏ   |  j  ƒ  } | j t d ƒ g ƒ } | j t d ƒ g ƒ } | j d ƒ } | j | ƒ | j | ƒ | j | ƒ |  j d | ƒ |  j | ƒ |  j | | j	 d ƒ ƒ |  j
 t ƒ  | j	 d ƒ Wd  QXd  S(   Ni{   iÈ  t   foos   !foo = !{ !0, !1, !0 }t   bar(   R-   Ro   R0   R‡   t   add_named_metadataR[   R   R!   R&   t   get_named_metadatat   assertRaisest   KeyError(   R   R   Rˆ   R‰   t   nmd(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_named_metadata  s    c         C@ sá   |  j  ƒ  } | j t d ƒ g ƒ } | j d | ƒ | j d t d ƒ g ƒ | j d d g ƒ | j d g  ƒ |  j d | ƒ |  j d | ƒ |  j d | ƒ |  j d	 | ƒ |  j d
 | ƒ |  j d | ƒ |  j | ƒ d  S(   Ni{   R   iÈ  R†   R   s   !foo = !{ !0, !1, !2 }s   !0 = !{ i32 123 }s   !1 = !{ i64 456 }s   !2 = !{ !"kernel" }s   !bar = !{ !3 }s
   !3 = !{  }(   R-   Ro   R0   R‘   R‡   R   R!   (   R   R   Rˆ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_named_metadata_2  s    c         C@ s   |  j  ƒ  } | j t j ƒ  d  ƒ g ƒ } |  j d | ƒ |  j | ƒ |  j  ƒ  } | j d  t d ƒ g ƒ } |  j d | ƒ |  j | ƒ d  S(   Ns   !0 = !{ i32* null }i{   s   !0 = !{ null, i32 123 }(   R-   Ro   R0   Rw   RR   R   R!   (   R   R   R„   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_metadata_null"  s    c         C@ sD  |  j  ƒ  } | j d i d d 6d d 6ƒ } | j d i | j d  g ƒ d 6ƒ } | j d i t j d	 ƒ d
 6| d 6d d 6d d 6t d 6d t ƒ} | j d i d d 6| d 6d d 6| d 6t d 6| d 6d t ƒ} t | ƒ } |  j	 d | ƒ |  j	 d | ƒ |  j	 d | ƒ |  j	 d | ƒ |  j	 d | ƒ |  j
 | ƒ d  S(   Nt   DIFileR   t   filenameR   t	   directoryt   DISubroutineTypet   typest   DICompileUnitt   DW_LANG_Pythont   languaget   filet   ARTIQt   produceri    t   runtimeVersiont   isOptimizedt   is_distinctt   DISubprogramR.   R4   i   R   t   typet   isLocalt   units/   !0 = !DIFile(directory: "bar", filename: "foo")s   !1 = !{ null }s!   !2 = !DISubroutineType(types: !1)sy   !3 = distinct !DICompileUnit(file: !0, isOptimized: true, language: DW_LANG_Python, producer: "ARTIQ", runtimeVersion: 0)sd   !4 = distinct !DISubprogram(file: !0, isLocal: false, line: 11, name: "my_func", type: !2, unit: !3)(   R-   t   add_debug_infoRo   RR   R   t   DITokenR^   t   FalseR   R   R!   (   R   R   t   di_filet   di_func_typet   di_compileunitt   di_funct   strmod(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_debug_info.  s>    
	
				c         C@ s  |  j  ƒ  } | j d i d d 6d d 6ƒ } | j d i d d 6d d 6ƒ } | j d i d d 6d d 6ƒ } | j d i d d 6d d 6d t ƒ} |  j | | ƒ |  j t | | | | h ƒ d ƒ t | ƒ } |  j d | ƒ |  j d	 | ƒ |  j d
 | ƒ |  j | ƒ d  S(   NR™   R   Rš   R   R›   R¦   i   s/   !0 = !DIFile(directory: "bar", filename: "foo")s/   !1 = !DIFile(directory: "foo", filename: "bar")s8   !2 = distinct !DIFile(directory: "bar", filename: "foo")(	   R-   R«   R^   R&   R(   t   lenR   R   R!   (   R   R   t   di1t   di2t   di3t   di4R²   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_debug_info_2Z  s0    	
	
	
	

	"			s   py2 onlyc         C@ sY   |  j  ƒ  } | j d i d d 6t d ƒ d 6ƒ } |  j d t | ƒ ƒ |  j | ƒ d  S(   Nt   DIBasicTypeR   R4   i{   t   sizes)   !0 = !DIBasicType(name: "foo", size: 123)(   R-   R«   t   longR   R   R!   (   R   R   t   di(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_debug_info_py2_longy  s    	
	c         C@ sË   |  j  ƒ  } t j | t j t j ƒ  g  ƒ d ƒ } t j | j d ƒ ƒ } t j t t g ƒ } t j | d d d t	 ƒ} | j
 | t d ƒ g ƒ | j ƒ  d } |  j | t | ƒ ƒ |  j | ƒ d  S(   NR   R
   s
   mov $1, $2s   =r,rt   side_effecti{   s8   call i32 asm sideeffect "mov $1, $2", "=r,r" ( i32 123 )(   R-   R   R3   R/   t   VoidTypeRr   R7   R0   t	   InlineAsmR^   t   callRs   R   R   R!   (   R   R   R   Ru   t   asmtyR@   t   pat(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_inline_assemblyƒ  s    '
c         C@ s¼   |  j  ƒ  } t j | t j t j ƒ  g  ƒ d ƒ } t j | j d ƒ ƒ } t j t t g ƒ } | j | d d t d ƒ g d t	 ƒ| j
 ƒ  d } |  j | t | ƒ ƒ |  j | ƒ d  S(   NR   R
   s
   mov $1, $2s   =r,ri{   R¿   s8   call i32 asm sideeffect "mov $1, $2", "=r,r" ( i32 123 )(   R-   R   R3   R/   RÀ   Rr   R7   R0   R@   R^   Rs   R   R   R!   (   R   R   R   Ru   RÃ   RÄ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_builder_asm  s    '%
c         C@ s°   |  j  ƒ  } t j | t j t j ƒ  g  ƒ d ƒ } t j | j d ƒ ƒ } t j t t g ƒ } | j t j	 d ƒ d ƒ | j
 ƒ  d } |  j | t | ƒ ƒ |  j | ƒ d  S(   NR   R
   i@   t   raxs   call i64 asm "", "={rax}"(   R-   R   R3   R/   RÀ   Rr   R7   R0   t   load_regt   IntTypeRs   R   R   R!   (   R   R   R   Ru   RÃ   RÄ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_builder_load_regš  s    '
c         C@ s¿   |  j  ƒ  } t j | t j t j ƒ  g  ƒ d ƒ } t j | j d ƒ ƒ } t j t j ƒ  t g ƒ } | j t	 d ƒ t j
 d ƒ d ƒ | j ƒ  d } |  j | t | ƒ ƒ |  j | ƒ d  S(   NR   R
   i{   i@   RÇ   s0   call void asm sideeffect "", "{rax}" ( i64 123 )(   R-   R   R3   R/   RÀ   Rr   R7   R0   t	   store_regR‡   RÉ   Rs   R   R   R!   (   R   R   R   Ru   RÃ   RÄ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_builder_store_reg¥  s    '"
(   RO   RP   R…   RŒ   R   RŽ   R–   R—   R˜   R³   R¹   t   unittestt
   skipUnlessR   R¾   RÅ   RÆ   RÊ   RÌ   (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRƒ   Û   s   								,	
			t   TestGlobalValuesc           B@ s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C@ sâ   |  j  ƒ  } t j | t j t j ƒ  g  ƒ d ƒ } t j | t j t j ƒ  g  ƒ d ƒ t j | t j ƒ  d ƒ } |  j | j d ƒ | ƒ |  j | j d ƒ | ƒ |  j	 t
 ƒ  | j d ƒ Wd  QX|  j t | ƒ d ƒ d  S(   NR   R   t
   globdoublet   kkks2   <ir.GlobalVariable 'globdouble' of type 'double*'>(   R-   R   R3   R/   RÀ   t   GlobalVariablet
   DoubleTypeR(   t
   get_globalR“   R”   t   repr(   R   R   R   RÐ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_globals_access²  s    '%c         C@ sº   |  j  ƒ  } t j t j ƒ  g  ƒ } t j | | d ƒ } t j | | d ƒ } t j | t j ƒ  d ƒ } |  j t | j	 ƒ t | | f ƒ ƒ |  j t | j
 ƒ t | | | f ƒ ƒ d S(   sr   
        Accessing functions and global values through Module.functions
        and Module.global_values.
        R   R   RÐ   N(   R-   R   R/   RÀ   R3   RÒ   RÓ   R(   t   sett	   functionst   global_values(   R   R   t   ftyR   R   RÐ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt#   test_functions_global_values_access¿  s    %c   	      C@ s
  |  j  ƒ  } t j | t d ƒ } t j | t d d d ƒ} t j | t d ƒ } t d ƒ | _ t j | t d ƒ } t | _ t j | t d ƒ } d	 | _ t j | t d
 d d ƒ} t | _	 t j | t d ƒ } d	 | _ t d ƒ | _ d | _
 |  j | d ƒ d S(   s7   
        IR serialization of global variables.
        t   at   bt	   addrspacei*   R   i{   t   dt   et   internalt   fiÈ  t   gi   sV              @"a" = external global i8
            @"b" = external addrspace(42) global i8
            @"c" = global i32 123
            @"d" = external constant i32
            @"e" = internal global i32 undef
            @"f" = external unnamed_addr addrspace(456) global i32
            @"g" = internal global i32 123, align 16
            N(   R-   R   RÒ   R]   R0   t   initializerR^   t   global_constantt   linkaget   unnamed_addrRj   RG   (	   R   R   RÜ   RÝ   R   Rß   Rà   Râ   Rã   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_global_variables_irÌ  s"    						c         C@ s   |  j  ƒ  } |  j | ƒ d  S(   N(   R-   R+   (   R   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_pickleë  s    (   RO   RP   RÖ   RÛ   Rè   Ré   (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRÏ   °  s   			t	   TestBlockc           B@ s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C@ sK   |  j  ƒ  } t j d | d d ƒ } |  j | j | ƒ |  j | j ƒ d  S(   Nt   parentR4   t   start(   R6   R   t   BlockR&   Rë   t   assertFalset   is_terminated(   R   R8   R9   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_attributesò  s    c         C@ s^   |  j  d d ƒ } |  j |  j | ƒ d ƒ | j j d d g ƒ |  j |  j | ƒ d ƒ d  S(   NR4   Rq   s
   my_block:
RÜ   RÝ   s   my_block:
  a
  b
(   R9   R(   R:   t   instructionst   extend(   R   R9   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt
   test_descrø  s    c         C@ sÌ   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j | | d ƒ } | j | | d ƒ } | j | | d ƒ t j | | j	 d | | f d ƒ } |  j
 | d	 ƒ | j | | ƒ |  j
 | d
 ƒ d  S(   NR4   Rq   i   R   Rß   Rà   t   sdivRâ   s¥               my_block:
                %"c" = add i32 %".1", %".2"
                %"d" = sub i32 %".1", %".2"
                %"e" = mul i32 %"d", %".2"
            s¥               my_block:
                %"c" = add i32 %".1", %".2"
                %"f" = sdiv i32 %"c", %".2"
                %"e" = mul i32 %"f", %".2"
            (   R9   R   Rr   R6   Rf   R[   R   t   mult   InstructionR¨   RD   R?   (   R   R9   Ru   RÜ   RÝ   R   Rß   Râ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_replaceþ  s    $		c         C@ s>   |  j  ƒ  } t j d | d d ƒ } |  j t | ƒ d ƒ d S(   s4   
        Blocks should have a useful repr()
        Rë   R4   Rì   s"   <ir.Block 'start' of type 'label'>N(   R6   R   Rí   R(   RÕ   (   R   R8   R9   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt	   test_repr  s    (   RO   RP   Rð   Ró   R÷   Rø   (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRê   ð  s   			t   TestBuildInstructionsc           B@ s—  e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d  „  Z" d! „  Z# d" „  Z$ d# „  Z% d$ „  Z& d% „  Z' d& „  Z( d' „  Z) d( „  Z* d) „  Z+ d* „  Z, d+ „  Z- d, „  Z. RS(-   sN   
    Test IR generation of LLVM instructions through the IRBuilder class.
    i   c         C@ sv   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j | | d ƒ } |  j | d ƒ |  j t | ƒ d ƒ d  S(   NR4   Rq   i   t   ressP               my_block:
                %"res" = add i32 %".1", %".2"
            s}   <ir.Instruction 'res' of type 'i32', opname 'add', operands (<ir.Argument '.1' of type i32>, <ir.Argument '.2' of type i32>)>(	   R9   R   Rr   R6   Rf   R[   RD   R(   RÕ   (   R   R9   Ru   RÜ   RÝ   t   inst(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_simple$  s    	c         C@ sõ  |  j  d d ƒ } t j | ƒ } | j j d  \ } } } | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j	 | | d ƒ | j
 | | d	 ƒ | j | | d
 ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ |  j t ƒ  } | j | | ƒ Wd  QX|  j t | j ƒ d ƒ |  j | j ƒ |  j | d ƒ d  S(   NR4   Rq   i   R   Rß   Rà   Râ   Rã   t   ht   it   jt   kt   lt   mt   nt   ot   pt   qt   rt   st   ts1   Operands must be the same type, got (i32, double)sD              my_block:
                %"c" = add i32 %".1", %".2"
                %"d" = fadd i32 %".1", %".2"
                %"e" = sub i32 %".1", %".2"
                %"f" = fsub i32 %".1", %".2"
                %"g" = mul i32 %".1", %".2"
                %"h" = fmul i32 %".1", %".2"
                %"i" = udiv i32 %".1", %".2"
                %"j" = sdiv i32 %".1", %".2"
                %"k" = fdiv i32 %".1", %".2"
                %"l" = urem i32 %".1", %".2"
                %"m" = srem i32 %".1", %".2"
                %"n" = frem i32 %".1", %".2"
                %"o" = or i32 %".1", %".2"
                %"p" = and i32 %".1", %".2"
                %"q" = xor i32 %".1", %".2"
                %"r" = shl i32 %".1", %".2"
                %"s" = ashr i32 %".1", %".2"
                %"t" = lshr i32 %".1", %".2"
            (   R9   R   Rr   R6   Rf   R[   t   faddR   t   fsubRõ   t   fmult   udivRô   t   fdivt   uremt   sremt   fremt   or_t   and_t   xort   shlt   ashrt   lshrR“   t
   ValueErrorR(   R   t	   exceptionRî   Rï   RD   (   R   R9   Ru   RÜ   RÝ   t   fft   cm(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_binops2  s8    	c         C@ sƒ   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j | | d d d
 ƒ| j | | d d d d g ƒ|  j | d	 ƒ d  S(   NR4   Rq   i   R   t   flagst   nuwRß   t   nsws†               my_block:
                %"c" = add nuw i32 %".1", %".2"
                %"d" = sub nuw nsw i32 %".1", %".2"
            (   R  (   R9   R   Rr   R6   Rf   R[   R   RD   (   R   R9   Ru   RÜ   RÝ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_binop_flagsc  s    	c         C@ sƒ   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j | | d d d ƒ| j | | d d d d	 g ƒ|  j | d
 ƒ d  S(   NR4   Rq   i   R   R  t   fastRß   t   ninft   nszsŠ               my_block:
                %"c" = fadd fast i32 %".1", %".2"
                %"d" = fsub ninf nsz i32 %".1", %".2"
            (   R!  (   R9   R   Rr   R6   Rf   R
  R  RD   (   R   R9   Ru   RÜ   RÝ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_binop_fastmath_flagsq  s    	c         C@ s½   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j | | d ƒ | j | | d ƒ | j | | d ƒ | j | | d ƒ | j	 | | d ƒ | j
 | | d	 ƒ |  j | d
 ƒ d  S(   NR4   Rq   i   R   Rß   Rà   Râ   Rã   Rý   sD              my_block:
                %"c" = call {i32, i1} @"llvm.sadd.with.overflow.i32"(i32 %".1", i32 %".2")
                %"d" = call {i32, i1} @"llvm.smul.with.overflow.i32"(i32 %".1", i32 %".2")
                %"e" = call {i32, i1} @"llvm.ssub.with.overflow.i32"(i32 %".1", i32 %".2")
                %"f" = call {i32, i1} @"llvm.uadd.with.overflow.i32"(i32 %".1", i32 %".2")
                %"g" = call {i32, i1} @"llvm.umul.with.overflow.i32"(i32 %".1", i32 %".2")
                %"h" = call {i32, i1} @"llvm.usub.with.overflow.i32"(i32 %".1", i32 %".2")
            (   R9   R   Rr   R6   Rf   t   sadd_with_overflowt   smul_with_overflowt   ssub_with_overflowt   uadd_with_overflowt   umul_with_overflowt   usub_with_overflowRD   (   R   R9   Ru   RÜ   RÝ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_binops_with_overflow  s    	c         C@ s{   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j | d ƒ | j | d ƒ |  j | j ƒ |  j	 | d ƒ d  S(   NR4   Rq   i   R   Rß   ss               my_block:
                %"c" = sub i32 0, %".1"
                %"d" = xor i32 %".2", -1
            (
   R9   R   Rr   R6   Rf   t   negt   not_Rî   Rï   RD   (   R   R9   Ru   RÜ   RÝ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_unary_ops“  s    	c         C@ sÌ   |  j  d d ƒ } t j | ƒ } | j j d  \ } } t j t j d ƒ t j ƒ } t j t j d ƒ t j ƒ } | j | | d ƒ } |  j	 | d ƒ | j
 | | ƒ | j
 | | ƒ |  j	 | d ƒ d  S(   NR4   Rq   i   i    R   sN               my_block:
                %"c" = add i32 undef, undef
            sN               my_block:
                %"c" = add i32 %".1", %".2"
            (   R9   R   Rr   R6   Rf   t   ConstantRÉ   t	   UndefinedR[   RD   t   replace_usage(   R   R9   Ru   RÜ   RÝ   t   undef1t   undef2R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_replace_operand   s    		c      
   C@ s»  |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j d | | d ƒ | j d | | d ƒ | j d | | d	 ƒ | j d
 | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d
 | | d ƒ | j d | | d ƒ | j d | | d ƒ |  j t ƒ  | j d | | d ƒ Wd  QX|  j t ƒ  | j d | | d ƒ Wd  QX|  j	 | j
 ƒ |  j | d ƒ d  S(   NR4   Rq   i   s   ==R   s   !=Rß   t   <Rà   s   <=Râ   t   >Rã   s   >=Rý   Rþ   Rÿ   R   R  R  R  t   unot   zzR   sj              my_block:
                %"c" = icmp eq i32 %".1", %".2"
                %"d" = icmp ne i32 %".1", %".2"
                %"e" = icmp ult i32 %".1", %".2"
                %"f" = icmp ule i32 %".1", %".2"
                %"g" = icmp ugt i32 %".1", %".2"
                %"h" = icmp uge i32 %".1", %".2"
                %"i" = icmp eq i32 %".1", %".2"
                %"j" = icmp ne i32 %".1", %".2"
                %"k" = icmp slt i32 %".1", %".2"
                %"l" = icmp sle i32 %".1", %".2"
                %"m" = icmp sgt i32 %".1", %".2"
                %"n" = icmp sge i32 %".1", %".2"
            (   R9   R   Rr   R6   Rf   t   icmp_unsignedt   icmp_signedR“   R  Rî   Rï   RD   (   R   R9   Ru   RÜ   RÝ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_integer_comparisons²  s,    	c         C@ sæ  |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j d | | d ƒ | j d | | d ƒ | j d | | d	 ƒ | j d
 | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d
 | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d ƒ | j d | | d d d d  d! d" d# g ƒ|  j | j ƒ |  j	 | d$ ƒ d  S(%   NR4   Rq   i   s   ==R   s   !=Rß   R5  Rà   s   <=Râ   R6  Rã   s   >=Rý   Rþ   Rÿ   R   R  R  R  t   ordt   uR7  t   vt   wt   xt   oltt   yR  t   nnanR"  R#  t   arcpR!  s{              my_block:
                %"c" = fcmp oeq i32 %".1", %".2"
                %"d" = fcmp one i32 %".1", %".2"
                %"e" = fcmp olt i32 %".1", %".2"
                %"f" = fcmp ole i32 %".1", %".2"
                %"g" = fcmp ogt i32 %".1", %".2"
                %"h" = fcmp oge i32 %".1", %".2"
                %"i" = fcmp ueq i32 %".1", %".2"
                %"j" = fcmp une i32 %".1", %".2"
                %"k" = fcmp ult i32 %".1", %".2"
                %"l" = fcmp ule i32 %".1", %".2"
                %"m" = fcmp ugt i32 %".1", %".2"
                %"n" = fcmp uge i32 %".1", %".2"
                %"u" = fcmp ord i32 %".1", %".2"
                %"v" = fcmp uno i32 %".1", %".2"
                %"w" = fcmp ord i32 %".1", %".2"
                %"x" = fcmp uno i32 %".1", %".2"
                %"y" = fcmp nnan ninf nsz arcp fast olt i32 %".1", %".2"
            (
   R9   R   Rr   R6   Rf   t   fcmp_orderedt   fcmp_unorderedRî   Rï   RD   (   R   R9   Ru   RÜ   RÝ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_float_comparisons×  s.    +	c         C@ s   |  j  d d ƒ } t j t t ƒ } t j | ƒ } | j j d  \ } } | j | | | d ƒ |  j	 | j
 ƒ | j ƒ  |  j | j
 ƒ |  j | d ƒ d  S(   NR4   Rq   i   R   sz               my_block:
                %"c" = select i1 true, i32 %".1", i32 %".2"
                unreachable
            (   R9   R   R/  t   int1R^   Rr   R6   Rf   t   selectRî   Rï   t   unreachablet
   assertTrueRD   (   R   R9   R	  Ru   RÜ   RÝ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_misc_ops  s    
	c         C@ s±   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j j d ƒ } | j j d ƒ } | j t d ƒ } | j | | ƒ | j | | ƒ |  j	 | j
 ƒ |  j | d ƒ d  S(   NR4   Rq   i   t   b2t   b3t   my_phise               my_block:
                %"my_phi" = phi i32 [%".1", %"b2"], [%".2", %"b3"]
            (   R9   R   Rr   R6   Rf   R7   t   phiR0   t   add_incomingRî   Rï   RD   (   R   R9   Ru   RÜ   RÝ   t   bb2t   bb3RP  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_phi  s    	c      	   C@ sŠ  |  j  d d ƒ } t j | ƒ } | j j d  \ } } } | j t d d ƒ} | j t d d d d ƒ} | j t d | d d ƒ} d	 | _ |  j	 | j
 t j t ƒ ƒ | j | | ƒ }	 |  j	 |	 j
 t j ƒ  ƒ | j | | ƒ }
 |  j	 |
 j
 t j ƒ  ƒ | j | d
 ƒ } |  j	 | j
 t ƒ | j | | d d ƒ} |  j	 | j
 t j ƒ  ƒ | j | d d d ƒ} |  j	 | j
 t ƒ | j | | d d d d ƒ} |  j	 | j
 t j ƒ  ƒ | j | d d d d d d ƒ} |  j	 | j
 t ƒ |  j t ƒ  | j | | ƒ Wd  QX|  j t ƒ  | j | ƒ Wd  QX|  j t ƒ  } | j | | ƒ Wd  QX|  j	 t | j ƒ d ƒ |  j | d ƒ d  S(   NR4   Rq   i   R   R»   i*   Rß   Rà   i   Rã   Rj   i   Rþ   t   orderingt   seq_csti   R   s.   cannot store i32 to double*: mismatching typess              my_block:
                %"c" = alloca i32
                %"d" = alloca i32, i32 42
                %"e" = alloca double, i32 %".1", align 8
                store double %".3", double* %"e"
                store i32 %".2", i32* %"c"
                %"g" = load i32, i32* %"c"
                store i32 %".2", i32* %"c", align 1
                %"i" = load i32, i32* %"c", align 1
                store atomic i32 %".2", i32* %"c" seq_cst, align 4
                %"k" = load atomic i32, i32* %"c" seq_cst, align 4
            (   R9   R   Rr   R6   Rf   t   allocaR0   R1   Rj   R(   R¨   R2   t   storeRÀ   t   loadt   store_atomict   load_atomicR“   t	   TypeErrorR   R  RD   (   R   R9   Ru   RÜ   RÝ   t   zR   Rß   Rà   t   eeRâ   Rã   Rý   Rþ   Rÿ   R   R  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_mem_ops!  s@    	!	c         C@ s¯   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j t j t ƒ d d ƒ} | j | t j	 t d ƒ | g d d ƒ} |  j
 | j t j t ƒ ƒ |  j | d ƒ d  S(   NR4   Rq   i   R   i   Rß   s               my_block:
                %"c" = alloca i32*
                %"d" = getelementptr i32*, i32** %"c", i32 5, i32 %".1"
            (   R9   R   Rr   R6   Rf   RW  R2   R0   t   gepR/  R(   R¨   RD   (   R   R9   Ru   RÜ   RÝ   R   Rß   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_gepR  s    *	c   
      C@ sì   |  j  d d ƒ } t j | ƒ } | j j d  \ } } t j ƒ  } t j t | | | t g ƒ } | j	 | | j ƒ  d d ƒ} | j
 | g  d d g D] } t j t | ƒ ^ q• d d ƒ}	 |  j |	 j t j | ƒ ƒ |  j | d ƒ d  S(	   NR4   Rq   i   Rß   i    i   Rà   s×               my_block:
                %"d" = bitcast i32 %".1" to {i64, i8*, i8*, i8*, i64}*
                %"e" = getelementptr {i64, i8*, i8*, i8*, i64}, {i64, i8*, i8*, i8*, i64}* %"d", i32 0, i32 3
            (   R9   R   Rr   R6   Rf   R]   Rw   t   LiteralStructTypeR‡   t   bitcastR`  R/  R0   R(   R¨   R2   RD   (
   R   R9   Ru   RÜ   RÝ   t   int8ptrt   lsRß   R@  Rà   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_gep_castinstr`  s    =	c         C@ s  |  j  d d ƒ } t j | ƒ } | j j d  \ } } d } t j ƒ  } t j t | | | t g ƒ } | j	 | | j d | ƒ d d ƒ} | j
 | g  d d g D] }	 t j t |	 ƒ ^ q¡ d d	 ƒ}
 |  j |
 j j | ƒ |  j |
 j t j | d | ƒƒ |  j | d
 ƒ d  S(   NR4   Rq   i   i   RÞ   Rß   i    i   Rà   sñ               my_block:
                %"d" = bitcast i32 %".1" to {i64, i8*, i8*, i8*, i64} addrspace(4)*
                %"e" = getelementptr {i64, i8*, i8*, i8*, i64}, {i64, i8*, i8*, i8*, i64} addrspace(4)* %"d", i32 0, i32 3
            (   R9   R   Rr   R6   Rf   R]   Rw   Rb  R‡   Rc  R`  R/  R0   R(   R¨   RÞ   R2   RD   (   R   R9   Ru   RÜ   RÝ   RÞ   Rd  Re  Rß   R@  Rà   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_gep_castinstr_addrspaceq  s    $="	c   	      C@ s$  |  j  d d ƒ } t j | ƒ } | j j d  \ } } d } | j t j t d | ƒd d ƒ} |  j t	 | j
 ƒ d ƒ |  j | j
 j j | ƒ | j | t j t d ƒ | g d d	 ƒ} |  j | j
 j | ƒ | j | t j t d
 ƒ g d d ƒ} |  j | j
 j | ƒ |  j | d ƒ d  S(   NR4   Rq   i   i   RÞ   R   s   i32 addrspace(4)**i   Rß   i
   Rà   sý               my_block:
                %"c" = alloca i32 addrspace(4)*
                %"d" = getelementptr i32 addrspace(4)*, i32 addrspace(4)** %"c", i32 5, i32 %".1"
                %"e" = getelementptr i32, i32 addrspace(4)* %"d", i32 10
            (   R9   R   Rr   R6   Rf   RW  R2   R0   R(   R   R¨   t   pointeeRÞ   R`  R/  RD   (	   R   R9   Ru   RÜ   RÝ   RÞ   R   Rß   Rà   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_gep_addrspace„  s    $*'	c         C@ s  |  j  d d ƒ } t j | ƒ } | j j d  \ } } t j t t g ƒ } t j t | g ƒ } t j	 | t j	 t d ƒ t j	 t t
 ƒ f ƒ } | j | d d d ƒ} | j | | d d d ƒ}	 | j |	 t j	 t t ƒ d d d	 ƒ}
 |  j |	 j | ƒ |  j |
 j | ƒ | j | d d
 ƒ} | j | d d ƒ} | j | d d d ƒ} | j | d d d ƒ} | j | d d d ƒ} | j | d d d ƒ} | j | | d d d ƒ} | j | | d d d ƒ} |  j | j t ƒ |  j | j | ƒ |  j | j t ƒ |  j | j t ƒ |  j | j | ƒ |  j | j | ƒ |  j t ƒ  | j | d ƒ Wd  QX|  j t ƒ  | j | d ƒ Wd  QX|  j t ƒ  | j | d ƒ Wd  QX|  j t ƒ  | j | | d ƒ Wd  QX|  j t ƒ  | j | | d ƒ Wd  QX|  j | d ƒ d  S(   NR4   Rq   i   i   i    R   Rß   i   Rà   t   ptrRÿ   R   R  R  R  R  R  i   sî              my_block:
                %"c" = extractvalue {i32, i1} {i32 4, i1 true}, 0
                %"d" = insertvalue {i32, i1} {i32 4, i1 true}, i32 %".1", 0
                %"e" = insertvalue {i32, i1} %"d", i1 false, 1
                %"ptr" = alloca {i8, {i32, i1}}
                %"j" = load {i8, {i32, i1}}, {i8, {i32, i1}}* %"ptr"
                %"k" = extractvalue {i8, {i32, i1}} %"j", 0
                %"l" = extractvalue {i8, {i32, i1}} %"j", 1
                %"m" = extractvalue {i8, {i32, i1}} %"j", 1, 0
                %"n" = extractvalue {i8, {i32, i1}} %"j", 1, 1
                %"o" = insertvalue {i8, {i32, i1}} %"j", {i32, i1} %"l", 1
                %"p" = insertvalue {i8, {i32, i1}} %"j", i32 %".1", 1, 0
            (   i   i    (   i   i   (   i   i    (   i    i    (   R9   R   Rr   R6   Rf   Rb  R0   RH  R]   R/  R^   t   extract_valuet   insert_valueR­   R(   R¨   RW  RY  R“   R\  RD   (   R   R9   Ru   RÜ   RÝ   t   tp_innert   tp_outert   c_innerR   Rß   Rà   t   p_outerRÿ   R   R  R  R  R  R  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_extract_insert_value—  sL    '	c         C@ so  |  j  d d ƒ } t j | ƒ } | j j d  \ } } } } | j | t d d ƒ} | j | t d d ƒ} | j	 | t d d ƒ}	 | j
 | t d ƒ }
 | j |
 t d ƒ } | j | t d	 ƒ } | j | t d
 ƒ } | j | t d ƒ } | j | t d ƒ } | j | t d ƒ } | j | t j t ƒ d ƒ } | j | t d ƒ } |  j | j ƒ |  j | d ƒ d  S(   NR4   Rq   i   R   Rß   Rà   t   fbt   fcRã   Rý   t   fdt   feRþ   Rÿ   R   sh              my_block:
                %"c" = trunc i32 %".1" to i8
                %"d" = zext i8 %"c" to i32
                %"e" = sext i8 %"c" to i32
                %"fb" = fptrunc double %".3" to float
                %"fc" = fpext float %"fb" to double
                %"g" = fptoui double %".3" to i32
                %"h" = fptosi double %".3" to i8
                %"fd" = uitofp i32 %"g" to float
                %"fe" = sitofp i8 %"h" to double
                %"i" = ptrtoint i32* %".4" to i32
                %"j" = inttoptr i32 %"i" to i8*
                %"k" = bitcast i32 %".1" to float
            (   R9   R   Rr   R6   Rf   t   truncR]   t   zextR0   t   sextt   fptrunct   fltt   fpextR1   t   fptouit   fptosit   uitofpt   sitofpt   ptrtointt   inttoptrR2   Rc  Rî   Rï   RD   (   R   R9   Ru   RÜ   RÝ   t   faRj  R   Rß   Rà   Rr  Rs  Rã   Rý   Rt  Ru  Rþ   Rÿ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_cast_opsÔ  s$    	c         C@ sŽ   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j t d d ƒ} | j d | | d d ƒ } |  j | j	 t ƒ |  j
 | d ƒ d  S(	   NR4   Rq   i   R   R[   t	   monotonicRß   sˆ               my_block:
                %"c" = alloca i32
                %"d" = atomicrmw add i32* %"c", i32 %".1" monotonic
            (   R9   R   Rr   R6   Rf   RW  R0   t
   atomic_rmwR(   R¨   RD   (   R   R9   Ru   RÜ   RÝ   R   Rß   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_atomicrmwõ  s    	c         C@ sg   |  j  d d ƒ } t j | ƒ } | j j d d ƒ } | j | ƒ |  j | j ƒ |  j | d ƒ d  S(   NR4   Rq   t   targetsE               my_block:
                br label %"target"
            (	   R9   R   Rr   R6   R7   t   branchRK  Rï   RD   (   R   R9   Ru   t	   bb_target(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_branch  s    	c         C@ sŽ   |  j  d d ƒ } t j | ƒ } | j j d d ƒ } | j j d d ƒ } | j t j t t ƒ | | ƒ |  j	 | j
 ƒ |  j | d ƒ d  S(   NR4   Rq   t   b_truet   b_falsesa               my_block:
                br i1 false, label %"b_true", label %"b_false"
            (   R9   R   Rr   R6   R7   t   cbranchR/  RH  R­   RK  Rï   RD   (   R   R9   Ru   t   bb_truet   bb_false(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_cbranch  s    	c         C@ s¶   |  j  d d ƒ } t j | ƒ } | j j d d ƒ } | j j d d ƒ } | j t j t t ƒ | | ƒ } | j	 d d g ƒ |  j
 | j ƒ |  j | d ƒ |  j | j d ƒ d  S(	   NR4   Rq   R‹  RŒ  i   i*   sk               my_block:
                br i1 false, label %"b_true", label %"b_false", !prof !0
            sC               !0 = !{ !"branch_weights", i32 5, i32 42 }
            (   R9   R   Rr   R6   R7   R  R/  RH  R­   t   set_weightsRK  Rï   RD   RI   R-   (   R   R9   Ru   RŽ  R  t   br(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_cbranch_weights  s    !	c         C@ s§   |  j  d d ƒ } t j | ƒ } | j j d d ƒ } | j j d d ƒ } | j t j | j | ƒ ƒ } | j | ƒ | j | ƒ |  j | j	 ƒ |  j
 | d ƒ d  S(   NR4   Rq   t   b_1t   b_2s€               my_block:
                indirectbr i8* blockaddress(@"my_func", %"b_1"), [label %"b_1", label %"b_2"]
            (   R9   R   Rr   R6   R7   t   branch_indirectt   BlockAddresst   add_destinationRK  Rï   RD   (   R   R9   Ru   t   bb_1t   bb_2t
   indirectbr(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_branch_indirect)  s    	c         @ sA  ‡  f d †  } ˆ  j  d d ƒ } t j | ƒ } | j ƒ  | | d ƒ ˆ  j  d d ƒ } t j | ƒ } | j t d ƒ ƒ | | d ƒ ˆ  j  d d ƒ } t j | ƒ } | j ƒ  } | j d | j j d ƒ ƒ | | d	 ƒ ˆ  j  d d ƒ } t j | ƒ } | j t d
 ƒ ƒ } | j d | j j d ƒ ƒ | | d ƒ d  S(   Nc         @ s$   ˆ  j  |  j ƒ ˆ  j |  | ƒ d  S(   N(   RK  Rï   RD   (   R9   t   expected_ir(   R   (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   check8  s    R4   Rq   s;               my_block:
                ret void
            t   other_blocki   s?               other_block:
                ret i32 5
            Rm   sD               my_block:
                ret void, !dbg !0
            i   sE               my_block:
                ret i32 6, !dbg !0
            (    (    (	   R9   R   Rr   Rs   t   retR0   Rn   R-   Ro   (   R   Rž  R9   Ru   Rû   (    (   R   s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_returns7  s.    
c   
      C@ s	  |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j j d d ƒ } | j j d d ƒ } | j j d d ƒ } | j j d d ƒ } | j | | ƒ }	 |	 j t j t	 d ƒ | ƒ |	 j t j t	 d	 ƒ | ƒ |	 j d | ƒ |  j
 | j ƒ |  j | d
 ƒ d  S(   NR4   Rq   i   t   onzerot   ononet   ontwot	   otherwisei    i   sœ               my_block:
                switch i32 %".1", label %"otherwise" [i32 0, label %"onzero" i32 1, label %"onone" i32 2, label %"ontwo"]
            (   R9   R   Rr   R6   Rf   R7   t   switcht   add_caseR/  R0   RK  Rï   RD   (
   R   R9   Ru   RÜ   RÝ   t	   bb_onzerot   bb_ononet   bb_ontwot   bb_elset   sw(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_switch_  s    	c   
      C@ sn  |  j  d d ƒ } t j | ƒ } | j j d  \ } } t j t t t f ƒ } t j t t f d t	 ƒ} t j
 | j j | d ƒ } t j
 | j j | d ƒ } | j | | | f d ƒ | j | | | f d ƒ | j | | | f d	 d
 d ƒ| j | | | f d ƒ }	 |	 j j d ƒ | j | | | f d d d ƒ| j | | | f d d d ƒ|  j | d ƒ d  S(   NR4   Rq   i   RX   Râ   Rã   t   res_ft   res_gt
   res_f_fastt   cconvt   fastcct   res_f_readonlyt   readonlyt   res_fastt   fastmathR!  t   res_nnan_ninfRC  R"  sì              my_block:
                %"res_f" = call float @"f"(i32 %".1", i32 %".2")
                %"res_g" = call double (i32, ...) @"g"(i32 %".2", i32 %".1")
                %"res_f_fast" = call fastcc float @"f"(i32 %".1", i32 %".2")
                %"res_f_readonly" = call float @"f"(i32 %".1", i32 %".2") readonly
                %"res_fast" = call fast float @"f"(i32 %".1", i32 %".2")
                %"res_nnan_ninf" = call ninf nnan float @"f"(i32 %".1", i32 %".2")
            (   RC  R"  (   R9   R   Rr   R6   Rf   R/   Rz  R0   R1   R^   R3   R-   RÂ   RZ   R[   RD   (
   R   R9   Ru   RÜ   RÝ   t   tp_ft   tp_gRâ   Rã   R³  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt	   test_callr  s     	c         C@ s²   |  j  d d ƒ } t j | ƒ } t j t j ƒ  t j ƒ  g d ƒ } t j | j | d ƒ } | j t	 d d ƒ} | j j
 d ƒ } | j | | | | f ƒ |  j | d ƒ d S(	   s9   
        Function calls with metadata arguments.
        R4   Rq   i   s   llvm.dbg.declareRÜ   s                my_block:
                %"a" = alloca i32
                call void @"llvm.dbg.declare"(metadata i32* %"a", metadata !0, metadata !0)
            N(    (   R9   R   Rr   R/   RÀ   t   MetaDataTypeR3   R-   RW  R0   Ro   RÂ   RD   (   R   R9   Ru   t   dbg_declare_tyt   dbg_declareRÜ   RÝ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_call_metadata‹  s    %	c   	      C@ sÇ   |  j  d d ƒ } t j | ƒ } | j j d  \ } } t j t t t f ƒ } t j | j j	 | d ƒ } | j j
 d d ƒ } | j j
 d d ƒ } | j | | | f | | d ƒ |  j | d ƒ d  S(	   NR4   Rq   i   Râ   t   normalt   unwindR®  s£               my_block:
                %"res_f" = invoke float @"f"(i32 %".1", i32 %".2")
                    to label %"normal" unwind label %"unwind"
            (   R9   R   Rr   R6   Rf   R/   Rz  R0   R3   R-   R7   t   invokeRD   (	   R   R9   Ru   RÜ   RÝ   R¸  Râ   t	   bb_normalt	   bb_unwind(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_invokeœ  s    	c         C@ sÝ   |  j  d d ƒ } t j | ƒ } | j t j t t j ƒ  g ƒ d ƒ } t j | j	 j
 t j ƒ  d ƒ } t | _ | j t j | ƒ ƒ | j t j t j t j | j d ƒ | g ƒ ƒ ƒ | j | ƒ |  j | d ƒ d  S(   NR4   Rq   t   lpt   _ZTIii   sÖ               my_block:
                %"lp" = landingpad {i32, i8*}
                    catch i8** @"_ZTIi"
                    filter [1 x i8**] [i8** @"_ZTIi"]
                resume {i32, i8*} %"lp"
            (   R9   R   Rr   t
   landingpadRb  R0   R]   Rw   RÒ   R6   R-   R^   Rå   t
   add_clauset   CatchClauset   FilterClauseR/  t	   ArrayTypeR¨   t   resumeRD   (   R   R9   Ru   RÅ  t   int_typeinfo(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_landingpad«  s    '!	$	c         C@ ss   |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j d | | d d ƒ} | j | ƒ |  j | d ƒ d  S(   NR4   Rq   i   R6  R   s…               my_block:
                %"c" = icmp sgt i32 %".1", %".2"
                call void @"llvm.assume"(i1 %"c")
            (   R9   R   Rr   R6   Rf   R:  R}   RD   (   R   R9   Ru   RÜ   RÝ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_assume½  s    	c         C@ s3  |  j  d d ƒ } t j | ƒ } | j j d  \ } } d | _ d | _ t j | j d ƒ } t j | t j	 ƒ } t j
 d ƒ } | j | | | d ƒ d d ƒ} | j | | | d	 ƒ d d
 ƒ} |  j | d ƒ | j d ƒ } | j | ƒ | j | ƒ t j | d	 d g ƒ } | j | | | d d ƒ}	 |  j | d ƒ | j d ƒ } | j | ƒ | j | ƒ | j | | d d ƒ}
 |  j | d ƒ | j d ƒ } | j | ƒ | j | ƒ | j | | d ƒ d d ƒ} | j | | d	 ƒ d d ƒ} |  j | d ƒ | j | j | | ƒ ƒ |  j | j ƒ d  S(   NR4   t   insert_blocki   RÜ   RÝ   i    i    t   vec1i   t   vec2sË               insert_block:
                %"vec1" = insertelement <2 x i32> <i32 undef, i32 undef>, i32 %"a", i32 0
                %"vec2" = insertelement <2 x i32> %"vec1", i32 %"b", i32 1
            t   shuffle_blockt   shufsŽ               shuffle_block:
                %"shuf" = shufflevector <2 x i32> %"vec2", <2 x i32> %"vec2", <2 x i32> <i32 1, i32 0>
            t	   add_blockt   sums[               add_block:
                %"sum" = add <2 x i32> %"vec2", %"vec2"
            t   extract_blockt   ex1t   ex2s¥               extract_block:
              %"ex1" = extractelement <2 x i32> %"vec2", i32 0
              %"ex2" = extractelement <2 x i32> %"vec2", i32 1
            (   R9   R   Rr   R6   Rf   R4   t
   VectorTypeR¨   R/  R0  RÉ   t   insert_elementRD   R7   Rˆ  t   position_at_endt   shuffle_vectorR[   t   extract_elementR   R!   R-   (   R   R9   Ru   RÜ   RÝ   t   vectyt   vect   idxtyt   maskt   shufft   vaddR   Rß   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_vector_opsÉ  sD    		!!				c         C@ si   |  j  d d ƒ } t j | ƒ } t j t d ƒ } | j | d d ƒ} | j | ƒ |  j | d ƒ d  S(   NR4   Rq   i   R   s}               my_block:
                %"c" = call i64 @"llvm.bitreverse.i64"(i64 5)
                ret i64 %"c"
            (   R9   R   Rr   R/  R‡   t
   bitreverseR   RD   (   R   R9   Ru   RÜ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_bitreverse  s    	c         C@ s{   |  j  d d ƒ } t j | ƒ } t j t d ƒ } |  j t ƒ  } | j | d d ƒWd  QX|  j d t	 | j
 ƒ ƒ d  S(   NR4   Rq   i   R   s#   expected an integer type, got float(   R9   R   Rr   R/  Rz  R“   R\  Ræ  R   R   R  (   R   R9   Ru   RÜ   t   raises(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_bitreverse_wrongtype  s    c         C@ sþ   |  j  d d ƒ } t j | ƒ } |  j t ƒ  } | j d d  ƒ Wd  QX|  j d t | j	 ƒ ƒ |  j t ƒ  } | j d  d ƒ Wd  QX|  j d t | j	 ƒ ƒ | j d d  ƒ | j d d ƒ | j d	 d ƒ | j d
 ƒ | j
 ƒ  |  j | d ƒ d  S(   NR4   Rq   R„  s#   Invalid fence ordering "monotonic"!s   Invalid fence ordering "None"!t   acquiret   releaset   singlethreadt   acq_relRV  sç               my_block:
                fence acquire
                fence syncscope("singlethread") release
                fence syncscope("singlethread") acq_rel
                fence seq_cst
                ret void
            (   R9   R   Rr   R“   R  t   fenceRR   R   R   R  Rs   RD   (   R   R9   Ru   Rè  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt
   test_fence  s&    
	c         C@ si   |  j  d d ƒ } t j | ƒ } t j t d ƒ } | j | d d ƒ} | j | ƒ |  j | d ƒ d  S(   NR4   Rq   i   R   sx               my_block:
                %"c" = call i32 @"llvm.bswap.i32"(i32 5)
                ret i32 %"c"
            (   R9   R   Rr   R/  R0   t   bswapR   RD   (   R   R9   Ru   RÜ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt
   test_bswap5  s    	c         C@ si   |  j  d d ƒ } t j | ƒ } t j t d ƒ } | j | d d ƒ} | j | ƒ |  j | d ƒ d  S(   NR4   Rq   i   R   sx               my_block:
                %"c" = call i16 @"llvm.ctpop.i16"(i16 5)
                ret i16 %"c"
            (   R9   R   Rr   R/  t   int16t   ctpopR   RD   (   R   R9   Ru   RÜ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt
   test_ctpopA  s    	c         C@ s~   |  j  d d ƒ } t j | ƒ } t j t d ƒ } t j t d ƒ } | j | | d d ƒ} | j | ƒ |  j | d ƒ d  S(   NR4   Rq   i   i   R   s}               my_block:
                %"c" = call i16 @"llvm.ctlz.i16"(i16 5, i1 1)
                ret i16 %"c"
            (	   R9   R   Rr   R/  Rò  RH  t   ctlzR   RD   (   R   R9   Ru   RÜ   RÝ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt	   test_ctlzM  s    	c         C@ s~   |  j  d d ƒ } t j | ƒ } t j t d ƒ } t j t d ƒ } | j | | d d ƒ} | j | ƒ |  j | d ƒ d  S(   NR4   Rq   i   i   R   s}               my_block:
                %"c" = call i64 @"llvm.cttz.i64"(i64 5, i1 1)
                ret i64 %"c"
            (	   R9   R   Rr   R/  R‡   RH  t   cttzR   RD   (   R   R9   Ru   RÜ   RÝ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt	   test_cttzZ  s    	c      	   C@ s   |  j  d d ƒ } t j | ƒ } t j t d ƒ } t j t d ƒ } |  j t ƒ  } | j | | d d ƒWd  QX|  j	 d t
 | j ƒ ƒ d  S(   NR4   Rq   i   i   R   s   expected an i1 type, got i32(   R9   R   Rr   R/  R‡   R0   R“   R\  R÷  R   R   R  (   R   R9   Ru   RÜ   RÝ   Rè  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_cttz_wrongflagg  s    c      	   C@ s   |  j  d d ƒ } t j | ƒ } t j t d ƒ } t j t d ƒ } |  j t ƒ  } | j | | d d ƒWd  QX|  j	 d t
 | j ƒ ƒ d  S(   NR4   Rq   i   i   R   s#   expected an integer type, got float(   R9   R   Rr   R/  Rz  RH  R“   R\  R÷  R   R   R  (   R   R9   Ru   RÜ   RÝ   Rè  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_cttz_wrongtypes  s    c         C@ s“   |  j  d d ƒ } t j | ƒ } t j t d ƒ } t j t d ƒ } t j t d ƒ } | j | | | d d ƒ} | j | ƒ |  j | d ƒ d  S(   NR4   Rq   i   i   i   t   fmasÅ               my_block:
                %"fma" = call float @"llvm.fma.f32"(float 0x4014000000000000, float 0x3ff0000000000000, float 0x4000000000000000)
                ret float %"fma"
            (   R9   R   Rr   R/  Rz  Rû  R   RD   (   R   R9   Ru   RÜ   RÝ   R   Rû  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_fma  s    	c      
   C@ s¥   |  j  d d ƒ } t j | ƒ } t j t d ƒ } t j t d ƒ } t j t d ƒ } |  j t ƒ   } | j | | | d d ƒWd  QX|  j d t	 | j
 ƒ ƒ d  S(   NR4   Rq   i   i   i   Rû  s(   expected an floating point type, got i32(   R9   R   Rr   R/  R0   R“   R\  Rû  R   R   R  (   R   R9   Ru   RÜ   RÝ   R   Rè  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_fma_wrongtype  s    c      
   C@ s¥   |  j  d d ƒ } t j | ƒ } t j t d ƒ } t j t d ƒ } t j t d ƒ } |  j t ƒ   } | j | | | d d ƒWd  QX|  j	 d t
 | j ƒ ƒ d  S(   NR4   Rq   i   i   i   Rû  s7   expected types to be the same, got float, double, float(   R9   R   Rr   R/  Rz  R1   R“   R\  Rû  R   R   R  (   R   R9   Ru   RÜ   RÝ   R   Rè  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_fma_mixedtypesš  s    (/   RO   RP   RQ   t   maxDiffRü   R  R   R$  R+  R.  R4  R;  RG  RL  RT  R_  Ra  Rf  Rg  Ri  Rq  Rƒ  R†  RŠ  R  R“  Rœ  R¡  R­  Rº  R¾  RÄ  RÎ  RÏ  Rå  Rç  Ré  Rï  Rñ  Rô  Rö  Rø  Rù  Rú  Rü  Rý  Rþ  (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRù     sZ   		1						%	,			1					=	!						(							:											t   TestBuilderMiscc           B@ sh   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z RS(   s=   
    Test various other features of the IRBuilder class.
    c         C@ s€   |  j  d d ƒ } t j | ƒ } |  j | j | j ƒ |  j | j t j ƒ |  j | j | j j ƒ |  j | j t j	 ƒ d  S(   NR4   Rì   (
   R9   R   Rr   R&   R6   Rë   t   assertIsInstanceR3   R-   R,   (   R   R9   Ru   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRð   ­  s    c         C@ s+  |  j  d d ƒ } t j | ƒ } | j j d  \ } } | j | | d ƒ | j d d ƒ } | j | ƒ ^ | j | | d ƒ | j	 ƒ   | j
 | | d ƒ Wd  QX| j | | d ƒ | j | ƒ Wd  QX| j | | d	 ƒ | j | ƒ  | j | | d
 ƒ Wd  QX|  j | d ƒ |  j | d ƒ d  S(   NR4   Rq   i   R   R   Rß   Rà   Râ   Rã   Rý   s¦               my_block:
                %"c" = add i32 %".1", %".2"
                %"e" = sub i32 %".1", %".2"
                %"g" = mul i32 %".1", %".2"
            sÄ               foo:
                %"d" = fadd i32 %".1", %".2"
                %"f" = fsub i32 %".1", %".2"
                %"h" = fmul i32 %".1", %".2"
                br label %"foo"
            (   R9   R   Rr   R6   Rf   R[   R7   t
   goto_blockR
  t   goto_entry_blockR   R  Rˆ  Rõ   R  RD   (   R   R9   Ru   RÜ   RÝ   t   bb_new(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_goto_blockµ  s$    		c   	   	   C@ sì   |  j  d d ƒ } t j | ƒ } t j t d ƒ } | j | | d ƒ } | j | ƒ  } | j | | d ƒ } Wd  QX|  j | j  | ƒ | j | | d ƒ } | j | ƒ ' | j | | d ƒ } | j | ƒ Wd  QX|  j	 | j
 d ƒ d  S(	   NR4   t   onei    RÜ   RÝ   R   Rß   sÝ              one:
                %"a" = add i1 0, 0
                br i1 %"a", label %"one.if", label %"one.endif"
            one.if:
                %"b" = add i1 0, 0
                br label %"one.endif"
            one.endif:
                %"c" = add i1 0, 0
                br i1 %"c", label %"one.endif.if", label %"one.endif.endif"
            one.endif.if:
                %"d" = add i1 0, 0
                br label %"one"
            one.endif.endif:
            (   R9   R   Rr   R/  RH  R[   t   if_thenR&   Rˆ  RN   R6   (	   R   R9   Ru   R]  RÜ   t   bbendRÝ   R   Rß   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_if_thenÒ  s    c         C@ sÃ   |  j  d d ƒ } t j | ƒ } t j t d ƒ } | j | | d ƒ } | j | ƒ I } | j | | d ƒ } | j | ƒ  } | j | | d ƒ } Wd  QXWd  QX| j ƒ  |  j | j	 d ƒ d  S(   NR4   R  i    RÜ   RÝ   R   sÐ              one:
                %"a" = add i1 0, 0
                br i1 %"a", label %"one.if", label %"one.endif"
            one.if:
                %"b" = add i1 0, 0
                br i1 %"b", label %"one.if.if", label %"one.if.endif"
            one.endif:
                ret void
            one.if.if:
                %"c" = add i1 0, 0
                br label %"one.if.endif"
            one.if.endif:
                br label %"one.endif"
            (
   R9   R   Rr   R/  RH  R[   R  Rs   RN   R6   (   R   R9   Ru   R]  RÜ   R  RÝ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_if_then_nestedð  s    !
c   	      C@ sç   d d } |  j  d | ƒ } t j | ƒ } t j t d ƒ } | j | | d ƒ } | j | ƒ I } | j | | d ƒ } | j | ƒ  } | j | | d ƒ } Wd  QXWd  QX| j ƒ  |  j | j	 d j
 d	 | d
 | d  d ƒ ƒ d  S(   Nt   Longi   R4   i    RÜ   RÝ   R   s              {full_label}:
                %"a" = add i1 0, 0
                br i1 %"a", label %"{label}.if", label %"{label}.endif"
            {label}.if:
                %"b" = add i1 0, 0
                br i1 %"b", label %"{label}.if.if", label %"{label}.if.endif"
            {label}.endif:
                ret void
            {label}.if.if:
                %"c" = add i1 0, 0
                br label %"{label}.if.endif"
            {label}.if.endif:
                br label %"{label}.endif"
            t
   full_labelt   labeli   s   ..(   R9   R   Rr   R/  RH  R[   R  Rs   RN   R6   Rt   (	   R   R  R9   Ru   R]  RÜ   R  RÝ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_if_then_long_label  s    
!
c         @ sQ   ‡  f d †  } | t  ƒ } ˆ  j | j d ƒ | t ƒ } ˆ  j | j d ƒ d  S(   Nc         @ sc   ˆ  j  d d ƒ } t j | ƒ } t j t d ƒ } | j | d |  ƒ Wd  QXˆ  j | d ƒ | S(   NR4   R  i    t   likelysp                   one:
                    br i1 0, label %"one.if", label %"one.endif", !prof !0
                (   R9   R   Rr   R/  RH  R  RD   (   R  R9   Ru   R]  (   R   (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRž  (  s    	sC               !0 = !{ !"branch_weights", i32 99, i32 1 }
            sC               !0 = !{ !"branch_weights", i32 1, i32 99 }
            (   R^   RI   R-   R­   (   R   Rž  Ru   (    (   R   s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_if_then_likely'  s    c   	      C@ s  |  j  d d ƒ } t j | ƒ } t j t d ƒ } | j | | d ƒ } | j | ƒ Q \ } } |  | j | | d ƒ } Wd  QX|  | j | | d ƒ } Wd  QXWd  QX| j | ƒ > \ } } |  | j | ƒ Wd  QX|  | j ƒ  Wd  QXWd  QX|  j	 | j
 d ƒ d  S(   NR4   R  i    RÜ   RÝ   R   s)              one:
                %"a" = add i1 0, 0
                br i1 %"a", label %"one.if", label %"one.else"
            one.if:
                %"b" = add i1 0, 0
                br label %"one.endif"
            one.else:
                %"c" = add i1 0, 0
                br label %"one.endif"
            one.endif:
                br i1 %"a", label %"one.endif.if", label %"one.endif.else"
            one.endif.if:
                br label %"one"
            one.endif.else:
                ret void
            one.endif.endif:
            (   R9   R   Rr   R/  RH  R[   t   if_elseRˆ  Rs   RN   R6   (	   R   R9   Ru   R]  RÜ   t   thenR¥  RÝ   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_if_else<  s     !c         @ sQ   ‡  f d †  } | t  ƒ } ˆ  j | j d ƒ | t ƒ } ˆ  j | j d ƒ d  S(   Nc      
   @ sŸ   ˆ  j  d d ƒ } t j | ƒ } t j t d ƒ } | j | d |  ƒ> \ } } |  | j | ƒ Wd  QX|  | j ƒ  Wd  QXWd  QXˆ  j | j	 d ƒ | S(   NR4   R  i    R  sý                   one:
                    br i1 0, label %"one.if", label %"one.else", !prof !0
                one.if:
                    br label %"one"
                one.else:
                    ret void
                one.endif:
                (
   R9   R   Rr   R/  RH  R  Rˆ  Rs   RN   R6   (   R  R9   Ru   R]  R  R¥  (   R   (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRž  a  s    sC               !0 = !{ !"branch_weights", i32 99, i32 1 }
            sC               !0 = !{ !"branch_weights", i32 1, i32 99 }
            (   R^   RI   R-   R­   (   R   Rž  Ru   (    (   R   s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_if_else_likely`  s    c         C@ sŠ  |  j  ƒ  } t j ƒ  } t j t d ƒ } | j d d ƒ } | j d d ƒ } | j d d ƒ } | j | ƒ | j | | d ƒ } | j | ƒ | j | | d ƒ } | j | | d ƒ }	 | j | ƒ | j | | d	 ƒ }
 | j | | d
 ƒ } | j | ƒ | j | | d ƒ } | j	 |
 ƒ | j | | d ƒ } | j
 | ƒ | j | | d ƒ } |  j | d ƒ |  j | d ƒ |  j | d ƒ d S(   sI   
        Test IRBuilder.position_{before,after,at_start,at_end}.
        i    R4   R  t   twot   threeRÜ   R  R  R  R  RÝ   R  R   s‰               one:
                %"a" = add i32 0, 0
                %"c" = add i32 0, 0
                %"b" = add i32 0, 0
            sÑ               two:
                %"o" = add i32 0, 0
                %"q" = add i32 0, 0
                %"p" = add i32 0, 0
                %"m" = add i32 0, 0
                %"n" = add i32 0, 0
            s               three:
            N(   R6   R   Rr   R/  R0   R7   t   position_at_startR[   RÜ  t   position_aftert   position_beforeRD   (   R   R8   Ru   R]  t   bb_onet   bb_twot   bb_threeRÜ   R  R  R  R  RÝ   R  R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_positioning}  s4    			c         C@ sh   |  j  d d ƒ } t j | ƒ } | j j g  ƒ | _ | j t j t ƒ d d ƒ} |  j	 | d ƒ d  S(   NR4   Rq   R   sN               my_block:
                %"c" = alloca i32*, !dbg !0
            (
   R9   R   Rr   R-   Ro   t   debug_metadataRW  R2   R0   RD   (   R   R9   Ru   RÜ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_metadata­  s    	(   RO   RP   RQ   Rð   R  R	  R
  R  R  R  R  R  R  (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyR   ¨  s   							$		0t	   TestTypesc           B@ st   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z RS(   c         C@ s3   x t  | t j ƒ r! | j } q Wt  | t j ƒ S(   N(   t
   isinstanceR   R2   Rh  t	   LabelType(   R   t   ty(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   has_logical_equalityº  s    c         C@ s2  t  j ƒ  } t  j ƒ  t  j ƒ  t  j t t t f ƒ t  j t t f ƒ t  j t t f d t ƒt  j t t f ƒ t t t t	 t
 t  j t	 d ƒ t  j t
 d ƒ t  j t
 d ƒ t  j t t f ƒ t  j t t f ƒ | j d ƒ | j d ƒ g } | g  | D]0 } t | t  j t  j f ƒ s÷ t  j | ƒ ^ q÷ 7} | S(   s3   
        A bunch of mutually unequal types
        RX   i   i   t   MyType1t   MyType2(   R   t   ContextR"  RÀ   R/   RH  R]   R^   R0   Rz  R1   RË  Rb  t   get_identified_typeR!  R2   (   R   t   contextR   t   tp(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   assorted_types¿  s    '-$1c         C@ sR   |  j  ƒ  } x? | D]7 } |  j | ƒ } |  j | ƒ r |  j | | ƒ q q Wd  S(   N(   R+  R+   R$  R(   (   R   R   R#  t   newty(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyR‚   Õ  s
    c         C@ s  |  j  ƒ  } xg t j | | ƒ D]S \ } } | | k	 r |  j | | k | | f ƒ |  j | | k | | f ƒ q q WxŸ | D]— } t j | ƒ } |  j | ƒ rÜ |  j | | k | | f ƒ |  j | | k | | f ƒ q} |  j | | k | | f ƒ |  j | | k | | f ƒ q} Wd  S(   N(   R+  t	   itertoolst   productRî   RK  t   copyR$  (   R   R   RÜ   RÝ   R*  t   other(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_comparisonsÜ  s    #c         C@ s‚  |  j  t t ƒ d ƒ |  j  t t j d ƒ ƒ d ƒ |  j  t t ƒ d ƒ |  j  t t ƒ d ƒ |  j  t t j ƒ  ƒ d ƒ |  j  t t j t d! ƒ ƒ d ƒ |  j  t t j t t f ƒ ƒ d ƒ |  j  t t j t t t f ƒ ƒ d	 ƒ |  j  t t j t d" d
 t	 ƒƒ d ƒ |  j  t t j t t f d
 t	 ƒƒ d ƒ |  j  t t j t t t f d
 t	 ƒƒ d ƒ |  j  t t j
 t ƒ ƒ d ƒ |  j  t t j
 t j
 t ƒ ƒ ƒ d ƒ |  j  t t j t d ƒ ƒ d ƒ |  j  t t j t j
 t ƒ d ƒ ƒ d ƒ |  j  t t j
 t j t d ƒ ƒ ƒ d ƒ |  j  t t j t f ƒ ƒ d ƒ |  j  t t j t t f ƒ ƒ d ƒ |  j  t t j t j
 t ƒ t j t t f ƒ f ƒ ƒ d ƒ |  j  t t j t f d t	 ƒƒ d ƒ |  j  t t j t t f d t	 ƒƒ d ƒ t j ƒ  } | j d ƒ } |  j  t | ƒ d ƒ | j d ƒ } |  j  t | ƒ d ƒ | j d ƒ } |  j  t | ƒ d ƒ d  S(#   s:   
        Test the string representation of types.
        t   i1i   t   i29t   floatt   doublet   voids   i1 ()s
   i1 (float)s   i1 (float, double)RX   s   i1 (...)s   i1 (float, ...)s   i1 (float, double, ...)s   i32*s   i32**i   s   [5 x i1]s	   [5 x i1*]s	   [5 x i1]*s   {i1}s   {i1, float}s   {i1*, {i32, i8}}t   packeds   <{i1}>s   <{i1, float}>t   MyTypes	   %"MyType"s   MyType\s   %"MyType\5c"s   MyType"s   %"MyType\22"N(    (    (   R(   R   RH  R   RÉ   Rz  R1   RÀ   R/   R^   R2   R0   RË  Rb  R]   R'  R(  (   R   R)  t   mytypet   mytype1t   mytype2(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_strì  sH    "%!!$'("++"%'!$c         C@ sL   xE t  |  j |  j ƒ  ƒ D]+ } |  j t | ƒ t t j | ƒ ƒ ƒ q Wd  S(   N(   t   filterR$  R+  R(   t   hashR/  (   R   t   typ(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt	   test_hash  s    c      	   @ sÖ  ‡  f d †  } ‡  f d †  } t  j t ƒ } x$ t d ƒ D] } | | | t ƒ q: W| | ƒ t  j t d ƒ } x$ t d ƒ D] } | | | t ƒ q} W| | ƒ t  j t t  j t t f ƒ f ƒ } | | d t ƒ | | d t  j t t f ƒ ƒ ˆ  j t	 ƒ  | j
 t  j t d ƒ ƒ Wd  QX| | ƒ t  j ƒ  } t  j | d ƒ } | j t t  j t t f ƒ ƒ | | d t ƒ | | d t  j t t f ƒ ƒ ˆ  j t	 ƒ  | j
 t  j t d ƒ ƒ Wd  QX| | ƒ d  S(	   Nc         @ s/   |  j  t j t | ƒ ƒ } ˆ  j | | ƒ d  S(   N(   R`  R   R/  R0   R(   (   R*  Rþ   RB   RF   (   R   (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   check_constant  s    c         @ s9   t  j t d ƒ } ˆ  j t ƒ  |  j | ƒ Wd  QXd  S(   Ng      ð?(   R   R/  R1   R“   R\  R`  (   R*  t   index(   R   (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   check_index_type  s    i   i   i    i   i   R8  (   R   R2   R1   t   rangeRË  RH  Rb  R]   R“   t
   IndexErrorR`  R/  R0   R'  t   IdentifiedStructTypet   set_body(   R   RA  RC  R*  Rþ   R)  (    (   R   s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRa    s0    

$
c         @ s   t  j d ƒ ‰ ‡  ‡ f d †  } | t d ƒ | t d ƒ | t d ƒ | t j t d ƒ d ƒ | t j t d ƒ d ƒ | t j t t	 t	 f ƒ d ƒ d  S(	   Ns%   e-m:e-i64:64-f80:128-n8:16:32:64-S128c         @ s   ˆ  j  |  j ˆ ƒ | ƒ d  S(   N(   R(   t   get_abi_size(   R*  RB   (   R   t   td(    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRž  @  s    i   i   i   i   i   i   (
   R   t   create_target_dataR]   R0   R‡   R   RË  Rb  R1   Rz  (   R   Rž  (    (   R   RI  s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_abi_size>  s    c         @ s   t  j d ƒ ‰ ‡  ‡ f d †  } | t d ƒ | t d	 ƒ | t d
 ƒ | t j t d ƒ d ƒ | t j t d ƒ d ƒ | t j t t	 t	 f ƒ d ƒ d  S(   Ns%   e-m:e-i64:64-f80:128-n8:16:32:64-S128c         @ s   ˆ  j  |  j ˆ ƒ | ƒ d  S(   N(   R   t   get_abi_alignment(   R*  RB   (   R   RI  (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRž  K  s    i   i   i   i   i   (   i   i   i   (   i   (   i   (   i   i   i   (   i   (   i   (
   R   RJ  R]   R0   R‡   R   RË  Rb  R1   Rz  (   R   Rž  (    (   R   RI  s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_abi_alignmentI  s    c         C@ s¸   t  j ƒ  } | j d ƒ } t  j d | ƒ } |  j | j ƒ |  j | ƒ t | ƒ } | j t  j	 d ƒ t  j	 d ƒ t  j
 ƒ  ƒ |  j | j ƒ |  j | ƒ |  j | t | ƒ ƒ d  S(   NR8  R)  i    i@   (   R   R'  R(  R,   RK  t	   is_opaqueR!   R   RG  RÉ   t	   FloatTypeRî   t   assertNotEqual(   R   R)  R9  R-   t   oldstr(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_identified_structT  s    +c         C@ st   t  j ƒ  } | j d ƒ } t  j d ƒ g | _ t  j d | ƒ } t j d ƒ } |  j | j	 | d | ƒd ƒ d  S(   NR8  i    R)  s%   e-m:e-i64:64-f80:128-n8:16:32:64-S128i   (
   R   R'  R(  RÉ   t   elementsR,   R   RJ  R(   RH  (   R   R)  R9  R-   RI  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt$   test_target_data_non_default_context`  s    c         C@ sA   t  j ƒ  } t  j t  j d ƒ d ƒ } |  j t | ƒ d ƒ d  S(   Ni    i   s	   <8 x i32>(   R   R'  RÚ  RÉ   R(   R   (   R   R)  Rß  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_vectorh  s    (   RO   RP   R$  R+  R‚   R1  R<  R@  Ra  RK  RM  RR  RT  RU  (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyR   ¸  s   					+		#				c         C@ s   t  j t |  ƒ S(   N(   R   R/  R0   (   Rþ   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   <lambda>n  R
   t   TestConstantc           B@ s}   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z RS(   c         C@ s  t  j t d ƒ } |  j t | ƒ d ƒ t  j t d ƒ } |  j t | ƒ d ƒ t  j t d ƒ } |  j t | ƒ d ƒ t  j t t ƒ } |  j t | ƒ d ƒ t  j t t ƒ } |  j t | ƒ d ƒ t  j t t  j ƒ } |  j t | ƒ d	 ƒ t  j t d  ƒ } |  j t | ƒ d ƒ d  S(
   Ni*   s   i32 42i   s   i1 1i    s   i1 0s   i1 trues   i1 falses   i1 undef(
   R   R/  R0   R(   R   RH  R^   R­   R0  RR   (   R   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_integerss  s    c         C@ s÷   t  j t d ƒ } |  j t | ƒ d ƒ t  j t d ƒ } |  j t | ƒ d ƒ t  j t d ƒ } |  j t | ƒ d ƒ t  j t d ƒ } |  j t | ƒ d ƒ t  j t t  j ƒ } |  j t | ƒ d ƒ t  j t d  ƒ } |  j t | ƒ d ƒ d  S(	   Ng      ø?s   float 0x3ff8000000000000g      ø¿s   float 0xbff8000000000000s   double 0x3ff8000000000000s   double 0xbff8000000000000s   double undefs
   double 0.0(   R   R/  Rz  R(   R   R1   R0  RR   (   R   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt
   test_realsƒ  s    c      	   C@ sŒ  t  j t  j t d ƒ t d ƒ t d ƒ t d ƒ f ƒ } |  j t | ƒ d ƒ t  j t  j t d ƒ t d ƒ t t  j ƒ f ƒ } |  j t | ƒ d ƒ t  j j t d ƒ t d ƒ t t  j ƒ f ƒ } |  j t | ƒ d ƒ |  j	 t
 ƒ / } t  j j t d ƒ t  j t d	 ƒ f ƒ Wd  QX|  j t | j ƒ d
 ƒ t  j t  j t d ƒ t  j ƒ } |  j t | ƒ d ƒ t  j t  j t d ƒ d  ƒ } |  j t | ƒ d ƒ t  j t  j t d ƒ t d ƒ ƒ } |  j t | ƒ d ƒ t  j t  j t d ƒ t d ƒ ƒ } |  j t | ƒ d ƒ t  j t  j t d ƒ d t  j d f ƒ } |  j t | ƒ d ƒ |  j	 t ƒ ! t  j t  j t d ƒ d ƒ Wd  QXd  S(   Ni   i   i   i   s   [3 x i32] [i32 5, i32 6, i32 4]i   s   [2 x i32] [i32 5, i32 undef]s#   [3 x i32] [i32 5, i32 6, i32 undef]g      ø?s$   all elements must have the same types   [2 x i32] undefs   [2 x i32] zeroinitializeri   s   foobar_123€s   [11 x i8] c"foobar_123\80"s    ÿs   [4 x i8] c"\00\01\04\ff"s#   [3 x i32] [i32 5, i32 undef, i32 6](   i   i   (   R   R/  RË  R0   t   c32R(   R   R0  t   literal_arrayR“   R\  Rz  R  RR   R]   t	   bytearrayR  (   R   R   Rè  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_arrays’  s,    930.!$$*c         C@ s‰   t  j t  j d ƒ d ƒ } d d d d d d d d	 g } t  j | | ƒ } d
 j d j t d j | ƒ ƒ ƒ } |  j t | ƒ | ƒ d  S(   Ni    i   i   i   i   i   i   i	   i   s   <8 x i32> <{}>s   , s   i32 {}(	   R   RÚ  RÉ   R/  Rt   R   R   R(   R   (   R   Rß  t   valsRà  t   vec_repr(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRU  ¯  s    c      	   C@ sJ  t  j t t f ƒ } t  j t | f ƒ } t  j | t  j t  j ƒ  d ƒ t  j t t ƒ f ƒ } |  j t	 | ƒ d ƒ t  j j
 t  j t  j ƒ  d ƒ t  j t t ƒ f ƒ } |  j | j | ƒ |  j t	 | ƒ d ƒ t  j j
 t  j t  j ƒ  d ƒ t  j t t  j ƒ f ƒ } |  j | j | ƒ |  j t	 | ƒ d ƒ t  j | t  j ƒ } |  j t	 | ƒ d ƒ t  j | d  ƒ } |  j t	 | ƒ d ƒ t  j | d t f ƒ } |  j t	 | ƒ d ƒ t  j | d | f ƒ } |  j t	 | ƒ d ƒ t  j | d d t f f ƒ } |  j t	 | ƒ t	 | ƒ ƒ |  j t ƒ  t  j | d ƒ Wd  QXd  S(   Ng      ø?s/   {float, i1} {float 0x3ff8000000000000, i1 true}s0   {float, i1} {float 0x3ff8000000000000, i1 undef}s   {float, i1} undefs   {float, i1} zeroinitializeri*   sL   {i32, {float, i1}} {i32 42, {float, i1} {float 0x3ff8000000000000, i1 true}}i   i   i   (   i   i   i   (   R   Rb  Rz  RH  R0   R/  RO  R^   R(   R   t   literal_structR¨   R0  RR   R“   R  (   R   t   st1t   st2R   t   c1t   c2t   c3(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_structs·  s2    c         C@ sD   t  j d ƒ } t  j t  j | | g ƒ t  j ƒ } |  j | ƒ d  S(   Ni   (   R   RÉ   R/  Rb  R0  R+   (   R   t   i8t   st(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt&   test_undefined_literal_struct_picklingÕ  s    $c      	   C@ s¶  t  d ƒ } |  j | t j ƒ |  j t | ƒ d ƒ t t ƒ } |  j | t j ƒ |  j t | ƒ d ƒ t j t	 d ƒ } | t
 d ƒ t
 d ƒ t
 d ƒ g ƒ } |  j t | ƒ d ƒ | d d d g ƒ } |  j t | ƒ d ƒ | d ƒ } |  j t | ƒ d	 ƒ |  j t ƒ  | d d d d
 g ƒ Wd QXt j t t f ƒ } t j t	 | f ƒ } | d t f ƒ } |  j t | ƒ d ƒ | d d t f f ƒ } |  j t | ƒ d ƒ d S(   s@   
        Instantiating a type should create a constant.
        i*   s   i8 42s   i1 truei   i   i   i   s   [3 x i32] [i32 4, i32 5, i32 6]s   [3 x i32] zeroinitializeri   Ng      ø?s/   {float, i1} {float 0x3ff8000000000000, i1 true}sL   {i32, {float, i1}} {i32 42, {float, i1} {float 0x3ff8000000000000, i1 true}}(   R]   R  R   R/  R(   R   RH  R^   RË  R0   RZ  RR   R“   R  Rb  Rz  (   R   R   t   atRa  Rb  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_type_instantiatonÚ  s*    'c         C@ s&   t  d ƒ } |  j t | ƒ d ƒ d S(   s8   
        Constants should have a useful repr().
        i*   s!   <ir.Constant type='i32' value=42>N(   R0   R(   RÕ   (   R   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRø   ÷  s    c         C@ s³   t  j t  j t  j d ƒ d ƒ t t d ƒ ƒ ƒ } |  j ƒ  } t  j | | j d ƒ } t	 | _
 | | _ t j t | ƒ ƒ } t j t | ƒ ƒ } |  j t | ƒ t | ƒ ƒ d  S(   Ni   i   t
   myconstant(   R   R/  RË  RÉ   R\  RD  R-   RÒ   R¨   R^   Rå   Rä   R   R    R   R(   (   R   R   R  t   gvt   parsedt   reparsed(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_encoding_problemþ  s    		c   
      C@ sH  |  j  ƒ  } t j t t f ƒ } t j | | d ƒ } | j g  d D] } t j t | ƒ ^ qC ƒ } |  j	 t
 | ƒ d ƒ |  j	 | j t j t ƒ ƒ t j | d  ƒ } |  j t ƒ # | j t j t d ƒ g ƒ } Wd  QXt j | j ƒ  d  ƒ } | j t j t d ƒ g ƒ }	 |  j	 t
 |	 ƒ d ƒ |  j	 | j t j t ƒ ƒ d  S(   NRl  i    i   sE   getelementptr ({float, i1}, {float, i1}* @"myconstant", i32 0, i32 1)s5   getelementptr ({float, i1}, {float, i1}* null, i32 0)(   i    i   (   R-   R   Rb  Rz  RH  RÒ   R`  R/  R0   R(   R   R¨   R2   RR   R“   R\  Rw   (
   R   R  R*  Rm  R@  R   t   constt   c_wrongt	   const_ptrRd  (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRa    s    .$c         C@ sÕ   |  j  ƒ  } t j t t f ƒ } d } t j | | d d | ƒ} |  j | j | ƒ | j g  d D] } t j	 t
 | ƒ ^ qb ƒ } |  j | j j | ƒ |  j t | ƒ d ƒ |  j | j t j t d | ƒƒ d  S(   Ni   Rl  RÞ   i    i   sR   getelementptr ({float, i1}, {float, i1} addrspace(4)* @"myconstant", i32 0, i32 1)(   i    i   (   R-   R   Rb  Rz  RH  RÒ   R(   RÞ   R`  R/  R0   R¨   R   R2   (   R   R  R*  RÞ   Rm  R@  R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_gep_addrspace_globalvar   s    .c         C@ sP   |  j  ƒ  } t j | t d ƒ } | j t j ƒ  ƒ } |  j t | ƒ d ƒ d  S(   NRl  s$   bitcast (i32* @"myconstant" to i64*)(	   R-   R   RÒ   R0   Rc  R‡   Rw   R(   R   (   R   R  Rm  R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_bitcast-  s    c         C@ s;   t  j t d ƒ j t j ƒ  ƒ } |  j t | ƒ d ƒ d  S(   Ni    s   inttoptr (i32 0 to i64*)(   R   R/  R0   R  R‡   Rw   R(   R   (   R   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_inttoptr3  s    !(   RO   RP   RX  RY  R]  RU  Rf  Ri  Rk  Rø   Rp  Ra  Rt  Ru  Rv  (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRW  q  s   												t   TestTransformsc           B@ s   e  Z d  „  Z RS(   c         C@ sí   t  j ƒ  } t  j | t  j t  j ƒ  d ƒ d ƒ } t  j | t  j t  j ƒ  d ƒ d ƒ } t  j ƒ  } | j | j ƒ  ƒ | j | d ƒ } |  j	 | j
 | ƒ t  j | | | ƒ } |  j | | ƒ |  j | j
 | ƒ |  j	 | j
 | ƒ d  S(   NR   R   (    (    (    (   R   R,   R3   R/   RÀ   Rr   RÜ  R7   RÂ   R(   t   calleet   replace_all_callsR   RP  (   R   R   R   R   Ru   RÂ   t   modified(    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_call_transform9  s    ''(   RO   RP   R{  (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyRw  8  s   t   TestSingletonc           B@ s   e  Z d  „  Z RS(   c         C@ sn   |  j  t j t j j ƒ  ƒ |  j  t j t j t j ƒ ƒ |  j  t j t j t j ƒ ƒ |  j t j ƒ d  S(   N(   R&   R   R0  t   valuest
   _UndefinedR/  t   deepcopyR+   (   R   (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   test_undefinedH  s    (   RO   RP   R€  (    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyR|  G  s   t   __main__(+   RQ   t
   __future__R    R   t   sysR/  R-  R#   R   R=   RÍ   R
   R   t   llvmliteR   R   R   RÉ   RH  R]   Rò  R0   R‡   RO  Rz  RÓ   R1   t   version_infoR   R   RS   Rƒ   RÏ   Rê   Rù   R   R   RZ  RW  Rw  R|  RO   t   main(    (    (    s5   lib/python2.7/site-packages/llvmlite/tests/test_ir.pyt   <module>   sJ   YbÕ@-ÿ ÿ ÿ Žÿ ¶	Ç