
    d1                        d dl Z d dl mZmZ d dl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Zd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ  ej                    d
k    r ej        d           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(g dZ)g dZ*g dZ+dZ,dZ-dZ. G d  d!e          Z/ G d" d#e/          Z0 G d$ d%e/          Z1 G d& d'e/          Z2 G d( d)e/          Z3 G d* d+e4          Z5 G d, d-e5          Z6 G d. d/e/e6          Z7 G d0 d1e/          Z8 G d2 d3e/          Z9 G d4 d5e/          Z: G d6 d7e/          Z; G d8 d9e/          Z< G d: d;e4          Z= G d< d=e/e=          Z> G d> d?e/e=          Z? G d@ dAe/e=          Z@ G dB dCe/          ZA G dD dEe/          ZB G dF dGe/          ZC G dH dIe7          ZD G dJ dKe/          ZE ejF         ej                    G                    dL          dM           G dN dOe/                      ZH G dP dQe/          ZI G dR dSe/          ZJ G dT dUe/          ZKeLdVk    r ejM                     dS dS )W    N)	CFUNCTYPEc_int)find_library)contextmanager)mkstemp)ir)binding)ffi)TestCasearmv7lzlibgcc_s.so.1c                  t   t          j        t           j                  } 	 t          j        t           j        d           	 t          j        t           j        |            dS # t           j        $ r# Y t          j        t           j        |            dS w xY w# t          j        t           j        |            w xY w)Nde_DEFT)locale	setlocaleLC_ALLError)curs    ;lib/python3.11/site-packages/llvmlite/tests/test_binding.pyno_de_localer      s    

6=
)
)C-000 ,,,,, <    	,,,,,
 	,,,,s#   A! !B0B BB !B7a  
    ; ModuleID = '<string>'
    source_filename = "asm_sum.c"
    target triple = "{triple}"
    %struct.glob_type = type {{ i64, [2 x i64]}}

    @glob = global i32 0
    @glob_b = global i8 0
    @glob_f = global float 1.5
    @glob_struct = global %struct.glob_type {{i64 0, [2 x i64] [i64 0, i64 0]}}

    define i32 @sum(i32 %.1, i32 %.2) {{
      %.3 = add i32 %.1, %.2
      %.4 = add i32 0, %.3
      ret i32 %.4
    }}
    z
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define i32 @sum(i32 %.1, i32 %.2) {{
      %.3 = add i32 %.1, %.2
      ret i32 %.3
    }}
    z
    ; ModuleID = '<string>'
    target triple = "{triple}"
    @mul_glob = global i32 0

    define i32 @mul(i32 %.1, i32 %.2) {{
      %.3 = mul i32 %.1, %.2
      ret i32 %.3
    }}
    z
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define i32 @sum(i32 %.1, i32 %.2) {{
      %.3 = fadd i32 %.1, %.2
      ret i32 %.3
    }}
    z
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @sum() {{
      %.bug = add i32 1, %.bug
      ret void
    }}
    zh
    ; ModuleID = '<string>'
    target triple = "{triple}"

    declare i32 @sum(i32 %.1, i32 %.2)
    z
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @foo() {{
      %const = fadd double 0.0, 3.14
      ret void
    }}
    z
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @foo() {{
      call void asm sideeffect "nop", ""()
      ret void
    }}
    a  
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @inlineme() {{
        ret void
    }}

    define i32 @caller(i32 %.1, i32 %.2) {{
    entry:
      %stack = alloca i32
      store i32 %.1, i32* %stack
      br label %main
    main:
      %loaded = load i32, i32* %stack
      %.3 = add i32 %loaded, %.2
      %.4 = add i32 0, %.3
      call void @inlineme()
      ret i32 %.4
    }}
a  
; ModuleID = 'test.c'
source_filename = "test.c"
target triple = "{triple}"

; Function Attrs: noinline nounwind optnone ssp uwtable
define void @inlineme() noinline !dbg !15 {{
  ret void, !dbg !18
}}

; Function Attrs: noinline nounwind optnone ssp uwtable
define i32 @foo(i32 %0, i32 %1) !dbg !19 {{
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  store i32 %0, i32* %3, align 4
  call void @llvm.dbg.declare(metadata i32* %3, metadata !23, metadata !DIExpression()), !dbg !24
  store i32 %1, i32* %4, align 4
  call void @llvm.dbg.declare(metadata i32* %4, metadata !25, metadata !DIExpression()), !dbg !26
  call void @inlineme(), !dbg !27
  %5 = load i32, i32* %3, align 4, !dbg !28
  %6 = load i32, i32* %4, align 4, !dbg !29
  %7 = add nsw i32 %5, %6, !dbg !30
  ret i32 %7, !dbg !31
}}

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1

attributes #1 = {{ nofree nosync nounwind readnone speculatable willreturn }}

!llvm.module.flags = !{{!1, !2, !3, !4, !5, !6, !7, !8, !9, !10}}
!llvm.dbg.cu = !{{!11}}
!llvm.ident = !{{!14}}

!0 = !{{i32 2, !"SDK Version", [2 x i32] [i32 12, i32 3]}}
!1 = !{{i32 7, !"Dwarf Version", i32 4}}
!2 = !{{i32 2, !"Debug Info Version", i32 3}}
!3 = !{{i32 1, !"wchar_size", i32 4}}
!4 = !{{i32 1, !"branch-target-enforcement", i32 0}}
!5 = !{{i32 1, !"sign-return-address", i32 0}}
!6 = !{{i32 1, !"sign-return-address-all", i32 0}}
!7 = !{{i32 1, !"sign-return-address-with-bkey", i32 0}}
!8 = !{{i32 7, !"PIC Level", i32 2}}
!9 = !{{i32 7, !"uwtable", i32 1}}
!10 = !{{i32 7, !"frame-pointer", i32 1}}
!11 = distinct !DICompileUnit(language: DW_LANG_C99, file: !12, producer: "Apple clang version 13.1.6 (clang-1316.0.21.2.3)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !13, splitDebugInlining: false, nameTableKind: None, sysroot: "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", sdk: "MacOSX.sdk")
!12 = !DIFile(filename: "test.c", directory: "/")
!13 = !{{}}
!14 = !{{!"Apple clang version 13.1.6 (clang-1316.0.21.2.3)"}}
!15 = distinct !DISubprogram(name: "inlineme", scope: !12, file: !12, line: 1, type: !16, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !11, retainedNodes: !13)
!16 = !DISubroutineType(types: !17)
!17 = !{{null}}
!18 = !DILocation(line: 1, column: 22, scope: !15)
!19 = distinct !DISubprogram(name: "foo", scope: !12, file: !12, line: 3, type: !20, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !11, retainedNodes: !13)
!20 = !DISubroutineType(types: !21)
!21 = !{{!22, !22, !22}}
!22 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!23 = !DILocalVariable(name: "a", arg: 1, scope: !19, file: !12, line: 3, type: !22)
!24 = !DILocation(line: 3, column: 13, scope: !19)
!25 = !DILocalVariable(name: "b", arg: 2, scope: !19, file: !12, line: 3, type: !22)
!26 = !DILocation(line: 3, column: 20, scope: !19)
!27 = !DILocation(line: 4, column: 5, scope: !19)
!28 = !DILocation(line: 5, column: 12, scope: !19)
!29 = !DILocation(line: 5, column: 16, scope: !19)
!30 = !DILocation(line: 5, column: 14, scope: !19)
!31 = !DILocation(line: 5, column: 5, scope: !19)
aN  
; ModuleID = "<string>"
target triple = "{triple}"

define double @licm(i32 %0) {{
  %2 = alloca i32, align 4
  %3 = alloca double, align 8
  %4 = alloca i32, align 4
  %5 = alloca double, align 8
  store i32 %0, i32* %2, align 4
  store double 0.000000e+00, double* %3, align 8
  store i32 0, i32* %4, align 4
  br label %6

6:                                                ; preds = %14, %1
  %7 = load i32, i32* %4, align 4
  %8 = load i32, i32* %2, align 4
  %9 = icmp slt i32 %7, %8
  br i1 %9, label %10, label %17

10:                                               ; preds = %6
  store double 7.000000e+00, double* %5, align 8
  %11 = load double, double* %5, align 8
  %12 = load double, double* %3, align 8
  %13 = fadd double %12, %11
  store double %13, double* %3, align 8
  br label %14

14:                                               ; preds = %10
  %15 = load i32, i32* %4, align 4
  %16 = add nsw i32 %15, 1
  store i32 %16, i32* %4, align 4
  br label %6

17:                                               ; preds = %6
  %18 = load double, double* %3, align 8
  ret double %18
}}
a  
    ; ModuleID = "<string>"
    target triple = "{triple}"

    @A = global i32 undef

    define void @ctor_A()
    {{
      store i32 10, i32* @A
      ret void
    }}

    define void @dtor_A()
    {{
      store i32 20, i32* @A
      ret void
    }}

    define i32 @foo()
    {{
      %.2 = load i32, i32* @A
      %.3 = add i32 %.2, 2
      ret i32 %.3
    }}

    @llvm.global_ctors = appending global [1 x {{i32, void ()*, i8*}}] [{{i32, void ()*, i8*}} {{i32 0, void ()* @ctor_A, i8* null}}]
    @llvm.global_dtors = appending global [1 x {{i32, void ()*, i8*}}] [{{i32, void ()*, i8*}} {{i32 0, void ()* @dtor_A, i8* null}}]
    z; ModuleID = ""
target triple = "unknown-unknown-unknown"
target datalayout = ""

define i32 @"foo"()
{
"<>!*''#":
  ret i32 12345
}
)addi	sp, sp, -16zsw	a1, 8(sp)zsw	a2, 12(sp)fld	ft0, 8(sp)zfmv.w.x	ft1, a0zfcvt.d.s	ft1, ft1fadd.d	ft0, ft1, ft0fsd	ft0, 8(sp)lw	a0, 8(sp)lw	a1, 12(sp)addi	sp, sp, 16ret)r   zsw	a0, 8(sp)zsw	a1, 12(sp)r   zfcvt.d.s	ft1, fa0r   r   r   r   r   r   )zfcvt.d.s	ft0, fa0zfadd.d	fa0, ft0, fa1r   zc
declare void @a_readonly_func(i8 *) readonly

declare i8* @a_arg0_return_func(i8* returned, i32*)
@  7f454c4602010100000000000000000001003e000100000000000000000000000000000000000000e0000000000000000000000040000000000040000500010048c1e2204809c24889d048c1c03d4831d048b90120000480001070480fafc8000000000000000000000000000000000000000000000000002f0000000400f1ff00000000000000000000000000000000070000001200020000000000000000001f00000000000000002e74657874005f5f617279626f002e6e6f74652e474e552d737461636b002e737472746162002e73796d746162003c737472696e673e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f0000000300000000000000000000000000000000000000a800000000000000380000000000000000000000000000000100000000000000000000000000000001000000010000000600000000000000000000000000000040000000000000001f000000000000000000000000000000100000000000000000000000000000000f00000001000000000000000000000000000000000000005f00000000000000000000000000000000000000000000000100000000000000000000000000000027000000020000000000000000000000000000000000000060000000000000004800000000000000010000000200000008000000000000001800000000000000>48c1e2204809c24889d048c1c03d4831d048b90120000480001070480fafc8c                   4    e Zd Zd Zd ZedfdZddZd ZdS )	BaseTestc                     t          j                     t          j                     t          j                     t	          j                     t          j        d d          | _        g t          j        d d <   d S N)llvm
initializeinitialize_native_targetinitialize_native_asmprintergccollectgarbageold_garbageselfs    r   setUpzBaseTest.setUp  s^    %''')+++

:aaa=
111    c                 p    t          j                     |                     t           j        g            | `d S r#   )r(   r)   assertEqualr*   r+   r,   s    r   tearDownzBaseTest.tearDown  s3     	
R(((r/   Nc                 ~    |                     t          j                              }t          j        ||          }|S )N)triple)formatr$   get_default_tripleparse_assembly)r-   asmcontextmods       r   modulezBaseTest.module  s5    jj 7 9 9j::!#w//
r/   globc                 X    ||                                  }|                    |          S r#   )r;   get_global_variable)r-   namer:   s      r   r<   zBaseTest.glob  s(    ;++--C&&t,,,r/   c                j    t           j                                        }|                    |          S )Njit)r$   Targetfrom_default_triplecreate_target_machine)r-   rB   targets      r   target_machinezBaseTest.target_machine  s,    0022+++444r/   )r<   N)	__name__
__module____qualname__r.   r2   asm_sumr;   r<   rG    r/   r   r!   r!     sp             !$    
- - - -
5 5 5 5 5r/   r!   c                       e Zd ZdZ ej        ej                            d          d           ej        e	j
                            d          d          d                         ZdS )TestDependencieszB
    Test DLL dependencies are within a certain expected set.
    linuxzLinux-specific testLLVMLITE_DIST_TESTzDistribution-specific testc                    t           j        j        }t          j                                        }d|d<   t          j        dd|gt          j        |          }|	                                \  }}| 
                    d|j                   t          j        d          }t                      }|                                                                D ]}|                                }	|	r~|	d         dk    rr|	d	         }
|                    |
          }t'          |	          d
k    s|s|                     d|           |                    |                    d	                     d|vsd|vr|                     d|           t          g d          }t/          j                    dk    r|                    d           |D ]6}
|
                    d          s|
|vr|                     d|
d|           7d S )NCLANGobjdumpz-p)stdoutenvr   z$^([-_a-zA-Z0-9]+)\.so(?:\.\d+){0,3}$NEEDED      zinvalid NEEDED line: libc
libpthreadz!failed parsing dependencies? got )	librtlibdlr[   libzlibmlibgcc_srZ   zld-linuxld64PyPylibtinfoz	ld-linux-zunexpected dependency z in )r
   lib_nameosenvironcopy
subprocessPopenPIPEcommunicater1   
returncoderecompilesetdecode
splitlinessplitmatchlenfailaddgroupplatformpython_implementation
startswith)r-   lib_pathrV   pout_lib_patdepslinepartsdepmalloweds                r   
test_linuxzTestDependencies.test_linux  s	   
 7=jooFix8$.O> > >QAL)))*DEEuuJJLL++-- 	% 	%DJJLLE %qX--AhMM#&&u::??!?III44ABBB$$$T!9!9IIIttEFFF ? ? ? @ @)++v55KK
### 	J 	JC>>+.. J3g3E3E			ccc44HIII	J 	Jr/   N)rH   rI   rJ   __doc__unittest
skipUnlesssysry   r{   rf   rg   getr   rL   r/   r   rN   rN     s          X0099.0 0X(<==57 7J J7 70 0J J Jr/   rN   c                   P     e Zd ZdZdZ fdZd Zd Zd Zd Z	d Z
d	 Zd
 Z xZS )TestRISCVABIz`
    Test calling convention of floating point arguments of RISC-V
    using different ABI.
    zriscv32-unknown-linuxc                     t                                                       t          j                     t          j                     d S r#   )superr.   r$   initialize_all_targetsinitialize_all_asmprinters)r-   	__class__s    r   r.   zTestRISCVABI.setUp  s8    #%%%')))))r/   c                     	 t           j                            | j                   d S # t          $ r4}dt          |          v r|                     d           n|Y d }~d S d }~ww xY w)Nz/No available targets are compatible with triplez(RISCV target unsupported by linked LLVM.)r$   rC   from_tripler4   RuntimeErrorstrskipTest)r-   es     r   check_riscv_targetzTestRISCVABI.check_riscv_target  s    	K##DK00000 	 	 	@CFFJJHIIII JIIIII	s   $( 
A&)A!!A&c                 d    t           j                            | j                  } |j        di |S )NrL   )r$   rC   r   r4   rE   )r-   kwarglltargets      r   riscv_target_machinez!TestRISCVABI.riscv_target_machine  s2    ;**4;77-x-66666r/   c                 $   t          j                    }t          j                    }t          j        |||f          }t          j                    }t          j        ||d          }|                                }t          j        |          }|j        \  }}	|	                    ||          }
|
                    |
|	          }|                    |           t          j        t          |                    }|                                 |S )Nfpaddr?   )r   
DoubleType	FloatTypeFunctionTypeModuleFunctionappend_basic_block	IRBuilderargsfpextfaddr   r$   r7   r   verify)r-   f64f32fntyr;   funcblockbuilderabarg0resultllmods                r   fpadd_ll_modulezTestRISCVABI.fpadd_ll_module  s    moolnnsS#J//{64g666'')),u%%y1}}Q$$dA&&F#CKK00r/   c                     g }|                                 D ][}|                                }|                    d          s0|                    d          s|dk    s|                    |           \|S )N.r    )rr   stripr{   append)r-   r8   asm_listr   s_lines        r   break_up_asmzTestRISCVABI.break_up_asm  sy    NN$$ 	( 	(DZZ\\F%%c** (f.?.?.H.H (||'''r/   c                    |                                   |                                 }|                     d          }|                     |                     |                    |                    t                     d S )N+f,+d)features)r   r   r   r1   r   emit_assemblyriscv_asm_ilp32r-   r   rF   s      r   test_rv32d_ilp32zTestRISCVABI.test_rv32d_ilp32  s~    !!!$$&&**G*<<**6+?+?+F+FGG(	* 	* 	* 	* 	*r/   c                    |                                   |                                 }|                     dd          }|                     |                     |                    |                    t                     d S )Nr   ilp32fr   abiname)r   r   r   r1   r   r   riscv_asm_ilp32fr   s      r   test_rv32d_ilp32fzTestRISCVABI.test_rv32d_ilp32f	      !!!$$&&**GX*NN**6+?+?+F+FGG)	+ 	+ 	+ 	+ 	+r/   c                    |                                   |                                 }|                     dd          }|                     |                     |                    |                    t                     d S )Nr   ilp32dr   )r   r   r   r1   r   r   riscv_asm_ilp32dr   s      r   test_rv32d_ilp32dzTestRISCVABI.test_rv32d_ilp32d  r   r/   )rH   rI   rJ   r   r4   r.   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r     s          %F* * * * *
  7 7 7  "  * * *+ + ++ + + + + + +r/   r   c                       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 ej         e            d          d             Zd ZdS )TestMiscz7
    Test miscellaneous functions in llvm.binding.
    c                 :    |                      t                     d S r#   )r;   rK   r,   s    r   test_parse_assemblyzTestMisc.test_parse_assembly  s    Gr/   c                    |                      t                    5 }|                     t                     d d d            n# 1 swxY w Y   t	          |j                  }|                     d|           |                     d|           d S )Nzparsing errorzinvalid operand type)assertRaisesr   r;   asm_parse_errorr   	exceptionassertIn)r-   cmss      r   test_parse_assembly_errorz"TestMisc.test_parse_assembly_error   s    |,, 	)KK(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)oq))),a00000s   AA	Ac                    t          j                    }t          j        t          j        d          g           }t          j        ||d          }t          j        |                    d                    }|                    t          j        t          j        d          d                     t          |          }| 
                    |t                     d S )N    fooz<>!*''#r   i90  )r   r   r   IntTyper   r   r   r   Constantr   r1   asm_nonalphanum_blocklabel)r-   r:   ftfnbdr8   s         r   test_nonalphanum_block_namez$TestMisc.test_nonalphanum_block_name'  s    ikk_RZ^^R00[b%((\"//Y/??@@
r{2:b>>511222#hh899999r/   c                     t           j                                        }t           j                                        }||k    sJ d S r#   )r$   r9   get_global_context)r-   	gcontext1	gcontext2s      r   test_global_contextzTestMisc.test_global_context0  s?    L3355	L3355	I%%%%%%r/   c                    t          j        dd           t          j        dd           t          j        d          }|                     |d           t          j        d          }|                     |d            d S )N__xyzzyi  i.  __foobar)r$   
add_symboladdress_of_symbolr1   assertIs)r-   addrs     r   test_dylib_symbolszTestMisc.test_dylib_symbols5  sv    	4(((	4(((%i00t$$$%j11dD!!!!!r/   c                     t          j                    }|                     |t                     |                     |           d S r#   )r$   r6   assertIsInstancer   
assertTrue)r-   r4   s     r   test_get_default_triplez TestMisc.test_get_default_triple=  s>    (**fc***r/   c                 t   d }t          j                    }t          j                    }|                     |t                     |                     |            ||                    d          d                   } ||                    d          d                   }|                     ||           d S )Nc                     | dk    rdS | S )Npowerpc64leppc64lerL   )archs    r   normalize_ppcz7TestMisc.test_get_process_triple.<locals>.normalize_ppcD  s    }$$ yr/   -r   )r$   get_process_tripler6   r   r   r   rs   r1   )r-   r   r4   defaultdefault_archtriple_archs         r   test_get_process_triplez TestMisc.test_get_process_tripleB  s    	 	 	 (**)++fc***$}W]]3%7%7%:;;#mFLL$5$5a$899{33333r/   c                    t          j                    }|                     |t                     |                     |t           j                   |                                D ]P\  }}|                     |t                     |                     |           |                     |t                     Q|                     |	                                t                     d}d
                    |          }|                     t          j        |d                     |                     t          j        |d                     |                     t          j        |d                     t          |          dk    r*|                     |	                                d           d S |                     t          j        ||	                                                     d S )Nz[+\-][a-zA-Z0-9\._-]+z^({0}|{0}(,{0})*)?$r   z+aaz+a,-bbr   )r$   get_host_cpu_featuresr   dict
FeatureMapitemsr   r   boolflattenr5   assertIsNotNonern   rt   ru   r1   )r-   r   kvre_termregexs         r   test_get_host_cpu_featuresz#TestMisc.test_get_host_cpu_featuresT  s   -//h---h888NN$$ 	+ 	+DAq!!!S)))OOA!!!T****h..00#666*&--g66RXeR00111RXeU33444RXeX66777x==AX--//44444  %1A1A1C1C!D!DEEEEEr/   c                     t          j                    }|                     |t                     |                     |           d S r#   )r$   get_host_cpu_namer   r   r   )r-   cpus     r   test_get_host_cpu_namezTestMisc.test_get_host_cpu_namek  s>    $&&c3'''r/   c                 L    d}t          j        t          j        d|g           d S )Na2  if 1:
            from llvmlite import binding as llvm

            llvm.initialize()
            llvm.initialize_native_target()
            llvm.initialize_native_asmprinter()
            llvm.initialize_all_targets()
            llvm.initialize_all_asmprinters()
            llvm.shutdown()
            -cri   
check_callr   
executabler-   codes     r   test_initfinizTestMisc.test_initfinip  s+    	 	s~tT:;;;;;r/   c                 L    d}t          j        t          j        d|g           d S )Nzif 1:
            from llvmlite import binding as llvm

            llvm.set_option("progname", "-debug-pass=Disabled")
            r  r  r  s     r   test_set_optionzTestMisc.test_set_option}  s+    
 	s~tT:;;;;;r/   c                     t           j        \  }}}g d}|                     |f|           |                     |t          d                     d S )N))   )   )   )   
   )r$   llvm_version_infor   range)r-   majorminorpatchvalids        r   test_versionzTestMisc.test_version  sR    "4ue///uh&&&eU2YY'''''r/   c                 ,    t          j                     d S r#   )r$   check_jit_executionr,   s    r   test_check_jit_executionz!TestMisc.test_check_jit_execution  s     """""r/   zLocale not availablec                     |                      t                    }t          |          }t          j        t          j        d           t          |          }|                     ||           d S )Nr   )r;   asm_double_localer   r   r   r   r1   )r-   r   expectgots       r   test_print_double_localez!TestMisc.test_print_double_locale  s]    KK)**Q 	000!ff%%%%%r/   c                 V    d}d}t           j        |d|g}t          j        |           d S )Nzfrom llvmlite import bindingz-Werrorr  )r   r  ri   r  )r-   r  flagscmdargss       r   test_no_accidental_warningsz$TestMisc.test_no_accidental_warnings  s3    ->5$5g&&&&&r/   N)rH   rI   rJ   r   r   r   r   r   r   r   r  r  r  r  r!  r.  r1  r   skipIfr   r6  r:  rL   r/   r   r   r     s$          1 1 1: : :& & &
" " "     
4 4 4$F F F.  
< < << < <( ( (# # # X_\\^^%;<<	& 	& =<	&' ' ' ' 'r/   r   c                       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S )TestModuleRefc                     |                                  }t          |                                          }|                     |                    d          |           d S )Nz; ModuleID =)r;   r   r   r   r{   r-   r:   r   s      r   test_strzTestModuleRef.test_str  sJ    kkmmHHNN^44a88888r/   c                 (   |                                  }t          |           |                                 |                     t          j                  5  t          |           d d d            n# 1 swxY w Y   |                                 d S r#   )r;   r   closer   ctypesArgumentErrorr-   r:   s     r   
test_closezTestModuleRef.test_close  s    kkmmC		v344 	 	HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 			s   A33A7:A7c                    |                                  }t          |           |5  t          |           d d d            n# 1 swxY w Y   |                     t          j                  5  t          |           d d d            n# 1 swxY w Y   |                     t
                    5  |5  	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r#   )r;   r   r   rC  rD  r   rE  s     r   	test_withzTestModuleRef.test_with  s   kkmmC 	 	HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	v344 	 	HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	|,, 	 	                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sY   AA	A,BBB-C0B>2C>C	CC	CCCc                     |                                  }d|_        |                     |j        d           d|_        |                     |j        d           d S )Nr   bar)r;   r?   r1   rE  s     r   	test_namezTestModuleRef.test_name  sS    kkmm5)))5)))))r/   c                 d    |                                  }|                     |j        d           d S )Nz	asm_sum.c)r;   r1   source_filerE  s     r   test_source_filezTestModuleRef.test_source_file  s-    kkmm+66666r/   c                     |                                  }|j        }|                     |t                     ||_        |                     ||j                   d S r#   )r;   data_layoutr   r   r1   r?  s      r   test_data_layoutzTestModuleRef.test_data_layout  sQ    kkmmOa%%%CO,,,,,r/   c                     |                                  }|j        }|                     |t          j                               d|_        |                     |j        d           d S )Nr   )r;   r4   r1   r$   r6   r?  s      r   test_triplezTestModuleRef.test_triple  sZ    kkmmJD355666
R(((((r/   c                    |                                  }|                     |                                d            |                      t                    }|                     t
                    5 }|                                 d d d            n# 1 swxY w Y   t          |j                  }|                     d|           d S )Nz%.bug = add i32 1, %.bug)	r;   r   r   asm_verification_failr   r   r   r   r   )r-   r:   r   r   s       r   test_verifyzTestModuleRef.test_verify  s    kkmmcjjllD)))kk/00|,, 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	0!44444s   1BBBc                    |                                  }|                    d          }|                     |t          j                   |                     |j        d           |                     t                    5  |                    d           d d d            n# 1 swxY w Y   ~t          |j                    d S )Nsumr   )
r;   get_functionr   r$   ValueRefr1   r?   r   	NameErrorr   r-   r:   r   s      r   test_get_functionzTestModuleRef.test_get_function  s    kkmme$$b$-000%(((y)) 	$ 	$U###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ BI   ?B!!B%(B%c                    |                                  }|                    d          }|                     |j        d           |                     t          j        dt          |                               |                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nzstruct.glob_type8%struct\.glob_type(\.[\d]+)? = type { i64, \[2 x i64\] }zstruct.doesnt_exist)
r;   get_struct_typer1   r?   r  rn   rt   r   r   r[  )r-   r:   st_tys      r   test_get_struct_typez"TestModuleRef.test_get_struct_type  s    kkmm##$677%7888RXGJJ  	 	 	 y)) 	7 	7 5666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   B77B;>B;c                    |                                  }|                    d          }|                     |t          j                   |                     |j        d           |                     t                    5  |                    d           d d d            n# 1 swxY w Y   ~t          |j                    d S )Nr<   rJ  )
r;   r>   r   r$   rZ  r1   r?   r   r[  r   )r-   r:   gvs      r   test_get_global_variablez&TestModuleRef.test_get_global_variable  s    kkmm$$V,,b$-000&)))y)) 	+ 	+##E***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ BIr^  c                     |                                  }|j        }~t          |d           }|                     t	          |          d           |                     d |D             g d           d S )Nc                     | j         S r#   r   )values    r   <lambda>z5TestModuleRef.test_global_variables.<locals>.<lambda>  s    UZ r/   )key   c                     g | ]	}|j         
S rL   r   ).0gs     r   
<listcomp>z7TestModuleRef.test_global_variables.<locals>.<listcomp>  s    000Q!&000r/   )r<   glob_bglob_fglob_struct)r;   global_variablessortedr1   ru   )r-   r:   itglobss       r   test_global_variablesz#TestModuleRef.test_global_variables  s    kkmm!r77888UQ'''00%000DDD	F 	F 	F 	F 	Fr/   c                     |                                  }|j        }~t          |          }|                     t	          |          d           |                     |d         j        d           d S NrX   r   rX  )r;   	functionslistr1   ru   r?   )r-   r:   rv  funcss       r   test_functionszTestModuleRef.test_functions  sb    kkmm]RUQ'''q.....r/   c           	      ~   |                                  }|j        }~t          |          }|                     t	          |          d           |                     t          j        d|d         j                             |                     t          j        dt          |d                                        d S )NrX   struct\.glob_type(\.[\d]+)?r   r`  )
r;   struct_typesr|  r1   ru   r  rn   rt   r?   r   )r-   r:   rv  structss       r   test_structszTestModuleRef.test_structs  s    kkmmr((Wq)))RX&D&-ajo7 7 	8 	8 	8RXG
OO  	 	 	 	 	r/   c                    |                                  }|                      t                    }|                    |           |                     t	          d |j        D                       ddg           |                    d           |                                 |                     t          j
                  5  |                    d           d d d            d S # 1 swxY w Y   d S )Nc              3   $   K   | ]}|j         V  d S r#   r   rn  fs     r   	<genexpr>z-TestModuleRef.test_link_in.<locals>.<genexpr>*  $      22a16222222r/   mulrX  )r;   asm_mullink_inr1   ru  r{  rY  rB  r   rC  rD  )r-   destsrcs      r   test_link_inzTestModuleRef.test_link_in%  s   {{}}kk'""S224>22222UEN	D 	D 	D%   

v344 	$ 	$U###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s    C##C'*C'c                    |                                  }|                      t                    }|                    |d           |                     t	          d |j        D                       ddg           |                                 |                     t	          d |j        D                       dg           |                    d           d S )NT)preservec              3   $   K   | ]}|j         V  d S r#   r   r  s     r   r  z6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>5  r  r/   r  rX  c              3   $   K   | ]}|j         V  d S r#   r   r  s     r   r  z6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>7  s$      ??1??????r/   )r;   r  r  r1   ru  r{  rB  rY  )r-   r  src2s      r   test_link_in_preservez#TestModuleRef.test_link_in_preserve0  s    {{}}{{7##TD)))224>22222UEN	D 	D 	D

???????%III%     r/   c                 @   |                                  }|                      t                    }|                     t                    5 }|                    |           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nzsymbol multiply defined)r;   asm_sum2r   r   r  r   r   r   )r-   r  r  r   s       r   test_link_in_errorz TestModuleRef.test_link_in_error:  s     {{}}kk(##|,, 	LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	/R\1B1BCCCCCs   	A++A/2A/c                     |                                  }|                                }d}d}|                     |                    |          p|                    |                     d S )Ns   s   BC)r;   
as_bitcoder   r{   )r-   r:   bcbitcode_wrapper_magicbitcode_magics        r   test_as_bitcodezTestModuleRef.test_as_bitcodeC  sn    kkmm^^ !4m44 =&;<<	> 	> 	> 	> 	>r/   c                    |                      t                    5 }t          j        d           d d d            n# 1 swxY w Y   |                     dt          |j                             t          j        d         dk     r*|                     dt          |j                             d S |                     dt          |j                             d S )Nr/   zLLVM bitcode parsing errorr   	   zInvalid bitcode signaturez(file too small to contain bitcode header)r   r   r$   parse_bitcoder   r   r   r(  )r-   r   s     r   test_parse_bitcode_errorz&TestModuleRef.test_parse_bitcode_errorM  s    |,, 	$s###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$2C4E4EFFF!!$q((MM5s2<7H7HIIIIIMM:C<M<M    s   <A A c                 p   t          j                    }|                     |                                          }t          j                    }t          j        ||          }|                     |                                |           |                    d           |                    d           d S )N)r9   rX  r<   )r$   create_contextr;   r  r  r1   rY  r>   )r-   context1r  context2r:   s        r   test_bitcode_roundtripz$TestModuleRef.test_bitcode_roundtripY  s    &(([[[**5577&(( X..))2...'''''r/   c                     |                                  }|                                }|                     ||           |                     |                                |                                           d S r#   )r;   cloneassertIsNotr1   r  )r-   r   cloneds      r   test_cloningzTestModuleRef.test_cloningd  sb    KKMM###**,,allnn=====r/   N)rH   rI   rJ   r@  rF  rH  rK  rN  rQ  rS  rV  r]  rc  rf  rx  r~  r  r  r  r  r  r  r  r  rL   r/   r   r=  r=    sU       9 9 9
  	 	 	* * *7 7 7- - -) ) )	5 	5 	5  
7 
7 
7  F F F/ / /
 
 
	$ 	$ 	$! ! !D D D> > >
 
 
	( 	( 	(> > > > >r/   r=  c                   h    e Zd ZdZd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S )JITTestMixinz*
    Mixin for ExecutionEngine tests.
    rX  c                     |                                  |                    |          }|                     |            t          t          t          t                    |          S r#   )finalize_objectget_function_addressr   r   r   )r-   ee	func_namecfptrs       r   get_sumzJITTestMixin.get_sump  sU    
''	22-yu--e444r/   c                     |                                  }|                     |          5 }|                     |          } |dd          }|                     d|           d d d            d S # 1 swxY w Y   d S )NrY   )r;   rB   r  r1   )r-   r:   r  cfuncress        r   test_run_codezJITTestMixin.test_run_codev  s    kkmmXXc]] 	&bLL$$E%2,,CR%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   8A//A36A3c                 <   |                      |                                           }|                                 |                                 |                     t          j                  5  |                                 d d d            d S # 1 swxY w Y   d S r#   )rB   r;   rB  r   rC  rD  r  r-   r  s     r   rF  zJITTestMixin.test_close}  s    XXdkkmm$$







v344 	! 	!   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   /BBBc                    |                      |                                           }|5  	 d d d            n# 1 swxY w Y   |                     t                    5  |5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t          j                  5  |                                 d d d            d S # 1 swxY w Y   d S r#   )rB   r;   r   r   rC  rD  r  r  s     r   rH  zJITTestMixin.test_with  s   XXdkkmm$$ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	|,, 	 	                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 v344 	! 	!   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!sT   8<<B A."B.A2	2B5A2	6BB	B	/CCCc                     |                                  }|                     |          }|                                 |                                 d S r#   r;   rB   rB  r-   r:   r  s      r   test_module_lifetimez!JITTestMixin.test_module_lifetime  s<    kkmmXXc]]



		r/   c                     |                                  }|                     |          }|                                 |                                 d S r#   r  r  s      r   test_module_lifetime2z"JITTestMixin.test_module_lifetime2  s<    kkmmXXc]]		





r/   c                    |                      |                                           }|                     t                    }|                    |           |                     t
                    5  |                    |           d d d            n# 1 swxY w Y   |                     |j                   |                                 | 	                    |j                   d S r#   )
rB   r;   r  
add_moduler   KeyErrorassertFalseclosedrB  r   r-   r  r:   s      r   test_add_modulezJITTestMixin.test_add_module  s    XXdkkmm$$kk'""
cx(( 	 	MM#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$$$




#####s   1BBBc                    |                      |                                           }|                     t                    }|                    |           |                                 |                                 d S r#   rB   r;   r  r  rB  r  s      r   test_add_module_lifetimez%JITTestMixin.test_add_module_lifetime  s\    XXdkkmm$$kk'""
c		





r/   c                    |                      |                                           }|                     t                    }|                    |           |                                 |                                 d S r#   r  r  s      r   test_add_module_lifetime2z&JITTestMixin.test_add_module_lifetime2  s\    XXdkkmm$$kk'""
c



		r/   c                    |                      |                                           }|                     t                    }|                    |           |                    |           |                     t                    5  |                    |           d d d            n# 1 swxY w Y   |                     |j                   |	                                 |                     |j                   d S r#   )
rB   r;   r  r  remove_moduler   r  r  r  rB  r  s      r   test_remove_modulezJITTestMixin.test_remove_module  s   XXdkkmm$$kk'""
c
x(( 	" 	"S!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"$$$



$$$$$s   B((B,/B,c                     |                                  }|                     |          }|j        }|                     |j        |           t	          |           ~~t	          |           d S r#   )r;   rB   target_datar   r   )r-   r:   r  tds       r   test_target_datazJITTestMixin.test_target_data  sZ    kkmmXXc]]^bnb)))BBr/   c                    |                                  }|                     |          }|j        }|                    d          }|                    d          }|                    d          }t          j        dk     rdnd}|||fD ]0}|                     |                    |j                  |           1|                     |	                    |j                  d           |                     |
                    |j                  d           |                     |	                    |j                  d           |                     |
                    |j                  d           |                     |	                    |j                  d	           |                     |
                    |j                  d
           d S )Nr<   rq  rs          rl     rX   )rX   rY   rl     )rl  r  )r;   rB   r  r>   r   maxsizer1   get_abi_sizetypeget_pointee_abi_sizeget_pointee_abi_alignmentr   )	r-   r:   r  r  gv_i32gv_i8	gv_structpointer_sizero  s	            r   test_target_data_abi_enquiriesz+JITTestMixin.test_target_data_abi_enquiries  s   kkmmXXc]]^((00''11++M::	K'11qqq%+ 	D 	DAR__QV44lCCCC00==qAAA55fkBBAFFF00<<a@@@b225:>>	JJJ00@@"EEEb229>BBFKKKKKr/   c                 b   g fd}|                                  }|                     |          }|                    |           |                     t	                    d           |                     |          } |dd           |                     t	                    d           |                     d         d         |           |                     d         d         t                     g d d <   |                      t                    }|
                    |           |                     |d          }|                     t	                    d           |                     d         d         |           |                     d         d         t                     d S )Nc                 6                         | |f           d S r#   r   r:   bufnotifiess     r   notifyz5JITTestMixin.test_object_cache_notify.<locals>.notify      OOS#J'''''r/   r   rY   r  rX   r  )r;   rB   set_object_cacher1   ru   r  r   r   bytesr  r  )r-   r  r:   r  r  mod2r  s         @r   test_object_cache_notifyz%JITTestMixin.test_object_cache_notify  s   	( 	( 	( 	( 	( kkmmXXc]]
F###X***R  aX***hqk!nc***hqk!ne444{{7##
dR''X***hqk!nd+++hqk!ne44444r/   c                 p  	 g g fd}fd}|                                  }|                     |          }|                    ||           |                     t	                    d           |                     t	                    d           |                     |          }|                     t	                    d           |                     t	                    d           |                     d         |           d         d         		fd}g d d <   g d d <   |                      t                    }|                     |          }|                    ||           |                     t	                    d           |                     t	                    d           |                     |          }|                      |dd          d           |                     t	                    d           |                     t	                    d           d S )	Nc                 6                         | |f           d S r#   r  r  s     r   r  z8JITTestMixin.test_object_cache_getbuffer.<locals>.notify  r  r/   c                 2                         |            d S r#   r  )r:   
getbufferss    r   	getbufferz;JITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer  s    c"""""r/   r   rX   c                 2                         |            S r#   r  )r:   r  
sum_buffers    r   getbuffer_successfulzFJITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer_successful  s    c"""r/   rY   r  r  )r;   rB   r  r1   ru   r  r   r  )
r-   r  r  r:   r  r  r  r  r  r  s
          @@@r   test_object_cache_getbufferz(JITTestMixin.test_object_cache_getbuffer  s5   
	( 	( 	( 	( 	(	# 	# 	# 	# 	# kkmmXXc]]
FI... 	X***Z!,,,R  X***Z!,,,jmS)))a[^

	 	 	 	 	 	 
111kk'""XXc]]
F$8999X***Z!,,,R  q"r***X***Z!,,,,,r/   N)rX  )rH   rI   rJ   r   r  r  rF  rH  r  r  r  r  r  r  r  r  r  r  rL   r/   r   r  r  k  s         5 5 5 5& & &! ! !! ! !    $ $ $    	% 	% 	%  L L L*5 5 56*- *- *- *- *-r/   r  c                       e Zd Zd Zd ZdS )JITWithTMTestMixinc                    |                      d          }|                                 }|                     ||          }|                    |          }|                     d|           |                    d           |                    |          }|                     d|           |                     ||           dS )z%Test TargetMachineRef.emit_assembly()TrA   rX  N)rG   r;   rB   r   r   set_asm_verbosityassertNotEqual)r-   rG   r:   r  raw_asmraw_asm_verboses         r   test_emit_assemblyz%JITWithTMTestMixin.test_emit_assembly&  s    ,,,66kkmmXXc>** ..s33eW%%%((...(66s;;eW%%%G_55555r/   c                 d   |                      d          }|                                 }|                     ||          }|                    |          }|                     |t
                     t          j                            d          r | 	                    d|dd                    dS dS )z#Test TargetMachineRef.emit_object()TrA   rO   s   ELFNr'  )
rG   r;   rB   emit_objectr   r  r   ry   r{   r   )r-   rG   r:   r  code_objects        r   test_emit_objectz#JITWithTMTestMixin.test_emit_object2  s    ,,,66kkmmXXc>**$0055k5111<""7++ 	4MM&+crc"233333	4 	4r/   N)rH   rI   rJ   r  r  rL   r/   r   r  r  $  s2        
6 
6 
6	4 	4 	4 	4 	4r/   r  c                       e Zd ZdZddZdS )	TestMCJitz@
    Test JIT engines created with create_mcjit_compiler().
    Nc                 \    ||                      d          }t          j        ||          S )NTrA   )rG   r$   create_mcjit_compiler)r-   r:   rG   s      r   rB   zTestMCJit.jitC  s1    !!00T0::N)#~>>>r/   r#   )rH   rI   rJ   r   rB   rL   r/   r   r  r  >  s2         ? ? ? ? ? ?r/   r  c                       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S )TestValueRefc                     |                                  }|                    d          }|                     t          |          d           d S )Nr<   z@glob = global i32 0)r;   r>   r1   r   r-   r:   r<   s      r   r@  zTestValueRef.test_strK  sE    kkmm&&v..T$:;;;;;r/   c                     |                                  }|                    d          }|                     |j        d           d|_        |                     |j        d           d S )Nr<   foobar)r;   r>   r1   r?   r  s      r   rK  zTestValueRef.test_nameP  s_    kkmm&&v..F+++	H-----r/   c                    |                                  }|                    d          }|j        }|                     |j        t          j                   ||_        |                     |j        |           dD ]N}||_        |                     |j        t          j                   |                     |j        j        |           Od S )Nr<   )internalexternal)r;   r>   linkager   r$   Linkager1   r?   )r-   r:   r<   r  s       r   test_linkagezTestValueRef.test_linkageW  s    kkmm&&v..,dlDL999w//// 	9 	9G"DL!!$,===T\.8888	9 	9r/   c                    |                                  }|                    d          }|j        }|                     |j        t          j                   ||_        |                     |j        |           dD ]N}||_        |                     |j        t          j                   |                     |j        j        |           Od S )Nr<   )hidden	protectedr  )r;   r>   
visibilityr   r$   
Visibilityr1   r?   )r-   r:   r<   r  s       r   test_visibilityzTestValueRef.test_visibilityc  s    kkmm&&v.._
dot???$*555< 	? 	?J(DO!!$/4?CCCT_1:>>>>	? 	?r/   c                    |                                  }|                    d          }|j        }|                     |j        t          j                   ||_        |                     |j        |           dD ]N}||_        |                     |j        t          j                   |                     |j        j        |           Od S )Nr<   )	dllimport	dllexportr  )r;   r>   storage_classr   r$   StorageClassr1   r?   )r-   r:   r<   r   s       r   test_storage_classzTestValueRef.test_storage_classo  s    kkmm&&v..*d0$2CDDD*+];;;B 	E 	EM!.D!!$"4d6GHHHT/4mDDDD	E 	Er/   c                 `   |                                  }|                    d          }|                    d           |                     t                    5 }|                    d           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )NrX  	nocapturezextzno such attribute 'zext')r;   rY  add_function_attributer   
ValueErrorr1   r   r   )r-   r:   r   raisess       r   test_add_function_attributez(TestValueRef.test_add_function_attribute{  s    kkmme$$
!!+...z** 	.f%%f---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.V-..0JKKKKKs   A;;A?A?c                     |                                  }|                    d          }|                     |j         |           d S Nr<   )r;   r>   r   r  s      r   test_modulezTestValueRef.test_module  s>    kkmm&&v..dk3'''''r/   c                     |                                  }|                    d          }|j        }|                     |t          j                   d S r+  )r;   r>   r  r   r$   TypeRefr-   r:   r<   tps       r   	test_typezTestValueRef.test_type  sG    kkmm&&v..Yb$,/////r/   c                 4   |                                  }|                    d          }|j        }|                     |j        d           |                    d          }|                     t          j        d|j        j        j                             d S )Nr<   r   rs  r  )	r;   r>   r  r1   r?   r  rn   rt   element_type)r-   r:   r<   r0  sts        r   test_type_namezTestValueRef.test_type_name  s    kkmm&&v..Y"%%%$$]33RX&D&(g&:&?A A 	B 	B 	B 	B 	Br/   c                     |                                  }|                    d          }|j        }|                     t	          |          d           d S )Nr<   zi32*)r;   r>   r  r1   r   r/  s       r   test_type_printing_variablez(TestValueRef.test_type_printing_variable  sK    kkmm&&v..YR&)))))r/   c                     |                                  }|                    d          }|                     t          |j                  d           d S )NrX  zi32 (i32, i32)*)r;   rY  r1   r   r  r\  s      r   test_type_printing_functionz(TestValueRef.test_type_printing_function  sG    kkmme$$RW'899999r/   c                    |                                  }|                    d          }|                     |j        j                   |                     t          j        dt          |j                                       |                     t          j        dt          |j        j	                                       d S )Nrs  z%struct\.glob_type(\.[\d]+)?\*r`  )
r;   r>   r   r  
is_pointerr  rn   rt   r   r3  )r-   r:   r4  s      r   test_type_printing_structz&TestValueRef.test_type_printing_struct  s    kkmm$$]33*+++RX&G&)"'ll4 4 	5 	5 	5RXG$%%' ' 	( 	( 	( 	( 	(r/   c                 ~    |                                  }|                                 |                                 d S r#   )r<   rB  )r-   r<   s     r   rF  zTestValueRef.test_close  s-    yy{{



r/   c                    |                                                      d          }|                      t                                        d          }|                     |j                   |                     |j                   d S )NrX  )r;   rY  asm_sum_declarer  is_declarationr   )r-   defineddeclareds      r   test_is_declarationz TestValueRef.test_is_declaration  sn    ++--,,U33;;//<<UCC/000/00000r/   c                     |                      t                    }t          |j                  }|                     t          |          d           |D ]}|                     |j                   d S Nrl  )r;   rK   r|  rt  r1   ru   r   	is_global)r-   r:   gvarsr  s       r   test_module_global_variablesz)TestValueRef.test_module_global_variables  so    kk'""S)**UQ''' 	) 	)AOOAK((((	) 	)r/   c                 n   |                                  }t          |j                  }|                     t	          |          d           |d         }|                     |j                   |                     |j        d           |                     t                    5  |j
         d d d            n# 1 swxY w Y   |                     t                    5  |j         d d d            n# 1 swxY w Y   |                     t                    5  |j         d d d            d S # 1 swxY w Y   d S rz  )r;   r|  r{  r1   ru   r   is_functionr?   r   r'  instructionsoperandsopcode)r-   r:   r}  r   s       r   test_module_functionsz"TestValueRef.test_module_functions  s   kkmmS]##UQ'''Qx()))E***z** 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	 	MM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	 	KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   #B77B;>B;C00C47C4D**D.1D.c                    |                                  }|                    d          }|                     |j                   t	          |j                  }|                     t          |          d           |                     |d         j                   |                     |d         j                   |                     |d         j	        d           |                     t          |d         j                  d           |                     |d         j	        d           |                     t          |d         j                  d           |                     t                    5  |d         j         d d d            n# 1 swxY w Y   |                     t                    5  |d         j         d d d            d S # 1 swxY w Y   d S )NrX  rY   r   rX   .1i32.2)r;   rY  r   rJ  r|  	argumentsr1   ru   is_argumentr?   r   r  r   r'  blocks)r-   r:   r   r   s       r   test_function_argumentsz$TestValueRef.test_function_arguments  s   kkmm&&()))DN##TA&&&Q+,,,Q+,,,at,,,T!W\**E222at,,,T!W\**E222z** 	 	GNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	 	G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   3FFF2GGGc                    |                                                      d          }t          |j                  }|                     t          |          d           |d         }|                     |j                   d S )NrX  rX   r   )r;   rY  r|  rU  r1   ru   r   is_block)r-   r   rU  r   s       r   test_function_blocksz!TestValueRef.test_function_blocks  sk    {{}}))%00dk""Va(((q	'''''r/   c                 x   |                                                      d          }t          t          |j                  d         j                  }|                     t          |          d           |                     |d         j                   |                     |d         j                   |                     |d         j                   |                     |d         j	        d           |                     |d         j	        d           |                     |d         j	        d           d S )NrX  r      rX   rY   rw   r   )
r;   rY  r|  rU  rK  r1   ru   r   is_instructionrM  )r-   r   instss      r   test_block_instructionsz$TestValueRef.test_block_instructions  s    {{}}))%00T$+&&q)677UQ'''a/000a/000a/000q%000q%000q%00000r/   c                    |                                                      d          }t          t          |j                  d         j                  d         }|                     |j        d           t          |j                  }|                     t          |          d           | 	                    |d         j
                   | 	                    |d         j
                   |                     |d         j        d           |                     t          |d         j                  d           |                     |d         j        d           |                     t          |d         j                  d           d S )	NrX  r   rw   rY   rX   rP  rQ  rR  )r;   rY  r|  rU  rK  r1   rM  rL  ru   r   
is_operandr?   r   r  )r-   r   rw   rL  s       r   test_instruction_operandsz&TestValueRef.test_instruction_operands  s@   {{}}))%004$$Q'455a8U+++%%X***.///.///!)4000Xa[-..666!)4000Xa[-..66666r/   c                    |                      t                    }|j        D ]}t          |j                  }|j        dk    r|                     |dg           9|j        dk    r|                     |g            t          |j                  }|                     t          |d         j                  dg           |                     t          |d         j                  g            d S )Na_readonly_funcs   readonlya_arg0_return_funcr   s   returnedrX   )r;   asm_attributesr{  r|  
attributesr?   r1   rS  )r-   r:   r   attrsr   s        r   test_function_attributesz%TestValueRef.test_function_attributes  s    kk.))M 	? 	?D))Ey---  6666222  +++DN++  d1g&8!9!9K=III  d1g&8!9!92>>>	? 	?r/   N)rH   rI   rJ   r@  rK  r  r  r"  r)  r,  r1  r5  r7  r9  r<  rF  rC  rH  rN  rV  rY  r^  ra  rh  rL   r/   r   r  r  I  sX       < < <
. . .
9 
9 
9
? 
? 
?
E 
E 
EL L L( ( (
0 0 0B B B* * *: : :
( ( (  
1 1 1) ) )    $( ( (	1 	1 	17 7 7
? 
? 
? 
? 
?r/   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )
TestTargetc                    t           j        j        }|                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     dt          |j                             t          j                    } ||          }| 	                    |j
        |           |                                 d S )Nr  z(No available targets are compatible with)r$   rC   r   r   r   r   r   r   r6   r1   r4   rB  )r-   r  r   r4   rF   s        r   test_from_triplezTestTarget.test_from_triple  s    K#|,, 	AhKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	@",''	) 	) 	)(**6///s   AAAc                     t           j                            t          j                              }|                    ddddd           t          j                    }|                    |dddd           d S )Nr   rX   r  )r$   rC   r   r6   rE   r  )r-   rF   r  s      r   test_create_target_machinez%TestTarget.test_create_target_machine  sl    (()@)B)BCC$$RQ	9EEE$&&$$S"aIFFFFFr/   c                 "   t           j                            t          j                              }t           j                                        }|                     |j        t                     |                     |j        |j                   d S r#   )	r$   rC   r   r6   rD   r   r?   r   r1   r-   tus      r   rK  zTestTarget.test_name   sk    K##D$;$=$=>>K++--afc***(((((r/   c                 "   t           j                            t          j                              }t           j                                        }|                     |j        t                     |                     |j        |j                   d S r#   )	r$   rC   r   r6   rD   r   descriptionr   r1   rp  s      r   test_descriptionzTestTarget.test_description&  sk    K##D$;$=$=>>K++--amS11166666r/   c                     t           j                            t          j                              }t	          |          }|                     |j        |           |                     |j        |           d S r#   )r$   rC   r   r6   r   r   r?   rt  )r-   rF   r   s      r   r@  zTestTarget.test_str,  s^    (()@)B)BCCKKfk1%%%f(!,,,,,r/   N)rH   rI   rJ   rl  rn  rK  ru  r@  rL   r/   r   rj  rj    sb        	 	 	G G G) ) )7 7 7- - - - -r/   rj  c                   &    e Zd Zd Zd Zd Zd ZdS )TestTargetDatac                 *    t          j        d          S )Nz%e-m:e-i64:64-f80:128-n8:16:32:64-S128)r$   create_target_datar,   s    r   r  zTestTargetData.target_data5  s    &'NOOOr/   c                     |                                  }|                                 }|                     |                    |j                  d           d S )Nr  )r  r<   r1   r  r  r-   r  r<   s      r   test_get_abi_sizez TestTargetData.test_get_abi_size8  sJ    yy{{33Q77777r/   c                 8   |                                  }|                                 }|                     |                    |j                  d           |                     d          }|                     |                    |j                  d           d S )Nrl  rs  r  )r  r<   r1   r  r  r|  s      r   test_get_pointee_abi_sizez(TestTargetData.test_get_pointee_abi_size=  s    yy{{00;;Q???yy''00;;R@@@@@r/   c                    |                                  }|                     d          }|                     t                    5  |                    |j        d           d d d            n# 1 swxY w Y   |j        j        }|                     |                    |d          d           |                     |                    |d          d           d S )Nrs  r   rX   r  )r  r<   r   r'  get_element_offsetr  r3  r1   )r-   r  r<   struct_types       r   test_get_struct_element_offsetz-TestTargetData.test_get_struct_element_offsetF  s   yy''z** 	0 	0!!$)Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 i,..{A>>BBB..{A>>BBBBBs   A,,A03A0N)rH   rI   rJ   r  r}  r  r  rL   r/   r   rx  rx  3  s[        P P P8 8 8
A A A	C 	C 	C 	C 	Cr/   rx  c                       e Zd Zd Zd ZdS )TestTargetMachinec                     |                      d          }t          j                    }|                    |           d S )NFrA   )rG   r$   create_module_pass_manageradd_analysis_passes)r-   tmpms      r   test_add_analysis_passesz*TestTargetMachine.test_add_analysis_passesT  s@      U ++,..
r"""""r/   c                    |                      d          }|j        }|                                 }|                    d          }t          j        dk     rdnd}|                     |                    |j                  |           d S )NFrA   r<   r  rl  r  )	rG   r  r;   r>   r   r  r1   r  r  )r-   r  r  r:   r  r  s         r   test_target_data_from_tmz*TestTargetMachine.test_target_data_from_tmY  s~      U ++^kkmm((00K'11qqq55|DDDDDr/   N)rH   rI   rJ   r  r  rL   r/   r   r  r  R  s7        # # #
E E E E Er/   r  c                   P    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S )TestPassManagerBuilderc                 (    t          j                    S r#   )r$   PassManagerBuilderr,   s    r   pmbzTestPassManagerBuilder.pmbe  s    &(((r/   c                 H    t          j                    }d|_        d|_        d S )NrY   r[  )r$   create_pass_manager_builderinlining_threshold	opt_levelr-   r  s     r   test_old_apiz#TestPassManagerBuilder.test_old_apih  s#    .00!"r/   c                 ~    |                                  }|                                 |                                 d S r#   )r  rB  r  s     r   rF  z!TestPassManagerBuilder.test_closen  s-    hhjj				r/   c                     |                                  }|                     |j        t                     t	          d          D ]$}||_        |                     |j        |           %d S rE  )r  r   r  intr)  r1   r-   r  is      r   test_opt_levelz%TestPassManagerBuilder.test_opt_levels  sh    hhjjcmS111q 	/ 	/ACMS]A....	/ 	/r/   c                     |                                  }|                     |j        t                     t	          d          D ]$}||_        |                     |j        |           %d S rE  )r  r   
size_levelr  r)  r1   r  s      r   test_size_levelz&TestPassManagerBuilder.test_size_levelz  sh    hhjjcnc222q 	0 	0ACNS^Q////	0 	0r/   c                     |                                  }|                     t                    5  |j         d d d            n# 1 swxY w Y   dD ]	}||_        
d S )N)   P   i^  )r  r   NotImplementedErrorr  r  s      r   test_inlining_thresholdz.TestPassManagerBuilder.test_inlining_threshold  s    hhjj233 	# 	#""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	' 	'A%&C""	' 	's   AA
Ac                     |                                  }|                     |j        t                     dD ]$}||_        |                     |j        |           %d S N)TF)r  r   disable_unroll_loopsr  r1   r-   r  r   s      r   test_disable_unroll_loopsz0TestPassManagerBuilder.test_disable_unroll_loops  se    hhjjc6=== 	: 	:A'(C$S5q9999	: 	:r/   c                     |                                  }|                     |j        t                     dD ]$}||_        |                     |j        |           %d S r  )r  r   loop_vectorizer  r1   r  s      r   test_loop_vectorizez*TestPassManagerBuilder.test_loop_vectorize  se    hhjjc0$777 	4 	4A!"CS/3333	4 	4r/   c                     |                                  }|                     |j        t                     dD ]$}||_        |                     |j        |           %d S r  )r  r   slp_vectorizer  r1   r  s      r   test_slp_vectorizez)TestPassManagerBuilder.test_slp_vectorize  se    hhjjc/666 	3 	3A !CS.2222	3 	3r/   c                     |                                  }t          j                    }|                    |           |                                 |                                 d S r#   )r  r$   r  populaterB  )r-   r  r  s      r   !test_populate_module_pass_managerz8TestPassManagerBuilder.test_populate_module_pass_manager  sM    hhjj,..R		





r/   c                     |                                  }|                                 }t          j        |          }|                    |           |                                 |                                 d S r#   )r;   r  r$   create_function_pass_managerr  rB  )r-   r:   r  r  s       r   #test_populate_function_pass_managerz:TestPassManagerBuilder.test_populate_function_pass_manager  s\    kkmmhhjj.s33R		





r/   N)rH   rI   rJ   r  r  rF  r  r  r  r  r  r  r  r  rL   r/   r   r  r  c  s        ) ) )    
/ / /0 0 0' ' ': : :4 4 43 3 3      r/   r  c                       e Zd Zd Zd ZdS )PassManagerTestMixinc                 H    t          j                    }d|_        d|_        |S )NrY   i,  )r$   r  r  r  r  s     r   r  zPassManagerTestMixin.pmb  s$    .00!$
r/   c                 ~    |                                  }|                                 |                                 d S r#   )r  rB  r-   r  s     r   rF  zPassManagerTestMixin.test_close  s-    WWYY









r/   N)rH   rI   rJ   r  rF  rL   r/   r   r  r    s2              r/   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestModulePassManagerc                 (    t          j                    S r#   r$   r  r,   s    r   r  zTestModulePassManager.pm      .000r/   c                    |                                  }|                                                     |           |                                 }t	          |          }|                    |           t	          |          }|                                }t          |          D ]\  }}|                                	                    d          reddh}|D ]}	|	|v r n	t          d          ||	hz                                  }
|                     d|           |                     |
|            d S t          d          )Nzret i32z%.3%.4zexpected tokens not foundzexpected IR not found)r  r  r  r;   r   runrr   	enumerater   r{   r   popr   assertNotIn)r-   r  r:   orig_asmopt_asmopt_asm_splitidxltoksrq  
othertokens              r   test_runzTestModulePassManager.test_run  sE   WWYY

Bkkmms88
sc((  **,,.. 	8 	8FCwwyy##I.. u~ D DAAvv  ''BCCC"aSj--//
eX...  W555 6777r/   c                    |                                  }|                    d           |                                                     |           |                     t
                    }|                    |          \  }}|                     |           |                     d|           |                     d|           d S )NF   Passedinlineme	r  add_function_inlining_passr  r  r;   asm_inlineasm2run_with_remarksr   r   r-   r  r:   statusremarkss        r   'test_run_with_remarks_successful_inlinez=TestModulePassManager.test_run_with_remarks_successful_inline  s    WWYY
%%b)))

Bkk.))//44h(((j'*****r/   c                    |                                  }|                    d           |                                                     |           |                     t
                    }|                    |          \  }}|                     |           |                     d|           |                     d|           |                     d|           d S )Nr   Missedr  znoinline function attribute)	r  r  r  r  r;   asm_inlineasm3r  r   r   r  s        r   #test_run_with_remarks_failed_inlinez9TestModulePassManager.test_run_with_remarks_failed_inline  s    WWYY
%%a(((

Bkk.))//44 	h(((j'***3W=====r/   c                 d   |                                  }|                    d           |                                                     |           |                     t
                    }|                    |d          \  }}|                     |           |                     d|           d S )Nr  nothingremarks_filterr   )	r  r  r  r  r;   r  r  r   r1   r  s        r   'test_run_with_remarks_inline_filter_outz=TestModulePassManager.test_run_with_remarks_inline_filter_out  s    WWYY
%%b)))

Bkk.))//I/NNW%%%%%r/   c                    |                                  }|                    d           |                                                     |           |                     t
                    }|                    |d          \  }}|                     |           |                     d|           |                     d|           d S )Nr  zinlin.*r  r  r  r  r  s        r   &test_run_with_remarks_inline_filter_inz<TestModulePassManager.test_run_with_remarks_inline_filter_in  s    WWYY
%%b)))

Bkk.))//I/NNh(((j'*****r/   N)	rH   rI   rJ   r  r  r  r  r  r  rL   r/   r   r  r    sn        1 1 18 8 8<	+ 	+ 	+> > >& & &+ + + + +r/   r  c                   4    e Zd ZddZd Zd Zd Zd Zd ZdS )	TestFunctionPassManagerNc                 V    |p|                                  }t          j        |          S r#   )r;   r$   r  rE  s     r   r  zTestFunctionPassManager.pm  s%    "T[[]]0555r/   c                 ~    |                                  }|                                 |                                 d S r#   )r  r%   finalizer  s     r   r  z%TestFunctionPassManager.test_initfini  s-    WWYY

r/   c                    |                                  }|                    d          }|                     |          }|                                                     |           |                                 t          |          }|                                 |                    |           |	                                 t          |          }| 
                    d|           |                     d|           d S )NrX  r  )r;   rY  r  r  r  rB  r   r%   r  r  r   r  )r-   r:   r   r  r  r  s         r   r  z TestFunctionPassManager.test_run  s    kkmme$$WWS\\

B		r77

r



b''eX&&&(((((r/   c                 .   |                      t                    }|                    d          }|                     |          }|                                 |                                                     |           |                                 |                                 |	                    |          \  }}|
                                 |                     |           |                     d|           |                     d|           d S )Nlicmr  r;   licm_asmrY  r  add_licm_passr  r  rB  r%   r  r  r   r   r-   r:   r   r  okr  s         r   test_run_with_remarksz-TestFunctionPassManager.test_run_with_remarks$  s    kk(##f%%WWS\\


B		
++B//W
h(((fg&&&&&r/   c                    |                      t                    }|                    d          }|                     |          }|                                 |                                                     |           |                                 |                                 |	                    |d          \  }}|
                                 |                     |           |                     d|           d S )Nr  r  r  r   )r;   r  rY  r  r  r  r  rB  r%   r  r  r   r1   r  s         r    test_run_with_remarks_filter_outz8TestFunctionPassManager.test_run_with_remarks_filter_out3  s    kk(##f%%WWS\\


B		
++By+IIW
W%%%%%r/   c                 2   |                      t                    }|                    d          }|                     |          }|                                 |                                                     |           |                                 |                                 |	                    |d          \  }}|
                                 |                     |           |                     d|           |                     d|           d S )Nr  r  r  r  r  s         r   test_run_with_remarks_filter_inz7TestFunctionPassManager.test_run_with_remarks_filter_inA  s    kk(##f%%WWS\\


B		
++Bv+FFW
h(((fg&&&&&r/   r#   )	rH   rI   rJ   r  r  r  r  r  r  rL   r/   r   r  r  
  ss        6 6 6 6  
) ) )' ' '& & &' ' ' ' 'r/   r  c                       e Zd Zd Zd ZdS )
TestPassesc                 (    t          j                    S r#   r  r,   s    r   r  zTestPasses.pmS  r  r/   c                 
   |                                  }|                                 |                                 |                                 |                    d           |                                 |                                 |                                 |                                 |	                                 |
                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                    d           |                                 |                                 |                                 |                                 |                                 |                    d           |                                 |                                 |                                  |!                                 |"                                 |#                                 |$                                 |%                                 |&                                 |'                                 |(                                 |)                                 |*                                 |+                                 |,                                 |-                                 |.                                 |/                                 |0                                 |1                                 |2                                 |3                                 |4                                 |5                                 |6                                 |7                                 |8                                 |9                                 |:                                 |;                                 |<                                 |=                                 |>                                 |?                                 |@                                 |A                                 |B                                 |C                                 d S )N   *      )Dr  add_constant_merge_passadd_dead_arg_elimination_passadd_function_attrs_passr  add_global_dce_passadd_global_optimizer_passadd_ipsccp_passadd_dead_code_elimination_passadd_cfg_simplification_passadd_gvn_passadd_instruction_combining_passr  add_sccp_passadd_sroa_pass"add_type_based_alias_analysis_passadd_basic_alias_analysis_passadd_loop_rotate_passadd_region_info_passadd_scalar_evolution_aa_pass)add_aggressive_dead_code_elimination_passadd_aa_eval_passadd_always_inliner_passadd_arg_promotion_passadd_break_critical_edges_passadd_dead_store_elimination_pass*add_reverse_post_order_function_attrs_pass)add_aggressive_instruction_combining_passadd_internalize_passadd_jump_threading_passadd_lcssa_passadd_loop_deletion_passadd_loop_extractor_passadd_single_loop_extractor_passadd_loop_strength_reduce_passadd_loop_simplification_passadd_loop_unroll_passadd_loop_unroll_and_jam_passadd_loop_unswitch_passadd_lower_atomic_passadd_lower_invoke_passadd_lower_switch_passadd_memcpy_optimization_passadd_merge_functions_passadd_merge_returns_passadd_partial_inlining_pass!add_prune_exception_handling_pass add_reassociate_expressions_pass"add_demote_register_to_memory_passadd_sink_passadd_strip_symbols_passadd_strip_dead_debug_info_passadd_strip_dead_prototypes_passadd_strip_debug_declare_passadd_strip_nondebug_symbols_passadd_tail_call_elimination_passadd_basic_aa_passadd_dependence_analysis_passadd_dot_call_graph_passadd_dot_cfg_printer_passadd_dot_dom_printer_passadd_dot_postdom_printer_passadd_globals_mod_ref_aa_passadd_iv_users_passadd_lazy_value_info_passadd_lint_passadd_module_debug_info_passadd_refprune_passr  s     r   test_populatezTestPasses.test_populateV  s   WWYY
""$$$
((***
""$$$
%%c***
   
$$&&&

))+++
&&(((

))+++



--///
((***
!!!
!!!
'')))
44666

""$$$
!!"%%%
((***
**,,,
55777
44666
!!!
""1%%%

!!###
""$$$
))+++
((***
'')))
!!!
'')))
!!###
  """
  """
  """
'')))
##%%%
!!###
$$&&&
,,...
++---
--///

!!###
))+++
))+++
'')))
**,,,
))+++

'')))
""$$$
##%%%
##%%%
'')))
&&(((

##%%%

%%'''
r/   N)rH   rI   rJ   r  rA  rL   r/   r   r  r  Q  s7        1 1 1D D D D Dr/   r  c                   f    e Zd Zd Z ej         ej                    dv d          d             ZdS )	TestDylibc                     |                      t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nzzzzasdkf;jasd;l)r   r   r$   load_library_permanentlyr,   s    r   test_bad_libraryzTestDylib.test_bad_library  s    |,, 	= 	=)*;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   =AA)Linuxztest only works on Linuxc                 L    t          d          }t          j        |           d S )Nr   )r   r$   rE  )r-   r_   s     r   	test_libmzTestDylib.test_libm  s(     C  %d+++++r/   N)	rH   rI   rJ   rF  r   r   ry   systemrI  rL   r/   r   rC  rC    sd        = = = X**i735 5, ,5 5, , ,r/   rC  c                        e Zd Zd Zd Zd ZdS )TestAnalysisc                    t          j                    }t          j        t          j        d          t          j        d          t          j        d          g          }t          j        ||d          }t          j        |                                          }|j        \  }}|                    ||          }|	                    |           |S )Nr   r   )
r   r   r   r   r   r   r   r   rw   r   )r-   r   r   r   r   xyzs           r   build_ir_modulezTestAnalysis.build_ir_module  s    IKK_RZ^^bjnnbjnn-MNN[B&&\"//1122w1FF1aLL
q			r/   c                    |                                  }|                    d          }t          j        |          }t          j        |d          }d}|                     ||           |                     ||           d S )Nr   F	show_instz%.5 = add i32 %.1, %.2)rQ  
get_globalr$   get_function_cfgr   r  )r-   r:   r   dot_showing_instdot_without_instinsts         r   test_get_function_cfg_on_irz(TestAnalysis.test_get_function_cfg_on_ir  s    ""$$nnU##0550FFF'd,---/00000r/   c                    |                                                      d          }t          j        |d          }t          j        |d          }d}|                     ||           |                     ||           d}|                     ||           |                     ||           d}|                     ||           |                     ||           d S )NrX  TrS  FdigraphzCFG for 'sum' functionz%.3 = add i32 %.1, %.2)r;   rY  r$   rV  r   r  )r-   rA  rW  rX  prefixfnamerY  s          r   test_function_cfg_on_llvm_valuez,TestAnalysis.test_function_cfg_on_llvm_value  s    ++--,,U330DIII0EJJJf.///f.///(e-...e-...'d,---/00000r/   N)rH   rI   rJ   rQ  rZ  r_  rL   r/   r   rL  rL    sA          1 1 11 1 1 1 1r/   rL  c                   *    e Zd Zed             Zd ZdS )TestTypeParsingc              #   ~   K   t          j                    }|V  t          |          }t          j        |           d S r#   )r   r   r   r$   r7   )r-   r:   r8   s      r   check_parsingzTestTypeParsing.check_parsing  s>      ikk 			#hhC     r/   c                    |                                  5 }t          j        t          j        d          g          }t          j        ||d          }t          j        |dg          |_        d d d            n# 1 swxY w Y   |                                  5 }t          j        t          j        d          gd          }t          j        ||d          }t          j        |dg          |_        d d d            d S # 1 swxY w Y   d S )Nr   r   rX   T)packed)rc  r   LiteralStructTyper   GlobalVariabler   initializer)r-   r:   typre  s       r   test_literal_structz#TestTypeParsing.test_literal_struct  so   !! 	3S&
2'788C"3U33B[qc22BN		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 !! 	3S&
2'7.24 4 4C"3U33B[qc22BN	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s%   AA::A>A>ADDDN)rH   rI   rJ   r   rc  rj  rL   r/   r   ra  ra    s<        ! ! ^!3 3 3 3 3r/   ra  c                       e Zd Zd ZdS )TestGlobalConstructorsc                    |                      t                    }|                     |          }|                                 |                                 |                    d          }t          j        t          j                  }t          j	        ||          }| 
                    |j        j        d           |                    d          } t          j        t          j                  |          }| 
                     |            d           |                                 | 
                    |j        j        d           d S )NAr'  r   r$     )r;   asm_global_ctorsrB   r  run_static_constructorsget_global_value_addressrC  POINTERc_int32castr1   contentsri  r  r   run_static_destructors)r-   r:   r  ptr_addrptr_tptrfoo_addrr   s           r   test_global_ctors_dtorsz.TestGlobalConstructors.test_global_ctors_dtors  s    kk*++XXc]]

""$$$ ..s33v~..k(E**+R000**511.fv~..x88###
!!### 	+R00000r/   N)rH   rI   rJ   r|  rL   r/   r   rl  rl    s#        1 1 1 1 1r/   rl  c                   X    e Zd Zd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S )TestGlobalVariablesTc                 4   t          j                    }t          j        d          }t          j        ||d          }||_        t          |          }|r|                     d|           n|                     d|           |                     |           d S )Nr   r   undef)	r   r   r   rg  r  r   r   r  r;   )r-   r  	has_undefr:   ri  re  r8   s          r   check_global_variable_linkagez1TestGlobalVariables.check_global_variable_linkage  s     ikkjnnsC//
#hh 	+MM'3''''Wc***Cr/   c                 0    |                      d           d S )Nr  r  r,   s    r   test_internal_linkagez)TestGlobalVariables.test_internal_linkage      **:66666r/   c                 0    |                      d           d S )Ncommonr  r,   s    r   test_common_linkagez'TestGlobalVariables.test_common_linkage  s    **844444r/   c                 4    |                      dd           d S )Nr  Fr  r  r,   s    r   test_external_linkagez)TestGlobalVariables.test_external_linkage!  s!    **:*GGGGGr/   c                 0    |                      d           d S )Navailable_externallyr  r,   s    r   !test_available_externally_linkagez5TestGlobalVariables.test_available_externally_linkage$  s    **+ABBBBBr/   c                 0    |                      d           d S )Nprivater  r,   s    r   test_private_linkagez(TestGlobalVariables.test_private_linkage'  s    **955555r/   c                 0    |                      d           d S )Nlinkoncer  r,   s    r   test_linkonce_linkagez)TestGlobalVariables.test_linkonce_linkage*  r  r/   c                 0    |                      d           d S )Nweakr  r,   s    r   test_weak_linkagez%TestGlobalVariables.test_weak_linkage-  s    **622222r/   c                 0    |                      d           d S )N	appendingr  r,   s    r   test_appending_linkagez*TestGlobalVariables.test_appending_linkage0  s    **;77777r/   c                 4    |                      dd           d S )Nextern_weakFr  r  r,   s    r   test_extern_weak_linkagez,TestGlobalVariables.test_extern_weak_linkage3  s!    **=E*JJJJJr/   c                 0    |                      d           d S )Nlinkonce_odrr  r,   s    r   test_linkonce_odr_linkagez-TestGlobalVariables.test_linkonce_odr_linkage6  s    **>:::::r/   c                 0    |                      d           d S )Nweak_odrr  r,   s    r   test_weak_odr_linkagez)TestGlobalVariables.test_weak_odr_linkage9  r  r/   N)T)rH   rI   rJ   r  r  r  r  r  r  r  r  r  r  r  r  rL   r/   r   r~  r~    s           (7 7 75 5 5H H HC C C6 6 67 7 73 3 38 8 8K K K; ; ;7 7 7 7 7r/   r~  x86zonly on x86c                       e Zd Zd ZdS )TestInlineAsmc                     t          j                     |                     t                    }|                     d          }|                    |          }|                     d|           d S )N)r8   FrA   nop)r$   initialize_native_asmparserr;   asm_inlineasmrG   r   r   )r-   r   r  r8   s       r   test_inlineasmzTestInlineAsm.test_inlineasm?  sg    (***KKMK**  U ++q!!eS!!!!!r/   N)rH   rI   rJ   r  rL   r/   r   r  r  =  s#        " " " " "r/   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestObjectFilea,  
        ;ModuleID = <string>
        target triple = "{triple}"

        declare i32 @sum(i32 %.1, i32 %.2)

        define i32 @sum_twice(i32 %.1, i32 %.2) {{
            %.3 = call i32 @sum(i32 %.1, i32 %.2)
            %.4 = call i32 @sum(i32 %.3, i32 %.3)
            ret i32 %.4
        }}
    c                 6   |                      d          }|                                 }|                    |          }t          j                            |          }d}d}|                                D ]}|                                rd}|                     |	                                           | 
                    |                                dk               | 
                    t          |                                          dk               |                     |                                           | 
                    ||                                k                |                                } n| 
                    |           d S )NFrA   Tr   )rG   r;   r  r$   ObjectFileRef	from_datasectionsis_textr  r?   r   sizeru   dataaddress)r-   rG   r:   obj_binobjhas_textlast_addressr   s           r   test_object_filezTestObjectFile.test_object_fileV  sO   ,,,77kkmm ,,S11 **733 		 		Ayy{{ $$QVVXX...1---AFFHH 1222$$QYY[[111qyy{{ :;;; yy{{ 	!!!!!r/   c                    |                      d          }|                                 }|                    |          }t          j                            |          }t          j        |                     | j                  |          }|                    |            t          t          t          t                    |                    d                    }|                      |dd          d           d S )NFrA   	sum_twicerY   r[  r'  )rG   r;   r  r$   r  r  r
  mod_asmadd_object_filer   r   r  r1   )r-   rG   r:   r  r  rB   r  s          r   test_add_object_filez#TestObjectFile.test_add_object_filej  s    ,,,77kkmm ,,S11 **733(T\)B)B)79 9 	C   2IeUE22$$[113 3	 	1a"-----r/   c                    |                      d          }|                                 }|                    |          }t                      \  }}	 	 t	          j        |d          }|                    |           |                                 |                                 n# |                                 w xY wt          j
        |                     | j                  |          }|                    |           t	          j        |           n# t	          j        |           w xY w t          t          t          t                    |                    d                    }|                      |dd          d           d S )NFrA   wbr  rY   r[  r'  )rG   r;   r  r   rf   fdopenwriteflushrB  r$   r
  r  r  unlinkr   r   r  r1   )	r-   rG   r:   r  	temp_desc	temp_pathr  rB   r  s	            r   $test_add_object_file_from_filesystemz3TestObjectFile.test_add_object_file_from_filesystemz  s[   ,,,77kkmm ,,S11&yy	9	!Ii..   											,T[[-F-F-;= =C 	***Ii    BIi    2IeUE22$$[113 3	 	1a"-----s   >B& D &B<<AD D,c                    t                               t                    }t          j                            |          }|                                D ]}|                                rt|                     t          |
                                          d           |                     |
                                                                t                     d S )N   )r  fromhexissue_632_elfr$   r  r  r  r  r1   ru   r  hexissue_632_text)r-   elfr  r   s       r   test_get_section_contentz'TestObjectFile.test_get_section_content  s     mmM** **3// 	A 	AAyy{{ A  QVVXX333  @@@	A 	Ar/   N)rH   rI   rJ   r  r  r  r  r  rL   r/   r   r  r  G  s\        G" " "(. . . . . .4A A A A Ar/   r  c                       e Zd Zd Zd ZdS )TestTimePassesc                    t          j                    }t          j                    }d|_        |                    |           	 t          j        d           |                    |                                            |                    |                                            |                    |                                            t          j                    }t          j        d           n,# t          j                    }t          j        d           w xY w| 	                    |t                     |                     |                    d          d           d S )Nr[  TFzPass execution timing reportrX   )r$   r  r  r  r  set_time_passesr  r;   report_and_reset_timingsr   r   r1   count)r-   mpr  reports       r   test_reportingzTestTimePasses.test_reporting  s$   ,...00R	( &&&FF4;;==!!!FF4;;==!!!FF4;;==!!!244F '''' 244F ''''fc***&DEEqIIIIIs   B	C5 5)Dc                 R    |                      t          j                               d S r#   )r  r$   r  r,   s    r   test_empty_reportz TestTimePasses.test_empty_report  s%    68899999r/   N)rH   rI   rJ   r  r  rL   r/   r   r  r    s5        J J J&: : : : :r/   r  c                       e Zd Zd ZdS )TestLLVMLockCallbacksc                    g fd}fd}t           j                            ||           |                                t          j                     |                     d           |                     d           t           j                            ||           |                     t                    5  t           j                            ||           d d d            d S # 1 swxY w Y   d S )Nc                  2                          d           d S )Nacqr  eventss   r   r  z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.acq      MM%     r/   c                  2                          d           d S )Nrelr  r  s   r   r  z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.rel  r  r/   r  r  )	r$   r
   register_lock_callbackr  r  r   unregister_lock_callbackr   r'  )r-   r  r  r  s      @r   test_lock_callbacksz)TestLLVMLockCallbacks.test_lock_callbacks  sM   	! 	! 	! 	! 	!	! 	! 	! 	! 	! 	''S111 	   ')))eV$$$eV$$$ 	))#s333 z** 	8 	8H--c3777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   <!C**C.1C.N)rH   rI   rJ   r  rL   r/   r   r  r    s#        8 8 8 8 8r/   r  __main__)NrC  r   r   ctypes.utilr   r(   r   rf   ry   rn   ri   r   r   
contextlibr   tempfiler   llvmliter   r	   r$   llvmlite.bindingr
   llvmlite.testsr   machinerE  r   rK   r  r  r   rU  r?  r3  r  r  r  r  rp  r   r   r   r   re  r  r  r!   rN   r   r   r=  objectr  r  r  r  rj  rx  r  r  r  r  r  r  rC  rL  ra  rl  r~  r   r{   r  r  r  r  rH   mainrL   r/   r   <module>r     s    # # # # # # # # $ $ $ $ $ $ 				  				  				     



  % % % % % %             $ $ $ $ $ $             # # # # # # 8!!!D!/222	- 	- 	-$	  ,BH&P <	          6- ( E 5 5 5 5 5x 5 5 5D'J 'J 'J 'J 'Jx 'J 'J 'JTF+ F+ F+ F+ F+8 F+ F+ F+RI' I' I' I' I'x I' I' I'XD> D> D> D> D>H D> D> D>Nv- v- v- v- v-6 v- v- v-r4 4 4 4 4 4 4 44? ? ? ? ?, ? ? ?? ? ? ? ?8 ? ? ?D%- %- %- %- %- %- %- %-PC C C C CX C C C>E E E E E E E E"G G G G GX G G GT    6   L+ L+ L+ L+ L+H&: L+ L+ L+^D' D' D' D' D'h(< D' D' D'NI I I I I/ I I IX
, 
, 
, 
, 
, 
, 
, 
,#1 #1 #1 #1 #18 #1 #1 #1L3 3 3 3 3h 3 3 381 1 1 1 1Y 1 1 1447 47 47 47 47( 47 47 47n %X%''22599=II" " " " "H " " JI"UA UA UA UA UAX UA UA UAp: : : : :X : : :28 8 8 8 8H 8 8 8: zHMOOOOO r/   