o
    ài»; ã                   @   s`  d dl Z d dlZd dl mZ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
 ¡ d
krge d¡ dd„ ZdZdZdZ dZ!dZ"dZ#e
 $¡ dkrƒe# %dd¡Z#dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.d Z/d!Z0d"Z1d#Z2g d$¢Z3g d%¢Z4g d&¢Z5d'Z6d(Z7d)Z8d*Z9G d+d,„ d,eƒZ:G d-d.„ d.e:ƒZ;G d/d0„ d0e:ƒZ<G d1d2„ d2e:ƒZ=G d3d4„ d4e:ƒZ>G d5d6„ d6e?ƒZ@G d7d8„ d8e@ƒZAG d9d:„ d:e:eAƒZBe Ce
 ¡  Dd;¡d<¡G d=d>„ d>e:ƒƒZEG d?d@„ d@e:ƒZFG dAdB„ dBe:ƒZGG dCdD„ dDe:ƒZHG dEdF„ dFe:ƒZIG dGdH„ dHe:ƒZJG dIdJ„ dJe?ƒZKG dKdL„ dLe:eKƒZLG dMdN„ dNe:eKƒZMG dOdP„ dPe:eKƒZNG dQdR„ dRe:ƒZOG dSdT„ dTe:ƒZPG dUdV„ dVe:ƒZQG dWdX„ dXeBƒZRG dYdZ„ dZe:ƒZSe Ce
 ¡  Dd;¡d[¡G d\d]„ d]e:ƒƒZTG d^d_„ d_e:ƒZUG d`da„ dae:ƒZVG dbdc„ dce:ƒZWeXddkr®e Y¡  dS dS )eé    N)Ú	CFUNCTYPEÚc_intÚc_int32)Úfind_library)Úcontextmanager)Úmkstemp)Úir)Úbinding)Úffi)ÚTestCaseÚarmv7lzlibgcc_s.so.1c               
   C   sl   t  t j¡} z'z	t  t jd¡ W n t jy#   Y W t  t j| ¡ dS w W t  t j| ¡ dS t  t j| ¡ w )NÚde_DETF)ÚlocaleÚ	setlocaleÚLC_ALLÚError)Úcur© r   új/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/llvmlite/tests/test_binding.pyÚno_de_locale   s   û"r   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}"

    define i64 @sum(i64 %.1, i64 %.2) {{
      %.3 = add i64 %.1, %.2
      %.4 = add i64 5, %.3
      %.5 = add i64 -5, %.4
      ret i64 %.5
    }}
    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
    }}
    a  
    ; ModuleID = '<string>'
    target triple = "{triple}"
    @mul_glob = global i32 0

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

    declare i8* @Py_GetVersion()

    define void @getversion(i32 %.1, i32 %.2) {{
      %1 = call i8* @Py_GetVersion()
      ret void
    }}
    ÚPyPyZPy_GetVersionZPyPy_GetVersionz¡
    ; 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 fp128 0xLF3CB1CCF26FBC178452FB4EC7F91DEAD, 0xL00000000000000000000000000000001
      ret void
    }}
    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}}]
    aƒ  
    ; ModuleID = "<string>"
    target triple = "{triple}"

    @A = external global i32

    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
}
zÆ
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @foo(i64* %.1) {{
      ret void
    }}

    define void @bar() {{
      call void @foo(i64* null)
      ret void
    }}
)ú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*)
A@  7f454c4602010100000000000000000001003e000100000000000000000000000000000000000000e0000000000000000000000040000000000040000500010048c1e2204809c24889d048c1c03d4831d048b90120000480001070480fafc8000000000000000000000000000000000000000000000000002f0000000400f1ff00000000000000000000000000000000070000001200020000000000000000001f00000000000000002e74657874005f5f617279626f002e6e6f74652e474e552d737461636b002e737472746162002e73796d746162003c737472696e673e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f0000000300000000000000000000000000000000000000a800000000000000380000000000000000000000000000000100000000000000000000000000000001000000010000000600000000000000000000000000000040000000000000001f000000000000000000000000000000100000000000000000000000000000000f00000001000000000000000000000000000000000000005f00000000000000000000000000000000000000000000000100000000000000000000000000000027000000020000000000000000000000000000000000000060000000000000004800000000000000010000000200000008000000000000001800000000000000Z>48c1e2204809c24889d048c1c03d4831d048b90120000480001070480fafc8ay  
; ModuleID = '<lambda>'
source_filename = "<string>"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"

declare float @llvm.exp2.f32(float %casted)

define float @foo(i16 %arg) {
entry:
  %casted = sitofp i16 %arg to float
  %ret = call float @llvm.exp2.f32(float %casted)
  ret float %ret
}
c                   @   s<   e Zd Zdd„ Zdd„ Zedfdd„Zdd	d
„Zdd„ ZdS )ÚBaseTestc                 C   sB   t  ¡  t  ¡  t  ¡  t ¡  tjd d … | _g tjd d …< d S ©N)ÚllvmÚ
initializeZinitialize_native_targetZinitialize_native_asmprinterÚgcÚcollectÚgarbageÚold_garbage©Úselfr   r   r   ÚsetUpô  s   zBaseTest.setUpc                 C   s   t  ¡  |  t jg ¡ | `d S r    )r#   r$   ÚassertEqualr%   r&   r'   r   r   r   ÚtearDownü  s   zBaseTest.tearDownNc                 C   s    |j t ¡ d}t ||¡}|S )N©Útriple)Úformatr!   Úget_default_tripleÚparse_assembly)r(   ÚasmÚcontextÚmodr   r   r   Úmodule  s   zBaseTest.moduleÚglobc                 C   s   |d u r|   ¡ }| |¡S r    )r4   Úget_global_variable)r(   Únamer3   r   r   r   r5   
  s   
zBaseTest.globc                C   s   t j ¡ }|j|dS )N©Újit)r!   ÚTargetÚfrom_default_tripleÚcreate_target_machine)r(   r9   Útargetr   r   r   Útarget_machine  s   
zBaseTest.target_machine)r5   N)	Ú__name__Ú
__module__Ú__qualname__r)   r+   Úasm_sumr4   r5   r>   r   r   r   r   r   ò  s    	
r   c                   @   s@   e Zd ZdZe ej d¡d¡e e	j
 d¡d¡dd„ ƒƒZdS )	ÚTestDependencieszB
    Test DLL dependencies are within a certain expected set.
    ÚlinuxzLinux-specific testZLLVMLITE_DIST_TESTzDistribution-specific testc                 C   s<  t jj}tj ¡ }d|d< tjdd|gtj|d}| 	¡ \}}|  
d|j¡ t d¡}tƒ }| ¡  ¡ D ]/}| ¡ }	|	rc|	d dkrc|	d	 }
| |
¡}t|	ƒd
ksS|s[|  d|f ¡ | | d	¡¡ q4d|vsld|vrt|  d|f ¡ tg d¢ƒ}t ¡ dkr…| d¡ |D ]}
|
 d¡s›|
|vr›|  d|
|f ¡ q‡d S )NÚCÚLANGÚobjdumpz-p)ÚstdoutÚenvr   z$^([-_a-zA-Z0-9]+)\.so(?:\.\d+){0,3}$ZNEEDEDé   é   zinvalid NEEDED line: %rÚlibcÚ
libpthreadz#failed parsing dependencies? got %r)	ZlibrtZlibdlrM   ZlibzÚlibmZlibgcc_srL   zld-linuxZld64r   Zlibtinfoz	ld-linux-zunexpected dependency %r in %r)r
   ÚlibÚ_nameÚosÚenvironÚcopyÚ
subprocessÚPopenÚPIPEÚcommunicater*   Ú
returncodeÚreÚcompileÚsetÚdecodeÚ
splitlinesÚsplitÚmatchÚlenZfailÚaddÚgroupÚplatformÚpython_implementationÚ
startswith)r(   Zlib_pathrI   ÚpÚoutÚ_Zlib_patÚdepsÚlineÚpartsÚdepÚmÚallowedr   r   r   Ú
test_linux  s:   
ÿ

€
€þzTestDependencies.test_linuxN)r?   r@   rA   Ú__doc__ÚunittestÚ
skipUnlessÚsysrc   re   rQ   rR   Úgetro   r   r   r   r   rC     s    ÿÿrC   c                       s\   e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )ÚTestRISCVABIz`
    Test calling convention of floating point arguments of RISC-V
    using different ABI.
    zriscv32-unknown-linuxc                    s   t ƒ  ¡  t ¡  t ¡  d S r    )Úsuperr)   r!   Zinitialize_all_targetsZinitialize_all_asmprintersr'   ©Ú	__class__r   r   r)   E  s   
zTestRISCVABI.setUpc              
   C   sX   z
t j | j¡ W d S  ty+ } zdt|ƒv r|  d¡ n|‚W Y d }~d S d }~ww )Nz/No available targets are compatible with triplez(RISCV target unsupported by linked LLVM.)r!   r:   Úfrom_tripler-   ÚRuntimeErrorÚstrZskipTest)r(   Úer   r   r   Úcheck_riscv_targetJ  s   þ€þzTestRISCVABI.check_riscv_targetc                 K   s   t j | j¡}|jdi |¤ŽS )Nr   )r!   r:   ry   r-   r<   )r(   ÚkwargZlltargetr   r   r   Úriscv_target_machineS  s   z!TestRISCVABI.riscv_target_machinec                 C   s   t  ¡ }t  ¡ }t  |||f¡}t  ¡ }t j||dd}| ¡ }t  |¡}|j\}}	| 	||¡}
| 
|
|	¡}| |¡ t t|ƒ¡}| ¡  |S )NÚfpadd©r7   )r   Z
DoubleTypeZ	FloatTypeÚFunctionTypeÚModuleÚFunctionÚappend_basic_blockÚ	IRBuilderÚargsZfpextÚfaddr   r!   r0   r{   Úverify)r(   Zf64Zf32Zfntyr4   ÚfuncÚblockÚbuilderÚaÚbZarg0ÚresultÚllmodr   r   r   Úfpadd_ll_moduleW  s   


zTestRISCVABI.fpadd_ll_modulec                 C   sD   g }|  ¡ D ]}| ¡ }| d¡s| d¡s|dks| |¡ q|S )NÚ.r€   Ú )r]   Ústripre   Úappend)r(   r1   Zasm_listrj   Zs_liner   r   r   Úbreak_up_asmh  s   
€zTestRISCVABI.break_up_asmc                 C   s8   |   ¡  |  ¡ }| jdd}|  |  | |¡¡t¡ d S )Nú+f,+d)Úfeatures)r}   r‘   r   r*   r–   Úemit_assemblyÚriscv_asm_ilp32©r(   r   r=   r   r   r   Útest_rv32d_ilp32q  s   ÿzTestRISCVABI.test_rv32d_ilp32c                 C   ó:   |   ¡  |  ¡ }| jddd}|  |  | |¡¡t¡ d S )Nr—   Zilp32f©r˜   Zabiname)r}   r‘   r   r*   r–   r™   Úriscv_asm_ilp32fr›   r   r   r   Útest_rv32d_ilp32fx  ó   ÿzTestRISCVABI.test_rv32d_ilp32fc                 C   r   )Nr—   Zilp32drž   )r}   r‘   r   r*   r–   r™   Úriscv_asm_ilp32dr›   r   r   r   Útest_rv32d_ilp32d  r¡   zTestRISCVABI.test_rv32d_ilp32d)r?   r@   rA   rp   r-   r)   r}   r   r‘   r–   rœ   r    r£   Ú__classcell__r   r   rw   r   ru   >  s    		ru   c                   @   s–   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze eƒ d¡dd„ ƒZdd „ Zd!S )"ÚTestMiscz7
    Test miscellaneous functions in llvm.binding.
    c                 C   s   |   t¡ d S r    )r4   rB   r'   r   r   r   Útest_parse_assemblyŒ  ó   zTestMisc.test_parse_assemblyc                 C   sZ   |   t¡}|  t¡ W d   ƒ n1 sw   Y  t|jƒ}|  d|¡ |  d|¡ d S )Nzparsing errorzinvalid operand type)ÚassertRaisesrz   r4   Úasm_parse_errorr{   Ú	exceptionÚassertIn)r(   ÚcmÚsr   r   r   Útest_parse_assembly_error  s   ÿ
z"TestMisc.test_parse_assembly_errorc                 C   sj   t  ¡ }t  t  d¡g ¡}t  ||d¡}t  |jdd¡}| t  t  d¡d¡¡ t	|ƒ}|  
|t¡ d S )Né    Úfooz<>!*''#r   i90  )r   rƒ   r‚   ÚIntTyper„   r†   r…   r   ÚConstantr{   r*   Úasm_nonalphanum_blocklabel)r(   r3   ÚftÚfnÚbdr1   r   r   r   Útest_nonalphanum_block_name–  s   z$TestMisc.test_nonalphanum_block_namec                 C   s$   t j ¡ }t j ¡ }||ksJ ‚d S r    )r!   r2   Zget_global_context)r(   Z	gcontext1Z	gcontext2r   r   r   Útest_global_contextŸ  s   

zTestMisc.test_global_contextc                 C   sH   t  dd¡ t  dd¡ t  d¡}|  |d¡ t  d¡}|  |d ¡ d S )NÚ__xyzzyéÒ  i.  Ú__foobar)r!   Z
add_symbolZaddress_of_symbolr*   ÚassertIs)r(   Úaddrr   r   r   Útest_dylib_symbols¤  s   

zTestMisc.test_dylib_symbolsc                 C   ó"   t  ¡ }|  |t¡ |  |¡ d S r    )r!   r/   ÚassertIsInstancer{   Ú
assertTrue)r(   r-   r   r   r   Útest_get_default_triple¬  ó   z TestMisc.test_get_default_triplec                 C   sb   dd„ }t  ¡ }t  ¡ }|  |t¡ |  |¡ || d¡d ƒ}|| d¡d ƒ}|  ||¡ d S )Nc                 S   s   | dkrdS | S )NZpowerpc64leÚppc64ler   )Úarchr   r   r   Únormalize_ppc³  s   z7TestMisc.test_get_process_triple.<locals>.normalize_ppcú-r   )r!   Zget_process_tripler/   rÀ   r{   rÁ   r^   r*   )r(   rÆ   r-   ÚdefaultZdefault_archZtriple_archr   r   r   Útest_get_process_triple±  s   
z TestMisc.test_get_process_triplec                 C   sä   t  ¡ }|  |t¡ |  |t j¡ | ¡ D ]\}}|  |t¡ |  |¡ |  |t¡ q|  | 	¡ t¡ d}d 
|¡}|  t |d¡¡ |  t |d¡¡ |  t |d¡¡ t|ƒdkre|  | 	¡ d¡ d S |  t || 	¡ ¡¡ d S )Nz[+\-][a-zA-Z0-9\._-]+z^({0}|{0}(,{0})*)?$r“   z+aaz+a,-bbr   )r!   Zget_host_cpu_featuresrÀ   ÚdictZ
FeatureMapÚitemsr{   rÁ   ÚboolÚflattenr.   ÚassertIsNotNonerY   r_   r`   r*   )r(   r˜   ÚkÚvZre_termÚregexr   r   r   Útest_get_host_cpu_featuresÃ  s    

z#TestMisc.test_get_host_cpu_featuresc                 C   r¿   r    )r!   Úget_host_cpu_namerÀ   r{   rÁ   )r(   Úcpur   r   r   Útest_get_host_cpu_nameÚ  rÃ   zTestMisc.test_get_host_cpu_namec                 C   ó   d}t  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©rT   Ú
check_callrs   Ú
executable©r(   Úcoder   r   r   Útest_initfiniß  s   
zTestMisc.test_initfinic                 C   rÖ   )Nz„if 1:
            from llvmlite import binding as llvm

            llvm.set_option("progname", "-debug-pass=Disabled")
            r×   rØ   rÛ   r   r   r   Útest_set_optionì  s   zTestMisc.test_set_optionc                 C   s4   t j\}}}dg}|  |f|¡ |  |tdƒ¡ d S )N)é   é
   )r!   Úllvm_version_infor«   Úrange)r(   ÚmajorÚminorÚpatchZvalidr   r   r   Útest_versionö  s   zTestMisc.test_versionc                 C   s   t  ¡  d S r    )r!   Zcheck_jit_executionr'   r   r   r   Útest_check_jit_executioný  s   z!TestMisc.test_check_jit_executionzLocale not availablec                 C   s8   |   t¡}t|ƒ}t tjd¡ t|ƒ}|  ||¡ d S )Nr   )r4   Úasm_double_localer{   r   r   r   r*   )r(   rm   ÚexpectÚgotr   r   r   Útest_print_double_locale   s
   
z!TestMisc.test_print_double_localec                 C   s$   d}d}t j|d|g}t |¡ d S )Nzfrom llvmlite import bindingz-Werrorr×   )rs   rÚ   rT   rÙ   )r(   rÜ   ÚflagsZcmdargsr   r   r   Útest_no_accidental_warnings  s   z$TestMisc.test_no_accidental_warningsN)r?   r@   rA   rp   r¦   r®   r·   r¸   r¾   rÂ   rÉ   rÒ   rÕ   rÝ   rÞ   ræ   rç   rq   ZskipIfr   rë   rí   r   r   r   r   r¥   ‡  s$    	

r¥   c                   @   s´   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+S ),ÚTestModuleRefc                 C   s*   |   ¡ }t|ƒ ¡ }|  | d¡|¡ d S )Nz; ModuleID =)r4   r{   r”   rÁ   re   ©r(   r3   r­   r   r   r   Útest_str  s   zTestModuleRef.test_strc                 C   sX   |   ¡ }t|ƒ | ¡  |  tj¡ t|ƒ W d   ƒ n1 s!w   Y  | ¡  d S r    )r4   r{   Úcloser¨   ÚctypesÚArgumentError©r(   r3   r   r   r   Ú
test_close  s   
ÿzTestModuleRef.test_closec              	   C   sÔ   |   ¡ }t|ƒ | t|ƒ W d   ƒ n1 sw   Y  |  tj¡ t|ƒ W d   ƒ n1 s3w   Y  |  t¡# | W d   ƒ n1 sKw   Y  W d   ƒ d S W d   ƒ d S 1 scw   Y  d S r    )r4   r{   r¨   rò   ró   rz   rô   r   r   r   Ú	test_with"  s   
ÿ
ÿÿÿ"ÿzTestModuleRef.test_withc                 C   s4   |   ¡ }d|_|  |jd¡ d|_|  |jd¡ d S )Nr°   Úbar)r4   r7   r*   rô   r   r   r   Ú	test_name-  s
   zTestModuleRef.test_namec                 C   s   |   ¡ }|  |jd¡ d S )Nz	asm_sum.c)r4   r*   Zsource_filerô   r   r   r   Útest_source_file4  s   zTestModuleRef.test_source_filec                 C   s2   |   ¡ }|j}|  |t¡ ||_|  ||j¡ d S r    )r4   Zdata_layoutrÀ   r{   r*   rï   r   r   r   Útest_data_layout8  s
   zTestModuleRef.test_data_layoutc                 C   s6   |   ¡ }|j}|  |t ¡ ¡ d|_|  |jd¡ d S )Nr“   )r4   r-   r*   r!   r/   rï   r   r   r   Útest_triple?  s
   zTestModuleRef.test_triplec                 C   sn   |   ¡ }|  | ¡ d ¡ |   t¡}|  t¡}| ¡  W d   ƒ n1 s%w   Y  t|jƒ}|  d|¡ d S )Nz%.bug = add i32 1, %.bug)	r4   r¼   r‰   Úasm_verification_failr¨   rz   r{   rª   r«   )r(   r3   r¬   r­   r   r   r   Útest_verifyF  s   

ÿ
zTestModuleRef.test_verifyc                 C   ór   |   ¡ }| d¡}|  |tj¡ |  |jd¡ |  t¡ | d¡ W d   ƒ n1 s,w   Y  ~t	|j ƒ d S )NÚsumr°   )
r4   Úget_functionrÀ   r!   ÚValueRefr*   r7   r¨   Ú	NameErrorr{   ©r(   r3   rµ   r   r   r   Útest_get_functionQ  ó   
ÿzTestModuleRef.test_get_functionc                 C   sp   |   ¡ }| d¡}|  |jd¡ |  t dt|ƒ¡¡ |  t	¡ | d¡ W d   ƒ d S 1 s1w   Y  d S )Nzstruct.glob_typeú8%struct\.glob_type(\.[\d]+)? = type { i64, \[2 x i64\] }zstruct.doesnt_exist)
r4   Zget_struct_typer*   r7   rÎ   rY   r_   r{   r¨   r  )r(   r3   Zst_tyr   r   r   Útest_get_struct_type^  s   
þ"ÿz"TestModuleRef.test_get_struct_typec                 C   rþ   )Nr5   r÷   )
r4   r6   rÀ   r!   r  r*   r7   r¨   r  r{   )r(   r3   Úgvr   r   r   Útest_get_global_variablej  r  z&TestModuleRef.test_get_global_variablec                 C   sN   |   ¡ }|j}~t|dd„ d}|  t|ƒd¡ |  dd„ |D ƒg d¢¡ d S )Nc                 S   s   | j S r    r   )Úvaluer   r   r   Ú<lambda>{  s    z5TestModuleRef.test_global_variables.<locals>.<lambda>)Úkeyé   c                 S   s   g | ]}|j ‘qS r   r   )Ú.0Úgr   r   r   Ú
<listcomp>}  s    z7TestModuleRef.test_global_variables.<locals>.<listcomp>)r5   Úglob_bZglob_fÚglob_struct)r4   Úglobal_variablesÚsortedr*   r`   )r(   r3   ÚitZglobsr   r   r   Útest_global_variablesw  s   ÿz#TestModuleRef.test_global_variablesc                 C   s>   |   ¡ }|j}~t|ƒ}|  t|ƒd¡ |  |d jd¡ d S ©NrJ   r   rÿ   )r4   Ú	functionsÚlistr*   r`   r7   )r(   r3   r  Úfuncsr   r   r   Útest_functions€  s   zTestModuleRef.test_functionsc                 C   s^   |   ¡ }|j}~t|ƒ}|  t|ƒd¡ |  t d|d j¡¡ |  t dt	|d ƒ¡¡ d S )NrJ   ústruct\.glob_type(\.[\d]+)?r   r  )
r4   Zstruct_typesr  r*   r`   rÎ   rY   r_   r7   r{   )r(   r3   r  Ústructsr   r   r   Útest_structsˆ  s   
ÿ

þzTestModuleRef.test_structsc                 C   sŠ   |   ¡ }|   t¡}| |¡ |  tdd„ |jD ƒƒddg¡ | d¡ | ¡  |  t	j
¡ | d¡ W d   ƒ d S 1 s>w   Y  d S )Nc                 s   ó    | ]}|j V  qd S r    r   ©r  Úfr   r   r   Ú	<genexpr>™  ó   € z-TestModuleRef.test_link_in.<locals>.<genexpr>Úmulrÿ   )r4   Úasm_mulÚlink_inr*   r  r  r   rñ   r¨   rò   ró   )r(   ÚdestÚsrcr   r   r   Útest_link_in”  s   

ÿ
"ÿzTestModuleRef.test_link_inc                 C   st   |   ¡ }|   t¡}|j|dd |  tdd„ |jD ƒƒddg¡ | ¡  |  tdd„ |jD ƒƒdg¡ | d¡ d S )NT)Zpreservec                 s   r  r    r   r   r   r   r   r"  ¤  r#  z6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>r$  rÿ   c                 s   r  r    r   r   r   r   r   r"  ¦  r#  )r4   r%  r&  r*   r  r  rñ   r   )r(   r'  Zsrc2r   r   r   Útest_link_in_preserveŸ  s   
ÿz#TestModuleRef.test_link_in_preservec                 C   s\   |   ¡ }|   t¡}|  t¡}| |¡ W d   ƒ n1 sw   Y  |  dt|jƒ¡ d S )Nzsymbol multiply defined)r4   Úasm_sum2r¨   rz   r&  r«   r{   rª   )r(   r'  r(  r¬   r   r   r   Útest_link_in_error©  s   
ÿz TestModuleRef.test_link_in_errorc                 C   s6   |   ¡ }| ¡ }d}d}|  | |¡p| |¡¡ d S )Ns   ÞÀs   BC)r4   Ú
as_bitcoderÁ   re   )r(   r3   ÚbcZbitcode_wrapper_magicZbitcode_magicr   r   r   Útest_as_bitcode²  s   ÿzTestModuleRef.test_as_bitcodec                 C   s€   |   t¡}t d¡ W d   ƒ n1 sw   Y  |  dt|jƒ¡ tjd dk r5|  dt|jƒ¡ d S |  dt|jƒ¡ d S )Nó    zLLVM bitcode parsing errorr   é	   zInvalid bitcode signaturez(file too small to contain bitcode header)r¨   rz   r!   Úparse_bitcoder«   r{   rª   rá   )r(   r¬   r   r   r   Útest_parse_bitcode_error¼  s   ÿ
ÿz&TestModuleRef.test_parse_bitcode_errorc                 C   sT   t  ¡ }| j|d ¡ }t  ¡ }t  ||¡}|  | ¡ |¡ | d¡ | d¡ d S )N)r2   rÿ   r5   )r!   Zcreate_contextr4   r-  r2  r*   r   r6   )r(   Zcontext1r.  Zcontext2r3   r   r   r   Útest_bitcode_roundtripÈ  s   
z$TestModuleRef.test_bitcode_roundtripc                 C   s4   |   ¡ }| ¡ }|  ||¡ |  | ¡ | ¡ ¡ d S r    )r4   ÚcloneZassertIsNotr*   r-  )r(   rm   Zclonedr   r   r   Útest_cloningÓ  s   zTestModuleRef.test_cloningN)r?   r@   rA   rð   rõ   rö   rø   rù   rú   rû   rý   r  r  r	  r  r  r  r)  r*  r,  r/  r3  r4  r6  r   r   r   r   rî     s,    	
	
rî   c                   @   s‚   e Zd ZdZd dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )!ÚJITTestMixinz*
    Mixin for ExecutionEngine tests.
    rÿ   c                 C   s,   |  ¡  | |¡}|  |¡ ttttƒ|ƒS r    )Úfinalize_objectÚget_function_addressrÁ   r   r   )r(   ÚeeÚ	func_nameÚcfptrr   r   r   Úget_sumß  s   

zJITTestMixin.get_sumc                 C   sX   |   ¡ }|  |¡}|  |¡}|ddƒ}|  d|¡ W d   ƒ d S 1 s%w   Y  d S ©NrK   éûÿÿÿéýÿÿÿ)r4   r9   r=  r*   )r(   r3   r:  ÚcfuncÚresr   r   r   Útest_run_codeå  s   

"ýzJITTestMixin.test_run_codec                 C   sX   |   |  ¡ ¡}| ¡  | ¡  |  tj¡ | ¡  W d   ƒ d S 1 s%w   Y  d S r    )r9   r4   rñ   r¨   rò   ró   r8  ©r(   r:  r   r   r   rõ   ì  s   
"ÿzJITTestMixin.test_closec              	   C   sº   |   |  ¡ ¡}| W d   ƒ n1 sw   Y  |  t¡ | W d   ƒ n1 s,w   Y  W d   ƒ n1 s;w   Y  |  tj¡ | ¡  W d   ƒ d S 1 sVw   Y  d S r    )r9   r4   r¨   rz   rò   ró   r8  rD  r   r   r   rö   ó  s   ÿÿ€ÿ
"ÿzJITTestMixin.test_withc                 C   s&   |   ¡ }|  |¡}| ¡  | ¡  d S r    ©r4   r9   rñ   ©r(   r3   r:  r   r   r   Útest_module_lifetimeý  ó   
z!JITTestMixin.test_module_lifetimec                 C   s&   |   ¡ }|  |¡}| ¡  | ¡  d S r    rE  rF  r   r   r   Útest_module_lifetime2  rH  z"JITTestMixin.test_module_lifetime2c                 C   sz   |   |  ¡ ¡}|  t¡}| |¡ |  t¡ | |¡ W d   ƒ n1 s&w   Y  |  |j¡ | ¡  |  	|j¡ d S r    )
r9   r4   r%  Ú
add_moduler¨   ÚKeyErrorÚassertFalseÚclosedrñ   rÁ   ©r(   r:  r3   r   r   r   Útest_add_module	  s   

ÿzJITTestMixin.test_add_modulec                 C   s6   |   |  ¡ ¡}|  t¡}| |¡ | ¡  | ¡  d S r    ©r9   r4   r%  rJ  rñ   rN  r   r   r   Útest_add_module_lifetime  ó
   

z%JITTestMixin.test_add_module_lifetimec                 C   s6   |   |  ¡ ¡}|  t¡}| |¡ | ¡  | ¡  d S r    rP  rN  r   r   r   Útest_add_module_lifetime2  rR  z&JITTestMixin.test_add_module_lifetime2c                 C   s„   |   |  ¡ ¡}|  t¡}| |¡ | |¡ |  t¡ | |¡ W d   ƒ n1 s+w   Y  |  |j¡ | 	¡  |  |j¡ d S r    )
r9   r4   r%  rJ  Zremove_moduler¨   rK  rL  rM  rñ   rN  r   r   r   Útest_remove_module!  s   


ÿzJITTestMixin.test_remove_modulec                 C   s>   |   ¡ }|  |¡}|j}|  |j|¡ t|ƒ ~~t|ƒ d S r    )r4   r9   Útarget_datar¼   r{   )r(   r3   r:  Útdr   r   r   Útest_target_data,  s   
zJITTestMixin.test_target_datac           	      C   sè   |   ¡ }|  |¡}|j}| d¡}| d¡}| d¡}tjdk r"dnd}|||fD ]}|  | |j¡|¡ q)|  | 	|j¡d¡ |  | 
|j¡d¡ |  | 	|j¡d¡ |  | 
|j¡d¡ |  | 	|j¡d	¡ |  | 
|j¡d
¡ d S )Nr5   r  r  ì        r  é   rJ   )rJ   rK   r  é   )r  rY  )r4   r9   rU  r6   rs   Úmaxsizer*   Úget_abi_sizeÚtypeÚget_pointee_abi_sizeZget_pointee_abi_alignmentr«   )	r(   r3   r:  rV  Úgv_i32Zgv_i8Z	gv_structÚpointer_sizer  r   r   r   Útest_target_data_abi_enquiries6  s   



z+JITTestMixin.test_target_data_abi_enquiriesc                    sð   g ‰ ‡ fd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                    ó   ˆ   | |f¡ d S r    ©r•   ©r3   Úbuf©Únotifiesr   r   ÚnotifyN  ó   z5JITTestMixin.test_object_cache_notify.<locals>.notifyr   rK   r?  rJ   r$  )r4   r9   Úset_object_cacher*   r`   r=  r¼   rÀ   Úbytesr%  rJ  )r(   rh  r3   r:  rA  Zmod2r   rf  r   Útest_object_cache_notifyK  s$   





z%JITTestMixin.test_object_cache_notifyc                    sJ  g ‰g ‰ ‡fdd„}‡ fdd„}|   ¡ }|  |¡}| ||¡ |  tˆƒd¡ |  tˆ ƒd¡ |  |¡}|  tˆƒd¡ |  tˆ ƒd¡ |  ˆ d |¡ ˆd d ‰‡ ‡fdd„}g ˆd d …< g ˆ d d …< |   t¡}|  |¡}| ||¡ |  tˆƒd¡ |  tˆ ƒd¡ |  |¡}|  |d	d
ƒd¡ |  tˆƒd¡ |  tˆ ƒd¡ d S )Nc                    rb  r    rc  rd  rf  r   r   rh  j  ri  z8JITTestMixin.test_object_cache_getbuffer.<locals>.notifyc                    s   ˆ   | ¡ d S r    rc  ©r3   )Ú
getbuffersr   r   Ú	getbufferm  r§   z;JITTestMixin.test_object_cache_getbuffer.<locals>.getbufferr   rJ   c                    s   ˆ   | ¡ ˆS r    rc  rm  )rn  Ú
sum_bufferr   r   Úgetbuffer_successful€  s   
zFJITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer_successfulrK   r?  r@  )r4   r9   rj  r*   r`   r=  r¼   r%  )r(   rh  ro  r3   r:  rA  rq  r   )rn  rg  rp  r   Útest_object_cache_getbufferf  s4   




z(JITTestMixin.test_object_cache_getbufferN)rÿ   )r?   r@   rA   rp   r=  rC  rõ   rö   rG  rI  rO  rQ  rS  rT  rW  ra  rl  rr  r   r   r   r   r7  Ú  s     



r7  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚJITWithTMTestMixinc                 C   sf   | j dd}|  ¡ }|  ||¡}| |¡}|  d|¡ | d¡ | |¡}|  d|¡ |  ||¡ dS )z%Test TargetMachineRef.emit_assembly()Tr8   rÿ   N)r>   r4   r9   r™   r«   Zset_asm_verbosityÚassertNotEqual)r(   r>   r3   r:  Zraw_asmZraw_asm_verboser   r   r   Útest_emit_assembly•  s   


z%JITWithTMTestMixin.test_emit_assemblyc                 C   s^   | j dd}|  ¡ }|  ||¡}| |¡}|  |t¡ tj d¡r-|  	d|dd… ¡ dS dS )z#Test TargetMachineRef.emit_object()Tr8   rD   s   ELFNrà   )
r>   r4   r9   Úemit_objectrÀ   rk  rs   rc   re   r«   )r(   r>   r3   r:  Úcode_objectr   r   r   Útest_emit_object¡  s   
þz#JITWithTMTestMixin.test_emit_objectN)r?   r@   rA   rv  ry  r   r   r   r   rt  “  s    rt  c                   @   s   e Zd ZdZddd„ZdS )Ú	TestMCJitz@
    Test JIT engines created with create_mcjit_compiler().
    Nc                 C   s    |d u r
| j dd}t ||¡S )NTr8   )r>   r!   Úcreate_mcjit_compiler)r(   r3   r>   r   r   r   r9   ²  s   zTestMCJit.jitr    )r?   r@   rA   rp   r9   r   r   r   r   rz  ­  s    rz  Úx86úx86 onlyc                   @   sª   e Zd Zedddeeeeƒdfdd„Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ ZdS )&ÚTestOrcLLJITrÿ   NFc                 C   sv   t j|d|d}t  ¡ }|r| ¡  | |jt  ¡ d¡ |¡ ||¡}	|	| }
|  	|
¡ |  
||	j¡ ||	||
ƒfS )NF)Úuse_jit_linkÚsuppress_errorsr,   )r!   Úcreate_lljit_compilerÚJITLibraryBuilderZadd_current_processÚadd_irr.   r/   Úexport_symbolÚlinkrÁ   r*   r7   )r(   r1   r;  r>   Zadd_processÚ	func_typer€  ÚlljitrŒ   Úrtr<  r   r   r   r9   ¿  s    þý
zTestOrcLLJIT.jitc                 C   s:   t  ¡ }t  ¡  dd¡ d¡ |d¡}|  |d d¡ d S )Nr¹   rº   r°   )r!   r  r‚  Úimport_symbolr„  r…  r*   ©r(   r‡  rˆ  r   r   r   Útest_define_symbolÒ  s
   ÿzTestOrcLLJIT.test_define_symbolc                 C   s¬   t  ¡ }|  td¡ | dd¡ W d   ƒ n1 sw   Y  t  ¡  dd¡ d¡ |d¡}|  	|d d¡ |  td¡ | dd¡ W d   ƒ d S 1 sOw   Y  d S )NzNo such libraryr°   r»   r¹   rº   r   zSymbols not found.*__foobar)
r!   r  ÚassertRaisesRegexrz   Úlookupr‚  r‰  r„  r…  ru  rŠ  r   r   r   Ú"test_lookup_undefined_symbol_failsØ  s   ÿÿÿ"þz/TestOrcLLJIT.test_lookup_undefined_symbol_failsc                 C   s^   t jdkr$|  td¡ tjdd W d   ƒ d S 1 sw   Y  d S |  tjdd¡ d S )NÚwin32zJITLink .* WindowsT)r  )rs   rc   rŒ  rz   r!   r  rÎ   r'   r   r   r   Útest_jit_linkã  s   
ÿ"þzTestOrcLLJIT.test_jit_linkc                 C   sN   |   ¡ \}}}| |ddƒ}|  d|¡ W d   ƒ d S 1 s w   Y  d S r>  )r9   r*   )r(   r‡  rˆ  rA  rB  r   r   r   rC  ë  s
   
"þzTestOrcLLJIT.test_run_codec                 C   sZ   |   ¡ \}}}| ¡  | ¡  |  t¡ | dd¡ W d   ƒ d S 1 s&w   Y  d S ©Nr°   rµ   )r9   rñ   r¨   ÚAssertionErrorr  ©r(   r‡  rˆ  rA  r   r   r   rõ   ñ  s   "ÿzTestOrcLLJIT.test_closec              	   C   s¼   |   ¡ \}}}| W d   ƒ n1 sw   Y  |  t¡ | W d   ƒ n1 s,w   Y  W d   ƒ n1 s;w   Y  |  t¡ | dd¡ W d   ƒ d S 1 sWw   Y  d S r‘  )r9   r¨   rz   r’  r  r“  r   r   r   rö   ø  s   ÿÿ€ÿ"ÿzTestOrcLLJIT.test_withc                 C   sþ   |   ¡ \}}}t ¡  tjt ¡ d¡ d¡ |d¡}t	t
t
t
ƒ|d ƒddƒ}|  d|¡ |  | dd¡d d¡ |  | dd¡d d¡ |  t¡ | dd¡ W d   ƒ n1 s\w   Y  |  t¡ | dd¡ W d   ƒ d S 1 sxw   Y  d S )Nr,   r$  rK   r?  iöÿÿÿrÿ   r   )r9   r!   r‚  rƒ  r%  r.   r/   r„  r…  r   r   r*   ru  r  r¨   rz   ©r(   r‡  Úrt_sumZ	cfunc_sumZrt_mulrB  r   r   r   Útest_add_ir_module  s    ýÿ"ÿzTestOrcLLJIT.test_add_ir_modulec                 C   sZ   |   ¡ \}}}~t ¡  |  t¡ | dd¡ W d   ƒ n1 s"w   Y  | ¡  d S ©Nrÿ   )r9   r#   r$   r¨   rz   r  rñ   )r(   r‡  r•  rh   r   r   r   rT    s   ÿzTestOrcLLJIT.test_remove_modulec                 C   sf   |   ¡ \}}}t ¡  tjt ¡ d¡ d¡ d¡ 	|d¡}t
tttƒ|d ƒddƒ}|  d|¡ d S )Nr,   Z
square_sumrÿ   rK   r?  r1  )r9   r!   r‚  rƒ  Úasm_square_sumr.   r/   r„  Zadd_jit_libraryr…  r   r   r*   r”  r   r   r   Útest_lib_depends  s   üzTestOrcLLJIT.test_lib_dependsc                 C   s8   |   ¡ \}}}|j}|  |j|¡ t|ƒ ~t|ƒ d S r    )r9   rU  r¼   r{   )r(   r‡  rˆ  rh   rV  r   r   r   rW  #  s   zTestOrcLLJIT.test_target_datac                 C   s†   t dƒ}t ¡ }t ¡ }| tjt ¡ d¡ dt	 
|¡¡ d¡ |d¡}|d }|  |¡ |  ttƒ|ƒƒ d¡ ~|  |jd¡ d S )Nr   r,   ÚAr°   é   é   )r   r!   r  r‚  rƒ  Úasm_ext_ctorsr.   r/   r‰  rò   Z	addressofr„  r…  rÁ   r*   r   r   ru  r
  )r(   Zshared_valuer‡  rŒ   rˆ  r°   r   r   r   Útest_global_ctors_dtors,  s   ü
z$TestOrcLLJIT.test_global_ctors_dtorsc                 C   sF   d}|   t|¡ | jtddd W d   ƒ d S 1 sw   Y  d S )Nz*Failed to materialize symbols:.*getversionÚ
getversionT)r€  )rŒ  rz   r9   Úasm_getversion)r(   Úmsgr   r   r   Ú(test_lookup_current_process_symbol_fails=  s   "ÿz5TestOrcLLJIT.test_lookup_current_process_symbol_failsc                 C   s   |   tdd d¡ d S )NrŸ  T)r9   r   r'   r   r   r   Ú"test_lookup_current_process_symbolE  s   z/TestOrcLLJIT.test_lookup_current_process_symbolc                    sh   t  ¡ ‰tjt  ¡ d‰‡‡fdd„‰ ‡ fdd„tt ¡ ƒD ƒ}|D ]}| ¡  q"|D ]}| 	¡  q+d S )Nr,   c                    s   ‡ ‡‡fdd„}|S )Nc               
      sD   g } t dƒD ]}|  t ¡  ˆ¡ d¡ ˆdˆ › d|› ¡¡ qd S )Né2   rÿ   Zsum_rh   )râ   r•   r!   r‚  rƒ  r„  r…  )ZtrackingÚc)Úir‡  Úllvm_irr   r   Údo_workM  s   
ýÿzDTestOrcLLJIT.test_thread_safe.<locals>.compile_many.<locals>.do_workr   )r¦  r¨  )r‡  r§  )r¦  r   Úcompile_manyL  s   z3TestOrcLLJIT.test_thread_safe.<locals>.compile_manyc                    s   g | ]
}t jˆ |ƒd ‘qS ))r=   )Ú	threadingÚThread)r  r¦  )r©  r   r   r  W  s    ÿz1TestOrcLLJIT.test_thread_safe.<locals>.<listcomp>)
r!   r  rB   r.   r/   râ   rQ   Ú	cpu_countÚstartÚjoin)r(   ZthsÚthr   )r©  r‡  r§  r   Útest_thread_safeH  s   

ÿ

ÿzTestOrcLLJIT.test_thread_safec                 C   sj   | j dd}|  ¡ }t |¡}t ¡  | |¡¡ d¡ |d¡}t	t
t
t
ƒ|d ƒ}|  |ddƒd¡ d S )NFr8   rÿ   rK   é   é   )r>   r4   r!   r  r‚  Zadd_object_imgrw  r„  r…  r   r   r*   )r(   r>   r3   r‡  rˆ  rÿ   r   r   r   Útest_add_object_file^  s   
ýz!TestOrcLLJIT.test_add_object_filec           
   	   C   sÈ   | j dd}|  ¡ }| |¡}tƒ \}}zIt |d¡}| |¡ W d   ƒ n1 s+w   Y  t |¡}t 	¡  
|¡ d¡ |d¡}ttttƒ|d ƒ}	|  |	ddƒd¡ W t |¡ d S t |¡ w )NFr8   Úwbrÿ   rK   r±  r²  )r>   r4   rw  r   rQ   ÚfdopenÚwriter!   r  r‚  Úadd_object_filer„  r…  r   r   r*   Úunlink)
r(   r>   r3   Úobj_binÚ	temp_descÚ	temp_pathr!  r‡  rˆ  rÿ   r   r   r   Ú$test_add_object_file_from_filesystemi  s"   

ÿ
ýz1TestOrcLLJIT.test_add_object_file_from_filesystem)r?   r@   rA   rB   r   r   r9   r‹  rŽ  r  rC  rõ   rö   r–  rT  r™  rW  rž  r¢  r£  r°  r³  r¼  r   r   r   r   r~  ¼  s*    
þ

	r~  c                   @   sÜ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5S )6ÚTestValueRefc                 C   s&   |   ¡ }| d¡}|  t|ƒd¡ d S )Nr5   z@glob = global i32 0)r4   r6   r*   r{   ©r(   r3   r5   r   r   r   rð     s   
zTestValueRef.test_strc                 C   s8   |   ¡ }| d¡}|  |jd¡ d|_|  |jd¡ d S )Nr5   Úfoobar)r4   r6   r*   r7   r¾  r   r   r   rø   „  s
   
zTestValueRef.test_namec                 C   óp   |   ¡ }| d¡}|j}|  |jtj¡ ||_|  |j|¡ dD ]}||_|  |jtj¡ |  |jj|¡ q d S )Nr5   )ÚinternalÚexternal)r4   r6   ÚlinkagerÀ   r!   ZLinkager*   r7   )r(   r3   r5   rÃ  r   r   r   Útest_linkage‹  ó   
ýzTestValueRef.test_linkagec                 C   rÀ  )Nr5   )ZhiddenZ	protectedrÈ   )r4   r6   Ú
visibilityrÀ   r!   Z
Visibilityr*   r7   )r(   r3   r5   rÆ  r   r   r   Útest_visibility—  rÅ  zTestValueRef.test_visibilityc                 C   rÀ  )Nr5   )Z	dllimportZ	dllexportrÈ   )r4   r6   Ústorage_classrÀ   r!   ZStorageClassr*   r7   )r(   r3   r5   rÈ  r   r   r   Útest_storage_class£  rÅ  zTestValueRef.test_storage_classc                 C   sf   |   ¡ }| d¡}| d¡ |  t¡}| d¡ W d   ƒ n1 s#w   Y  |  t|jƒd¡ d S )Nrÿ   Z	nocaptureZzextzno such attribute 'zext')r4   r   Zadd_function_attributer¨   Ú
ValueErrorr*   r{   rª   )r(   r3   rµ   Zraisesr   r   r   Útest_add_function_attribute¯  s   

ÿz(TestValueRef.test_add_function_attributec                 C   s$   |   ¡ }| d¡}|  |j |¡ d S ©Nr5   )r4   r6   r¼   r¾  r   r   r   Útest_module·  s   
zTestValueRef.test_modulec                 C   s*   |   ¡ }| d¡}|j}|  |tj¡ d S rÌ  )r4   r6   r]  rÀ   r!   ZTypeRef©r(   r3   r5   Útpr   r   r   Ú	test_type¼  s   
zTestValueRef.test_typec                 C   sL   |   ¡ }| d¡}|j}|  |jd¡ | d¡}|  t d|jjj¡¡ d S )Nr5   r“   r  r  )	r4   r6   r]  r*   r7   rÎ   rY   r_   Úelement_type)r(   r3   r5   rÏ  Ústr   r   r   Útest_type_nameÂ  s   



ÿzTestValueRef.test_type_namec                 C   s,   |   ¡ }| d¡}|j}|  t|ƒd¡ d S )Nr5   zi32*)r4   r6   r]  r*   r{   rÎ  r   r   r   Útest_type_printing_variableË  s   
z(TestValueRef.test_type_printing_variablec                 C   s(   |   ¡ }| d¡}|  t|jƒd¡ d S )Nrÿ   zi32 (i32, i32)*)r4   r   r*   r{   r]  r  r   r   r   Útest_type_printing_functionÑ  s   
z(TestValueRef.test_type_printing_functionc                 C   sV   |   ¡ }| d¡}|  |jj¡ |  t dt|jƒ¡¡ |  t dt|jj	ƒ¡¡ d S )Nr  z%struct\.glob_type(\.[\d]+)?\*r  )
r4   r6   rÁ   r]  Z
is_pointerrÎ   rY   r_   r{   rÑ  )r(   r3   rÒ  r   r   r   Útest_type_printing_structÖ  s   

ÿ

þz&TestValueRef.test_type_printing_structc                 C   ó   |   ¡ }| ¡  | ¡  d S r    )r5   rñ   )r(   r5   r   r   r   rõ   à  ó   zTestValueRef.test_closec                 C   s:   |   ¡  d¡}|   t¡ d¡}|  |j¡ |  |j¡ d S r—  )r4   r   Úasm_sum_declarerL  Zis_declarationrÁ   )r(   ÚdefinedZdeclaredr   r   r   Útest_is_declarationå  s   z TestValueRef.test_is_declarationc                 C   s>   |   t¡}t|jƒ}|  t|ƒd¡ |D ]}|  |j¡ qd S ©Nr  )r4   rB   r  r  r*   r`   rÁ   Ú	is_global)r(   r3   ÚgvarsrÐ   r   r   r   Útest_module_global_variablesë  s   

ÿz)TestValueRef.test_module_global_variablesc                 C   sÚ   |   ¡ }t|jƒ}|  t|ƒd¡ |d }|  |j¡ |  |jd¡ |  t	¡ |j
 W d   ƒ n1 s5w   Y  |  t	¡ |j W d   ƒ n1 sMw   Y  |  t	¡ |j W d   ƒ d S 1 sfw   Y  d S r  )r4   r  r  r*   r`   rÁ   Úis_functionr7   r¨   rÊ  ÚinstructionsÚoperandsÚopcode)r(   r3   r  rŠ   r   r   r   Útest_module_functionsò  s   
ÿÿ"ÿz"TestValueRef.test_module_functionsc                 C   s  |   ¡ }| 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¡ |d j W d   ƒ n1 siw   Y  |  t¡ |d j W d   ƒ d S 1 s„w   Y  d S )Nrÿ   rK   r   rJ   ú.1Úi32ú.2)r4   r   rÁ   rà  r  Ú	argumentsr*   r`   Úis_argumentr7   r{   r]  r¨   rÊ  Úblocks)r(   r3   rŠ   r‡   r   r   r   Útest_function_arguments  s"   

ÿ"ÿz$TestValueRef.test_function_argumentsc                 C   s@   |   ¡  d¡}t|jƒ}|  t|ƒd¡ |d }|  |j¡ d S )Nrÿ   rJ   r   )r4   r   r  rê  r*   r`   rÁ   Zis_block)r(   rŠ   rê  r‹   r   r   r   Útest_function_blocks  s
   
z!TestValueRef.test_function_blocksc                 C   sœ   |   ¡  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 )Nrÿ   r   r±  rJ   rK   ra   r   )
r4   r   r  rê  rá  r*   r`   rÁ   Zis_instructionrã  )r(   rŠ   Úinstsr   r   r   Útest_block_instructions  s   z$TestValueRef.test_block_instructionsc                 C   sÂ   |   ¡  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 )	Nrÿ   r   ra   rK   rJ   rå  ræ  rç  )r4   r   r  rê  rá  r*   rã  râ  r`   rÁ   Z
is_operandr7   r{   r]  )r(   rŠ   ra   râ  r   r   r   Útest_instruction_operands%  s   
z&TestValueRef.test_instruction_operandsc                 C   sŒ   |   t¡}|jD ];}t|jƒ}|jdkr|  |dg¡ q|jdkrC|  |g ¡ t|jƒ}|  t|d jƒdg¡ |  t|d jƒg ¡ qd S )NZa_readonly_funcs   readonlyZa_arg0_return_funcr   s   returnedrJ   )r4   Úasm_attributesr  r  Ú
attributesr7   r*   rè  )r(   r3   rŠ   Úattrsr‡   r   r   r   Útest_function_attributes2  s   





€øz%TestValueRef.test_function_attributesc                 C   sü   |   ¡ }|  | d¡jtjj¡ | d¡}|  |jtjj¡ t	|j
ƒd }|  |jtjj¡ t	|jƒd }|  |jtjj¡ |  t	|jƒd jtjj¡ |  t	|jƒd jtjj¡ |   t¡ d¡}t	t	|j
ƒd jƒd }|  t	|jƒd jtjj¡ d S )Nr5   rÿ   r   rJ   r°   )r4   r*   r6   Z
value_kindr!   Z	ValueKindZglobal_variabler   Úfunctionr  rê  Zbasic_blockrá  Zinstructionrâ  Zconstant_intÚasm_inlineasmZ
inline_asm)r(   r3   rŠ   r‹   ÚinstZ	iasm_funcZ	iasm_instr   r   r   Útest_value_kind>  s*   ÿ
ÿÿÿzTestValueRef.test_value_kindc                 C   s   |   ¡ }|  | d¡j¡ d}|jD ]-}|  |j¡ |jD ]!}|  |j¡ |jD ]}|  |j¡ |jD ]	}|jr<|d7 }q3q(qq|  	|d¡ d S )Nr5   r   rJ   )
r4   rÁ   r6   Úis_constantr  rê  rL  rá  râ  r*   )r(   r3   Zconstant_operandsrŠ   r‹   rö  Úopr   r   r   Útest_is_constantR  s"   



€þþþzTestValueRef.test_is_constantc           	      C   sT  |   ¡ }| d¡}tt|jƒd jƒ}|  |d jd¡ t|d jƒ}|  |d j	¡ |  
|d j	¡ |  |d  ¡ d¡ |  t¡ |d  ¡  W d   ƒ n1 sSw   Y  |   t¡}| d¡}tt|jƒd jƒ}t|d jƒd }t|d jƒd }|  | ¡ d¡ |  |jddd	¡ |jd
d}tj| dd¡ddd}|  |d	¡ d S )Nrÿ   r   rJ   ra   rK   r²  T)Z
signed_intr?  FrY  Úlittle)Úsigned)r4   r   r  rê  rá  r*   rã  râ  rÁ   rø  rL  Úget_constant_valuer¨   rÊ  Úasm_sum3ÚintÚ
from_bytesÚto_bytes)	r(   r3   rŠ   rí  râ  Zposint64Znegint64Zas_u64Zas_i64r   r   r   Útest_constant_intb  s.   
ÿ

ÿzTestValueRef.test_constant_intc                 C   s(  |   t¡}| d¡}tt|jƒd jƒ}|  t|ƒd¡ |  |d jd¡ t|d j	ƒ}|  
|d j¡ |  |d  ¡ d¡ |  
|d j¡ |  |d  ¡ d¡ |   t¡}| d¡}tt|jƒd jƒd }t|j	ƒ}|  t¡ |d  ¡  W d   ƒ n1 sw   Y  |  |d jdd	d¡ d S )
Nr°   r   rK   rˆ   g        rJ   g…ëQ¸	@T)Zround_fp)r4   rè   r   r  rê  rá  r*   r`   rã  râ  rÁ   rø  ZassertAlmostEqualrý  Úasm_double_inaccurater¨   rÊ  )r(   r3   rŠ   rí  râ  rö  r   r   r   Útest_constant_fp|  s$   




ÿzTestValueRef.test_constant_fpc                 C   sZ   |   t¡}| d¡}tt|jƒd jƒd }t|jƒd }|  |j¡ |  	| 
¡ d¡ d S )Nr÷   r   z	i64* null)r4   Úasm_null_constantr   r  rê  rá  râ  rÁ   rø  r*   rý  )r(   r3   rŠ   rö  Úargr   r   r   Útest_constant_as_string  s   

z$TestValueRef.test_constant_as_stringN)r?   r@   rA   rð   rø   rÄ  rÇ  rÉ  rË  rÍ  rÐ  rÓ  rÔ  rÕ  rÖ  rõ   rÛ  rß  rä  rë  rì  rî  rï  ró  r÷  rú  r  r  r  r   r   r   r   r½  }  s6    	
r½  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
TestTargetc                 C   sv   t jj}|  t¡}|dƒ W d   ƒ n1 sw   Y  |  dt|jƒ¡ t  ¡ }||ƒ}|  	|j
|¡ | ¡  d S )Nr¿  z(No available targets are compatible with)r!   r:   ry   r¨   rz   r«   r{   rª   r/   r*   r-   rñ   )r(   r!  r¬   r-   r=   r   r   r   Útest_from_triple›  s   
ÿÿzTestTarget.test_from_triplec                 C   s@   t j t  ¡ ¡}| ddddd¡ t  ¡ }| |dddd¡ d S )Nr“   rJ   rÈ   )r!   r:   ry   r/   r<   rÓ   )r(   r=   rÔ   r   r   r   Útest_create_target_machine¦  s   z%TestTarget.test_create_target_machinec                 C   ó<   t j t  ¡ ¡}t j ¡ }|  |jt¡ |  |j|j¡ d S r    )	r!   r:   ry   r/   r;   rÀ   r7   r{   r*   ©r(   ÚtÚur   r   r   rø   ®  ó   
zTestTarget.test_namec                 C   r  r    )	r!   r:   ry   r/   r;   rÀ   Údescriptionr{   r*   r  r   r   r   Útest_description´  r  zTestTarget.test_descriptionc                 C   s8   t j t  ¡ ¡}t|ƒ}|  |j|¡ |  |j|¡ d S r    )r!   r:   ry   r/   r{   r«   r7   r  )r(   r=   r­   r   r   r   rð   º  s   zTestTarget.test_strN)r?   r@   rA   r	  r
  rø   r  rð   r   r   r   r   r  ™  s    r  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestTargetDatac                 C   s
   t  d¡S )Nz%e-m:e-i64:64-f80:128-n8:16:32:64-S128)r!   Zcreate_target_datar'   r   r   r   rU  Ã  s   
zTestTargetData.target_datac                 C   s(   |   ¡ }|  ¡ }|  | |j¡d¡ d S )NrY  )rU  r5   r*   r\  r]  ©r(   rV  r5   r   r   r   Útest_get_abi_sizeÆ  s   z TestTargetData.test_get_abi_sizec                 C   sF   |   ¡ }|  ¡ }|  | |j¡d¡ |  d¡}|  | |j¡d¡ d S )Nr  r  rZ  )rU  r5   r*   r^  r]  r  r   r   r   Útest_get_pointee_abi_sizeË  s
   
z(TestTargetData.test_get_pointee_abi_sizec                 C   s~   |   ¡ }|  d¡}|  t¡ | |jd¡ W d   ƒ n1 s w   Y  |jj}|  | |d¡d¡ |  | |d¡d¡ d S )Nr  r   rJ   rY  )rU  r5   r¨   rÊ  Zget_element_offsetr]  rÑ  r*   )r(   rV  r5   Zstruct_typer   r   r   Útest_get_struct_element_offsetÔ  s   
ÿz-TestTargetData.test_get_struct_element_offsetN)r?   r@   rA   rU  r  r  r  r   r   r   r   r  Á  s
    	r  c                   @   rs  )ÚTestTargetMachinec                 C   s"   | j dd}t ¡ }| |¡ d S )NFr8   )r>   r!   Úcreate_module_pass_managerÚadd_analysis_passes)r(   ÚtmÚpmr   r   r   Útest_add_analysis_passesâ  s   z*TestTargetMachine.test_add_analysis_passesc                 C   sN   | j dd}|j}|  ¡ }| d¡}tjdk rdnd}|  | |j¡|¡ d S )NFr8   r5   rX  r  rY  )	r>   rU  r4   r6   rs   r[  r*   r\  r]  )r(   r  rV  r3   r_  r`  r   r   r   Útest_target_data_from_tmç  s   
z*TestTargetMachine.test_target_data_from_tmN)r?   r@   rA   r  r  r   r   r   r   r  à  s    r  c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestPassManagerBuilderc                 C   ó   t  ¡ S r    )r!   ZPassManagerBuilderr'   r   r   r   Úpmbó  ó   zTestPassManagerBuilder.pmbc                 C   s   t  ¡ }d|_d|_d S )NrK   r±  )r!   Úcreate_pass_manager_builderÚinlining_thresholdÚ	opt_level©r(   r   r   r   r   Útest_old_apiö  s   
z#TestPassManagerBuilder.test_old_apic                 C   r×  r    )r   rñ   r%  r   r   r   rõ   ü  rØ  z!TestPassManagerBuilder.test_closec                 C   ó<   |   ¡ }|  |jt¡ tdƒD ]}||_|  |j|¡ qd S rÜ  )r   rÀ   r$  rÿ  râ   r*   ©r(   r   r¦  r   r   r   Útest_opt_level  ó   þz%TestPassManagerBuilder.test_opt_levelc                 C   r'  rÜ  )r   rÀ   Z
size_levelrÿ  râ   r*   r(  r   r   r   Útest_size_level  r*  z&TestPassManagerBuilder.test_size_levelc                 C   sL   |   ¡ }|  t¡ |j W d   ƒ n1 sw   Y  dD ]}||_qd S )N)é   éP   i^  )r   r¨   ÚNotImplementedErrorr#  r(  r   r   r   Útest_inlining_threshold  s   ÿÿz.TestPassManagerBuilder.test_inlining_thresholdc                 C   ó8   |   ¡ }|  |jt¡ dD ]}||_|  |j|¡ qd S ©N)TF)r   rÀ   Zdisable_unroll_loopsrÌ   r*   ©r(   r   rŽ   r   r   r   Útest_disable_unroll_loops  ó   þz0TestPassManagerBuilder.test_disable_unroll_loopsc                 C   r0  r1  )r   rÀ   Zloop_vectorizerÌ   r*   r2  r   r   r   Útest_loop_vectorize  r4  z*TestPassManagerBuilder.test_loop_vectorizec                 C   r0  r1  )r   rÀ   Zslp_vectorizerÌ   r*   r2  r   r   r   Útest_slp_vectorize$  r4  z)TestPassManagerBuilder.test_slp_vectorizec                 C   s.   |   ¡ }t ¡ }| |¡ | ¡  | ¡  d S r    )r   r!   r  Úpopulaterñ   )r(   r   r  r   r   r   Ú!test_populate_module_pass_manager+  s
   
z8TestPassManagerBuilder.test_populate_module_pass_managerc                 C   s8   |   ¡ }|  ¡ }t |¡}| |¡ | ¡  | ¡  d S r    )r4   r   r!   Úcreate_function_pass_managerr7  rñ   )r(   r3   r   r  r   r   r   Ú#test_populate_function_pass_manager2  s   

z:TestPassManagerBuilder.test_populate_function_pass_managerN)r?   r@   rA   r   r&  rõ   r)  r+  r/  r3  r5  r6  r8  r:  r   r   r   r   r  ñ  s    r  c                   @   rs  )ÚPassManagerTestMixinc                 C   s   t  ¡ }d|_d|_|S )NrK   i,  )r!   r"  r$  r#  r%  r   r   r   r   =  s   zPassManagerTestMixin.pmbc                 C   r×  r    )r  rñ   ©r(   r  r   r   r   rõ   C  rØ  zPassManagerTestMixin.test_closeN)r?   r@   rA   r   rõ   r   r   r   r   r;  ;  s    r;  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestModulePassManagerc                 C   r  r    ©r!   r  r'   r   r   r   r  K  r!  zTestModulePassManager.pmc                 C   sº   |   ¡ }|  ¡  |¡ |  ¡ }t|ƒ}| |¡ t|ƒ}| ¡ }t|ƒD ]4\}}| ¡  	d¡rXddh}|D ]}	|	|v r= nq5t
dƒ‚||	hA  ¡ }
|  d|¡ |  |
|¡  d S q$t
dƒ‚)Nzret i32z%.3ú%.4zexpected tokens not foundzexpected IR not found)r  r   r7  r4   r{   Úrunr]   Ú	enumerater”   re   rz   Úpopr«   ÚassertNotIn)r(   r  r3   Úorig_asmÚopt_asmZopt_asm_splitÚidxÚlÚtoksr  Z
othertokenr   r   r   Útest_runN  s*   
ÿõzTestModulePassManager.test_runc                 C   s^   |   ¡ }| d¡ |  ¡  |¡ |  t¡}| |¡\}}|  |¡ |  d|¡ |  d|¡ d S )NéF   ÚPassedÚinlineme©	r  Úadd_function_inlining_passr   r7  r4   Úasm_inlineasm2Úrun_with_remarksrÁ   r«   ©r(   r  r3   ÚstatusÚremarksr   r   r   Ú'test_run_with_remarks_successful_inlinel  s   


z=TestModulePassManager.test_run_with_remarks_successful_inlinec                 C   sj   |   ¡ }| d¡ |  ¡  |¡ |  t¡}| |¡\}}|  |¡ |  d|¡ |  d|¡ |  d|¡ d S )Nr   ZMissedrL  znoinline function attribute)	r  rN  r   r7  r4   Úasm_inlineasm3rP  rÁ   r«   rQ  r   r   r   Ú#test_run_with_remarks_failed_inlinew  s   


z9TestModulePassManager.test_run_with_remarks_failed_inlinec                 C   sV   |   ¡ }| d¡ |  ¡  |¡ |  t¡}|j|dd\}}|  |¡ |  d|¡ d S )NrJ  Únothing©Zremarks_filterr“   )	r  rN  r   r7  r4   rO  rP  rÁ   r*   rQ  r   r   r   Ú'test_run_with_remarks_inline_filter_out„  s   


z=TestModulePassManager.test_run_with_remarks_inline_filter_outc                 C   sb   |   ¡ }| d¡ |  ¡  |¡ |  t¡}|j|dd\}}|  |¡ |  d|¡ |  d|¡ d S )NrJ  zinlin.*rX  rK  rL  rM  rQ  r   r   r   Ú&test_run_with_remarks_inline_filter_in  s   


z<TestModulePassManager.test_run_with_remarks_inline_filter_inN)	r?   r@   rA   r  rI  rT  rV  rY  rZ  r   r   r   r   r=  I  s    	r=  c                   @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚTestFunctionPassManagerNc                 C   s   |p|   ¡ }t |¡S r    )r4   r!   r9  rô   r   r   r   r  š  s   
zTestFunctionPassManager.pmc                 C   s   |   ¡ }| ¡  | ¡  d S r    )r  r"   Úfinalizer<  r   r   r   rÝ   ž  rØ  z%TestFunctionPassManager.test_initfinic                 C   sx   |   ¡ }| d¡}|  |¡}|  ¡  |¡ | ¡  t|ƒ}| ¡  | |¡ | 	¡  t|ƒ}|  
d|¡ |  d|¡ d S )Nrÿ   r?  )r4   r   r  r   r7  rñ   r{   r"   r@  r\  r«   rC  )r(   r3   rµ   r  rD  rE  r   r   r   rI  £  s   


z TestFunctionPassManager.test_runc                 C   s€   |   t¡}| d¡}|  |¡}| ¡  |  ¡  |¡ | ¡  | ¡  | 	|¡\}}| 
¡  |  |¡ |  d|¡ |  d|¡ d S )NÚlicmrK  ©r4   Úlicm_asmr   r  Úadd_licm_passr   r7  rñ   r"   rP  r\  rÁ   r«   ©r(   r3   rµ   r  ÚokrS  r   r   r   Útest_run_with_remarks²  s   



z-TestFunctionPassManager.test_run_with_remarksc                 C   sx   |   t¡}| d¡}|  |¡}| ¡  |  ¡  |¡ | ¡  | ¡  |j	|dd\}}| 
¡  |  |¡ |  d|¡ d S )Nr]  rW  rX  r“   )r4   r_  r   r  r`  r   r7  rñ   r"   rP  r\  rÁ   r*   ra  r   r   r   Ú test_run_with_remarks_filter_outÁ  s   



z8TestFunctionPassManager.test_run_with_remarks_filter_outc                 C   s„   |   t¡}| d¡}|  |¡}| ¡  |  ¡  |¡ | ¡  | ¡  |j	|dd\}}| 
¡  |  |¡ |  d|¡ |  d|¡ d S )Nr]  rX  rK  r^  ra  r   r   r   Útest_run_with_remarks_filter_inÏ  s   



z7TestFunctionPassManager.test_run_with_remarks_filter_inr    )	r?   r@   rA   r  rÝ   rI  rc  rd  re  r   r   r   r   r[  ˜  s    
r[  c                   @   s:   e Zd Zdd„ Zdd„ Ze e ¡  	d¡d¡dd„ ƒZ
d	S )
Ú
TestPassesc                 C   r  r    r>  r'   r   r   r   r  á  r!  zTestPasses.pmc                 C   s4  |   ¡ }| d¡ | ¡  | ¡  | ¡  | d¡ | ¡  | ¡  | ¡  | 	¡  | 
¡  | ¡  | ¡  | ¡  | ¡  | ¡  | ¡  | ¡  | ¡  | ¡  | ¡  | ¡  | ¡  | ¡  | d¡ | ¡  | ¡  | ¡  | ¡  | ¡  | d¡ | ¡  |  ¡  | !¡  | "¡  | #¡  | $¡  | %¡  | &¡  | '¡  | (¡  | )¡  | *¡  | +¡  | ,¡  | -¡  | .¡  | /¡  | 0¡  | 1¡  | 2¡  | 3¡  | 4¡  | 5¡  | 6¡  | 7¡  | 8¡  | 9¡  | :¡  | ;¡  | <¡  | =¡  | >¡  | ?¡  | @¡  | A¡  | B¡  | C¡  | D¡  d S )Nr“   éá   é*   é   )Er  Úadd_target_library_infoZadd_constant_merge_passZadd_dead_arg_elimination_passZadd_function_attrs_passrN  Zadd_global_dce_passZadd_global_optimizer_passZadd_ipsccp_passZadd_dead_code_elimination_passZadd_cfg_simplification_passZadd_gvn_passÚadd_instruction_combining_passr`  Zadd_sccp_passZadd_sroa_passZ"add_type_based_alias_analysis_passZadd_basic_alias_analysis_passZadd_loop_rotate_passZadd_region_info_passZadd_scalar_evolution_aa_passZ)add_aggressive_dead_code_elimination_passZadd_aa_eval_passZadd_always_inliner_passZadd_arg_promotion_passZadd_break_critical_edges_passZadd_dead_store_elimination_passZ*add_reverse_post_order_function_attrs_passZ)add_aggressive_instruction_combining_passZadd_internalize_passZadd_jump_threading_passZadd_lcssa_passZadd_loop_deletion_passZadd_loop_extractor_passZadd_single_loop_extractor_passZadd_loop_strength_reduce_passZadd_loop_simplification_passZadd_loop_unroll_passZadd_loop_unroll_and_jam_passZadd_loop_unswitch_passZadd_lower_atomic_passZadd_lower_invoke_passZadd_lower_switch_passZadd_memcpy_optimization_passZadd_merge_functions_passZadd_merge_returns_passZadd_partial_inlining_passZ!add_prune_exception_handling_passZ add_reassociate_expressions_passZ"add_demote_register_to_memory_passZadd_sink_passZadd_strip_symbols_passZadd_strip_dead_debug_info_passZadd_strip_dead_prototypes_passZadd_strip_debug_declare_passZadd_strip_nondebug_symbols_passZadd_tail_call_elimination_passZadd_basic_aa_passZadd_dependence_analysis_passZadd_dot_call_graph_passZadd_dot_cfg_printer_passZadd_dot_dom_printer_passZadd_dot_postdom_printer_passZadd_globals_mod_ref_aa_passZadd_iv_users_passZadd_lazy_value_info_passZadd_lint_passZadd_module_debug_info_passZadd_refprune_passr<  r   r   r   Útest_populateä  sŠ   



zTestPasses.test_populater|  r}  c                 C   sP   dd„ }|dd}|   dt|ƒ¡ |dd}|  dt|ƒ¡ |   dt|ƒ¡ dS )	zŠTest a specific situation that demonstrate TLI is affecting
        optimization. See https://github.com/numba/numba/issues/8898.
        c                 S   sX   t  t¡}t j |j¡}| ¡ }t  ¡ }| |¡ | r!| 	|j¡ | 
¡  | |¡ |S r    )r!   r0   Úasm_tli_exp2r:   ry   r-   r<   ZModulePassManagerr  rj  rk  r@  )Úuse_tlir3   r=   r  r  r   r   r   r@  0  s   


z9TestPasses.test_target_library_info_behavior.<locals>.runT)rn  zcall float @llvm.exp2.f32Fzcall float @ldexpfN)r«   r{   rC  )r(   r@  r3   r   r   r   Ú!test_target_library_info_behavior+  s   

z,TestPasses.test_target_library_info_behaviorN)r?   r@   rA   r  rl  rq   rr   rc   Úmachinere   ro  r   r   r   r   rf  ß  s
    Grf  c                   @   s0   e Zd Zdd„ Ze e ¡ dv d¡dd„ ƒZdS )Ú	TestDylibc                 C   s:   |   t¡ t d¡ W d   ƒ d S 1 sw   Y  d S )Nzzzzasdkf;jasd;l)r¨   rz   r!   Úload_library_permanentlyr'   r   r   r   Útest_bad_libraryH  s   "ÿzTestDylib.test_bad_library)ÚLinuxztest only works on Linuxc                 C   s   t dƒ}t |¡ d S )Nrm   )r   r!   rr  )r(   rN   r   r   r   Ú	test_libmL  s   zTestDylib.test_libmN)	r?   r@   rA   rs  rq   rr   rc   Úsystemru  r   r   r   r   rq  F  s    ÿrq  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestAnalysisc                 C   sj   t  ¡ }t  t  d¡t  d¡t  d¡g¡}t  ||d¡}t  | ¡ ¡}|j\}}| ||¡}| 	|¡ |S )Nr¯   r°   )
r   rƒ   r‚   r±   r„   r†   r…   r‡   ra   r   )r(   rm   r´   rµ   r¶   ÚxÚyÚzr   r   r   Úbuild_ir_moduleT  s   "

zTestAnalysis.build_ir_modulec                 C   sJ   |   ¡ }| d¡}t |¡}tj|dd}d}|  ||¡ |  ||¡ d S )Nr°   F©Z	show_instz%.5 = add i32 %.1, %.2)r{  Z
get_globalr!   Úget_function_cfgr«   rC  )r(   r3   r°   Údot_showing_instÚdot_without_inströ  r   r   r   Útest_get_function_cfg_on_ir^  s   

z(TestAnalysis.test_get_function_cfg_on_irc                 C   s‚   |   ¡  d¡}tj|dd}tj|dd}d}|  ||¡ |  ||¡ d}|  ||¡ |  ||¡ d}|  ||¡ |  ||¡ d S )Nrÿ   Tr|  FZdigraphzCFG for 'sum' functionz%.3 = add i32 %.1, %.2)r4   r   r!   r}  r«   rC  )r(   rÚ  r~  r  ÚprefixÚfnamerö  r   r   r   Útest_function_cfg_on_llvm_valueg  s   z,TestAnalysis.test_function_cfg_on_llvm_valueN)r?   r@   rA   r{  r€  rƒ  r   r   r   r   rw  S  s    
	rw  c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestTypeParsingc                 c   s&    t  ¡ }|V  t|ƒ}t |¡ d S r    )r   rƒ   r{   r!   r0   )r(   r3   r1   r   r   r   Úcheck_parsingz  s
   €zTestTypeParsing.check_parsingc                 C   sº   |   ¡  }t t d¡g¡}t ||d¡}t |dg¡|_W d   ƒ n1 s'w   Y  |   ¡ #}tjt d¡gdd}t ||d¡}t |dg¡|_W d   ƒ d S 1 sVw   Y  d S )Nr¯   r°   rJ   T)Úpacked)r…  r   ZLiteralStructTyper±   ÚGlobalVariabler²   Zinitializer)r(   r3   Útypr  r   r   r   Útest_literal_struct„  s   
ü
ÿ"ûz#TestTypeParsing.test_literal_structN)r?   r@   rA   r   r…  r‰  r   r   r   r   r„  y  s    
	r„  c                   @   ó   e Zd Zdd„ ZdS )ÚTestGlobalConstructorsc                 C   sš   |   t¡}|  |¡}| ¡  | ¡  | d¡}t tj¡}t 	||¡}|  
|jjd¡ | d¡}t tj¡|ƒ}|  
|ƒ d¡ | ¡  |  
|jjd¡ d S )Nrš  rà   r°   r›  rœ  )r4   Úasm_global_ctorsr9   r8  Zrun_static_constructorsZget_global_value_addressrò   ZPOINTERr   Úcastr*   Úcontentsr
  r9  r   Zrun_static_destructors)r(   r3   r:  Zptr_addrZptr_tZptrZfoo_addrr°   r   r   r   rž  –  s   



z.TestGlobalConstructors.test_global_ctors_dtorsN)r?   r@   rA   rž  r   r   r   r   r‹  •  ó    r‹  c                   @   sn   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestGlobalVariablesTc                 C   sZ   t  ¡ }t  d¡}t  ||d¡}||_t|ƒ}|r |  d|¡ n|  d|¡ |  |¡ d S )Nr¯   r°   Zundef)	r   rƒ   r±   r‡  rÃ  r{   r«   rC  r4   )r(   rÃ  Ú	has_undefr3   rˆ  r  r1   r   r   r   Úcheck_global_variable_linkage°  s   
z1TestGlobalVariables.check_global_variable_linkagec                 C   ó   |   d¡ d S )NrÁ  ©r’  r'   r   r   r   Útest_internal_linkageÄ  r§   z)TestGlobalVariables.test_internal_linkagec                 C   r“  )NÚcommonr”  r'   r   r   r   Útest_common_linkageÇ  r§   z'TestGlobalVariables.test_common_linkagec                 C   ó   | j ddd d S )NrÂ  F©r‘  r”  r'   r   r   r   Útest_external_linkageÊ  ri  z)TestGlobalVariables.test_external_linkagec                 C   r“  )NZavailable_externallyr”  r'   r   r   r   Ú!test_available_externally_linkageÍ  r§   z5TestGlobalVariables.test_available_externally_linkagec                 C   r“  )NÚprivater”  r'   r   r   r   Útest_private_linkageÐ  r§   z(TestGlobalVariables.test_private_linkagec                 C   r“  )NZlinkoncer”  r'   r   r   r   Útest_linkonce_linkageÓ  r§   z)TestGlobalVariables.test_linkonce_linkagec                 C   r“  )NZweakr”  r'   r   r   r   Útest_weak_linkageÖ  r§   z%TestGlobalVariables.test_weak_linkagec                 C   r“  )NZ	appendingr”  r'   r   r   r   Útest_appending_linkageÙ  r§   z*TestGlobalVariables.test_appending_linkagec                 C   r˜  )NZextern_weakFr™  r”  r'   r   r   r   Útest_extern_weak_linkageÜ  ri  z,TestGlobalVariables.test_extern_weak_linkagec                 C   r“  )NZlinkonce_odrr”  r'   r   r   r   Útest_linkonce_odr_linkageß  r§   z-TestGlobalVariables.test_linkonce_odr_linkagec                 C   r“  )NZweak_odrr”  r'   r   r   r   Útest_weak_odr_linkageâ  r§   z)TestGlobalVariables.test_weak_odr_linkageN)T)r?   r@   rA   r’  r•  r—  rš  r›  r  rž  rŸ  r   r¡  r¢  r£  r   r   r   r   r  ¯  s    
r  zonly on x86c                   @   rŠ  )ÚTestInlineAsmc                 C   s:   t  ¡  | jtd}| jdd}| |¡}|  d|¡ d S )N)r1   Fr8   Znop)r!   Zinitialize_native_asmparserr4   rõ  r>   r™   r«   )r(   rm   r  r1   r   r   r   Útest_inlineasmè  s
   
zTestInlineAsm.test_inlineasmN)r?   r@   rA   r¥  r   r   r   r   r¤  æ  s    r¤  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zd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                 C   s¼   | j dd}|  ¡ }| |¡}tj |¡}d}d}| ¡ D ]9}| ¡ rVd}|  | 	¡ ¡ |  
| ¡ dk¡ |  
t| ¡ ƒdk¡ |  | ¡ ¡ |  
|| ¡ k ¡ | ¡ } nq|  
|¡ d S )NFr8   éÿÿÿÿTr   )r>   r4   rw  r!   ÚObjectFileRefÚ	from_dataÚsectionsÚis_textrÎ   r7   rÁ   Úsizer`   ÚdataÚaddress)r(   r>   r3   r¹  ÚobjZhas_textZlast_addressr­   r   r   r   Útest_object_fileÿ  s$   
ø	zTestObjectFile.test_object_filec                 C   st   | j dd}|  ¡ }| |¡}tj |¡}t |  | j¡|¡}| |¡ t	t
t
t
ƒ| d¡ƒ}|  |ddƒd¡ d S )NFr8   Ú	sum_twicerK   r±  rà   )r>   r4   rw  r!   r¨  r©  r{  Úmod_asmr·  r   r   r9  r*   )r(   r>   r3   r¹  r¯  r9   r±  r   r   r   r³  	  s   
ÿ

ÿz#TestObjectFile.test_add_object_filec           	   	   C   sÄ   | j dd}|  ¡ }| |¡}tƒ \}}z1zt |d¡}| |¡ | ¡  W | ¡  n| ¡  w t	 
|  | j¡|¡}| |¡ W t |¡ nt |¡ w ttttƒ| d¡ƒ}|  |ddƒd¡ d S )NFr8   r´  r±  rK   r±  rà   )r>   r4   rw  r   rQ   rµ  r¶  Úflushrñ   r!   r{  r²  r·  r¸  r   r   r9  r*   )	r(   r>   r3   r¹  rº  r»  r!  r9   r±  r   r   r   r¼  #	  s&   



ÿ
ÿz3TestObjectFile.test_add_object_file_from_filesystemc                 C   sX   t  t¡}tj |¡}| ¡ D ]}| ¡ r)|  t	| 
¡ ƒd¡ |  | 
¡  ¡ t¡ qd S )Né   )rk  ÚfromhexÚissue_632_elfr!   r¨  r©  rª  r«  r*   r`   r­  ÚhexÚissue_632_text)r(   Úelfr¯  r­   r   r   r   Útest_get_section_content=	  s   
€ýz'TestObjectFile.test_get_section_contentN)r?   r@   rA   r²  r°  r³  r¼  rº  r   r   r   r   r¦  ð  s    r¦  c                   @   rs  )ÚTestTimePassesc              	   C   s¢   t  ¡ }t  ¡ }d|_| |¡ z%t  d¡ | |  ¡ ¡ | |  ¡ ¡ | |  ¡ ¡ W t  ¡ }t  d¡ n
t  ¡ }t  d¡ w |  	|t
¡ |  | d¡d¡ d S )Nr±  TFzPass execution timing reportrJ   )r!   r  r"  r$  r7  Zset_time_passesr@  r4   Úreport_and_reset_timingsrÀ   r{   r*   Úcount)r(   Úmpr   Úreportr   r   r   Útest_reportingI	  s   

ÿzTestTimePasses.test_reportingc                 C   s   |   t ¡ ¡ d S r    )rL  r!   r¼  r'   r   r   r   Útest_empty_report\	  s   z TestTimePasses.test_empty_reportN)r?   r@   rA   rÀ  rÁ  r   r   r   r   r»  H	  s    r»  c                   @   rŠ  )ÚTestLLVMLockCallbacksc                    s    g ‰ ‡ fdd„}‡ fdd„}t j ||¡ |  ˆ ¡ t  ¡  |  dˆ ¡ |  dˆ ¡ t j ||¡ |  t¡ t j ||¡ W d   ƒ d S 1 sIw   Y  d S )Nc                      ó   ˆ   d¡ d S )NÚacqrc  r   ©Úeventsr   r   rÄ  e	  r§   z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.acqc                      rÃ  )NÚrelrc  r   rÅ  r   r   rÇ  h	  r§   z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.relrÄ  rÇ  )	r!   r
   Zregister_lock_callbackrL  r  r«   Zunregister_lock_callbackr¨   rÊ  )r(   rÄ  rÇ  r   rÅ  r   Útest_lock_callbacksb	  s   
"ÿz)TestLLVMLockCallbacks.test_lock_callbacksN)r?   r@   rA   rÈ  r   r   r   r   rÂ  a	  r  rÂ  Ú__main__)Zrò   rª  r   r   r   Zctypes.utilr   r#   r   rQ   rc   rY   rT   rs   rq   Ú
contextlibr   Útempfiler   Zllvmliter   r	   r!   Zllvmlite.bindingr
   Zllvmlite.testsr   rp  rr  r   rB   r+  rþ  r%  r˜  r   rd   Úreplacer©   rü   rÙ  r  rè   rõ  rO  rU  r_  rŒ  r  r³   r  rš   rŸ   r¢   rð  r¶  r¸  rm  r   rC   ru   r¥   rî   Úobjectr7  rt  rz  rr   re   r~  r½  r  r  r  r  r;  r=  r[  rf  rq  rw  r„  r‹  r  r¤  r¦  r»  rÂ  r?   Úmainr   r   r   r   Ú<module>   s²    




D(ÿÿ"*I  H : A  (JOGg&7	X
ÿ