
    sKgPR                    b   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j6                  d    Z e
j:                         d
k(  r ej<                  d       d ZdZ dZ!dZ"dZ#dZ$dZ% e
jL                         dk(  re%jO                  dd      Z%dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1d Z2d!Z3d"Z4d#Z5g d$Z6g d%Z7g d&Z8d'Z9d(Z:d)Z;d*Z<d+Z= G d, d-e      Z> G d. d/e>      Z? G d0 d1e>      Z@ G d2 d3e>      ZA G d4 d5e>      ZB G d6 d7eC      ZD G d8 d9eD      ZE G d: d;e>eE      ZF ej                   e
j:                         j                  d<      d=       G d> d?e>             ZI G d@ dAe>      ZJ G dB dCe>      ZK G dD dEe>      ZL G dF dGe>      ZM G dH dIe>      ZN G dJ dKe>      ZO G dL dMeC      ZP G dN dOe>eP      ZQ G dP dQe>eP      ZR G dR dSe>eP      ZS G dT dUe>      ZT G dV dWe>      ZU G dX dYe>      ZV G dZ d[eF      ZW G d\ d]e>      ZX ej                   e
j:                         j                  d<      d^       G d_ d`e>             ZY G da dbe>      ZZ G dc dde>      Z[ G de dfe>      Z\e]dgk(  r ej                          yy)h    N)	CFUNCTYPEc_intc_int32)find_library)contextmanager)mkstemp)ir)binding)ffi)TestCasearmv7lzlibgcc_s.so.1c                     t        j                  t         j                        } 	 t        j                  t         j                  d       	 t        j                  t         j                  |        y# t         j                  $ r' Y t        j                  t         j                  |        yw xY w# t        j                  t         j                  |        w xY w)Nde_DEFT)locale	setlocaleLC_ALLError)curs    _/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/llvmlite/tests/test_binding.pyno_de_localer      s    


6==
)C-0 , <<  	,
 	,s#   $A/ /B)B, (B))B, ,&Ca  
    ; ModuleID = '<string>'
    source_filename = "asm_sum.c"
    target triple = "{triple}"
    %struct.glob_type = type {{ i64, [2 x i64]}}
    %struct.glob_type_vec = 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
    }}
    PyPyPy_GetVersion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)
    zg
    ; ModuleID = '<string>'
    target triple = "{triple}"

    declare i32 @vararg(i32 %.1, ...)
    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*)
@  7f454c4602010100000000000000000001003e000100000000000000000000000000000000000000e0000000000000000000000040000000000040000500010048c1e2204809c24889d048c1c03d4831d048b90120000480001070480fafc8000000000000000000000000000000000000000000000000002f0000000400f1ff00000000000000000000000000000000070000001200020000000000000000001f00000000000000002e74657874005f5f617279626f002e6e6f74652e474e552d737461636b002e737472746162002e73796d746162003c737472696e673e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f0000000300000000000000000000000000000000000000a800000000000000380000000000000000000000000000000100000000000000000000000000000001000000010000000600000000000000000000000000000040000000000000001f000000000000000000000000000000100000000000000000000000000000000f00000001000000000000000000000000000000000000005f00000000000000000000000000000000000000000000000100000000000000000000000000000027000000020000000000000000000000000000000000000060000000000000004800000000000000010000000200000008000000000000001800000000000000>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
}
a  
; ModuleID = '<string>'
target triple = "{triple}"

define void @foo(i32 %N) {{
  ; unnamed block for testing
  %cmp4 = icmp sgt i32 %N, 0
  br i1 %cmp4, label %for.body, label %for.cond.cleanup

for.cond.cleanup:
  ret void

for.body:
  %i.05 = phi i32 [ %inc, %for.body ], [ 0, %0 ]
  %inc = add nuw nsw i32 %i.05, 1
  %exitcond.not = icmp eq i32 %inc, %N
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
}}
c                   2    e Zd Zd Zd ZedfdZddZd Zy)BaseTestc                     t        j                          t        j                          t        j                          t	        j
                          t        j                  d d  | _        g t        j                  d d  y N)llvm
initializeinitialize_native_targetinitialize_native_asmprintergccollectgarbageold_garbageselfs    r   setUpzBaseTest.setUp  sJ    %%'))+


::a=

1    c                 p    t        j                          | j                  t         j                  g        | `y r'   )r,   r-   assertEqualr.   r/   r0   s    r   tearDownzBaseTest.tearDown  s'     	

R(r3   Nc                 z    |j                  t        j                               }t        j                  ||      }|S )Ntriple)formatr(   get_default_tripleparse_assembly)r1   asmcontextmods       r   modulezBaseTest.module"  s2    jj 7 7 9j:!!#w/
r3   c                 H    || j                         }|j                  |      S r'   )r@   get_global_variable)r1   namer?   s      r   globzBaseTest.glob'  s#    ;++-C&&t,,r3   c                b    t         j                  j                         }|j                  |      S )Njit)r(   Targetfrom_default_triplecreate_target_machine)r1   rG   targets      r   target_machinezBaseTest.target_machine,  s(    002+++44r3   )rD   N)	__name__
__module____qualname__r2   r6   asm_sumr@   rD   rL    r3   r   r%   r%     s"     !$ 
-
5r3   r%   c                       e Zd ZdZ ej
                  ej                  j                  d      d       ej
                  e	j                  j                  d      d      d               Zy)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                  j                         }d|d<   t        j                  dd|gt        j                  |      }|j                         \  }}| j                  d|j                         t        j                  d      }t               }|j                         j!                         D ]x  }|j#                         }	|	s|	d   dk(  s|	d	   }
|j%                  |
      }t'        |	      d
k7  s|s| j)                  d|       |j+                  |j-                  d	             z d|vsd|vr| j)                  d|       t        g d      }t/        j0                         dk(  r|j+                  d       |D ]0  }
|
j3                  d      r|
|vs| j)                  d|
d|       2 y )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_sr_   zld-linuxld64r   libtinfoz	ld-linux-zunexpected dependency z in )r   lib_nameosenvironcopy
subprocessPopenPIPEcommunicater5   
returncoderecompilesetdecode
splitlinessplitmatchlenfailaddgroupplatformpython_implementation
startswith)r1   lib_pathr[   pout_lib_patdepslinepartsdepmalloweds                r   
test_linuxzTestDependencies.test_linux6  sy   
 77==jjooFix8$.OO>QALL)**EFuJJL++-DJJLEqX-AhMM#&u:?!II4AB$ . T!9IItEF ? @))+v5KK
#C>>+.3g3E		c4HI r3   N)rM   rN   rO   __doc__unittest
skipUnlesssysr}   r   rj   rk   getr   rQ   r3   r   rS   rS   1  sf     X009.0X(<=57J70Jr3   rS   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                 r    t         |           t        j                          t        j                          y r'   )superr2   r(   initialize_all_targetsinitialize_all_asmprinters)r1   	__class__s    r   r2   zTestRISCVABI.setUpb  s$    ##%'')r3   c                     	 t         j                  j                  | j                         y # t        $ r+}dt        |      v r| j                  d       n|Y d }~y d }~ww xY w)Nz/No available targets are compatible with triplez(RISCV target unsupported by linked LLVM.)r(   rH   from_tripler9   RuntimeErrorstrskipTest)r1   es     r   check_riscv_targetzTestRISCVABI.check_riscv_targetg  sQ    	KK##DKK0 	@CFJHI J	s   ), 	A !AA c                 x    t         j                  j                  | j                        } |j                  di |S )NrQ   )r(   rH   r   r9   rJ   )r1   kwarglltargets      r   riscv_target_machinez!TestRISCVABI.riscv_target_machinep  s0    ;;**4;;7-x--666r3   c                    t        j                         }t        j                         }t        j                  |||f      }t        j                         }t        j
                  ||d      }|j                         }t        j                  |      }|j                  \  }}	|j                  ||      }
|j                  |
|	      }|j                  |       t        j                  t        |            }|j                          |S )NfpaddrC   )r	   
DoubleType	FloatTypeFunctionTypeModuleFunctionappend_basic_block	IRBuilderargsfpextfaddr!   r(   r<   r   verify)r1   f64f32fntyr@   funcblockbuilderabarg0resultllmods                r   fpadd_ll_modulezTestRISCVABI.fpadd_ll_modulet  s    mmollnsS#J/{{64g6''),,u%yy1}}Q$dA&F##CK0r3   c                     g }|j                         D ]M  }|j                         }|j                  d      r%|j                  d      r7|dk(  r=|j                  |       O |S )N.r    )rv   stripr   append)r1   r=   asm_listr   s_lines        r   break_up_asmzTestRISCVABI.break_up_asm  sX    NN$DZZ\F%%c*f.?.?.H|'	 %
 r3   c                     | j                          | j                         }| j                  dd      }| j                  | j	                  |j                  |            t               y )N+f,+dilp32featuresabiname)r   r   r   r5   r   emit_assemblyriscv_asm_ilp32r1   r   rK   s      r   test_rv32d_ilp32zTestRISCVABI.test_rv32d_ilp32  sZ    !$$&**GW*M**6+?+?+FG(	*r3   c                     | j                          | j                         }| j                  dd      }| j                  | j	                  |j                  |            t               y )Nr   ilp32fr   )r   r   r   r5   r   r   riscv_asm_ilp32fr   s      r   test_rv32d_ilp32fzTestRISCVABI.test_rv32d_ilp32f  Z    !$$&**GX*N**6+?+?+FG)	+r3   c                     | j                          | j                         }| j                  dd      }| j                  | j	                  |j                  |            t               y )Nr   ilp32dr   )r   r   r   r5   r   r   riscv_asm_ilp32dr   s      r   test_rv32d_ilp32dzTestRISCVABI.test_rv32d_ilp32d  r   r3   )rM   rN   rO   r   r9   r2   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   [  s7     %F*
7"*++r3   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y)TestMiscz7
    Test miscellaneous functions in llvm.binding.
    c                 .    | j                  t               y r'   )r@   rP   r0   s    r   test_parse_assemblyzTestMisc.test_parse_assembly  s    Gr3   c                     | j                  t              5 }| j                  t               d d d        t	        j
                        }| j                  d|       | j                  d|       y # 1 sw Y   CxY w)Nzparsing errorzinvalid operand type)assertRaisesr   r@   asm_parse_errorr   	exceptionassertIn)r1   cmss      r   test_parse_assembly_errorz"TestMisc.test_parse_assembly_error  sW    |,KK( -oq),a0	 -,s   A..A7c                    t        j                         }t        j                  t        j                  d      g       }t        j                  ||d      }t        j
                  |j                  d            }|j                  t        j                  t        j                  d      d             t        |      }| j                  |t               y )N    fooz<>!*''#r   i90  )r	   r   r   IntTyper   r   r   r!   Constantr   r5   asm_nonalphanum_blocklabel)r1   r?   ftfnbdr=   s         r   test_nonalphanum_block_namez$TestMisc.test_nonalphanum_block_name  s    iik__RZZ^R0[[b%(\\"//Y/?@
r{{2::b>512#h89r3   c                     t         j                  j                         }t         j                  j                         }||k(  sJ y r'   )r(   r>   get_global_context)r1   	gcontext1	gcontext2s      r   test_global_contextzTestMisc.test_global_context  s4    LL335	LL335	I%%%r3   c                     t        j                  dd       t        j                  dd       t        j                  d      }| j                  |d       t        j                  d      }| j	                  |d        y )N__xyzzy  i.  __foobar)r(   
add_symboladdress_of_symbolr5   assertIs)r1   addrs     r   test_dylib_symbolszTestMisc.test_dylib_symbols  s\    	4(	4(%%i0t$%%j1dD!r3   c                 z    t        j                         }| j                  |t               | j	                  |       y r'   )r(   r;   assertIsInstancer   
assertTrue)r1   r9   s     r   test_get_default_triplez TestMisc.test_get_default_triple  s,    ((*fc*r3   c                 4   d }t        j                         }t        j                         }| j                  |t               | j                  |        ||j                  d      d         } ||j                  d      d         }| j                  ||       y )Nc                     | dk(  ry| S )Npowerpc64leppc64lerQ   )archs    r   normalize_ppcz7TestMisc.test_get_process_triple.<locals>.normalize_ppc  s    }$ r3   -r   )r(   get_process_tripler;   r   r   r   rw   r5   )r1   r  r9   defaultdefault_archtriple_archs         r   test_get_process_triplez TestMisc.test_get_process_triple  s    	 ((*))+fc*$W]]3%7%:;#FLL$5a$89{3r3   c                 R   t        j                         }| j                  |t               | j                  |t         j                         |j                         D ]B  \  }}| j                  |t               | j                  |       | j                  |t               D | j                  |j                         t               d}dj                  |      }| j                  t        j                  |d             | j                  t        j                  |d             | j                  t        j                  |d             t        |      dk(  r!| j                  |j                         d       y | j                  t        j                  ||j                                      y )Nz[+\-][a-zA-Z0-9\._-]+z^({0}|{0}(,{0})*)?$r   z+aaz+a,-bbr   )r(   get_host_cpu_featuresr   dict
FeatureMapitemsr   r   boolflattenr:   assertIsNotNonerr   rx   ry   r5   )r1   r   kvre_termregexs         r   test_get_host_cpu_featuresz#TestMisc.test_get_host_cpu_features  s7   --/h-h8NN$DAq!!!S)OOA!!!T* % 	h..0#6*&--g6RXXeR01RXXeU34RXXeX67x=AX--/4  %1A1A1C!DEr3   c                 z    t        j                         }| j                  |t               | j	                  |       y r'   )r(   get_host_cpu_namer   r   r   )r1   cpus     r   test_get_host_cpu_namezTestMisc.test_get_host_cpu_name  s,    $$&c3'r3   c                 T    d}t        j                  t        j                  d|g       y )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rm   
check_callr   
executabler1   codes     r   test_initfinizTestMisc.test_initfini  s$    	 	s~~tT:;r3   c                 T    d}t        j                  t        j                  d|g       y )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:;r3   c                     t         j                  \  }}}d}| j                  ||       | j                  |t        d             y )N)         )r(   llvm_version_infor   range)r1   majorminorpatchvalids        r   test_versionzTestMisc.test_version  s9    "44ueeU#eU1X&r3   c                 ,    t        j                          y r'   )r(   check_jit_executionr0   s    r   test_check_jit_executionz!TestMisc.test_check_jit_execution  s      "r3   zLocale not availablec                     | j                  t              }t        |      }t        j                  t        j
                  d       t        |      }| j                  ||       y )Nr   )r@   asm_double_localer   r   r   r   r5   )r1   r   expectgots       r   test_print_double_localez!TestMisc.test_print_double_locale  sI    KK)*Q 	0!f%r3   c                 ^    d}d}t         j                  |d|g}t        j                  |       y )Nzfrom llvmlite import bindingz-Werrorr  )r   r"  rm   r!  )r1   r$  flagscmdargss       r   test_no_accidental_warningsz$TestMisc.test_no_accidental_warnings)  s,    ->>5$5g&r3   N)rM   rN   rO   r   r   r   r   r   r   r   r  r  r  r%  r'  r2  r5  r   skipIfr   r:  r>  rQ   r3   r   r   r     sr    1:&
" 
4$F.
<<'# X__\^%;<	& =	&'r3   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y)TestModuleRefc                     | j                         }t        |      j                         }| j                  |j	                  d      |       y )Nz; ModuleID =)r@   r   r   r   r   r1   r?   r   s      r   test_strzTestModuleRef.test_str2  s4    kkmHNN^4a8r3   c                     | j                         }t        |       |j                          | j                  t        j
                        5  t        |       d d d        |j                          y # 1 sw Y   xY wr'   )r@   r   closer   ctypesArgumentErrorr1   r?   s     r   
test_closezTestModuleRef.test_close7  sO    kkmC		v334H 5		 54s   A00A9c                    | j                         }t        |       |5  t        |       d d d        | j                  t        j                        5  t        |       d d d        | j                  t
              5  |5  	 d d d        d d d        y # 1 sw Y   gxY w# 1 sw Y   @xY w# 1 sw Y   *xY w# 1 sw Y   y xY wr'   )r@   r   r   rG  rH  r   rI  s     r   	test_withzTestModuleRef.test_with?  s    kkmCH v334H 5|,  -,	 S44  -,s;   BB:B4=B(?B4BB%(B1	-B44B=c                     | j                         }d|_        | j                  |j                  d       d|_        | j                  |j                  d       y )Nr   bar)r@   rC   r5   rI  s     r   	test_namezTestModuleRef.test_nameJ  sC    kkm5)5)r3   c                 \    | j                         }| j                  |j                  d       y )Nz	asm_sum.c)r@   r5   source_filerI  s     r   test_source_filezTestModuleRef.test_source_fileQ  s!    kkm+6r3   c                     | j                         }|j                  }| j                  |t               ||_        | j	                  ||j                         y r'   )r@   data_layoutr   r   r5   rC  s      r   test_data_layoutzTestModuleRef.test_data_layoutU  sA    kkmOOa%COO,r3   c                     | j                         }|j                  }| j                  |t        j                                d|_        | j                  |j                  d       y )Nr   )r@   r9   r5   r(   r;   rC  s      r   test_triplezTestModuleRef.test_triple\  sJ    kkmJJD3356
R(r3   c                 P   | j                         }| j                  |j                         d        | j                  t              }| j	                  t
              5 }|j                          d d d        t        j                        }| j                  d|       y # 1 sw Y   1xY w)Nz%.bug = add i32 1, %.bug)	r@   r   r   asm_verification_failr   r   r   r   r   )r1   r?   r   r   s       r   test_verifyzTestModuleRef.test_verifyc  st    kkmcjjlD)kk/0|,JJL -0!4 -,s   BB%c                 `   | j                         }|j                  d      }| j                  |t        j                         | j                  |j                  d       | j                  t              5  |j                  d       d d d        ~t        |j                          y # 1 sw Y    xY w)Nsumr   )
r@   get_functionr   r(   ValueRefr5   rC   r   	NameErrorr   r1   r?   r   s      r   test_get_functionzTestModuleRef.test_get_functionn  s    kkme$b$--0%(y)U# * BII *)   3B$$B-c                 P   | j                         }|j                  d      }| j                  |j                  d       | j	                  t        j                  dt        |                   | j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nstruct.glob_type8%struct\.glob_type(\.[\d]+)? = type { i64, \[2 x i64\] }zstruct.doesnt_exist)
r@   get_struct_typer5   rC   r  rr   rx   r   r   r_  )r1   r?   st_tys      r   test_get_struct_typez"TestModuleRef.test_get_struct_type{  s    kkm##$67%78RXXGJ 	 y) 56 *))s   BB%c                 `   | j                         }|j                  d      }| j                  |t        j                         | j                  |j                  d       | j                  t              5  |j                  d       d d d        ~t        |j                          y # 1 sw Y    xY w)NrD   rN  )
r@   rB   r   r(   r^  r5   rC   r   r_  r   )r1   r?   gvs      r   test_get_global_variablez&TestModuleRef.test_get_global_variable  s    kkm$$V,b$--0&)y)##E* * BII *)rb  c                     | j                         }|j                  }~t        |d       }| j                  t	        |      d       | j                  |D cg c]  }|j
                   c}g d       y c c}w )Nc                     | j                   S r'   r   )values    r   <lambda>z5TestModuleRef.test_global_variables.<locals>.<lambda>  s    UZZr3   )key   )rD   glob_bglob_fglob_struct)r@   global_variablessortedr5   ry   rC   )r1   r?   itglobsgs        r   test_global_variablesz#TestModuleRef.test_global_variables  sf    kkm!!r78UQ'%0%Q!&&%0D	F0s   A4c                     | j                         }|j                  }~t        |      }| j                  t	        |      d       | j                  |d   j
                  d       y Nr]   r   r\  )r@   	functionslistr5   ry   rC   )r1   r?   rw  funcss       r   test_functionszTestModuleRef.test_functions  sN    kkm]]RUQ'q.r3   c           	      P   | j                         }|j                  }~t        |      }| j                  t	        |      d       | j                  t        j                  d|d   j                               | j                  t        j                  dt        |d                      y )Nr]   struct\.glob_type(\.[\d]+)?r   re  )
r@   struct_typesr~  r5   ry   r  rr   rx   rC   r   )r1   r?   rw  structss       r   test_structszTestModuleRef.test_structs  s    kkmr(Wq)RXX&D&-ajoo7 	8RXXG
O 	r3   c                    | j                         }| j                  t              }|j                  |       | j                  t	        d |j
                  D              ddg       |j                  d       |j                          | j                  t        j                        5  |j                  d       d d d        y # 1 sw Y   y xY w)Nc              3   4   K   | ]  }|j                     y wr'   r   .0fs     r   	<genexpr>z-TestModuleRef.test_link_in.<locals>.<genexpr>       2>a166>   mulr\  )r@   asm_mullink_inr5   rv  r}  r]  rF  r   rG  rH  )r1   destsrcs      r   test_link_inzTestModuleRef.test_link_in  s    {{}kk'"S24>>22UEN	D% 

v334U# 544s   %C  C	c                 l   | j                         }| j                  t              }|j                  |d       | j                  t	        d |j
                  D              ddg       |j                          | j                  t	        d |j
                  D              dg       |j                  d       y )NT)preservec              3   4   K   | ]  }|j                     y wr'   r   r  s     r   r  z6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>  r  r  r  r\  c              3   4   K   | ]  }|j                     y wr'   r   r  s     r   r  z6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>  s     ?1r  )r@   r  r  r5   rv  r}  rF  r]  )r1   r  src2s      r   test_link_in_preservez#TestModuleRef.test_link_in_preserve  s    {{}{{7#TD)24>>22UEN	D

???%I% r3   c                    | j                         }| j                  t              }| j                  t              5 }|j	                  |       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nzsymbol multiply defined)r@   asm_sum2r   r   r  r   r   r   )r1   r  r  r   s       r   test_link_in_errorz TestModuleRef.test_link_in_error  s_     {{}kk(#|,LL -/R\\1BC -,s   A;;Bc                     | j                         }|j                         }d}d}| j                  |j                  |      xs |j                  |             y )Ns   s   BC)r@   
as_bitcoder   r   )r1   r?   bcbitcode_wrapper_magicbitcode_magics        r   test_as_bitcodezTestModuleRef.test_as_bitcode  sO    kkm^^ !4m4 =&;<	>r3   c                    | j                  t              5 }t        j                  d       d d d        | j	                  dt        j                               t        j                  d   dk  r&| j	                  dt        |j                               y | j	                  dt        |j                               y # 1 sw Y   xY w)Nr3   zLLVM bitcode parsing errorr   	   zInvalid bitcode signaturez(file too small to contain bitcode header)r   r   r(   parse_bitcoder   r   r   r,  )r1   r   s     r   test_parse_bitcode_errorz&TestModuleRef.test_parse_bitcode_error  s    |,s# -2C4EF!!!$q(MM5s2<<7HIMM:C<M -,s   B;;Cc                 D   t        j                         }| j                  |      j                         }t        j                         }t        j                  ||      }| j                  |j                         |       |j                  d       |j                  d       y )N)r>   r\  rD   )r(   create_contextr@   r  r  r5   r]  rB   )r1   context1r  context2r?   s        r   test_bitcode_roundtripz$TestModuleRef.test_bitcode_roundtrip  s|    &&([[[*557&&(  X.)2.'r3   c                     | j                         }|j                         }| j                  ||       | j                  |j	                         |j	                                y r'   )r@   cloneassertIsNotr5   r  )r1   r   cloneds      r   test_cloningzTestModuleRef.test_cloning  sG    KKM#**,alln=r3   N)rM   rN   rO   rD  rJ  rL  rO  rR  rU  rW  rZ  ra  rh  rk  rz  r  r  r  r  r  r  r  r  r  rQ   r3   r   rA  rA  0  sm    9
	*7-)	5
7F/
	$!D>
	(>r3   rA  c                   f    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y)JITTestMixinz*
    Mixin for ExecutionEngine tests.
    c                     |j                          |j                  |      }| j                  |        t        t        t        t              |      S r'   )finalize_objectget_function_addressr   r   r   )r1   ee	func_namecfptrs       r   get_sumzJITTestMixin.get_sum  s@    
''	2-yu-e44r3   c                     | j                         }| j                  |      5 }| j                  |      } |dd      }| j                  d|       d d d        y # 1 sw Y   y xY wNr^   )r@   rG   r  r5   )r1   r?   r  cfuncress        r   test_run_codezJITTestMixin.test_run_code  sM    kkmXXc]bLL$E2,CR% ]]s   -AA!c                 
   | j                  | j                               }|j                          |j                          | j                  t        j
                        5  |j                          d d d        y # 1 sw Y   y xY wr'   )rG   r@   rF  r   rG  rH  r  r1   r  s     r   rJ  zJITTestMixin.test_close	  sT    XXdkkm$



v334  544s   A99Bc                 ~   | j                  | j                               }|5  	 d d d        | j                  t              5  |5  	 d d d        d d d        | j                  t        j
                        5  |j                          d d d        y # 1 sw Y   lxY w# 1 sw Y   VxY w# 1 sw Y   ZxY w# 1 sw Y   y xY wr'   )rG   r@   r   r   rG  rH  r  r  s     r   rL  zJITTestMixin.test_with  s    XXdkkm$ |,  - v334  54 R  -, 54s;   BB'BB'5B3BB$	 B''B03B<c                     | j                         }| j                  |      }|j                          |j                          y r'   r@   rG   rF  r1   r?   r  s      r   test_module_lifetimez!JITTestMixin.test_module_lifetime  s,    kkmXXc]

		r3   c                     | j                         }| j                  |      }|j                          |j                          y r'   r  r  s      r   test_module_lifetime2z"JITTestMixin.test_module_lifetime2   s,    kkmXXc]		

r3   c                    | j                  | j                               }| j                  t              }|j                  |       | j	                  t
              5  |j                  |       d d d        | j                  |j                         |j                          | j                  |j                         y # 1 sw Y   PxY wr'   )
rG   r@   r  
add_moduler   KeyErrorassertFalseclosedrF  r   r1   r  r?   s      r   test_add_modulezJITTestMixin.test_add_module&  s    XXdkkm$kk'"
cx(MM# )$



#	 )(s   B<<Cc                     | j                  | j                               }| j                  t              }|j                  |       |j	                          |j	                          y r'   rG   r@   r  r  rF  r  s      r   test_add_module_lifetimez%JITTestMixin.test_add_module_lifetime0  sB    XXdkkm$kk'"
c		

r3   c                     | j                  | j                               }| j                  t              }|j                  |       |j	                          |j	                          y r'   r  r  s      r   test_add_module_lifetime2z&JITTestMixin.test_add_module_lifetime27  sB    XXdkkm$kk'"
c

		r3   c                    | j                  | j                               }| j                  t              }|j                  |       |j	                  |       | j                  t              5  |j	                  |       d d d        | j                  |j                         |j                          | j                  |j                         y # 1 sw Y   PxY wr'   )
rG   r@   r  r  remove_moduler   r  r  r  rF  r  s      r   test_remove_modulezJITTestMixin.test_remove_module>  s    XXdkkm$kk'"
c
x(S! )$

$	 )(s   ,CCc                     | j                         }| j                  |      }|j                  }| j                  |j                  |       t	        |       ~~t	        |       y r'   )r@   rG   target_datar   r   )r1   r?   r  tds       r   test_target_datazJITTestMixin.test_target_dataI  sH    kkmXXc]^^bnnb)BBr3   c                 `   | j                         }| j                  |      }|j                  }|j                  d      }|j                  d      }|j                  d      }t        j
                  dk  rdnd}|||fD ]-  }| j                  |j                  |j                        |       / | j                  |j                  |j                        d       | j                  |j                  |j                        d       | j                  |j                  |j                        d       | j                  |j                  |j                        d       | j                  |j                  |j                        d	       | j                  |j                  |j                        d
       y )NrD   rr  rt          rq  r+  r]   )r]   r^   rq     )rq  r+  )r@   rG   r  rB   r   maxsizer5   get_abi_sizetypeget_pointee_abi_sizeget_pointee_abi_alignmentr   )	r1   r?   r  r  gv_i32gv_i8	gv_structpointer_sizery  s	            r   test_target_data_abi_enquiriesz+JITTestMixin.test_target_data_abi_enquiriesS  sK   kkmXXc]^^((0''1++M:	KK'1qq%+AR__QVV4lC , 	00=qA55fkkBAF00<a@b225::>	J00@"Eb229>>BFKr3   c                    g fd}| j                         }| j                  |      }|j                  |       | j                  t	              d       | j                  |      } |dd       | j                  t	              d       | j                  d   d   |       | j                  d   d   t               g d d  | j                  t              }|j                  |       | j                  |d      }| j                  t	              d       | j                  d   d   |       | j                  d   d   t               y )Nc                 ,    j                  | |f       y r'   r   r?   bufnotifiess     r   notifyz5JITTestMixin.test_object_cache_notify.<locals>.notifyk      OOS#J'r3   r   r^   r  r]   r  )r@   rG   set_object_cacher5   ry   r  r   r   bytesr  r  )r1   r  r?   r  r  mod2r  s         @r   test_object_cache_notifyz%JITTestMixin.test_object_cache_notifyh  s   	( kkmXXc]
F#X*R aX*hqk!nc*hqk!ne4{{7#
dR'X*hqk!nd+hqk!ne4r3   c                 |  	 g g fd}fd}| j                         }| j                  |      }|j                  ||       | j                  t	              d       | j                  t	              d       | j                  |      }| j                  t	              d       | j                  t	              d       | j                  d   |       d   d   		fd}g d d  g d d  | j                  t              }| j                  |      }|j                  ||       | j                  t	              d       | j                  t	              d       | j                  |      }| j                   |dd      d       | j                  t	              d       | j                  t	              d       y )	Nc                 ,    j                  | |f       y r'   r  r  s     r   r  z8JITTestMixin.test_object_cache_getbuffer.<locals>.notify  r  r3   c                 (    j                  |        y r'   r  )r?   
getbufferss    r   	getbufferz;JITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer  s    c"r3   r   r]   c                 *    j                  |        S r'   r  )r?   r  
sum_buffers    r   getbuffer_successfulzFJITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer_successful  s    c"r3   r^   r  r  )r@   rG   r  r5   ry   r  r   r  )
r1   r  r  r?   r  r  r  r  r  r  s
          @@@r   test_object_cache_getbufferz(JITTestMixin.test_object_cache_getbuffer  sy   
	(	# kkmXXc]
FI. 	X*Z!,R X*Z!,jmS)a[^

	 
1kk'"XXc]
F$89X*Z!,R q"r*X*Z!,r3   N)r\  )rM   rN   rO   r   r  r  rJ  rL  r  r  r  r  r  r  r  r  r  r  rQ   r3   r   r  r    sN    5&!!$	%L*56*-r3   r  c                       e Zd Zd Zd Zy)JITWithTMTestMixinc                 >   | j                  d      }| j                         }| j                  ||      }|j                  |      }| j	                  d|       |j                  d       |j                  |      }| j	                  d|       | j                  ||       y)z%Test TargetMachineRef.emit_assembly()TrF   r\  N)rL   r@   rG   r   r   set_asm_verbosityassertNotEqual)r1   rL   r?   r  raw_asmraw_asm_verboses         r   test_emit_assemblyz%JITWithTMTestMixin.test_emit_assembly  s    ,,,6kkmXXc>* ..s3eW%((.(66s;eW%G_5r3   c                 $   | j                  d      }| j                         }| j                  ||      }|j                  |      }| j	                  |t
               t        j                  j                  d      r| j                  d|dd        yy)z#Test TargetMachineRef.emit_object()TrF   rT   s   ELFN
   )
rL   r@   rG   emit_objectr   r  r   r}   r   r   )r1   rL   r?   r  code_objects        r   test_emit_objectz#JITWithTMTestMixin.test_emit_object  s|    ,,,6kkmXXc>*$005k51<<""7+MM&+cr"23 ,r3   N)rM   rN   rO   r  r  rQ   r3   r   r   r     s    
6	4r3   r   c                       e Zd ZdZddZy)	TestMCJitz@
    Test JIT engines created with create_mcjit_compiler().
    Nc                 V    || j                  d      }t        j                  ||      S )NTrF   )rL   r(   create_mcjit_compiler)r1   r?   rL   s      r   rG   zTestMCJit.jit  s.    !!00T0:N))#~>>r3   r'   )rM   rN   rO   r   rG   rQ   r3   r   r  r    s    ?r3   r  x86x86 onlyc            	           e Zd Zeddd eeee      df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y)TestOrcLLJITr\  NFc                    t        j                  |d|      }t        j                         }|r|j                          |j	                  |j                  t        j                                     j                  |      j                  ||      }	|	|   }
| j                  |
       | j                  ||	j                         ||	 ||
      fS )NF)use_jit_linksuppress_errorsr8   )r(   create_lljit_compilerJITLibraryBuilderadd_current_processadd_irr:   r;   export_symbollinkr   r5   rC   )r1   r=   r  rL   add_process	func_typer  lljitr   rtr  s              r   rG   zTestOrcLLJIT.jit  s     **>8=;JL ((*'')VCJJd&=&=&?J@A]9%T%# 	 9BGG,b)E***r3   c                     t        j                         }t        j                         j                  dd      j	                  d      j                  |d      }| j                  |d   d       y )Nr   r   r   )r(   r  r  import_symbolr  r  r5   r1   r  r   s      r   test_define_symbolzTestOrcLLJIT.test_define_symbol  sW    **,##%33ItD]9%dd5%&8 	I-r3   c                    t        j                         }| j                  t        d      5  |j	                  dd       d d d        t        j
                         j                  dd      j                  d      j                  |d      }| j                  |d   d       | j                  t        d      5  |j	                  dd       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NzNo such libraryr   r   r   r   r   zSymbols not found.*__foobar)
r(   r  assertRaisesRegexr   lookupr  r"  r  r  r  r#  s      r   "test_lookup_undefined_symbol_failsz/TestOrcLLJIT.test_lookup_undefined_symbol_fails  s    **,##L2CDLL
+ E##%33ItD]9%dd5%&8 	ByM1-##L$ACLL
+C C ED
C Cs   C4CCC%c                     t         j                  dk(  r6| j                  t        d      5  t	        j
                  d       d d d        y | j                  t	        j
                  d             y # 1 sw Y   y xY w)Nwin32zJITLink .* WindowsT)r  )r   r}   r&  r   r(   r  r  r0   s    r   test_jit_linkzTestOrcLLJIT.test_jit_link   s_    <<7"''(<>**=> >   !;!;!NO	> >s   A00A9c                     | j                         \  }}}|5   |dd      }| j                  d|       d d d        y # 1 sw Y   y xY wr  )rG   r5   )r1   r  r   r  r  s        r   r  zTestOrcLLJIT.test_run_code  s<    !XXZE2,CR% UUs	   <Ac                     | j                         \  }}}|j                          |j                          | j                  t              5  |j	                  dd       d d d        y # 1 sw Y   y xY wNr   r   )rG   rF  r   AssertionErrorr'  r1   r  r   r  s       r   rJ  zTestOrcLLJIT.test_close  sN    !XXZE~.LL% /..s   
A&&A/c                 X   | j                         \  }}}|5  	 d d d        | j                  t              5  |5  	 d d d        d d d        | j                  t              5  |j	                  dd       d d d        y # 1 sw Y   dxY w# 1 sw Y   NxY w# 1 sw Y   RxY w# 1 sw Y   y xY wr.  )rG   r   r   r/  r'  r0  s       r   rL  zTestOrcLLJIT.test_with  s    !XXZE |,  - ~.LL% /. U  -, /.s8   A<BBB B <BB	BB B)c                    | j                         \  }}}t        j                         j                  t        j                  t        j                                     j                  d      j                  |d      }  t        t        t        t              |d         dd      }| j                  d|       | j                  |j                  dd      d   d       | j                  |j                  dd      d   d       | j                  t              5  |j                  dd       d d d        | j                  t              5  |j                  dd       d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)Nr8   r  r^   r  ir\  r   )rG   r(   r  r  r  r:   r;   r  r  r   r   r5   r  r'  r   r   r1   r  rt_sum	cfunc_sumrt_mulr  s         r   test_add_ir_modulezTestOrcLLJIT.test_add_ir_module  s#   %)XXZ"	'')VGNN$*A*A*CNDE]5!T% 	 <,iue,VE];ArBc"ELL6u=qAELL6u=qA|,LL& -|,LL& -, -,,,s   E#E/#E,/E8c                     | j                         \  }}}~t        j                          | j                  t              5  |j                  dd       d d d        |j                          y # 1 sw Y   xY wNr\  )rG   r,   r-   r   r   r'  rF  )r1   r  r4  r   s       r   r  zTestOrcLLJIT.test_remove_module.  sS    !XXZ


|,LL& - -,s   A++A4c                    | j                         \  }}}t        j                         j                  t        j                  t        j                                     j                  d      j                  d      j                  |d      }  t        t        t        t              |d         dd      }| j                  d|       y )Nr8   
square_sumr\  r^   r  r  )rG   r(   r  r  asm_square_sumr:   r;   r  add_jit_libraryr  r   r   r5   r3  s         r   test_lib_dependszTestOrcLLJIT.test_lib_depends6  s    %)XXZ"	'')VN))1H1H1J)KL]<(_U#T%&	 	
 C,iue,VL-AB1bIC r3   c                     | j                         \  }}}|j                  }| j                  |j                  |       t        |       ~t        |       y r'   )rG   r  r   r   )r1   r  r   r   r  s        r   r  zTestOrcLLJIT.test_target_data@  sC    Ae'',BBr3   c                    t        d      }t        j                         }t        j                         }|j	                  t
        j                  t        j                                     j                  dt        j                  |            j                  d      j                  |d      }|d   }| j                  |       | j                    t        t               |             d       ~| j#                  |j$                  d       y )Nr   r8   Ar         )r   r(   r  r  r  asm_ext_ctorsr:   r;   r"  rG  	addressofr  r  r   r5   r   r   r  rn  )r1   shared_valuer  r   r   r   s         r   test_global_ctors_dtorsz$TestOrcLLJIT.test_global_ctors_dtorsI  s     qz**,((*VM((0G0G0I(JK]3 0 0 >?]5!T%	 	
 i.)5)#.0"5L..3r3   c                     d}| j                  t        |      5  | j                  t        dd       d d d        y # 1 sw Y   y xY w)Nz*Failed to materialize symbols:.*getversion
getversionT)r  )r&  r   rG   asm_getversion)r1   msgs     r   (test_lookup_current_process_symbol_failsz5TestOrcLLJIT.test_lookup_current_process_symbol_failsZ  s7     ;##L#6HH^\4HH 766s	   ;Ac                 4    | j                  t        dd d       y )NrI  T)rG   rJ  r0   s    r   "test_lookup_current_process_symbolz/TestOrcLLJIT.test_lookup_current_process_symbolb  s    tT:r3   c                 z   t        j                         t        j                  t        j                               fd}t        t        j                               D cg c]  }t        j                   ||              }}|D ]  }|j                           |D ]  }|j                           y c c}w )Nr8   c                       fd}|S )Nc            
          g } t        d      D ]Y  }| j                  t        j                         j	                        j                  d      j                  d d|              [ y )N2   r\  sum_r   )r-  r   r(   r  r  r  r  )trackingcir  llvm_irs     r   do_workzDTestOrcLLJIT.test_thread_safe.<locals>.compile_many.<locals>.do_workj  sY    rAOOD$:$:$<%+VG_%2]5%9%)T%4s!A3%@B #r3   rQ   )rV  rX  r  rW  s   ` r   compile_manyz3TestOrcLLJIT.test_thread_safe.<locals>.compile_manyi  s    B Nr3   )rK   )r(   r  rP   r:   r;   r-  rj   	cpu_count	threadingThreadstartjoin)r1   rY  rV  thsthr  rW  s        @@r   test_thread_safezTestOrcLLJIT.test_thread_safee  s    **,..(?(?(A.B		 blln-/-1 |A7- 	 /BHHJ BGGI 	/s   $#B8c                    | j                  d      }| j                         }t        j                  |      }t        j                         j                  |j                  |            j                  d      j                  |d      } t        t        t        t              |d         }| j                   |dd      d       y )NFrF   r\  r^         )rL   r@   r(   r  r  add_object_imgr	  r  r  r   r   r5   )r1   rL   r?   r  r   r\  s         r   test_add_object_filez!TestOrcLLJIT.test_add_object_file{  s    ,,,7kkm**>:##%^N66s;<]5!T% 	 -iue,RY7QA&r3   c                    | j                  d      }| j                         }|j                  |      }t               \  }}	 t	        j
                  |d      5 }|j                  |       d d d        t        j                  |      }t        j                         j                  |      j                  d      j                  |d      } t        t        t        t              |d         }	| j                   |	dd      d       t	        j                   |       y # 1 sw Y   xY w# t	        j                   |       w xY w)NFrF   wbr\  r^   rc  rd  )rL   r@   r	  r   rj   fdopenwriter(   r  r  add_object_filer  r  r   r   r5   unlink)
r1   rL   r?   obj_bin	temp_desc	temp_pathr  r  r   r\  s
             r   $test_add_object_file_from_filesystemz1TestOrcLLJIT.test_add_object_file_from_filesystem  s    ,,,7kkm ,,S1&y	9	!9d+q  ,..~>E'') +u%eU#  1)E5%0E;CSAY*IIi  ,+ IIi s%   D& D*BD& D#D& &D=)rM   rN   rO   rP   r   r   rG   r$  r(  r+  r  rJ  rL  r7  r  r>  r  rG  rL  rN  ra  rf  rp  rQ   r3   r   r  r    ss     t5%)G!+&.	,P&&&'!4"I;,	'!r3   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 Zd Zd Zd Zd Zd Zy)TestValueRefc                 |    | j                         }|j                  d      }| j                  t        |      d       y )NrD   z@glob = global i32 0)r@   rB   r5   r   r1   r?   rD   s      r   rD  zTestValueRef.test_str  s2    kkm&&v.T$:;r3   c                     | j                         }|j                  d      }| j                  |j                  d       d|_        | j                  |j                  d       y )NrD   foobar)r@   rB   r5   rC   rt  s      r   rO  zTestValueRef.test_name  sL    kkm&&v.F+	H-r3   c                    | j                         }|j                  d      }|j                  }| j                  |j                  t        j
                         ||_        | j                  |j                  |       dD ]Y  }||_        | j                  |j                  t        j
                         | j                  |j                  j                  |       [ y )NrD   )internalexternal)r@   rB   linkager   r(   Linkager5   rC   )r1   r?   rD   rz  s       r   test_linkagezTestValueRef.test_linkage  s    kkm&&v.,,dllDLL9w//G"DL!!$,,=T\\..8 0r3   c                    | j                         }|j                  d      }|j                  }| j                  |j                  t        j
                         ||_        | j                  |j                  |       dD ]Y  }||_        | j                  |j                  t        j
                         | j                  |j                  j                  |       [ y )NrD   )hidden	protectedr	  )r@   rB   
visibilityr   r(   
Visibilityr5   rC   )r1   r?   rD   r  s       r   test_visibilityzTestValueRef.test_visibility  s    kkm&&v.__
doot?$*5<J(DO!!$//4??CT__11:> =r3   c                    | j                         }|j                  d      }|j                  }| j                  |j                  t        j
                         ||_        | j                  |j                  |       dD ]Y  }||_        | j                  |j                  t        j
                         | j                  |j                  j                  |       [ y )NrD   )	dllimport	dllexportr	  )r@   rB   storage_classr   r(   StorageClassr5   rC   )r1   r?   rD   r  s       r   test_storage_classzTestValueRef.test_storage_class  s    kkm&&v.**d00$2C2CD*++];BM!.D!!$"4"4d6G6GHT//44mD Cr3   c                 (   | j                         }|j                  d      }|j                  d       | j                  t              5 }|j                  d       d d d        | j                  t        j                        d       y # 1 sw Y   /xY w)Nr\  	nocapturezextzno such attribute 'zext')r@   r]  add_function_attributer   
ValueErrorr5   r   r   )r1   r?   r   raisess       r   test_add_function_attributez(TestValueRef.test_add_function_attribute  ss    kkme$
!!+.z*f%%f- +V--.0JK +*s   BBc                 ~    | j                         }|j                  d      }| j                  |j                   |       y NrD   )r@   rB   r   rt  s      r   test_modulezTestValueRef.test_module  s/    kkm&&v.dkk3'r3   c                     | j                         }|j                  d      }|j                  }| j                  |t        j
                         y r  )r@   rB   r  r   r(   TypeRefr1   r?   rD   tps       r   	test_typezTestValueRef.test_type  s:    kkm&&v.YYb$,,/r3   c                 >   | j                         }|j                  d      }|j                  }| j                  |j                  d       |j                  d      }| j                  t        j                  d|j                  j                  j                               y )NrD   r   rt  r  )	r@   rB   r  r5   rC   r  rr   rx   element_type)r1   r?   rD   r  sts        r   test_type_namezTestValueRef.test_type_name  s{    kkm&&v.YY"%$$]3RXX&D&(gg&:&:&?&?A 	Br3   c                     | j                         }|j                  d      }|j                  }| j                  t	        |      d       y )NrD   i32*)r@   rB   r  r5   r   r  s       r   test_type_printing_variablez(TestValueRef.test_type_printing_variable  s:    kkm&&v.YYR&)r3   c                     | j                         }|j                  d      }| j                  t        |j                        d       y )Nr\  zi32 (i32, i32)*)r@   r]  r5   r   r  r`  s      r   test_type_printing_functionz(TestValueRef.test_type_printing_function  s6    kkme$RWW'89r3   c                    | j                         }|j                  d      }| j                  |j                  j                         | j                  t        j                  dt        |j                                     | j                  t        j                  dt        |j                  j                                     y )Nrt  z%struct\.glob_type(\.[\d]+)?\*re  )
r@   rB   r   r  
is_pointerr  rr   rx   r   r  )r1   r?   r  s      r   test_type_printing_structz&TestValueRef.test_type_printing_struct  s    kkm$$]3**+RXX&G&)"''l4 	5RXXG$$%' 	(r3   c                 d    | j                         }|j                          |j                          y r'   )rD   rF  )r1   rD   s     r   rJ  zTestValueRef.test_close  s    yy{



r3   c                     | j                         j                  d      }| j                  t              j                  d      }| j                  |j                         | j                  |j                         y r9  )r@   r]  asm_sum_declarer  is_declarationr   )r1   defineddeclareds      r   test_is_declarationz TestValueRef.test_is_declaration  sW    ++-,,U3;;/<<UC//0//0r3   c                     | j                  t              }t        |j                        }| j	                  t        |      d       |D ]  }| j                  |j                          y Nrq  )r@   rP   r~  ru  r5   ry   r   	is_global)r1   r?   gvarsr  s       r   test_module_global_variablesz)TestValueRef.test_module_global_variables  sN    kk'"S))*UQ'AOOAKK( r3   c                 @   | j                         }t        |j                        }| j                  t	        |      d       |d   }| j                  |j                         | j                  |j                  d       | j                  t              5  |j                   d d d        | j                  t              5  |j                   d d d        | j                  t              5  |j                   d d d        y # 1 sw Y   ^xY w# 1 sw Y   @xY w# 1 sw Y   y xY wr|  )r@   r~  r}  r5   ry   r   is_functionrC   r   r  instructionsoperandsopcode)r1   r?   r  r   s       r   test_module_functionsz"TestValueRef.test_module_functions  s    kkmS]]#UQ'Qx(()E*z* +z*MM +z*KK +*	 +*****s$   C<<D&D<DDDc                 T   | j                         }|j                  d      }| j                  |j                         t	        |j
                        }| j                  t        |      d       | j                  |d   j                         | j                  |d   j                         | j                  |d   j                  d       | j                  t        |d   j                        d       | j                  |d   j                  d       | j                  t        |d   j                        d       | j                  t              5  |d   j                   d d d        | j                  t              5  |d   j
                   d d d        y # 1 sw Y   7xY w# 1 sw Y   y xY w)Nr\  r^   r   r]   .1i32.2)r@   r]  r   r  r~  	argumentsr5   ry   is_argumentrC   r   r  r   r  blocks)r1   r?   r   r   s       r   test_function_argumentsz$TestValueRef.test_function_arguments  s8   kkm&(()DNN#TA&Q++,Q++,at,T!W\\*E2at,T!W\\*E2z*GNN +z*G +* +***s   F9FFF'c                     | j                         j                  d      }t        |j                        }| j	                  t        |      d       |d   }| j                  |j                         y )Nr\  r]   r   )r@   r]  r~  r  r5   ry   r   is_block)r1   r   r  r   s       r   test_function_blocksz!TestValueRef.test_function_blocks0  sS    {{}))%0dkk"Va(q	'r3   c                 <   | j                         j                  d      }t        t        |j                        d   j                        }| j                  t        |      d       | j                  |d   j                         | j                  |d   j                         | j                  |d   j                         | j                  |d   j                  d       | j                  |d   j                  d       | j                  |d   j                  d       y )Nr\  r   rc  r]   r^   r{   r!   )
r@   r]  r~  r  r  r5   ry   r   is_instructionr  )r1   r   instss      r   test_block_instructionsz$TestValueRef.test_block_instructions7  s    {{}))%0T$++&q)667UQ'a//0a//0a//0q%0q%0q%0r3   c                    | j                         j                  d      }t        t        |j                        d   j                        d   }| j                  |j                  d       t        |j                        }| j                  t        |      d       | j                  |d   j                         | j                  |d   j                         | j                  |d   j                  d       | j                  t        |d   j                        d       | j                  |d   j                  d       | j                  t        |d   j                        d       y )	Nr\  r   r{   r^   r]   r  r  r  )r@   r]  r~  r  r  r5   r  r  ry   r   
is_operandrC   r   r  )r1   r   r{   r  s       r   test_instruction_operandsz&TestValueRef.test_instruction_operandsB  s   {{}))%04$Q'445a8U+%X*../../!))40Xa[--.6!))40Xa[--.6r3   c                    | j                  t              }|j                  D ]  }t        |j                        }|j
                  dk(  r| j                  |dg       ;|j
                  dk(  sK| j                  |g        t        |j                        }| j                  t        |d   j                        dg       | j                  t        |d   j                        g         y )Na_readonly_funcs   readonlya_arg0_return_funcr   s   returnedr]   )r@   asm_attributesr}  r~  
attributesrC   r5   r  )r1   r?   r   attrsr   s        r   test_function_attributesz%TestValueRef.test_function_attributesO  s    kk.)MMD)Eyy--  622  +DNN+  d1g&8&8!9K=I  d1g&8&8!92> "r3   c                    | j                         }| j                  |j                  d      j                  t        j
                  j                         |j                  d      }| j                  |j                  t        j
                  j                         t        |j                        d   }| j                  |j                  t        j
                  j                         t        |j                        d   }| j                  |j                  t        j
                  j                         | j                  t        |j                        d   j                  t        j
                  j                         | j                  t        |j                        d   j                  t        j
                  j                         | j                  t               j                  d      }t        t        |j                        d   j                        d   }| j                  t        |j                        d   j                  t        j
                  j"                         y )NrD   r\  r   r]   r   )r@   r5   rB   
value_kindr(   	ValueKindglobal_variabler]  functionr~  r  basic_blockr  instructionr  constant_intasm_inlineasm
inline_asm)r1   r?   r   r   inst	iasm_func	iasm_insts          r   test_value_kindzTestValueRef.test_value_kind[  s   kkm008CC77	9&$..*A*ABT[[!!$))4>>+E+EFE&&'*$..*D*DEdmm,Q/::44	6dmm,Q/::33	5 KK.;;EB	i../2??@C	i001!4??22	4r3   c                    | j                         }| j                  |j                  d      j                         d}|j                  D ]  }| j                  |j                         |j
                  D ]l  }| j                  |j                         |j                  D ]@  }| j                  |j                         |j                  D ]  }|j                  s|dz  } B n  | j                  |d       y )NrD   r   r]   )
r@   r   rB   is_constantr}  r  r  r  r  r5   )r1   r?   constant_operandsr   r   r  ops          r   test_is_constantzTestValueRef.test_is_constanto  s    kkm//7CCDMMDOOD,,-  !2!23!..D$$T%5%56"mm>>-2- , / % " 	*A.r3   c                 n   | j                         }|j                  d      }t        t        |j                        d   j                        }| j                  |d   j                  d       t        |d   j                        }| j                  |d   j                         | j                  |d   j                         | j                  |d   j                         d       | j                  t              5  |d   j                          d d d        | j                  t              }|j                  d      }t        t        |j                        d   j                        }t        |d   j                        d   }t        |d   j                        d   }| j                  |j                         d       | j                  |j                  d      d	       |j                  d
      }t        j!                  |j#                  dd      dd      }| j                  |d	       y # 1 sw Y    xY w)Nr\  r   r]   r{   r^   rd  T)
signed_intr  Fr+  little)signed)r@   r]  r~  r  r  r5   r  r  r   r  r  get_constant_valuer   r  asm_sum3int
from_bytesto_bytes)	r1   r?   r   r  r  posint64negint64as_u64as_i64s	            r   test_constant_intzTestValueRef.test_constant_int  s   kkm&T$++&q)667q%0a))*//0!001!7791=z*QK**, + kk(#&T$++&q)667a))*1-a))*1-446:444ErJ ,,,>8 <h'+   -$ +*s   8H**H4c                    | j                  t              }|j                  d      }t        t        |j                        d   j
                        }| j                  t        |      d       | j                  |d   j                  d       t        |d   j                        }| j                  |d   j                         | j                  |d   j                         d       | j                  |d   j                         | j                  |d   j                         d       | j                  t              }|j                  d      }t        t        |j                        d   j
                        d   }t        |j                        }| j                  t               5  |d   j                          d d d        | j                  |d   j                  d	      d       y # 1 sw Y   /xY w)
Nr   r   r^   r   g        r]   gQ	@T)round_fp)r@   r7  r]  r~  r  r  r5   ry   r  r  r   r  assertAlmostEqualr  asm_double_inaccurater   r  )r1   r?   r   r  r  r  s         r   test_constant_fpzTestValueRef.test_constant_fp  s   kk+,&T$++&q)667UQ'q&1a))*//0x{==?E//0x{==?Fkk/0&D%a(556q9&z*QK**, +x{==t=LaP +*s   $G&&G/c                 R   | j                  t              }|j                  d      }t        t        |j                        d   j
                        d   }t        |j                        d   }| j                  |j                         | j                  |j                         d       y )NrN  r   z	i64* null)r@   asm_null_constantr]  r~  r  r  r  r   r  r5   r  )r1   r?   r   r  args        r   test_constant_as_stringz$TestValueRef.test_constant_as_string  s    kk+,&D%a(556q94==!!$(//1;?r3   c                    | j                  t              }|j                  d      }t        |j                        }t        |d   j
                        }| j                  |d   j                         | j                  |d   j                  d       t        |d   j                        }| j                  t        |      d       | j                  |d   j                         | j                  |d   j                         | j                  |d   |d          | j                  |d   |d          | j                  |d   j                  d       | j                  t              5  |d   j                   d d d        y # 1 sw Y   y xY w)Nr   r   phir^   r]   )r@   asm_phi_blocksr]  r~  r  r  r   r  r5   r  incoming_blocksry   r  r  r   r  )r1   r?   r   r  r  r  s         r   test_incoming_phi_blocksz%TestValueRef.test_incoming_phi_blocks  s>   kk.)&dkk"F2J334Q667a//7|A>>?_-q1*334*334+VBZ8+VAY7 	LO22E:z*O++ +**s   $E==FN)rM   rN   rO   rD  rO  r|  r  r  r  r  r  r  r  r  r  rJ  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rQ   r3   r   rr  rr    s    <
.
9
?
EL(
0B*:
(
1)$(	17
?4(/ %4Q(@,r3   rr  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestTypeRefc                    | j                         }|j                  d      }| j                  t        |j                        d       |j                  d      }| j                  t        |      d       t        |j                        }| j                  t        |      d       | j                  t        |d         d       | j                  t        |d         d	       y )
NrD   r  rd  z+%struct.glob_type = type { i64, [2 x i64] }r^   r   i64r]   z	[2 x i64])	r@   rB   r5   r   r  rf  r~  elementsry   )r1   r?   rD   glob_struct_typer  s        r   rD  zTestTypeRef.test_str  s    kkm&&v.TYY0../AB-.F	H (112X*Xa[)51Xa[);7r3   c                    | j                         }|j                  d      }| j                  |j                  j                  t
        j                  j                         | j                  |j                  j                         |j                  d      }| j                  |j                  j                  t
        j                  j                         | j                  |j                  j                         t        t        |j                  j                              }| j                  |j                  t
        j                  j                         | j                  |j                         |j                  \  }}| j                  |j                  t
        j                  j                         | j                  |j                  t
        j                  j                          | j                  |j"                         |j%                  d      }|j                  \  }}	| j                  |	j                  t
        j                  j&                         | j                  |	j(                         |j+                  d      j                  }
| j                  |
j                  t
        j                  j                         |
j                  \  }| j                  |j                  t
        j                  j,                         y )NrD   rt  struct.glob_type_vecr\  )r@   rB   r5   r  	type_kindr(   TypeKindpointerr   r  nextiterr  struct	is_structintegerarrayis_arrayrf  vector	is_vectorr]  r  )r1   r?   rD   rt  stypestype_astype_bglob_vec_struct_typer   vector_typefuncptrfunctypes               r   test_type_kindzTestTypeRef.test_type_kind  s   kkm&&v.,,dmm.C.CD		,,---m<))33T]]5J5JK((334T+**3345$--*>*>?( >>**DMM,A,AB**DMM,?,?@(()"223IJ-66;..0D0DE--.""5)..**DMM,A,AB$$	++T]]-C-CDr3   c                    | j                         }|j                  d      }|j                  \  }}| j                  |j                  d       | j                  t              5  |j                   d d d        y # 1 sw Y   y xY w)Nrd  r^   )r@   rf  r  r5   element_countr   r  )r1   r?   r  r   
array_types        r   test_element_countzTestTypeRef.test_element_count  sg    kkm../AB(11:1115z*** +**s   "A88Bc                    | j                         }|j                  d      }|j                  d      }|j                  \  }}|j                  \  }}| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       y )Nrd  r  @      r   )r@   rf  r  r5   
type_width)r1   r?   r  r  integer_typer  r   r  s           r   test_type_widthzTestTypeRef.test_type_width  s    kkm../AB"223IJ#3#<#< j-66;00"5//8 	)44a8..2r3   c                 t   | j                  t              }|j                  d      }|j                  j                  }| j                  |j                         | j                  t              }|j                  d      }|j                  j                  }| j                  |j                         | j                  |j                  j                         | j                  t              5 }|j                  j                   d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nvarargr\  z&Type i32 (i32, i32)* is not a function)r@   asm_vararg_declarer]  r  r  r   is_function_varargr  r  r  r   r  r   r   r   )r1   r?   r   decltyper  s        r   test_vararg_functionz TestTypeRef.test_vararg_function  s    kk,-)99))334kk/*&99))445 			,,-z*fII(( +>&**+	- +*s   )D..D7N)rM   rN   rO   rD  r  r  r$  r*  rQ   r3   r   r   r     s    8E:+3-r3   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)
TestTargetc                 v   t         j                  j                  }| j                  t              5 } |d       d d d        | j                  dt        j                               t        j                         } ||      }| j                  |j                  |       |j                          y # 1 sw Y   wxY w)Nrv  z(No available targets are compatible with)r(   rH   r   r   r   r   r   r   r;   r5   r9   rF  )r1   r  r   r9   rK   s        r   test_from_triplezTestTarget.test_from_triple"  s    KK##|,hK -@",,'	)((*6/ -,s   	B//B8c                     t         j                  j                  t        j                               }|j	                  ddddd       t        j
                         }|j	                  |dddd       y )Nr   r]   r	  )r(   rH   r   r;   rJ   r  )r1   rK   r  s      r   test_create_target_machinez%TestTarget.test_create_target_machine-  sY    (()@)@)BC$$RQ	9E$$&$$S"aIFr3   c                 .   t         j                  j                  t        j                               }t         j                  j	                         }| j                  |j                  t               | j                  |j                  |j                         y r'   )	r(   rH   r   r;   rI   r   rC   r   r5   r1   tus      r   rO  zTestTarget.test_name5  s]    KK##D$;$;$=>KK++-affc*(r3   c                 .   t         j                  j                  t        j                               }t         j                  j	                         }| j                  |j                  t               | j                  |j                  |j                         y r'   )	r(   rH   r   r;   rI   r   descriptionr   r5   r2  s      r   test_descriptionzTestTarget.test_description;  s]    KK##D$;$;$=>KK++-ammS16r3   c                     t         j                  j                  t        j                               }t	        |      }| j                  |j                  |       | j                  |j                  |       y r'   )r(   rH   r   r;   r   r   rC   r6  )r1   rK   r   s      r   rD  zTestTarget.test_strA  sN    (()@)@)BCKfkk1%f((!,r3   N)rM   rN   rO   r.  r0  rO  r7  rD  rQ   r3   r   r,  r,     s    	G)7-r3   r,  c                   $    e Zd Zd Zd Zd Zd Zy)TestTargetDatac                 ,    t        j                  d      S )Nz%e-m:e-i64:64-f80:128-n8:16:32:64-S128)r(   create_target_datar0   s    r   r  zTestTargetData.target_dataJ  s    &&'NOOr3   c                     | j                         }| j                         }| j                  |j                  |j                        d       y )Nr+  )r  rD   r5   r  r  r1   r  rD   s      r   test_get_abi_sizez TestTargetData.test_get_abi_sizeM  s8    yy{3Q7r3   c                    | j                         }| j                         }| j                  |j                  |j                        d       | j                  d      }| j                  |j                  |j                        d       y )Nrq  rt  r  )r  rD   r5   r  r  r>  s      r   test_get_pointee_abi_sizez(TestTargetData.test_get_pointee_abi_sizeR  sg    yy{00;Q?yy'00;R@r3   c                    | j                         }| j                  d      }| j                  t              5  |j	                  |j
                  d       d d d        |j
                  j                  }| j                  |j	                  |d      d       | j                  |j	                  |d      d       y # 1 sw Y   dxY w)Nrt  r   r]   r+  )r  rD   r   r  get_element_offsetr  r  r5   )r1   r  rD   struct_types       r   test_get_struct_element_offsetz-TestTargetData.test_get_struct_element_offset[  s    yy'z*!!$))Q/ + ii,,..{A>B..{A>B +*s   B77C N)rM   rN   rO   r  r?  rA  rE  rQ   r3   r   r:  r:  H  s    P8
A	Cr3   r:  c                       e Zd Zd Zd Zy)TestTargetMachinec                 r    | j                  d      }t        j                         }|j                  |       y )NFrF   )rL   r(   create_module_pass_manageradd_analysis_passes)r1   tmpms      r   test_add_analysis_passesz*TestTargetMachine.test_add_analysis_passesi  s1      U +,,.
r"r3   c                    | j                  d      }|j                  }| j                         }|j                  d      }t        j
                  dk  rdnd}| j                  |j                  |j                        |       y )NFrF   rD   r  rq  r+  )	rL   r  r@   rB   r   r  r5   r  r  )r1   rK  r  r?   r  r  s         r   test_target_data_from_tmz*TestTargetMachine.test_target_data_from_tmn  sh      U +^^kkm((0KK'1qq5|Dr3   N)rM   rN   rO   rM  rO  rQ   r3   r   rG  rG  g  s    #
Er3   rG  c                   N    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y)TestPassManagerBuilderc                 *    t        j                         S r'   )r(   PassManagerBuilderr0   s    r   pmbzTestPassManagerBuilder.pmbz  s    &&((r3   c                 H    t        j                         }d|_        d|_        y )Nr^   rc  )r(   create_pass_manager_builderinlining_threshold	opt_levelr1   rT  s     r   test_old_apiz#TestPassManagerBuilder.test_old_api}  s    ..0!"r3   c                 d    | j                         }|j                          |j                          y r'   )rT  rF  rY  s     r   rJ  z!TestPassManagerBuilder.test_close  s    hhj				r3   c                     | j                         }| j                  |j                  t               t	        d      D ]%  }||_        | j                  |j                  |       ' y r  )rT  r   rX  r  r-  r5   r1   rT  rV  s      r   test_opt_levelz%TestPassManagerBuilder.test_opt_level  sJ    hhjcmmS1qACMS]]A. r3   c                     | j                         }| j                  |j                  t               t	        d      D ]%  }||_        | j                  |j                  |       ' y r  )rT  r   
size_levelr  r-  r5   r]  s      r   test_size_levelz&TestPassManagerBuilder.test_size_level  sJ    hhjcnnc2qACNS^^Q/ r3   c                     | j                         }| j                  t              5  |j                   d d d        dD ]	  }||_         y # 1 sw Y   xY w)N)   P   i^  )rT  r   NotImplementedErrorrW  r]  s      r   test_inlining_thresholdz.TestPassManagerBuilder.test_inlining_threshold  sE    hhj23"" 4A%&C"  43s   A

Ac                     | j                         }| j                  |j                  t               dD ]%  }||_        | j	                  |j                  |       ' y N)TF)rT  r   disable_unroll_loopsr  r5   r1   rT  r   s      r   test_disable_unroll_loopsz0TestPassManagerBuilder.test_disable_unroll_loops  sK    hhjc66=A'(C$S55q9 r3   c                     | j                         }| j                  |j                  t               dD ]%  }||_        | j	                  |j                  |       ' y rh  )rT  r   loop_vectorizer  r5   rj  s      r   test_loop_vectorizez*TestPassManagerBuilder.test_loop_vectorize  sK    hhjc00$7A!"CS//3 r3   c                     | j                         }| j                  |j                  t               dD ]%  }||_        | j	                  |j                  |       ' y rh  )rT  r   slp_vectorizer  r5   rj  s      r   test_slp_vectorizez)TestPassManagerBuilder.test_slp_vectorize  sK    hhjc//6A !CS..2 r3   c                     | j                         }t        j                         }|j                  |       |j	                          |j	                          y r'   )rT  r(   rI  populaterF  )r1   rT  rL  s      r   !test_populate_module_pass_managerz8TestPassManagerBuilder.test_populate_module_pass_manager  s9    hhj,,.R		

r3   c                     | j                         }| j                         }t        j                  |      }|j	                  |       |j                          |j                          y r'   )r@   rT  r(   create_function_pass_managerrs  rF  )r1   r?   rT  rL  s       r   #test_populate_function_pass_managerz:TestPassManagerBuilder.test_populate_function_pass_manager  sF    kkmhhj..s3R		

r3   N)rM   rN   rO   rT  rZ  rJ  r^  ra  rf  rk  rn  rq  rt  rw  rQ   r3   r   rQ  rQ  x  s9    )
/0':43r3   rQ  c                       e Zd Zd Zd Zy)PassManagerTestMixinc                 J    t        j                         }d|_        d|_        |S )Nr^   i,  )r(   rV  rX  rW  rY  s     r   rT  zPassManagerTestMixin.pmb  s$    ..0!$
r3   c                 d    | j                         }|j                          |j                          y r'   )rL  rF  r1   rL  s     r   rJ  zPassManagerTestMixin.test_close  s    WWY



r3   N)rM   rN   rO   rT  rJ  rQ   r3   r   ry  ry    s    r3   ry  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestModulePassManagerc                 *    t        j                         S r'   r(   rI  r0   s    r   rL  zTestModulePassManager.pm      ..00r3   c                    | j                         }| j                         j                  |       | j                         }t	        |      }|j                  |       t	        |      }|j                         }t        |      D ]z  \  }}|j                         j                  d      s&ddh}|D ]  }	|	|v s n t        d      ||	hz  j                         }
| j                  d|       | j                  |
|        y  t        d      )Nzret i32z%.3%.4zexpected tokens not foundzexpected IR not found)rL  rT  rs  r@   r   runrv   	enumerater   r   r   popr   assertNotIn)r1   rL  r?   orig_asmopt_asmopt_asm_splitidxltoksr3  
othertokens              r   test_runzTestModulePassManager.test_run  s    WWY
Bkkms8
sc(  **,.FCwwy##I.u~AAv  ''BCC"aSj--/
eX.  W5 / 677r3   c                 @   | j                         }|j                  d       | j                         j                  |       | j	                  t
              }|j                  |      \  }}| j                  |       | j                  d|       | j                  d|       y )NF   Passedinlineme	rL  add_function_inlining_passrT  rs  r@   asm_inlineasm2run_with_remarksr   r   r1   rL  r?   statusremarkss        r   'test_run_with_remarks_successful_inlinez=TestModulePassManager.test_run_with_remarks_successful_inline  sz    WWY
%%b)
Bkk.)//4h(j'*r3   c                 d   | j                         }|j                  d       | j                         j                  |       | j	                  t
              }|j                  |      \  }}| j                  |       | j                  d|       | j                  d|       | j                  d|       y )Nr   Missedr  znoinline function attribute)	rL  r  rT  rs  r@   asm_inlineasm3r  r   r   r  s        r   #test_run_with_remarks_failed_inlinez9TestModulePassManager.test_run_with_remarks_failed_inline  s    WWY
%%a(
Bkk.)//4 	h(j'*3W=r3   c                     | j                         }|j                  d       | j                         j                  |       | j	                  t
              }|j                  |d      \  }}| j                  |       | j                  d|       y )Nr  nothingremarks_filterr   )	rL  r  rT  rs  r@   r  r  r   r5   r  s        r   'test_run_with_remarks_inline_filter_outz=TestModulePassManager.test_run_with_remarks_inline_filter_out  ss    WWY
%%b)
Bkk.)//I/NW%r3   c                 D   | j                         }|j                  d       | j                         j                  |       | j	                  t
              }|j                  |d      \  }}| j                  |       | j                  d|       | j                  d|       y )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    WWY
%%b)
Bkk.)//I/Nh(j'*r3   N)	rM   rN   rO   rL  r  r  r  r  r  rQ   r3   r   r~  r~    s     18<	+>&+r3   r~  c                   2    e Zd ZddZd Zd Zd Zd Zd Zy)	TestFunctionPassManagerNc                 T    |xs | j                         }t        j                  |      S r'   )r@   r(   rv  rI  s     r   rL  zTestFunctionPassManager.pm!  s#    "T[[]0055r3   c                 d    | j                         }|j                          |j                          y r'   )rL  r)   finalizer|  s     r   r%  z%TestFunctionPassManager.test_initfini%  s    WWY

r3   c                    | j                         }|j                  d      }| j                  |      }| j                         j	                  |       |j                          t        |      }|j                          |j                  |       |j                          t        |      }| j                  d|       | j                  d|       y )Nr\  r  )r@   r]  rL  rT  rs  rF  r   r)   r  r  r   r  )r1   r?   r   rL  r  r  s         r   r  z TestFunctionPassManager.test_run*  s    kkme$WWS\
B		r7

r

b'eX&(r3   c                    | j                  t              }|j                  d      }| j                  |      }|j	                          | j                         j                  |       |j                          |j                          |j                  |      \  }}|j                          | j                  |       | j                  d|       | j                  d|       y )Nlicmr  r@   licm_asmr]  rL  add_licm_passrT  rs  rF  r)   r  r  r   r   r1   r?   r   rL  okr  s         r   test_run_with_remarksz-TestFunctionPassManager.test_run_with_remarks9  s    kk(#f%WWS\

B		
++B/W
h(fg&r3   c                    | j                  t              }|j                  d      }| j                  |      }|j	                          | j                         j                  |       |j                          |j                          |j                  |d      \  }}|j                          | j                  |       | j                  d|       y )Nr  r  r  r   )r@   r  r]  rL  r  rT  rs  rF  r)   r  r  r   r5   r  s         r    test_run_with_remarks_filter_outz8TestFunctionPassManager.test_run_with_remarks_filter_outH  s    kk(#f%WWS\

B		
++By+IW
W%r3   c                    | j                  t              }|j                  d      }| j                  |      }|j	                          | j                         j                  |       |j                          |j                          |j                  |d      \  }}|j                          | j                  |       | j                  d|       | j                  d|       y )Nr  r  r  r  r  s         r   test_run_with_remarks_filter_inz7TestFunctionPassManager.test_run_with_remarks_filter_inV  s    kk(#f%WWS\

B		
++Bv+FW
h(fg&r3   r'   )	rM   rN   rO   rL  r%  r  r  r  r  rQ   r3   r   r  r    s     6
)'&'r3   r  c                       e Zd Zd Zd Z ej                   ej                         j                  d      d      d        Z
d Zy)
TestPassesc                 *    t        j                         S r'   r  r0   s    r   rL  zTestPasses.pmh  r  r3   c                    | j                         }|j                  d       |j                          |j                          |j	                          |j                  d       |j                          |j                          |j                          |j                          |j                          |j                          |j                          |j                          |j                          |j                          |j!                          |j#                          |j%                          |j'                          |j)                          |j+                          |j-                          |j/                          t0        dk  r|j3                  d       |j5                          |j7                          |j9                          |j;                          |j=                          |j?                  d       |jA                          |jC                          |jE                          |jG                          |jI                          |jK                          |jM                          |jO                          t0        dk  r|jQ                          |jS                          |jU                          |jW                          |jY                          |j[                          |j]                          |j_                          |ja                          |jc                          |je                          |jg                          |ji                          |jk                          |jm                          |jo                          |jq                          |js                          |ju                          |jw                          |jy                          |j{                          |j}                          |j                          |j                          |j                          |j                          |j                          |j                          |j                          |j                          y )Nr      r*  *      )GrL  add_target_library_info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llvm_version_major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_passadd_instruction_namer_passr|  s     r   test_populatezTestPasses.test_populatek  s_   WWY
""2&
""$
((*
""$
%%c*
 
$$&

))+
&&(

))+



--/
((*
!
!
'')
446

""$"%%b)
((*
**,
557
446
!
""1%

!!#
""$
))+
((*
'')
!
'')"%%'
  "
  "
  "
'')
##%
!!#
$$&
,,.
++-
--/

!!#
))+
))+
'')
**,
))+

'')
""$
##%
##%
'')
&&(

##%

%%'

%%'r3   r  r  c                     d } |d      }| j                  dt        |              |d      }| j                  dt        |             | j                  dt        |             y)zTest a specific situation that demonstrate TLI is affecting
        optimization. See https://github.com/numba/numba/issues/8898.
        c                 p   t        j                  t              }t         j                  j	                  |j
                        }|j                         }t        j                         }|j                  |       | r|j                  |j
                         |j                          |j                  |       |S r'   )r(   r<   asm_tli_exp2rH   r   r9   rJ   ModulePassManagerrJ  r  r  r  )use_tlir?   rK   rK  rL  s        r   r  z9TestPasses.test_target_library_info_behavior.<locals>.run  s    %%l3C[[,,SZZ8F--/B'')B""2&**3::6--/FF3KJr3   T)r	  zcall float @llvm.exp2.f32Fzcall float @ldexpfN)r   r   r  )r1   r  r?   s      r   !test_target_library_info_behaviorz,TestPasses.test_target_library_info_behavior  sZ    

	 $13s8< % 4c#h?*CH5r3   c                    t         j                  t        j                               }t        j                  |      }t        j
                         }|j                          |j                  |       |j                  d      }t        |j                        }t        |j                        }| j                  |d   j                  d       | j                  |d   j                  d       y )Nr8   r   r   rV  r]   i2)r  r:   r(   r;   r<   r  r  r  r]  r
  r  r~  r  r5   rC   )r1   r=   r?   rL  r   first_blockr  s          r   test_instruction_namer_passz&TestPasses.test_instruction_namer_pass  s    ##4+B+B+D#E!!#& ##%
%%'
s &4;;'K445a--s3a--t4r3   N)rM   rN   rO   rL  r  r   r   r}   machiner   r
  r  rQ   r3   r   r  r  f  sN    1H(T X)))+66u=zJ6 K625r3   r  c                   f    e Zd Zd Z ej
                   ej                         dv d      d        Zy)	TestDylibc                     | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nzzzzasdkf;jasd;l)r   r   r(   load_library_permanentlyr0   s    r   test_bad_libraryzTestDylib.test_bad_library  s+    |,))*;< -,,s   5>)Linuxztest only works on Linuxc                 D    t        d      }t        j                  |       y )Nr   )r   r(   r  )r1   rd   s     r   	test_libmzTestDylib.test_libm  s     C %%d+r3   N)	rM   rN   rO   r  r   r   r}   systemr  rQ   r3   r   r  r    s;    = X*i735,5,r3   r  c                       e Zd Zd Zd Zd Zy)TestAnalysisc                    t        j                         }t        j                  t        j                  d      t        j                  d      t        j                  d      g      }t        j                  ||d      }t        j
                  |j                               }|j                  \  }}|j                  ||      }|j                  |       |S )Nr   r   )
r	   r   r   r   r   r   r   r   r{   r!   )r1   r   r   r   r   xyzs           r   build_ir_modulezTestAnalysis.build_ir_module  s    IIK__RZZ^bjjnbjjn-MN[[B&\\"//12ww1FF1aL
q	r3   c                     | j                         }|j                  d      }t        j                  |      }t        j                  |d      }d}| j	                  ||       | j                  ||       y )Nr   F	show_instz%.5 = add i32 %.1, %.2)r  
get_globalr(   get_function_cfgr   r  )r1   r?   r   dot_showing_instdot_without_instr  s         r   test_get_function_cfg_on_irz(TestAnalysis.test_get_function_cfg_on_ir  sg    ""$nnU#00500F'd,-/0r3   c                    | j                         j                  d      }t        j                  |d      }t        j                  |d      }d}| j	                  ||       | j	                  ||       d}| j	                  ||       | j	                  ||       d}| j	                  ||       | j                  ||       y )Nr\  Tr!  FdigraphzCFG for 'sum' functionz%.3 = add i32 %.1, %.2)r@   r]  r(   r$  r   r  )r1   r  r%  r&  prefixfnamer  s          r   test_function_cfg_on_llvm_valuez,TestAnalysis.test_function_cfg_on_llvm_value	  s    ++-,,U300DI00EJf./f./(e-.e-.'d,-/0r3   N)rM   rN   rO   r  r'  r,  rQ   r3   r   r  r    s    11r3   r  c                   "    e Zd Zed        Zd Zy)TestTypeParsingc              #   |   K   t        j                         }| t        |      }t        j                  |       y wr'   )r	   r   r   r(   r<   )r1   r?   r=   s      r   check_parsingzTestTypeParsing.check_parsing	  s/     iik 	#hC s   :<c                    | j                         5 }t        j                  t        j                  d      g      }t        j                  ||d      }t        j
                  |dg      |_        d d d        | j                         5 }t        j                  t        j                  d      gd      }t        j                  ||d      }t        j
                  |dg      |_        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r]   T)packed)r0  r	   LiteralStructTyper   GlobalVariabler   initializer)r1   r?   typrj  s       r   test_literal_structz#TestTypeParsing.test_literal_struct	  s    !S&&

2'78C""3U3B[[qc2BN	 " !S&&

2'7.24C""3U3B[[qc2BN "! "! "!s   AC.AC:.C7:DN)rM   rN   rO   r   r0  r7  rQ   r3   r   r.  r.  	  s    ! !3r3   r.  c                       e Zd Zd Zy)TestGlobalConstructorsc                 ~   | j                  t              }| j                  |      }|j                          |j	                          |j                  d      }t        j                  t        j                        }t        j                  ||      }| j                  |j                  j                  d       |j                  d      } t        j                  t        j                        |      }| j                   |       d       |j                          | j                  |j                  j                  d       y )NrA  r  r   rB  rC  )r@   asm_global_ctorsrG   r  run_static_constructorsget_global_value_addressrG  POINTERr   castr5   contentsrn  r  r   run_static_destructors)r1   r?   r  ptr_addrptr_tptrfoo_addrr   s           r   rG  z.TestGlobalConstructors.test_global_ctors_dtors0	  s     kk*+XXc]

""$ ..s3v~~.kk(E*++R0**51.fv~~.x8#
!!# 	++R0r3   N)rM   rN   rO   rG  rQ   r3   r   r9  r9  /	  s    1r3   r9  c                   V    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y)TestGlobalVariablesc                    t        j                         }t        j                  d      }t        j                  ||d      }||_        t        |      }|r| j                  d|       n| j                  d|       | j                  |       y )Nr   r   undef)	r	   r   r   r4  rz  r   r   r  r@   )r1   rz  	has_undefr?   r6  rj  r=   s          r   check_global_variable_linkagez1TestGlobalVariables.check_global_variable_linkageJ	  sm     iikjjnsC/
#hMM'3'Wc*Cr3   c                 &    | j                  d       y )Nrx  rK  r0   s    r   test_internal_linkagez)TestGlobalVariables.test_internal_linkage^	      **:6r3   c                 &    | j                  d       y )NcommonrM  r0   s    r   test_common_linkagez'TestGlobalVariables.test_common_linkagea	  s    **84r3   c                 *    | j                  dd       y )Nry  FrJ  rM  r0   s    r   test_external_linkagez)TestGlobalVariables.test_external_linkaged	  s    **:*Gr3   c                 &    | j                  d       y )Navailable_externallyrM  r0   s    r   !test_available_externally_linkagez5TestGlobalVariables.test_available_externally_linkageg	  s    **+ABr3   c                 &    | j                  d       y )NprivaterM  r0   s    r   test_private_linkagez(TestGlobalVariables.test_private_linkagej	  s    **95r3   c                 &    | j                  d       y )NlinkoncerM  r0   s    r   test_linkonce_linkagez)TestGlobalVariables.test_linkonce_linkagem	  rO  r3   c                 &    | j                  d       y )NweakrM  r0   s    r   test_weak_linkagez%TestGlobalVariables.test_weak_linkagep	  s    **62r3   c                 &    | j                  d       y )N	appendingrM  r0   s    r   test_appending_linkagez*TestGlobalVariables.test_appending_linkages	  s    **;7r3   c                 *    | j                  dd       y )Nextern_weakFrT  rM  r0   s    r   test_extern_weak_linkagez,TestGlobalVariables.test_extern_weak_linkagev	  s    **=E*Jr3   c                 &    | j                  d       y )Nlinkonce_odrrM  r0   s    r   test_linkonce_odr_linkagez-TestGlobalVariables.test_linkonce_odr_linkagey	  s    **>:r3   c                 &    | j                  d       y )Nweak_odrrM  r0   s    r   test_weak_odr_linkagez)TestGlobalVariables.test_weak_odr_linkage|	  rO  r3   N)T)rM   rN   rO   rK  rN  rR  rU  rX  r[  r^  ra  rd  rg  rj  rm  rQ   r3   r   rG  rG  I	  sA    (75HC6738K;7r3   rG  zonly on x86c                       e Zd Zd Zy)TestInlineAsmc                     t        j                          | j                  t              }| j	                  d      }|j                  |      }| j                  d|       y )N)r=   FrF   nop)r(   initialize_native_asmparserr@   r  rL   r   r   )r1   r   rK  r=   s       r   test_inlineasmzTestInlineAsm.test_inlineasm	  sO    ((*KKMK*  U +q!eS!r3   N)rM   rN   rO   rs  rQ   r3   r   ro  ro  	  s    "r3   ro  c                   (    e Zd ZdZd Zd Zd Zd Zy)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                    | j                  d      }| j                         }|j                  |      }t        j                  j                  |      }d}d}|j                         D ]  }|j                         sd}| j                  |j                                | j                  |j                         dkD         | j                  t        |j                               dkD         | j                  |j                                | j                  ||j                         k         |j                         } n | j                  |       y )NFrF   r  Tr   )rL   r@   r	  r(   ObjectFileRef	from_datasectionsis_textr  rC   r   sizery   dataaddress)r1   rL   r?   rm  objhas_textlast_addressr   s           r   test_object_filezTestObjectFile.test_object_file	  s    ,,,7kkm ,,S1  **73Ayy{$$QVVX.1-AFFH 12$$QYY[1qyy{ :; yy{   	!r3   c                    | j                  d      }| j                         }|j                  |      }t        j                  j                  |      }t        j                  | j                  | j                        |      }|j                  |        t        t        t        t              |j                  d            }| j                   |dd      d       y )NFrF   	sum_twicer^   rc  r  )rL   r@   r	  r(   rw  rx  r  mod_asmrk  r   r   r  r5   )r1   rL   r?   rm  r~  rG   r  s          r   rf  z#TestObjectFile.test_add_object_file	  s    ,,,7kkm ,,S1  **73((T\\)B)79 	C 2IeUE2$$[13	 	1a"-r3   c                    | j                  d      }| j                         }|j                  |      }t               \  }}	 	 t	        j
                  |d      }|j                  |       |j                          |j                          t        j                  | j                  | j                        |      }|j                  |       t	        j                  |        t        t        t        t              |j!                  d            }| j#                   |dd      d       y # j                          w xY w# t	        j                  |       w xY w)NFrF   rh  r  r^   rc  r  )rL   r@   r	  r   rj   ri  rj  flushrF  r(   r  r  rk  rl  r   r   r  r5   )	r1   rL   r?   rm  rn  ro  r  rG   r  s	            r   rp  z3TestObjectFile.test_add_object_file_from_filesystem	  s	   ,,,7kkm ,,S1&y	9	!IIi. 		,,T[[-F-;=C 	*IIi 2IeUE2$$[13	 	1a"- 	 IIi s   7D' :AD< 'D99D< <Ec                 v   t         j                  t              }t        j                  j                  |      }|j                         D ]n  }|j                         s| j                  t        |j                               d       | j                  |j                         j                         t               p y )N   )r  fromhexissue_632_elfr(   rw  rx  ry  rz  r5   ry   r|  hexissue_632_text)r1   elfr~  r   s       r   test_get_section_contentz'TestObjectFile.test_get_section_content	  sw     mmM*  **3/Ayy{  QVVX3  @  r3   N)rM   rN   rO   r  r  rf  rp  r  rQ   r3   r   ru  ru  	  s    G"(. .4Ar3   ru  c                       e Zd Zd Zd Zy)TestTimePassesc                    t        j                         }t        j                         }d|_        |j	                  |       	 t        j
                  d       |j                  | j                                |j                  | j                                |j                  | j                                t        j                         }t        j
                  d       | j                  |t               | j                  |j                  d      d       y # t        j                         }t        j
                  d       w xY w)Nrc  TFzPass execution timing reportr]   )r(   rI  rV  rX  rs  set_time_passesr  r@   report_and_reset_timingsr   r   r5   count)r1   mprT  reports       r   test_reportingzTestTimePasses.test_reporting	  s    ,,...0R	(  &FF4;;=!FF4;;=!FF4;;=!224F  'fc*&DEqI	 224F  's   A2D +E c                 J    | j                  t        j                                y r'   )r  r(   r  r0   s    r   test_empty_reportz TestTimePasses.test_empty_report	  s    6689r3   N)rM   rN   rO   r  r  rQ   r3   r   r  r  	  s    J&:r3   r  c                       e Zd Zd Zy)TestLLVMLockCallbacksc                    g fd}fd}t         j                  j                  ||       | j                         t        j                          | j                  d       | j                  d       t         j                  j                  ||       | j                  t              5  t         j                  j                  ||       d d d        y # 1 sw Y   y xY w)Nc                  (     j                  d       y )Nacqr  eventss   r   r  z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.acq	      MM% r3   c                  (     j                  d       y )Nrelr  r  s   r   r  z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.rel
  r  r3   r  r  )	r(   r   register_lock_callbackr  rI  r   unregister_lock_callbackr   r  )r1   r  r  r  s      @r   test_lock_callbacksz)TestLLVMLockCallbacks.test_lock_callbacks	  s    	!	! 	''S1 	 '')eV$eV$ 	))#s3 z*HH--c37 +**s   ,!CCN)rM   rN   rO   r  rQ   r3   r   r  r  	  s    8r3   r  __main__)_rG  r[  r   r   r   ctypes.utilr   r,   r   rj   r}   rr   rm   r   r   
contextlibr   tempfiler   llvmliter	   r
   r(   llvmlite.bindingr   llvmlite.testsr   r,  r  r  r  r   rP   r  r  r  r<  rJ  r~   replacer   rY  r  r'  r  r7  r  r  r  r  r;  rD  r   r  r   r   r   r  r  r  r  r  r%   rS   r   r   rA  objectr  r   r  r   r   r  rr  r   r,  r:  rG  rQ  ry  r~  r  r  r  r  r.  r9  rG  ro  ru  r  r  rM   mainrQ   r3   r   <module>r     s     , , $ 	  	  	  
  %   $   #++A.  8!!D!!/2	-&
	
 "8!!#v-#++O=NON    ,BH&P :<	     6- ( E  *5x 5D'Jx 'JTF+8 F+RI'x I'XD>H D>Nv-6 v-r4 44?, ? %X%%'2259:F}!8 }! G}!@n,8 n,b	R-( R-j%- %-PCX C>E E"GX GT6 L+H&: L+^D'h(< D'Nw5/ w5t
, 
,#18 #1L3h 381Y 1447( 47n %X%%'2259=I"H " J"UAX UAp:X :28H 8: zHMMO r3   