
    wi?                       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
j                    d
k    r ej        d            ej        ej        dk    dej                   Z ej        ej        dk    dej                   Z dZ!	 d dl"Z"dZ!n# e#$ r Y nw xY w ej        e!d          Z$d Z%dZ&dZ'dZ(dZ)dZ*dZ+dZ, e
j-                    dk    re,.                    dd          Z,dZ/dZ0d Z1d!Z2d"Z3d#Z4d$Z5d%Z6d&Z7d'Z8d(Z9d)Z:d*Z;d+Z<g d,Z=g d-Z>g d.Z?d/Z@d0ZAd1ZBd2ZCd3ZDd4ZEd5ZFd6ZGd7ZH G d8 d9e          ZI G d: d;eI          ZJ G d< d=eI          ZK G d> d?eI          ZL G d@ dAeI          ZM G dB dCeN          ZO G dD dEeO          ZP G dF dGeIeP          ZQ ejR        dH           G dI dJeI                      ZS G dK dLeI          ZT G dM dNeI          ZU G dO dPeI          ZV G dQ dReI          ZW G dS dTeI          ZX G dU dVeI          ZY G dW dXeI          ZZ G dY dZeI          Z[ G d[ d\eQ          Z\ G d] d^eI          Z] ej         e
j                    ^                    d_          d`           G da dbeI                      Z_ G dc ddeI          Z` G de dfeI          Za G dg dheI          Zb G di djeN          Zc G dk dleIec          Zd G dm dneIec          Ze G do dpeIec          Zf ej        e	jg        h                    dq          dr          e$ G ds dte                                  Ziejduk    r ejk                     dS dS )v    N)	CFUNCTYPEc_intc_int32)find_library)contextmanager)mkstemp)ir)binding)ffi)TestCasearmv7lzlibgcc_s.so.1condazconda package test only, have wheelzwheel package test only, have FTztest needs py-lief packagec                  t   t          j        t           j                  } 	 t          j        t           j        d           	 t          j        t           j        |            dS # t           j        $ r# Y t          j        t           j        |            dS w xY w# t          j        t           j        |            w xY w)Nde_DEFT)locale	setlocaleLC_ALLError)curs    k/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/llvmlite/tests/test_binding.pyno_de_localer   ,   s    

6=
)
)C-000 ,,,,, <    	,,,,,
 	,,,,s#   A! !B0B BB !B7a  
    ; ModuleID = '<string>'
    source_filename = "asm_sum.c"
    target triple = "{triple}"
    %struct.glob_type = type {{ i64, [2 x i64]}}
    %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}"

    define i32 @sum(i32 %.1, i32 %.2) {{
        %.3 = add i32 %.1, %.2
        ret i32 0
    }}
    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	fa5, 8(sp)zfmv.w.x	fa4, a0zfcvt.d.s	fa4, fa4fadd.d	fa5, fa4, fa5fsd	fa5, 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	fa4, fa0r   r   r    r!   r"   r#   )zfcvt.d.s	fa5, fa0zfadd.d	fa0, fa5, fa1r#   zc
declare void @a_readonly_func(i8 *) readonly

declare i8* @a_arg0_return_func(i8* returned, i32*)
a*  
define double @foo(i32 %i, double %j) optnone noinline {
    %I = alloca i32		; <i32*> [#uses=4]
    %J = alloca double		; <double*> [#uses=2]
    store i32 %i, i32* %I
    store double %j, double* %J
    %t1 = load i32, i32* %I		; <i32> [#uses=1]
    %t2 = add i32 %t1, 1		; <i32> [#uses=1]
    store i32 %t2, i32* %I
    %t3 = load i32, i32* %I		; <i32> [#uses=1]
    %t4 = sitofp i32 %t3 to double		; <double> [#uses=1]
    %t5 = load double, double* %J		; <double> [#uses=1]
    %t6 = fmul double %t4, %t5		; <double> [#uses=1]
    ret double %t6
}
z#
declare void @test_declare(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
}}
aw  
; Source C++
;-----------------------------------------
; class MyClass;
;
; class MyClassDefined{
;     MyClass *member;
;     MyClass *m2;
;     MyClass *m3;
; };
;
; void foo(MyClass *c, MyClassDefined){ }
;-----------------------------------------
; LLVM-IR by: clang -arch arm64 -S -emit-llvm file.cpp
; ModuleID = 'file.cpp'
source_filename = "class.cpp"
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
target triple = "arm64-apple-macosx13.3.0"

%class.MyClass = type opaque
%class.MyClassDefined = type { %class.MyClass*, %class.MyClass*, %class.MyClass* }

; Function Attrs: noinline nounwind optnone ssp uwtable(sync)
define void @_Z3fooP7MyClass14MyClassDefined(%class.MyClass* noundef %0, %class.MyClassDefined* noundef %1) {
  %3 = alloca %class.MyClass*, align 8
  store %class.MyClass* %0, %class.MyClass** %3, align 8
  ret void
}

!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6, !7, !8}
!llvm.ident = !{!9}

!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 13, i32 3]}
!1 = !{i32 1, !"wchar_size", i32 4}
!2 = !{i32 8, !"branch-target-enforcement", i32 0}
!3 = !{i32 8, !"sign-return-address", i32 0}
!4 = !{i32 8, !"sign-return-address-all", i32 0}
!5 = !{i32 8, !"sign-return-address-with-bkey", i32 0}
!6 = !{i32 7, !"PIC Level", i32 2}
!7 = !{i32 7, !"uwtable", i32 1}
!8 = !{i32 7, !"frame-pointer", i32 1}
!9 = !{!"Apple clang version 14.0.3 (clang-1403.0.22.14.1)"}

a  ; Source C++
;-----------------------------------------

; struct Vector2D{
;     float x, y;
; };
;
; void foo(Vector2D vec, Vector2D *out) {
;     *out = vec;
; }
;-----------------------------------------
; LLVM-IR by: clang -arch x86_64 -S -emit-llvm file.cpp
; ModuleID = 'file.cpp'
source_filename = "class.cpp"
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx13.3.0"

%struct.Vector2D = type { float, float }

; Function Attrs: noinline nounwind optnone ssp uwtable
define void @_Z3foo8Vector2DPS_(<2 x float> %0, %struct.Vector2D* noundef %1) #0 {
  %3 = alloca %struct.Vector2D, align 4
  %4 = alloca %struct.Vector2D*, align 8
  %5 = bitcast %struct.Vector2D* %3 to <2 x float>*
  store <2 x float> %0, <2 x float>* %5, align 4
  store %struct.Vector2D* %1, %struct.Vector2D** %4, align 8
  %6 = load %struct.Vector2D*, %struct.Vector2D** %4, align 8
  %7 = bitcast %struct.Vector2D* %6 to i8*
  %8 = bitcast %struct.Vector2D* %3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %7, i8* align 4 %8, i64 8, i1 false)
  ret void
}

; Function Attrs: argmemonly nofree nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #1

attributes #0 = { noinline nounwind optnone ssp uwtable "darwin-stkchk-strong-link" "frame-pointer"="all" "min-legal-vector-width"="64" "no-trapping-math"="true" "probe-stack"="___chkstk_darwin" "stack-protector-buffer-size"="8" "target-cpu"="penryn" "target-features"="+cx16,+cx8,+fxsr,+mmx,+sahf,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" "tune-cpu"="generic" }
attributes #1 = { argmemonly nofree nounwind willreturn }

!llvm.module.flags = !{!0, !1, !2, !3, !4}
!llvm.ident = !{!5}

!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 13, i32 3]}
!1 = !{i32 1, !"wchar_size", i32 4}
!2 = !{i32 7, !"PIC Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{i32 7, !"frame-pointer", i32 2}
!5 = !{!"Apple clang version 14.0.3 (clang-1403.0.22.14.1)"}

c                   4    e Zd Zd Zd ZedfdZddZd ZdS )	BaseTestc                     t          j                     t          j                     t          j                     t          j        d d          | _        g t          j        d d <   d S N)llvminitialize_native_targetinitialize_native_asmprintergccollectgarbageold_garbageselfs    r   setUpzBaseTest.setUp  sP    %''')+++

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

            llvm.initialize_native_target()
            llvm.initialize_native_asmprinter()
            llvm.initialize_all_targets()
            llvm.initialize_all_asmprinters()
            llvm.shutdown()
            -crp   
check_callr   
executabler2   codes     r   test_initfinizTestMisc.test_initfini  s+     	s~tT:;;;;;r4   c                     d}|                      t          |          5  t          j                     d d d            d S # 1 swxY w Y   d S )Nz-llvmlite.binding.initialize\(\) is deprecated)expected_regex)assertRaisesRegexr   r*   
initialize)r2   r  s     r   test_deprecated_initzTestMisc.test_deprecated_init  s    @##L#GG 	 	O	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A  AAc                 L    d}t          j        t          j        d|g           d S )Nzif 1:
            from llvmlite import binding as llvm

            llvm.set_option("progname", "-debug-pass=Disabled")
            r#  r$  r'  s     r   test_set_optionzTestMisc.test_set_option  s+    
 	s~tT:;;;;;r4   c                     t           j        \  }}}d}|                     ||           |                     |t          d                     d S )N)   	   )r*   llvm_version_infor   range)r2   majorminorpatchvalids        r   test_versionzTestMisc.test_version  sJ    "4ueeU###eU1XX&&&&&r4   c                 ,    t          j                     d S r)   )r*   check_jit_executionr1   s    r   test_check_jit_executionz!TestMisc.test_check_jit_execution  s     """""r4   zLocale not availablec                     |                      t                    }t          |          }t          j        t          j        d           t          |          }|                     ||           d S )Nr   )rA   asm_double_localer   r   r   r   r6   )r2   r   expectgots       r   test_print_double_localez!TestMisc.test_print_double_locale  s]    KK)**Q 	000!ff%%%%%r4   c                 V    d}d}t           j        |d|g}t          j        |           d S )Nzfrom llvmlite import bindingz-Werrorr#  )r   r&  rp   r%  )r2   r(  flagscmdargss       r   test_no_accidental_warningsz$TestMisc.test_no_accidental_warnings  s3    ->5$5g&&&&&r4   N)rN   rO   rP   r   r   r   r   r   r   r  r  r  r!  r)  r.  r0  r:  r=  r   skipIfr   rB  rF  rR   r4   r   r   r   9  s3          1 1 1: : :& & &
" " "     
4 4 4$F F F.  

< 
< 
<  
< < <' ' '# # # X_\\^^%;<<	& 	& =<	&' ' ' ' 'r4   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestModuleRefc                     |                                  }t          |                                          }|                     |                    d          |           d S )Nz; ModuleID =)rA   r   r   r  r   r2   r@   r   s      r   test_strzTestModuleRef.test_str  sJ    kkmmHHNN^44a88888r4   c                 (   |                                  }t          |           |                                 |                     t          j                  5  t          |           d d d            n# 1 swxY w Y   |                                 d S r)   )rA   r   closer   ctypesArgumentErrorr2   r@   s     r   
test_closezTestModuleRef.test_close  s    kkmmC		v344 	 	HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 			s   A33A7:A7c                    |                                  }t          |           |5  t          |           d d d            n# 1 swxY w Y   |                     t          j                  5  t          |           d d d            n# 1 swxY w Y   |                     t
                    5  |5  	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r)   )rA   r   r   rO  rP  r   rQ  s     r   	test_withzTestModuleRef.test_with  s   kkmmC 	 	HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	v344 	 	HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	|,, 	 	                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sY   AA	A,BBB-C0B>2C>C	CC	CCCc                     |                                  }d|_        |                     |j        d           d|_        |                     |j        d           d S )Nr   bar)rA   rE   r6   rQ  s     r   	test_namezTestModuleRef.test_name  sS    kkmm5)))5)))))r4   c                 d    |                                  }|                     |j        d           d S )Nz	asm_sum.c)rA   r6   source_filerQ  s     r   test_source_filezTestModuleRef.test_source_file  s-    kkmm+66666r4   c                     |                                  }|j        }|                     |t                     ||_        |                     ||j                   d S r)   )rA   data_layoutr  r   r6   rK  s      r   test_data_layoutzTestModuleRef.test_data_layout  sQ    kkmmOa%%%CO,,,,,r4   c                     |                                  }|j        }|                     |t          j                               d|_        |                     |j        d           d S )Nr   )rA   r:   r6   r*   r<   rK  s      r   test_triplezTestModuleRef.test_triple  sZ    kkmmJD355666
R(((((r4   c                    |                                  }|                     |                                d            |                      t                    }|                     t
                    5 }|                                 d d d            n# 1 swxY w Y   t          |j                  }|                     d|           d S )Nz%.bug = add i32 1, %.bug)	rA   r   r   asm_verification_failr   r   r   r   r   )r2   r@   r   r   s       r   test_verifyzTestModuleRef.test_verify  s    kkmmcjjllD)))kk/00|,, 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	0!44444s   1BBBc                    |                                  }|                    d          }|                     |t          j                   |                     |j        d           |                     t                    5  |                    d           d d d            n# 1 swxY w Y   ~t          |j                    d S )Nsumr   )
rA   get_functionr  r*   ValueRefr6   rE   r   	NameErrorr   r2   r@   r   s      r   test_get_functionzTestModuleRef.test_get_function  s    kkmme$$b$-000%(((y)) 	$ 	$U###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ BI   ?B!!B%(B%c                    |                                  }|                    d          }|                     |j        d           |                     t          j        dt          |                               |                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nstruct.glob_type8%struct\.glob_type(\.[\d]+)? = type { i64, \[2 x i64\] }zstruct.doesnt_exist)
rA   get_struct_typer6   rE   r  ru   r{   r   r   rg  )r2   r@   st_tys      r   test_get_struct_typez"TestModuleRef.test_get_struct_type  s    kkmm##$677%7888RXGJJ  	 	 	 y)) 	7 	7 5666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   B77B;>B;c                    |                                  }|                    d          }|                     |t          j                   |                     |j        d           |                     t                    5  |                    d           d d d            n# 1 swxY w Y   ~t          |j                    d S )NrB   rV  )
rA   rD   r  r*   rf  r6   rE   r   rg  r   )r2   r@   gvs      r   test_get_global_variablez&TestModuleRef.test_get_global_variable   s    kkmm$$V,,b$-000&)))y)) 	+ 	+##E***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ BIrj  c                     |                                  }|j        }~t          |d           }|                     t	          |          d           |                     d |D             g d           d S )Nc                     | j         S r)   r   )values    r   <lambda>z5TestModuleRef.test_global_variables.<locals>.<lambda>1  s    UZ r4   )key   c                     g | ]	}|j         
S rR   r   ).0gs     r   
<listcomp>z7TestModuleRef.test_global_variables.<locals>.<listcomp>3  s    000Q!&000r4   )rB   glob_bglob_fglob_struct)rA   global_variablessortedr6   r|   )r2   r@   itglobss       r   test_global_variablesz#TestModuleRef.test_global_variables-  s    kkmm!r77888UQ'''00%000DDD	F 	F 	F 	F 	Fr4   c                     |                                  }|j        }~t          |          }|                     t	          |          d           |                     |d         j        d           d S Nr_   r   rd  )rA   	functionslistr6   r|   rE   )r2   r@   r  funcss       r   test_functionszTestModuleRef.test_functions6  sb    kkmm]RUQ'''q.....r4   c           	      ~   |                                  }|j        }~t          |          }|                     t	          |          d           |                     t          j        d|d         j                             |                     t          j        dt          |d                                        d S )Nr_   struct\.glob_type(\.[\d]+)?r   rm  )
rA   struct_typesr  r6   r|   r  ru   r{   rE   r   )r2   r@   r  structss       r   test_structszTestModuleRef.test_structs>  s    kkmmr((Wq)))RX&D&-ajo7 7 	8 	8 	8RXG
OO  	 	 	 	 	r4   c                    |                                  }|                      t                    }|                    |           |                     t	          d |j        D                       ddg           |                    d           |                                 |                     t          j
                  5  |                    d           d d d            d S # 1 swxY w Y   d S )Nc              3   $   K   | ]}|j         V  d S r)   r   r{  fs     r   	<genexpr>z-TestModuleRef.test_link_in.<locals>.<genexpr>O  $      22a16222222r4   mulrd  )rA   asm_mullink_inr6   r  r  re  rN  r   rO  rP  )r2   destsrcs      r   test_link_inzTestModuleRef.test_link_inJ  s   {{}}kk'""S224>22222UEN	D 	D 	D%   

v344 	$ 	$U###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s    C##C'*C'c                    |                                  }|                      t                    }|                    |d           |                     t	          d |j        D                       ddg           |                                 |                     t	          d |j        D                       dg           |                    d           d S )NTpreservec              3   $   K   | ]}|j         V  d S r)   r   r  s     r   r  z6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>Z  r  r4   r  rd  c              3   $   K   | ]}|j         V  d S r)   r   r  s     r   r  z6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>\  s$      ??1??????r4   )rA   r  r  r6   r  r  rN  re  )r2   r  src2s      r   test_link_in_preservez#TestModuleRef.test_link_in_preserveU  s    {{}}{{7##TD)))224>22222UEN	D 	D 	D

???????%III%     r4   c                 @   |                                  }|                      t                    }|                     t                    5 }|                    |           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nzsymbol multiply defined)rA   asm_sum2r   r   r  r   r   r   )r2   r  r  r   s       r   test_link_in_errorz TestModuleRef.test_link_in_error_  s     {{}}kk(##|,, 	LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	/R\1B1BCCCCCs   	A++A/2A/c                     |                                  }|                                }d}d}|                     |                    |          p|                    |                     d S )Ns   s   BC)rA   
as_bitcoder  r   )r2   r@   bcbitcode_wrapper_magicbitcode_magics        r   test_as_bitcodezTestModuleRef.test_as_bitcodeh  sn    kkmm^^ !4m44 =&;<<	> 	> 	> 	> 	>r4   c                 2   |                      t                    5 }t          j        d           d d d            n# 1 swxY w Y   |                     dt          |j                             |                     dt          |j                             d S )Nr4   zLLVM bitcode parsing errorz(file too small to contain bitcode header)r   r   r*   parse_bitcoder   r   r   )r2   r   s     r   test_parse_bitcode_errorz&TestModuleRef.test_parse_bitcode_errorr  s    |,, 	$s###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$2C4E4EFFF6BL8I8I	
 	
 	
 	
 	
s   <A A c                 p   t          j                    }|                     |                                          }t          j                    }t          j        ||          }|                     |                                |           |                    d           |                    d           d S )Nr?   rd  rB   )r*   create_contextrA   r  r  r6   re  rD   )r2   context1r  context2r@   s        r   test_bitcode_roundtripz$TestModuleRef.test_bitcode_roundtripz  s    &(([[[**5577&(( X..))2...'''''r4   c                     |                                  }|                                }|                     ||           |                     |                                |                                           d S r)   )rA   cloneassertIsNotr6   r  )r2   r   cloneds      r   test_cloningzTestModuleRef.test_cloning  sb    KKMM###**,,allnn=====r4   N)rN   rO   rP   rL  rR  rT  rW  rZ  r]  r_  rb  ri  rp  rs  r  r  r  r  r  r  r  r  r  r  rR   r4   r   rI  rI    sU       9 9 9
  	 	 	* * *7 7 7- - -) ) )	5 	5 	5  
7 
7 
7  F F F/ / /
 
 
	$ 	$ 	$! ! !D D D> > >
 
 
	( 	( 	(> > > > >r4   rI  c                   h    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd ZdS )JITTestMixinz*
    Mixin for ExecutionEngine tests.
    rd  c                     |                                  |                    |          }|                     |            t          t          t          t                    |          S r)   )finalize_objectget_function_addressr  r   r   )r2   ee	func_namecfptrs       r   get_sumzJITTestMixin.get_sum  sU    
''	22-yu--e444r4   c                     |                                  }|                     |          5 }|                     |          } |dd          }|                     d|           d d d            d S # 1 swxY w Y   d S Nr`   )rA   rH   r  r6   )r2   r@   r  cfuncress        r   test_run_codezJITTestMixin.test_run_code  s    kkmmXXc]] 	&bLL$$E%2,,CR%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   8A//A36A3c                 <   |                      |                                           }|                                 |                                 |                     t          j                  5  |                                 d d d            d S # 1 swxY w Y   d S r)   )rH   rA   rN  r   rO  rP  r  r2   r  s     r   rR  zJITTestMixin.test_close  s    XXdkkmm$$







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


		r4   c                     |                                  }|                     |          }|                                 |                                 d S r)   r  r  s      r   test_module_lifetime2z"JITTestMixin.test_module_lifetime2  s<    kkmmXXc]]		





r4   c                    |                      |                                           }|                     t                    }|                    |           |                     t
                    5  |                    |           d d d            n# 1 swxY w Y   |                     |j                   |                                 | 	                    |j                   d S r)   )
rH   rA   r  
add_moduler   KeyErrorassertFalseclosedrN  r  r2   r  r@   s      r   test_add_modulezJITTestMixin.test_add_module  s    XXdkkmm$$kk'""
cx(( 	 	MM#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$$$



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




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


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


$$$$$s   B((B,/B,c                     |                                  }|                     |          }|j        }|                     |j        |           t	          |           ~~t	          |           d S r)   )rA   rH   target_datar   r   )r2   r@   r  tds       r   test_target_datazJITTestMixin.test_target_data  sZ    kkmmXXc]]^bnb)))BBr4   c                    |                                  }|                     |          }|j        }|                    d          }|                    d          }|                    d          }t          j        dk     rdnd}|||fD ]0}|                     |                    |j                  |           1|                     |                    |j	                  d           |                     |
                    |j	                  d           |                     |                    |j	                  d           |                     |
                    |j	                  d           |                     |                    |j	                  d	           |                     |
                    |j	                  d
           d S )NrB   r~  r          ry     r_   )r_   r`   ry     )ry  r  )rA   rH   r  rD   r   maxsizer6   get_abi_sizetypeglobal_value_typeget_abi_alignmentr   )	r2   r@   r  r  gv_i32gv_i8	gv_structpointer_sizer|  s	            r   test_target_data_abi_enquiriesz+JITTestMixin.test_target_data_abi_enquiries  s   kkmmXXc]]^((00''11++M::	K'11qqq%+ 	D 	DAR__QV44lCCCC)ABBAFFF--f.FGGKKK)@AA1EEEb**5+BCCYOOO)DEErJJJb**9+FGGPPPPPr4   c                 b   g fd}|                                  }|                     |          }|                    |           |                     t	                    d           |                     |          } |dd           |                     t	                    d           |                     d         d         |           |                     d         d         t                     g d d <   |                      t                    }|
                    |           |                     |d          }|                     t	                    d           |                     d         d         |           |                     d         d         t                     d S )Nc                 6                         | |f           d S r)   r   r@   bufnotifiess     r   notifyz5JITTestMixin.test_object_cache_notify.<locals>.notify       OOS#J'''''r4   r   r`   r  r_   r  )rA   rH   set_object_cacher6   r|   r  r   r  bytesr  r  )r2   r  r@   r  r  mod2r  s         @r   test_object_cache_notifyz%JITTestMixin.test_object_cache_notify  s   	( 	( 	( 	( 	( kkmmXXc]]
F###X***R  aX***hqk!nc***hqk!ne444{{7##
dR''X***hqk!nd+++hqk!ne44444r4   c                 p  	 g g fd}fd}|                                  }|                     |          }|                    ||           |                     t	                    d           |                     t	                    d           |                     |          }|                     t	                    d           |                     t	                    d           |                     d         |           d         d         		fd}g d d <   g d d <   |                      t                    }|                     |          }|                    ||           |                     t	                    d           |                     t	                    d           |                     |          }|                      |dd          d           |                     t	                    d           |                     t	                    d           d S )	Nc                 6                         | |f           d S r)   r  r  s     r   r  z8JITTestMixin.test_object_cache_getbuffer.<locals>.notify  r  r4   c                 2                         |            d S r)   r  )r@   
getbufferss    r   	getbufferz;JITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer  s    c"""""r4   r   r_   c                 2                         |            S r)   r  )r@   r  
sum_buffers    r   getbuffer_successfulzFJITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer_successful2  s    c"""r4   r`   r  r  )rA   rH   r  r6   r|   r  r   r  )
r2   r  r  r@   r  r  r  r  r  r  s
          @@@r   test_object_cache_getbufferz(JITTestMixin.test_object_cache_getbuffer  s5   
	( 	( 	( 	( 	(	# 	# 	# 	# 	# kkmmXXc]]
FI... 	X***Z!,,,R  X***Z!,,,jmS)))a[^

	 	 	 	 	 	 
111kk'""XXc]]
F$8999X***Z!,,,R  q"r***X***Z!,,,,,r4   N)rd  )rN   rO   rP   r   r  r  rR  rT  r  r  r  r  r  r  r  r  r   r	  rR   r4   r   r  r    s         5 5 5 5& & &! ! !! ! !    $ $ $    	% 	% 	%  Q Q Q*5 5 56*- *- *- *- *-r4   r  c                       e Zd Zd Zd ZdS )JITWithTMTestMixinc                    |                      d          }|                                 }|                     ||          }|                    |          }|                     d|           |                    d           |                    |          }|                     d|           |                     ||           dS )z%Test TargetMachineRef.emit_assembly()TrG   rd  N)rM   rA   rH   r   r   set_asm_verbosityassertNotEqual)r2   rM   r@   r  raw_asmraw_asm_verboses         r   test_emit_assemblyz%JITWithTMTestMixin.test_emit_assemblyG  s    ,,,66kkmmXXc>** ..s33eW%%%((...(66s;;eW%%%G_55555r4   c                 d   |                      d          }|                                 }|                     ||          }|                    |          }|                     |t
                     t          j                            d          r | 	                    d|dd                    dS dS )z#Test TargetMachineRef.emit_object()TrG   rU   s   ELFN
   )
rM   rA   rH   emit_objectr  r  r   r   r   r   )r2   rM   r@   r  code_objects        r   test_emit_objectz#JITWithTMTestMixin.test_emit_objectS  s    ,,,66kkmmXXc>**$0055k5111<""7++ 	4MM&+crc"233333	4 	4r4   N)rN   rO   rP   r  r  rR   r4   r   r  r  E  s2        
6 
6 
6	4 	4 	4 	4 	4r4   r  c                       e Zd ZdZddZdS )	TestMCJitz@
    Test JIT engines created with create_mcjit_compiler().
    Nc                 \    ||                      d          }t          j        ||          S )NTrG   )rM   r*   create_mcjit_compiler)r2   r@   rM   s      r   rH   zTestMCJit.jitd  s1    !!00T0::N)#~>>>r4   r)   )rN   rO   rP   r   rH   rR   r4   r   r  r  _  s2         ? ? ? ? ? ?r4   r  zOrcJIT support is experimentalc            	           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dS )TestOrcLLJITrd  NFc                    t          j        |d|          }t          j                    }|r|                                 |                    |                    t          j                                                            |                              ||          }	|	|         }
| 	                    |
           | 
                    ||	j                   ||	 ||
          fS )NF)use_jit_linksuppress_errorsr9   )r*   create_lljit_compilerJITLibraryBuilderadd_current_processadd_irr;   r<   export_symbollinkr  r6   rE   )r2   r>   r  rM   add_process	func_typer  lljitr   rtr  s              r   rH   zTestOrcLLJIT.jitt  s     *>8=;JL L L (** 	*'')))VCJJd&=&?&?J@@AA]9%%T%## 	 9BG,,,b))E****r4   c                     t          j                    }t          j                                        dd                              d                              |d          }|                     |d         d           d S )Nr   r   r   )r*   r   r!  import_symbolr$  r%  r6   r2   r(  r)  s      r   test_define_symbolzTestOrcLLJIT.test_define_symbol  sl    *,,#%%33ItDD]9%%dd5%&8&8 	I-----r4   c                 &   t          j                    }|                     t          d          5  |                    dd           d d d            n# 1 swxY w Y   t          j                                        dd                              d                              |d          }| 	                    |d         d           |                     t          d          5  |                    dd           d d d            d S # 1 swxY w Y   d S )NzNo such libraryr   r   r   r   r   zSymbols not found.*__foobar)
r*   r   r,  r   lookupr!  r+  r$  r%  r  r,  s      r   "test_lookup_undefined_symbol_failsz/TestOrcLLJIT.test_lookup_undefined_symbol_fails  s{   *,,##L2CDD 	, 	,LL
+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,#%%33ItDD]9%%dd5%&8&8 	ByM1---##L$AC C 	, 	,LL
+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s#   AAA"DD
D
c                    t           j        dk    rK|                     t          d          5  t	          j        d           d d d            d S # 1 swxY w Y   d S |                     t	          j        d                     d S )Nwin32zJITLink .* WindowsT)r  )r   r   r,  r   r*   r   r  r1   s    r   test_jit_linkzTestOrcLLJIT.test_jit_link  s    <7""''(<> > > >*====> > > > > > > > > > > > > > > > > >   !;!N!N!NOOOOOs   AAAc                     |                                  \  }}}|5   |dd          }|                     d|           d d d            d S # 1 swxY w Y   d S r  )rH   r6   )r2   r(  r)  r  r  s        r   r  zTestOrcLLJIT.test_run_code  s    !XXZZE 	& 	&%2,,CR%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   #AAAc                    |                                  \  }}}|                                 |                                 |                     t                    5  |                    dd           d d d            d S # 1 swxY w Y   d S Nr   r   )rH   rN  r   AssertionErrorr/  r2   r(  r)  r  s       r   rR  zTestOrcLLJIT.test_close  s    !XXZZE~.. 	& 	&LL%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   A??BBc                    |                                  \  }}}|5  	 d d d            n# 1 swxY w Y   |                     t                    5  |5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t                    5  |                    dd           d d d            d S # 1 swxY w Y   d S r6  )rH   r   r   r7  r/  r8  s       r   rT  zTestOrcLLJIT.test_with  s   !XXZZE 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	|,, 	 	                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ~.. 	& 	&LL%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&sT   )--A6AA6A#	#A6&A#	'A66A:=A:B??CCc                    |                                  \  }}}t          j                                        t                              t          j                                                            d                              |d          }  t          t          t          t                    |d                   dd          }|                     d|           |                     |                    dd          d         d           |                     |                    dd          d         d           |                     t                    5  |                    dd           d d d            n# 1 swxY w Y   |                     t                    5  |                    dd           d d d            d S # 1 swxY w Y   d S )Nr9   r  r`   r  ird  r   )rH   r*   r!  r#  r  r;   r<   r$  r%  r   r   r6   r  r/  r   r   r2   r(  rt_sum	cfunc_sumrt_mulr  s         r   test_add_ir_modulezTestOrcLLJIT.test_add_ir_module  s   %)XXZZ"	'))VGNN$*A*C*CNDDEE]5!!T% 	 <,iue,,VE];;ArBBc"""ELL66u=qAAAELL66u=qAAA|,, 	' 	'LL&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'|,, 	' 	'LL&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's$   E<<F F !GG	G	c                    |                                  \  }}}~t          j                     |                     t                    5  |                    dd           d d d            n# 1 swxY w Y   |                                 d S Nrd  )rH   r-   r.   r   r   r/  rN  )r2   r(  r<  r   s       r   r  zTestOrcLLJIT.test_remove_module  s    !XXZZ

|,, 	' 	'LL&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A**A.1A.c                    |                                  \  }}}t          j                                        t                              t          j                                                            d                              d          	                    |d          }  t          t          t          t                    |d                   dd          }|                     d|           d S )Nr9   
square_sumrd  r`   r  r3  )rH   r*   r!  r#  asm_square_sumr;   r<   r$  add_jit_libraryr%  r   r   r6   r;  s         r   test_lib_dependszTestOrcLLJIT.test_lib_depends  s    %)XXZZ"	'))VN))1H1J1J)KKLL]<((_U##T%&&	 	
 C,iue,,VL-ABB1bIIC     r4   c                     |                                  \  }}}|j        }|                     |j        |           t          |           ~t          |           d S r)   )rH   r  r   r   )r2   r(  r)  r   r  s        r   r  zTestOrcLLJIT.test_target_data  sQ    Ae',,,BBr4   c                 l   t          d          }t          j                    }t          j                    }|                    t
                              t          j                                                            dt          j
        |                                        d                              |d          }|d         }|                     |           |                       t          t                     |                      d           ~|                     |j        d           d S )Nr   r9   Ar      r2  )r   r*   r   r!  r#  asm_ext_ctorsr;   r<   r+  rO  	addressofr$  r%  r  r6   r   r   r  rv  )r2   shared_valuer(  r   r)  r   s         r   test_global_ctors_dtorsz$TestOrcLLJIT.test_global_ctors_dtors  s    qzz*,,(**VM((0G0I0I(JJKK]3 0 > >??]5!!T%	 	
 i.)5))#..00"555L.33333r4   c                     d}|                      t          |          5  |                     t          dd           d d d            d S # 1 swxY w Y   d S )Nz*Failed to materialize symbols:.*getversion
getversionT)r  )r,  r   rH   asm_getversion)r2   msgs     r   (test_lookup_current_process_symbol_failsz5TestOrcLLJIT.test_lookup_current_process_symbol_fails  s     ;##L#66 	I 	IHH^\4HHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   A		AAc                 @    |                      t          dd d           d S )NrP  T)rH   rQ  r1   s    r   "test_lookup_current_process_symbolz/TestOrcLLJIT.test_lookup_current_process_symbol  s     tT:::::r4   c                 R   t          j                    t                              t          j                              fdfdt          t          j                              D             }|D ]}|                                 |D ]}|	                                 d S )Nr9   c                       fd}|S )Nc            
          g } t          d          D ]h}|                     t          j                                                                      d                              d d|                      id S )N2   rd  sum_r   )r5  r   r*   r!  r#  r$  r%  )trackingcir(  llvm_irs     r   do_workzDTestOrcLLJIT.test_thread_safe.<locals>.compile_many.<locals>.do_work  s    r B BAOOD$:$<$<%+VG__%2]5%9%9%)T%A%@%@B B B BB Br4   rR   )r]  r_  r(  r^  s   ` r   compile_manyz3TestOrcLLJIT.test_thread_safe.<locals>.compile_many  s5    B B B B B B B Nr4   c                 L    g | ] }t          j         |                     !S ))rL   )	threadingThread)r{  r]  r`  s     r   r}  z1TestOrcLLJIT.test_thread_safe.<locals>.<listcomp>  s?     / / / ||A777 / / /r4   )
r*   r   rQ   r;   r<   r5  rm   	cpu_countstartjoin)r2   thsthr`  r(  r^  s      @@@r   test_thread_safezTestOrcLLJIT.test_thread_safe  s    *,,..(?(A(A.BB		 		 		 		 		 		/ / / /blnn--/ / / 	 	BHHJJJJ 	 	BGGIIII	 	r4   c                    |                      d          }|                                 }t          j        |          }t          j                                        |                    |                                        d                              |d          } t          t          t          t                    |d                   }|                      |dd          d           d S )NFrG   rd  r`         )rM   rA   r*   r   r!  add_object_imgr  r$  r%  r   r   r6   )r2   rM   r@   r(  r)  rd  s         r   test_add_object_filez!TestOrcLLJIT.test_add_object_file  s    ,,,77kkmm*>::#%%^N66s;;<<]5!!T% 	 -iue,,RY77QA&&&&&r4   c                    |                      d          }|                                 }|                    |          }t                      \  }}	 t	          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |          }t          j	                    
                    |                              d                              |d          } t          t          t          t                    |d                   }	|                      |	dd          d           t	          j        |           d S # t	          j        |           w xY w)NFrG   wbrd  r`   rk  rl  )rM   rA   r  r   rm   fdopenwriter*   r   r!  add_object_filer$  r%  r   r   r6   unlink)
r2   rM   r@   obj_bin	temp_desc	temp_pathr  r(  r)  rd  s
             r   $test_add_object_file_from_filesystemz1TestOrcLLJIT.test_add_object_file_from_filesystem  sx   ,,,77kkmm ,,S11&yy	9	!9d++ !q   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !.~>>E')) ++u%%eU##  1)E5%00E;;CSSAYY***Ii     BIi    s1   E 'B	=E 	BE BB3E E0)rN   rO   rP   rQ   r   r   rH   r-  r0  r3  r  rR  rT  r?  r  rF  r  rN  rS  rU  ri  rn  rx  rR   r4   r   r  r  q  s=        t5%)G)G!+ + + +&. . .	, 	, 	,P P P& & && & && & &' ' '  ! ! !  4 4 4"I I I; ; ;  ,	' 	' 	'! ! ! ! !r4   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dS )TestValueRefc                     |                                  }|                    d          }|                     t          |          d           d S )NrB   z@glob = global i32 0)rA   rD   r6   r   r2   r@   rB   s      r   rL  zTestValueRef.test_str4  sE    kkmm&&v..T$:;;;;;r4   c                     |                                  }|                    d          }|                     |j        d           d|_        |                     |j        d           d S )NrB   foobar)rA   rD   r6   rE   r|  s      r   rW  zTestValueRef.test_name9  s_    kkmm&&v..F+++	H-----r4   c                    |                                  }|                    d          }|j        }|                     |j        t          j                   ||_        |                     |j        |           dD ]N}||_        |                     |j        t          j                   |                     |j        j        |           Od S )NrB   )internalexternal)rA   rD   linkager  r*   Linkager6   rE   )r2   r@   rB   r  s       r   test_linkagezTestValueRef.test_linkage@  s    kkmm&&v..,dlDL999w//// 	9 	9G"DL!!$,===T\.8888	9 	9r4   c                    |                                  }|                    d          }|j        }|                     |j        t          j                   ||_        |                     |j        |           dD ]N}||_        |                     |j        t          j                   |                     |j        j        |           Od S )NrB   )hidden	protectedr  )rA   rD   
visibilityr  r*   
Visibilityr6   rE   )r2   r@   rB   r  s       r   test_visibilityzTestValueRef.test_visibilityL  s    kkmm&&v.._
dot???$*555< 	? 	?J(DO!!$/4?CCCT_1:>>>>	? 	?r4   c                    |                                  }|                    d          }|j        }|                     |j        t          j                   ||_        |                     |j        |           dD ]N}||_        |                     |j        t          j                   |                     |j        j        |           Od S )NrB   )	dllimport	dllexportr  )rA   rD   storage_classr  r*   StorageClassr6   rE   )r2   r@   rB   r  s       r   test_storage_classzTestValueRef.test_storage_classX  s    kkmm&&v..*d0$2CDDD*+];;;B 	E 	EM!.D!!$"4d6GHHHT/4mDDDD	E 	Er4   c                 `   |                                  }|                    d          }|                    d           |                     t                    5 }|                    d           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nrd  	nocapturezextzno such attribute 'zext')rA   re  add_function_attributer   
ValueErrorr6   r   r   )r2   r@   r   raisess       r   test_add_function_attributez(TestValueRef.test_add_function_attributed  s    kkmme$$
!!+...z** 	.f%%f---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.V-..0JKKKKKs   A;;A?A?c                     |                                  }|                    d          }|                     |j         |           d S NrB   )rA   rD   r   r|  s      r   test_modulezTestValueRef.test_modulel  s>    kkmm&&v..dk3'''''r4   c                     |                                  }|                    d          }|j        }|                     |t          j                   d S r  )rA   rD   r  r  r*   TypeRefr2   r@   rB   tps       r   	test_typezTestValueRef.test_typeq  sG    kkmm&&v..Yb$,/////r4   c                 *   |                                  }|                    d          }|j        }|                     |j        d           |                    d          }|                     t          j        d|j        j                             d S )NrB   r   r  r  )	rA   rD   r  r6   rE   r  ru   r{   r  )r2   r@   rB   r  sts        r   test_type_namezTestValueRef.test_type_namew  s    kkmm&&v..Y"%%%$$]33RX&D&(&:&?A A 	B 	B 	B 	B 	Br4   c                     |                                  }|                    d          }|j        }|                     t	          |          d           d S )NrB   i32)rA   rD   r  r6   r   r  s       r   test_type_printing_variablez(TestValueRef.test_type_printing_variable  sL    kkmm&&v..#R%(((((r4   c                     |                                  }|                    d          }|                     t          |j                  d           d S )Nrd  zi32 (i32, i32))rA   re  r6   r   r  rh  s      r   test_type_printing_functionz(TestValueRef.test_type_printing_function  sJ    kkmme$$R1224DEEEEEr4   c                 ~   |                                  }|                    d          }|                     |j        j                   |                     t          j        dt          |j                                       |                     t          j        dt          |j	                                       d S )Nr  ptrrm  )
rA   rD   r  r  
is_pointerr  ru   r{   r   r  )r2   r@   r  s      r   test_type_printing_structz&TestValueRef.test_type_printing_struct  s    kkmm$$]33*+++RXfc"'ll;;<<<RXG$%%' ' 	( 	( 	( 	( 	(r4   c                 ~    |                                  }|                                 |                                 d S r)   )rB   rN  )r2   rB   s     r   rR  zTestValueRef.test_close  s-    yy{{



r4   c                    |                                                      d          }|                      t                                        d          }|                     |j                   |                     |j                   d S rA  )rA   re  asm_sum_declarer  is_declarationr  )r2   defineddeclareds      r   test_is_declarationz TestValueRef.test_is_declaration  sn    ++--,,U33;;//<<UCC/000/00000r4   c                     |                      t                    }t          |j                  }|                     t          |          d           |D ]}|                     |j                   d S Nry  )rA   rQ   r  r  r6   r|   r  	is_global)r2   r@   gvarsr  s       r   test_module_global_variablesz)TestValueRef.test_module_global_variables  so    kk'""S)**UQ''' 	) 	)AOOAK((((	) 	)r4   c                 n   |                                  }t          |j                  }|                     t	          |          d           |d         }|                     |j                   |                     |j        d           |                     t                    5  |j
         d d d            n# 1 swxY w Y   |                     t                    5  |j         d d d            n# 1 swxY w Y   |                     t                    5  |j         d d d            d S # 1 swxY w Y   d S r  )rA   r  r  r6   r|   r  is_functionrE   r   r  instructionsoperandsopcode)r2   r@   r  r   s       r   test_module_functionsz"TestValueRef.test_module_functions  s   kkmmS]##UQ'''Qx()))E***z** 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	 	MM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	 	KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   #B77B;>B;C00C47C4D**D.1D.c                    |                                  }|                    d          }|                     |j                   t	          |j                  }|                     t          |          d           |                     |d         j                   |                     |d         j                   |                     |d         j	        d           |                     t          |d         j                  d           |                     |d         j	        d           |                     t          |d         j                  d           |                     t                    5  |d         j         d d d            n# 1 swxY w Y   |                     t                    5  |d         j         d d d            d S # 1 swxY w Y   d S )Nrd  r`   r   r_   .1r  .2)rA   re  r  r  r  	argumentsr6   r|   is_argumentrE   r   r  r   r  blocks)r2   r@   r   r   s       r   test_function_argumentsz$TestValueRef.test_function_arguments  s   kkmm&&()))DN##TA&&&Q+,,,Q+,,,at,,,T!W\**E222at,,,T!W\**E222z** 	 	GNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	 	G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   3FFF2GGGc                    |                                                      d          }t          |j                  }|                     t          |          d           |d         }|                     |j                   d S )Nrd  r_   r   )rA   re  r  r  r6   r|   r  is_block)r2   r   r  r   s       r   test_function_blocksz!TestValueRef.test_function_blocks  sk    {{}}))%00dk""Va(((q	'''''r4   c                 x   |                                                      d          }t          t          |j                  d         j                  }|                     t          |          d           |                     |d         j                   |                     |d         j                   |                     |d         j                   |                     |d         j	        d           |                     |d         j	        d           |                     |d         j	        d           d S )Nrd  r   rk  r_   r`   r~   r#   )
rA   re  r  r  r  r6   r|   r  is_instructionr  )r2   r   instss      r   test_block_instructionsz$TestValueRef.test_block_instructions  s    {{}}))%00T$+&&q)677UQ'''a/000a/000a/000q%000q%000q%00000r4   c                    |                                                      d          }t          t          |j                  d         j                  d         }|                     |j        d           t          |j                  }|                     t          |          d           | 	                    |d         j
                   | 	                    |d         j
                   |                     |d         j        d           |                     t          |d         j                  d           |                     |d         j        d           |                     t          |d         j                  d           d S )	Nrd  r   r~   r`   r_   r  r  r  )rA   re  r  r  r  r6   r  r  r|   r  
is_operandrE   r   r  )r2   r   r~   r  s       r   test_instruction_operandsz&TestValueRef.test_instruction_operands  s@   {{}}))%004$$Q'455a8U+++%%X***.///.///!)4000Xa[-..666!)4000Xa[-..66666r4   c                    t           j        d         }|dk    rdndg}|                     t                    }|j        D ]}t          |j                  }|j        dk    r|                     ||           8|j        dk    r|                     |g            t          |j	                  }|                     t          |d         j                  dg           |                     t          |d         j                  g            d S )	Nr      s   memory(read)s   readonlya_readonly_funca_arg0_return_funcs   returnedr_   )
r*   r4  rA   asm_attributesr  r  
attributesrE   r6   r  )r2   verreadonly_attrsr@   r   attrsr   s          r   test_function_attributesz%TestValueRef.test_function_attributes  s   $Q'-02XX//;Gkk.))M 	? 	?D))Ey---  7777222  +++DN++  d1g&8!9!9K=III  d1g&8!9!92>>>	? 	?r4   c                    |                                  }|                     |                    d          j        t          j        j                   |                    d          }|                     |j        t          j        j                   t          |j
                  d         }|                     |j        t          j        j                   t          |j                  d         }|                     |j        t          j        j                   |                     t          |j                  d         j        t          j        j                   |                     t          |j                  d         j        t          j        j                   |                      t                                         d          }t          t          |j
                  d         j                  d         }|                     t          |j                  d         j        t          j        j                   d S )NrB   rd  r   r_   r   )rA   r6   rD   
value_kindr*   	ValueKindglobal_variablere  functionr  r  basic_blockr  instructionr  constant_intasm_inlineasm
inline_asm)r2   r@   r   r   inst	iasm_func	iasm_insts          r   test_value_kindzTestValueRef.test_value_kind  s   kkmm0088C7	9 	9 	9&&$.*ABBBT[!!!$)4>+EFFFE&''*$.*DEEEdm,,Q/:4	6 	6 	6dm,,Q/:3	5 	5 	5 KK..;;EBB	i.//2?@@C	i011!4?2	4 	4 	4 	4 	4r4   c                    |                                  }|                     |                    d          j                   d}|j        D ]z}|                     |j                   |j        D ]V}|                     |j                   |j        D ]2}|                     |j                   |j        D ]}|j        r|dz  }3W{| 	                    |d           d S )NrB   r   r_   )
rA   r  rD   is_constantr  r  r  r  r  r6   )r2   r@   constant_operandsr   r   r  ops          r   test_is_constantzTestValueRef.test_is_constant  s   kkmm//77CDDDM 	3 	3DOOD,--- 3 3  !2333!. 3 3D$$T%5666"m 3 3> 3-2-333 	*A.....r4   c                 .   |                                  }|                    d          }t          t          |j                  d         j                  }|                     |d         j        d           t          |d         j                  }|                     |d         j	                   | 
                    |d         j	                   |                     |d                                         d           |                     t                    5  |d                                          d d d            n# 1 swxY w Y   |                      t                    }|                    d          }t          t          |j                  d         j                  }t          |d         j                  d         }t          |d         j                  d         }|                     |                                d           |                     |                    d          d	           |                    d
          }t                              |                    dd          dd          }|                     |d	           d S )Nrd  r   r_   r~   r`   rl  T)
signed_intr  Fr  little)signed)rA   re  r  r  r  r6   r  r  r  r  r  get_constant_valuer   r  asm_sum3int
from_bytesto_bytes)	r2   r@   r   r  r  posint64negint64as_u64as_i64s	            r   test_constant_intzTestValueRef.test_constant_int  sk   kkmm&&T$+&&q)677q%000a)**/000!0111!77991===z** 	- 	-QK**,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- kk(##&&T$+&&q)677a)**1-a)**1-4466:::444EErJJJ ,,,>>8 < <h'+   - -$$$$$s   E  EEc                    |                      t                    }|                    d          }t          t          |j                  d         j                  }|                     t          |          d           |                     |d         j        d           t          |d         j	                  }| 
                    |d         j                   |                     |d                                         d           | 
                    |d         j                   |                     |d                                         d           |                      t                    }|                    d          }t          t          |j                  d         j                  d         }t          |j	                  }|                     t                     5  |d                                          d d d            n# 1 swxY w Y   |                     |d                             d	          d           d S )
Nr   r   r`   r   g        r_   gQ	@T)round_fp)rA   r?  re  r  r  r  r6   r|   r  r  r  r  assertAlmostEqualr  asm_double_inaccurater   r  )r2   r@   r   r  r  r  s         r   test_constant_fpzTestValueRef.test_constant_fp2  s   kk+,,&&T$+&&q)677UQ'''q&111a)**/000x{==??EEE/000x{==??FFFkk/00&&D%%a(566q9&&z** 	- 	-QK**,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-x{==t=LLaPPPPPs   %HHHc                    |                      t                    }|                    d          }t          t          |j                  d         j                  d         }t          |j                  d         }|                     |j                   | 	                    |
                                d           d S )NrV  r   zptr null)rA   asm_null_constantre  r  r  r  r  r  r  r6   r  )r2   r@   r   r  args        r   test_constant_as_stringz$TestValueRef.test_constant_as_stringF  s    kk+,,&&D%%a(566q94=!!!$(((//11:>>>>>r4   c                    |                      t                    }|                    d          }t          |j                  }t          |d         j                  }|                     |d         j                   |                     |d         j	        d           t          |d         j
                  }|                     t          |          d           |                     |d         j                   |                     |d         j                   |                     |d         |d                    |                     |d         |d                    |                     |d         j	        d           |                     t                    5  |d         j
         d d d            d S # 1 swxY w Y   d S )Nr   r   phir`   r_   )rA   asm_phi_blocksre  r  r  r  r  r  r6   r  incoming_blocksr|   r  r  r   r  )r2   r@   r   r  r  r  s         r   test_incoming_phi_blocksz%TestValueRef.test_incoming_phi_blocksN  s   kk.))&&dk""F2J344Q6777a/777|A>??_--q111*3444*3444+VBZ888+VAY777 	LO2E:::z** 	, 	,O++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   F66F:=F:N)rN   rO   rP   rL  rW  r  r  r  r  r  r  r  r  r  r  rR  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rR   r4   r   rz  rz  2  s       < < <
. . .
9 
9 
9
? 
? 
?
E 
E 
EL L L( ( (
0 0 0B B B) ) )F F F
( ( (  
1 1 1) ) )    $( ( (	1 	1 	17 7 7? ? ?4 4 4(/ / / % % %4Q Q Q(? ? ?, , , , ,r4   rz  c                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestTypeRefc                 *   |                                  }|                    d          }|                     t          |j                  d           |                    d          }|                     t          |          d           t          |j                  }|                     t          |          d           |                     t          |d                   d           |                     t          |d                   d	           d S )
NrB   r  rl  z+%struct.glob_type = type { i64, [2 x i64] }r`   r   i64r_   z	[2 x i64])	rA   rD   r6   r   r  rn  r  elementsr|   )r2   r@   rB   glob_struct_typer  s        r   rL  zTestTypeRef.test_strf  s    kkmm&&v..T344e<<<../ABB-..F	H 	H 	H (122X***Xa[))5111Xa[));77777r4   c                    |                                  }|                    d          }|                     |j        j        t
          j        j                   |                     |j        j	                   |                    d          }|                     |j        j        t
          j        j                   |                     |j        j	                   |j
        }|                     |j        t
          j        j                   |                     |j                   |j        \  }}|                     |j        t
          j        j                   |                     |j        t
          j        j                   |                     |j                   |                    d          }|j        \  }}	|                     |	j        t
          j        j                   |                     |	j                   |                    d          j        }
|                     |
j        t
          j        j                   |                    d          j
        }|                     |j        t
          j        j                   d S )NrB   r  struct.glob_type_vecrd  )rA   rD   r6   r  	type_kindr*   TypeKindpointerr  r  r  struct	is_structr  integerarrayis_arrayrn  vector	is_vectorre  r  )r2   r@   rB   r  stypestype_astype_bglob_vec_struct_typer   vector_typefuncptrfunctypes               r   test_type_kindzTestTypeRef.test_type_kinds  s   kkmm&&v..,dm.CDDD	,-----m<<)3T]5JKKK(3444-$-*>???((( >*DM,ABBB*DM,?@@@()))"223IJJ-6;.0DEEE-...""5)).*DM,ABBB##E**<+T]-CDDDDDr4   c                    |                                  }|                    d          }|j        \  }}|                     |j        d           |                     t                    5  |j         d d d            d S # 1 swxY w Y   d S )Nrl  r`   )rA   rn  r  r6   element_countr   r  )r2   r@   r  r   
array_types        r   test_element_countzTestTypeRef.test_element_count  s    kkmm../ABB(1:11555z** 	+ 	+**	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   )A>>BBc                    |                                  }|                    d          }|                    d          }|j        \  }}|j        \  }}|                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           d S )Nrl  r  @      r   )rA   rn  r  r6   
type_width)r2   r@   r  r  integer_typer%  r   r  s           r   test_type_widthzTestTypeRef.test_type_width  s    kkmm../ABB"223IJJ#3#< j-6;0"555/888 	)4a888.22222r4   c                 P   |                      t                    }|                    d          }|j        }|                     |j                   |                      t                    }|                    d          }|j        }|                     |j                   |                     |j        j	                   | 
                    t                    5 }|j        j         d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nvarargrd  zType ptr is not a function)rA   asm_vararg_declarere  r  r  is_function_varargr  r  r  r  r   r  r   r   r   )r2   r@   r   decltyper  s        r   test_vararg_functionz TestTypeRef.test_vararg_function  s7   kk,--)))3444kk/**&&)4555 		,---z** 	)fI((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)2C8H4I4IJJJJJs   C33C7:C7c                    |                                  }t          |j                  \  }|                     |j        j        t          j        j                   | 	                    |j        j
                   |j        }|                     |j        t          j        j                   |                     |j
                   |                    t          j                  }|                     |t          j                   |                     |j        t          j        d          t          j        d          f           |                     |j        t          j        d                     d S Nr   )rA   r  r  r6   r  r  r*   r  r  r  r  r  r  r  as_irr	   global_contextr  r   r   r   return_type)r2   r@   r   r   tyirs        r   test_function_typeref_as_irz'TestTypeRef.test_function_typeref_as_ir  s   kkmmCM""*DM,ABBB,---#)?@@@()))zz"+,,dBO444RZ^^RZ^^$DEEE)2:b>>:::::r4   c                    t          j        t          j                    d          }t          j                    }t          j        ||d          }|                     t          |                    }|                    d          }|j        }| 	                    |j
        |                    t           j                  j
                   d S )NrR   r   )r	   r   VoidTyper   r   rA   r   re  r  r6   r7  r5  r6  )r2   r   irmodr   r@   gvtys         r   test_void_typeref_as_irz#TestTypeRef.test_void_typeref_as_ir  s    r{}}b11	[e,,kk#e**%%e$$#)B$566B	D 	D 	D 	D 	Dr4   c                    ddl m} t          j                    ddh}i }d }||d<   d }||d<   d	 }||d
<   d }||d<   fd}||d<   d }	|	|d<   d }
|
|d<   d }||d<   |                     d |                                D             t          |                                          t          |          z             |                                D ]\  }}|j        |v r ||j                             D ]}| 	                    |d|           5  t          j
                  }t          j        ||d           t          |          }t          j        |          }|                    d          }|j        }|                    t          j                              }|                     ||           |                     ||           d d d            n# 1 swxY w Y   d S )Nr   )_TypeKindToIRTyper  voidc               3   4   K   t          j                    V  d S r)   )r	   HalfTyperR   r4   r   
maker_halfz9TestTypeRef.test_global_typeref_as_ir.<locals>.maker_half  s      +--r4   halfc               3   4   K   t          j                    V  d S r)   )r	   r   rR   r4   r   maker_floatz:TestTypeRef.test_global_typeref_as_ir.<locals>.maker_float  s      ,..     r4   floatc               3   4   K   t          j                    V  d S r)   )r	   r   rR   r4   r   maker_doublez;TestTypeRef.test_global_typeref_as_ir.<locals>.maker_double  s      -//!!!!!r4   doublec               3   6   K   t          j        d          V  d S r4  )r	   r   rR   r4   r   maker_integerz<TestTypeRef.test_global_typeref_as_ir.<locals>.maker_integer  s       *R..     r4   r  c               3   R  K   t          j        t          j        d                    V                      d                                          V                      d          } |                     t          j        d                     |                                 V  d S )Nr  myclassmyclass2)r	   PointerTyper   get_identified_type
as_pointerset_body)rP  ctxs    r   maker_pointerz<TestTypeRef.test_global_typeref_as_ir.<locals>.maker_pointer  s      .A/////)))44??AAAAA..z::Hbjmm,,,%%'''''''r4   r  c               3   \   K   t          j        t          j        d          d          V  d S )Nr  {   )r	   	ArrayTyper   rR   r4   r   maker_arrayz:TestTypeRef.test_global_typeref_as_ir.<locals>.maker_array  s,      ,rz!}}c2222222r4   r  c               3   Z   K   t          j        t          j                    d          V  d S )Nr`   )r	   
VectorTyper   rR   r4   r   maker_vectorz;TestTypeRef.test_global_typeref_as_ir.<locals>.maker_vector  s*      -2222222r4   r  c               3      K   t          j        t          j                    t          j        d          g          V  t          j        t          j                    t          j        d          gd          V  d S )Nr(  Tpacked)r	   LiteralStructTyper   r   rR   r4   r   maker_structz;TestTypeRef.test_global_typeref_as_ir.<locals>.maker_struct  sv      &
2'GHHHHH&
2'G.24 4 4 4 4 4 4 4r4   r  c                     h | ]	}|j         
S rR   r   )r{  xs     r   	<setcomp>z8TestTypeRef.test_global_typeref_as_ir.<locals>.<setcomp>  s    CCCQ!&CCCr4   z -> r  rr  r   )llvmlite.binding.typerefr@  r	   Contextr6   keysrw   r  rE   subTestr   GlobalVariabler   r*   r=   rD   r  r5  r  )r2   r@  skippedmakersrD  rG  rJ  rM  rV  rZ  r]  rb  r  irtypetyr<  r>   r@   rr  r=  rA  rU  s                        @r   test_global_typeref_as_irz%TestTypeRef.test_global_typeref_as_ir  s   >>>>>>jll 

 	  	  	  $v	! 	! 	! &w	" 	" 	" (x	! 	! 	! *y	( 	( 	( 	( 	( *y	3 	3 	3 &w	3 	3 	3 (x	4 	4 	4
 (x 	CC*;*@*@*B*BCCCV[[]]++c'll:	< 	< 	< "3!8!8!:!: 	7 	7Iv~((,fY^,.. 
7 
7\\Y":":b":":;; 	7 	7Ic222E%eRd;;;;e**C-c22C0066B/D**RZ\\22C$$S"---))#v666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7
7	7 	7s   B>G##G'*G'c                    t          j        |          }|                    |          }|j        }t	          j                    }|                    |          }t	          j        |          }t	          j        |||j	                  }	t	          j        ||d          }
t	          j
        |
                                          }|                    |	|
j                   |                                 t          j        t          |                    }|                     |                    |	j	                  j        d           |                    |d           |                     t)          t+          |j                            t)          t+          |j                            d	z   d
           |                     |                    |	j	                  j        d           |                     |                    |	j	                  j        |                    |
j	                  j        d           d S )N)ir_ctxr  r   wrapperzdeclfn must not have a body)rR  Tr  r_   z$the only new function is the wrapperzdeclfn must have a body nowz.declfn and wrapfn must have the same llvm Type)r*   r=   re  r  r	   rg  r5  r   r   rE   r   r   callr   ret_voidr   r  r  r  r6   r|   r  r  r  )r2   r>   target_symbolr@   cppfn	cppfntype
my_contextrn  wrapper_moddeclfnwrapfnr   new_mods                r   !_check_typeref_as_ir_for_wrappersz-TestTypeRef._check_typeref_as_ir_for_wrappers"  s   !#&&  //+	 Z\\
__J_// i
333["5:>>>["9===,v88::;;VV[)))%c+&6&677,,V[99H9 	 	; 	; 	; 	d+++T'"34455T#-0011A5C 	 	E 	E 	E 	--fk::I: 	 	< 	< 	<--fk::L --fk::LM 	 	O 	O 	O 	O 	Or4   c                 <    |                      t          d           dS )ztExercise extracting C++ defined class types.
        Contains both opaque and non-opaque class definitions.
        _Z3fooP7MyClass14MyClassDefinedN)r}  asm_cpp_classr1   s    r   ,test_typeref_as_ir_for_wrappers_of_cpp_classz8TestTypeRef.test_typeref_as_ir_for_wrappers_of_cpp_classE  s,     	..-	
 	
 	
 	
 	
r4   c                 <    |                      t          d           dS )zExercise extracting C++ struct types that are passed as vectors.

        IA64 ABI on x86_64 will put struct with two floats as
        a vector of two floats.
        _Z3foo8Vector2DPS_N)r}  asm_cpp_vectorr1   s    r   4test_typeref_as_ir_for_wrappers_of_cpp_vector_structz@TestTypeRef.test_typeref_as_ir_for_wrappers_of_cpp_vector_structN  s,     	.. 	
 	
 	
 	
 	
r4   N)rN   rO   rP   rL  r"  r&  r,  r2  r9  r>  ro  r}  r  r  rR   r4   r   r
  r
  d  s        8 8 8E E E:+ + +3 3 3K K K$; ; ;"	D 	D 	DM7 M7 M7^!O !O !OF
 
 
	
 	
 	
 	
 	
r4   r
  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )
TestTargetc                    t           j        j        }|                     t                    5 } |d           d d d            n# 1 swxY w Y   |                     dt          |j                             t          j                    } ||          }| 	                    |j
        |           |                                 d S )Nr~  z(No available targets are compatible with)r*   rI   r   r   r   r   r   r   r<   r6   r:   rN  )r2   r  r   r:   rL   s        r   test_from_triplezTestTarget.test_from_triple\  s    K#|,, 	AhKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	@",''	) 	) 	)(**6///s   AAAc                     t           j                            t          j                              }|                    ddddd           t          j                    }|                    |dddd           d S )Nr   r_   r  )r*   rI   r   r<   rK   r  )r2   rL   r   s      r   test_create_target_machinez%TestTarget.test_create_target_machineg  sl    (()@)B)BCC$$RQ	9EEE$&&$$S"aIFFFFFr4   c                 "   t           j                            t          j                              }t           j                                        }|                     |j        t                     |                     |j        |j                   d S r)   )	r*   rI   r   r<   rJ   r  rE   r   r6   r2   tus      r   rW  zTestTarget.test_nameo  sk    K##D$;$=$=>>K++--afc***(((((r4   c                 "   t           j                            t          j                              }t           j                                        }|                     |j        t                     |                     |j        |j                   d S r)   )	r*   rI   r   r<   rJ   r  descriptionr   r6   r  s      r   test_descriptionzTestTarget.test_descriptionu  sk    K##D$;$=$=>>K++--amS11166666r4   c                     t           j                            t          j                              }t	          |          }|                     |j        |           |                     |j        |           d S r)   )r*   rI   r   r<   r   r   rE   r  )r2   rL   r   s      r   rL  zTestTarget.test_str{  s^    (()@)B)BCCKKfk1%%%f(!,,,,,r4   c                 j   dt           j                            dddddd          fd	t           j                            dddddd          fd
t           j                            dddddd          fdt           j                            dddddd          fdt           j                            dddddd          fdt           j                            dddddd          fdt           j                            dddddd          fdt           j                            dddddd          fdt           j                            d dd!d"dd#          fd$t           j                            d%ddd&dd'          fg
}|D ]1}|\  }}t          j        |          }|                     ||           2d S )(Nzx86_64-scei-ps4x86_64r   sceips4unknownELF)ArchSubArchVendorOSEnvObjectFormatzx86_64-sie-ps4zpowerpc-dunno-notsurepowerpczpowerpcspe-unknown-freebsdspefreebsdzarmv6hl-none-linux-gnueabiarmv6hlrU   gnueabizi686-unknown-linux-gnui386gnuzi686-apple-macosxapplemacosxMachOzi686-dunno-win32windowsmsvcCOFFzs390x-ibm-zoss390xibmzosGOFFzwasm64-wasiwasm64wasiWasm)r*   targetsTripleget_triple_partsr6   )r2   casescase
triple_str
triple_objr  s         r   test_get_parts_from_triplez%TestTarget.test_get_parts_from_triple  sk    \  h(.5%.U ! D DE \  h(.5%.U ! D DE %\  i(1i%.U ! D DE *\  i(1i%.U ! D DE *\  eV(1g%.U ! D DE &\  fb(1g%* ! @ @A !\  fb(/H%.W ! F FG  \  fb(1i%+& ! B BC \  gr(-%%.V ! E EF \  h(1f%.V ! E EFK)
V  	. 	.D%)"J
'
33CS*----		. 	.r4   N)	rN   rO   rP   r  r  rW  r  rL  r  rR   r4   r   r  r  Z  sq        	 	 	G G G) ) )7 7 7- - -1. 1. 1. 1. 1.r4   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestTargetDatac                 *    t          j        d          S )Nz%e-m:e-i64:64-f80:128-n8:16:32:64-S128)r*   create_target_datar1   s    r   r  zTestTargetData.target_data  s    &'NOOOr4   c                     |                                  }|                                 }|                     |                    |j                  d           d S )Nr  )r  rB   r6   r  r  r2   r  rB   s      r   test_get_abi_sizez TestTargetData.test_get_abi_size  sJ    yy{{33Q77777r4   c                 8   |                                  }|                                 }|                     |                    |j                  d           |                     d          }|                     |                    |j                  d           d S )Nry  r  r  )r  rB   r6   r  r  r  s      r   test_get_pointee_abi_sizez(TestTargetData.test_get_pointee_abi_size  s    yy{{)?@@!DDDyy'')?@@"EEEEEr4   c                    |                                  }|                     d          }|                     t                    5  |                    |j        d           d d d            n# 1 swxY w Y   |j        }|                     |                    |d          d           |                     |                    |d          d           d S )Nr  r   r_   r  )r  rB   r   r  get_element_offsetr  r  r6   )r2   r  rB   struct_types       r   test_get_struct_element_offsetz-TestTargetData.test_get_struct_element_offset  s   yy''z** 	0 	0!!$)Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 ,..{A>>BBB..{A>>BBBBBs   A,,A03A0N)rN   rO   rP   r  r  r  r  rR   r4   r   r  r    s[        P P P8 8 8
F F F	C 	C 	C 	C 	Cr4   r  c                       e Zd Zd ZdS )TestTargetMachinec                    |                      d          }|j        }|                                 }|                    d          }t          j        dk     rdnd}|                     |                    |j                  |           d S )NFrG   rB   r  ry  r  )	rM   r  rA   rD   r   r  r6   r  r  )r2   tmr  r@   r  r  s         r   test_target_data_from_tmz*TestTargetMachine.test_target_data_from_tm  s~      U ++^kkmm((00K'11qqq55|DDDDDr4   N)rN   rO   rP   r  rR   r4   r   r  r    s(        E E E E Er4   r  c                   f    e Zd Zd Z ej         ej                    dv d          d             ZdS )	TestDylibc                     |                      t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nzzzzasdkf;jasd;l)r   r   r*   load_library_permanentlyr1   s    r   test_bad_libraryzTestDylib.test_bad_library  s    |,, 	= 	=)*;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   =AA)Linuxztest only works on Linuxc                 L    t          d          }t          j        |           d S )Nr   )r   r*   r  )r2   rf   s     r   	test_libmzTestDylib.test_libm  s(     C  %d+++++r4   N)	rN   rO   rP   r  r   r   r   systemr  rR   r4   r   r  r    sd        = = = X**i735 5, ,5 5, , ,r4   r  c                        e Zd Zd Zd Zd ZdS )TestAnalysisc                    t          j                    }t          j        t          j        d          t          j        d          t          j        d          g          }t          j        ||d          }t          j        |                                          }|j        \  }}|                    ||          }|	                    |           |S )Nr   r   )
r	   r   r   r   r   r   r   r   r~   r#   )r2   r   r   r   r   rd  yzs           r   build_ir_modulezTestAnalysis.build_ir_module  s    IKK_RZ^^bjnnbjnn-MNN[B&&\"//1122w1FF1aLL
q			r4   c                    |                                  }|                    d          }t          j        |          }t          j        |d          }d}|                     ||           |                     ||           d S )Nr   F	show_instz%.5 = add i32 %.1, %.2)r  
get_globalr*   get_function_cfgr   assertNotIn)r2   r@   r   dot_showing_instdot_without_instr  s         r   test_get_function_cfg_on_irz(TestAnalysis.test_get_function_cfg_on_ir  s    ""$$nnU##0550FFF'd,---/00000r4   c                    |                                                      d          }t          j        |d          }t          j        |d          }d}|                     ||           |                     ||           d}|                     ||           |                     ||           d}|                     ||           |                     ||           d S )Nrd  Tr  FdigraphzCFG for 'sum' functionz%.3 = add i32 %.1, %.2)rA   re  r*   r  r   r  )r2   r  r  r  prefixfnamer  s          r   test_function_cfg_on_llvm_valuez,TestAnalysis.test_function_cfg_on_llvm_value	  s    ++--,,U330DIII0EJJJf.///f.///(e-...e-...'d,---/00000r4   N)rN   rO   rP   r  r  r  rR   r4   r   r  r    sA          1 1 11 1 1 1 1r4   r  c                   *    e Zd Zed             Zd ZdS )TestTypeParsingc              #   ~   K   t          j                    }|V  t          |          }t          j        |           d S r)   )r	   r   r   r*   r=   )r2   r@   r>   s      r   check_parsingzTestTypeParsing.check_parsing	  s>      ikk 			#hhC     r4   c                 j   |                                  5 }t          j        t          j        d          g          }t          j        ||d          }t          j        |dg          |_        d d d            n# 1 swxY w Y   |                                  5 }t          j        t          j        d          gd          }t          j        ||d          }t          j        |dg          |_        d d d            n# 1 swxY w Y   |                                  5 }t          j                             t          j        d          d           t          j        d          d          gd          }t          j        ||j        d          }||_        d d d            d S # 1 swxY w Y   d S )Nr   r   r_   Tr_  r`   )	r  r	   ra  r   rj  r   initializerliteral_structr  )r2   r@   typrr  consts        r   test_literal_structz#TestTypeParsing.test_literal_struct	  sB   !! 	3S&
2'788C"3U33B[qc22BN		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 !! 	3S&
2'7.24 4 4C"3U33B[qc22BN	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 !! 	#SK..
2q0A0A0>
2q0A0A0C6: / < <E "3
E::B"BN	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s8   AA::A>A>AD  DDA<F((F,/F,N)rN   rO   rP   r   r  r  rR   r4   r   r  r  	  s<        ! ! ^!# # # # #r4   r  c                   d    e Zd Z ej         ej                    dk    d          d             ZdS )TestGlobalConstructorsDarwinz&__cxa_atexit is broken on OSX in MCJITc                    |                      t                    }|                     |          }|                                 |                                 |                    d          }t          j        t          j                  }t          j	        ||          }| 
                    |j        j        d           |                    d          } t          j        t          j                  |          }| 
                     |            d           |                                 | 
                    |j        j        d           d S )NrI  r  r   rJ  r2  )rA   asm_global_ctorsrH   r  run_static_constructorsget_global_value_addressrO  POINTERr   castr6   contentsrv  r  r   run_static_destructors)r2   r@   r  ptr_addrptr_tr  foo_addrr   s           r   rN  z.TestGlobalConstructors.test_global_ctors_dtors8	  s   
 kk*++XXc]]

""$$$ ..s33v~..k(E**+R000**511.fv~..x88###
!!### 	+R00000r4   N)rN   rO   rP   r   rG  r   r  rN  rR   r4   r   r  r  7	  sR        X__X_&&(2=? ?1 1? ?1 1 1r4   r  c                   X    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd ZdS )TestGlobalVariablesTc                 4   t          j                    }t          j        d          }t          j        ||d          }||_        t          |          }|r|                     d|           n|                     d|           |                     |           d S )Nr   r   undef)	r	   r   r   rj  r  r   r   r  rA   )r2   r  	has_undefr@   r  rr  r>   s          r   check_global_variable_linkagez1TestGlobalVariables.check_global_variable_linkageT	  s     ikkjnnsC//
#hh 	+MM'3''''Wc***Cr4   c                 0    |                      d           d S )Nr  r	  r1   s    r   test_internal_linkagez)TestGlobalVariables.test_internal_linkageh	      **:66666r4   c                 0    |                      d           d S )Ncommonr  r1   s    r   test_common_linkagez'TestGlobalVariables.test_common_linkagek	  s    **844444r4   c                 4    |                      dd           d S )Nr  Fr  r  r1   s    r   test_external_linkagez)TestGlobalVariables.test_external_linkagen	  s!    **:*GGGGGr4   c                 0    |                      d           d S )Navailable_externallyr  r1   s    r   !test_available_externally_linkagez5TestGlobalVariables.test_available_externally_linkageq	  s    **+ABBBBBr4   c                 0    |                      d           d S )Nprivater  r1   s    r   test_private_linkagez(TestGlobalVariables.test_private_linkaget	  s    **955555r4   c                 0    |                      d           d S )Nlinkoncer  r1   s    r   test_linkonce_linkagez)TestGlobalVariables.test_linkonce_linkagew	  r  r4   c                 0    |                      d           d S )Nweakr  r1   s    r   test_weak_linkagez%TestGlobalVariables.test_weak_linkagez	  s    **622222r4   c                 0    |                      d           d S )N	appendingr  r1   s    r   test_appending_linkagez*TestGlobalVariables.test_appending_linkage}	  s    **;77777r4   c                 4    |                      dd           d S )Nextern_weakFr  r  r1   s    r   test_extern_weak_linkagez,TestGlobalVariables.test_extern_weak_linkage	  s!    **=E*JJJJJr4   c                 0    |                      d           d S )Nlinkonce_odrr  r1   s    r   test_linkonce_odr_linkagez-TestGlobalVariables.test_linkonce_odr_linkage	  s    **>:::::r4   c                 0    |                      d           d S )Nweak_odrr  r1   s    r   test_weak_odr_linkagez)TestGlobalVariables.test_weak_odr_linkage	  r  r4   N)T)rN   rO   rP   r	  r  r  r  r  r  r  r  r"  r%  r(  r+  rR   r4   r   r  r  S	  s           (7 7 75 5 5H H HC C C6 6 67 7 73 3 38 8 8K K K; ; ;7 7 7 7 7r4   r  x86zonly on x86c                       e Zd Zd ZdS )TestInlineAsmc                     t          j                     |                     t                    }|                     d          }|                    |          }|                     d|           d S )N)r>   FrG   nop)r*   initialize_native_asmparserrA   r  rM   r   r   )r2   r   r  r>   s       r   test_inlineasmzTestInlineAsm.test_inlineasm	  sg    (***KKMK**  U ++q!!eS!!!!!r4   N)rN   rO   rP   r2  rR   r4   r   r.  r.  	  s#        " " " " "r4   r.  c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestObjectFilea,  
        ;ModuleID = <string>
        target triple = "{triple}"

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

        define i32 @sum_twice(i32 %.1, i32 %.2) {{
            %.3 = call i32 @sum(i32 %.1, i32 %.2)
            %.4 = call i32 @sum(i32 %.3, i32 %.3)
            ret i32 %.4
        }}
    c                    |                      d          }|                                 }|                    |          }t          j                            |          }d}d}|                                D ]}|                                rit          |	                                          dk    rD|
                                0||
                                k     rd}|
                                } n|                     |           d S )NFrG   r  r   T)rM   rA   r  r*   ObjectFileRef	from_datasectionsis_textr|   dataaddressr  )r2   rM   r@   ru  objhas_text_and_datalast_addressr   s           r   test_object_filezTestObjectFile.test_object_file	  s    ,,,77kkmm ,,S11 **733! 		 		A		MMA%%IIKK+ 199;;..$(! yy{{)*****r4   c                    |                      d          }|                                 }|                    |          }t          j                            |          }t          j        |                     | j                  |          }|                    |            t          t          t          t                    |                    d                    }|                      |dd          d           d S )NFrG   	sum_twicer`   rk  r  )rM   rA   r  r*   r6  r7  r  mod_asmrs  r   r   r  r6   )r2   rM   r@   ru  r<  rH   rA  s          r   rn  z#TestObjectFile.test_add_object_file	  s    ,,,77kkmm ,,S11 **733(T\)B)B)79 9 	C   2IeUE22$$[113 3	 	1a"-----r4   c                    |                      d          }|                                 }|                    |          }t                      \  }}	 	 t	          j        |d          }|                    |           |                                 |                                 n# |                                 w xY wt          j
        |                     | j                  |          }|                    |           t	          j        |           n# t	          j        |           w xY w t          t          t          t                    |                    d                    }|                      |dd          d           d S )NFrG   rp  rA  r`   rk  r  )rM   rA   r  r   rm   rq  rr  flushrN  r*   r  rB  rs  rt  r   r   r  r6   )	r2   rM   r@   ru  rv  rw  r  rH   rA  s	            r   rx  z3TestObjectFile.test_add_object_file_from_filesystem	  s[   ,,,77kkmm ,,S11&yy	9	!Ii..   											,T[[-F-F-;= =C 	***Ii    BIi    2IeUE22$$[113 3	 	1a"-----s   >B& D &B<<AD D,c                    t                               t                    }t          j                            |          }|                                D ]}|                                rt|                     t          |
                                          d           |                     |
                                                                t                     d S )N   )r  fromhexissue_632_elfr*   r6  r7  r8  r9  r6   r|   r:  hexissue_632_text)r2   elfr<  r   s       r   test_get_section_contentz'TestObjectFile.test_get_section_content	  s     mmM** **3// 	A 	AAyy{{ A  QVVXX333  @@@	A 	Ar4   N)rN   rO   rP   rB  r?  rn  rx  rL  rR   r4   r   r4  r4  	  s\        G+ + +(. . . . . .4A A A A Ar4   r4  c                       e Zd Zd ZdS )TestLLVMLockCallbacksc                    g fd}fd}t           j                            ||           |                                t          j                     |                     d           |                     d           t           j                            ||           |                     t                    5  t           j                            ||           d d d            d S # 1 swxY w Y   d S )Nc                  2                          d           d S )Nacqr  eventss   r   rQ  z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.acq	      MM%     r4   c                  2                          d           d S )Nrelr  rR  s   r   rV  z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.rel	  rT  r4   rQ  rV  )	r*   r   register_lock_callbackr  create_new_module_pass_managerr   unregister_lock_callbackr   r  )r2   rQ  rV  rS  s      @r   test_lock_callbacksz)TestLLVMLockCallbacks.test_lock_callbacks	  sM   	! 	! 	! 	! 	!	! 	! 	! 	! 	! 	''S111 	   +---eV$$$eV$$$ 	))#s333 z** 	8 	8H--c3777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   <!C**C.1C.N)rN   rO   rP   rZ  rR   r4   r   rN  rN  	  s#        8 8 8 8 8r4   rN  c                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestPipelineTuningOptionsc                 (    t          j                    S r)   )r*   create_pipeline_tuning_optionsr1   s    r   ptozTestPipelineTuningOptions.pto
      2444r4   c                 V    |                                  }|                                 d S r)   )r_  rN  r2   r_  s     r   rR  z$TestPipelineTuningOptions.test_close
  s     hhjj		r4   c                     |                                  }|                     |j        t                     t	          d          D ]$}||_        |                     |j        |           %d S r  )r_  r  speed_levelr  r5  r6   r2   r_  r]  s      r   test_speed_levelz*TestPipelineTuningOptions.test_speed_level
  sh    hhjjcos333q 	1 	1ACOS_a0000	1 	1r4   c                     |                                  }|                     |j        t                     t	          d          D ]$}||_        |                     |j        |           %d S Nrk  )r_  r  
size_levelr  r5  r6   re  s      r   test_size_levelz)TestPipelineTuningOptions.test_size_level
  sh    hhjjcnc222q 	0 	0ACNS^Q////	0 	0r4   c                     |                                  }|                     |j        t                     dD ]	}||_        
d S )N)   P   i^  )r_  r  inlining_thresholdr  re  s      r   test_inlining_thresholdz1TestPipelineTuningOptions.test_inlining_threshold 
  sL    hhjjc4c::: 	' 	'A%&C""	' 	'r4   c                     |                                  }|                     |j        t                     dD ]$}||_        |                     |j        |           %d S N)TF)r_  r  loop_interleavingr  r6   r2   r_  r   s      r   test_loop_interleavingz0TestPipelineTuningOptions.test_loop_interleaving&
  e    hhjjc3T::: 	7 	7A$%C!S2A6666	7 	7r4   c                     |                                  }|                     |j        t                     dD ]$}||_        |                     |j        |           %d S rq  )r_  r  loop_vectorizationr  r6   rs  s      r   test_loop_vectorizationz1TestPipelineTuningOptions.test_loop_vectorization-
  se    hhjjc4d;;; 	8 	8A%&C"S3Q7777	8 	8r4   c                     |                                  }|                     |j        t                     dD ]$}||_        |                     |j        |           %d S rq  )r_  r  slp_vectorizationr  r6   rs  s      r   test_slp_vectorizationz0TestPipelineTuningOptions.test_slp_vectorization4
  ru  r4   c                     |                                  }|                     |j        t                     dD ]$}||_        |                     |j        |           %d S rq  )r_  r  loop_unrollingr  r6   rs  s      r   test_loop_unrollingz-TestPipelineTuningOptions.test_loop_unrolling;
  se    hhjjc0$777 	4 	4A!"CS/3333	4 	4r4   c                    |                                  }|                     t                    5  d|_        d d d            n# 1 swxY w Y   |                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S )Nry  r  )r_  r   r  rd  rb  s     r   test_speed_level_constraintsz6TestPipelineTuningOptions.test_speed_level_constraintsB
  s    hhjjz** 	  	 CO	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 z** 	! 	! CO	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s#   AA
A(A==BBc                    |                                  }|                     t                    5  d|_        d d d            n# 1 swxY w Y   |                     t                    5  d|_        d d d            n# 1 swxY w Y   |                     t                    5  d|_        d|_        d d d            d S # 1 swxY w Y   d S )Nrk  r  r`   )r_  r   r  ri  rd  rb  s     r   test_size_level_constraintsz5TestPipelineTuningOptions.test_size_level_constraintsI
  su   hhjjz** 	 	CN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	! 	! CO	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!z** 	 	COCN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   AA
A(A<<B B !B==CCN)rN   rO   rP   r_  rR  rf  rj  ro  rt  rx  r{  r~  r  r  rR   r4   r   r\  r\  	
  s        5 5 5  1 1 10 0 0' ' '7 7 78 8 87 7 74 4 4! ! !    r4   r\  c                       e Zd ZddZdS )NewPassManagerMixinr   c                     |                      d          }t          j        ||          }t          j        ||          }|S )NFrG   )rM   r*   r^  create_pass_builder)r2   rd  ri  r  r_  pbs         r   r  zNewPassManagerMixin.pbV
  sA      U ++1+zJJ%b#..	r4   N)r   r   )rN   rO   rP   r  rR   r4   r   r  r  T
  s(             r4   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestPassBuilderc                 V    |                                  }|                                 d S r)   )r  rN  )r2   r  s     r   rR  zTestPassBuilder.test_close_
  s     WWYY





r4   c                     |                      d          }t          j        dd          }d|_        d|_        d|_        d|_        d|_        t          j        ||          }|	                                 d S )NFrG   rk  r   r`   T)
rM   r*   r^  rn  rr  rw  rz  r}  r  rN  )r2   r  r_  r  s       r   test_ptozTestPassBuilder.test_ptoc
  su      U ++1!Q77!" $!% $"%b#..





r4   c                     |                                  }|                                }|                    |                                 |           |                                 d S r)   )r  getModulePassManagerrunrA   rN  )r2   r  mpms      r   test_get_module_pass_managerz,TestPassBuilder.test_get_module_pass_managern
  sM    WWYY%%''r"""





r4   c                     |                                  }|                                }|                    |                                                     d          |           |                                 d S rA  )r  getFunctionPassManagerr  rA   re  rN  )r2   r  fpms      r   test_get_function_pass_managerz.TestPassBuilder.test_get_function_pass_managert
  s[    WWYY''))**5112666





r4   c                 N     fd} |d          } |d          }                      |t                                           |t                                          |                    d          d                                |                    d          d           dS )z:Test pass timing reports for O3 and O0 optimization levelsc                 *                                    }                    | d          }|                                 |                                }|                    ||           |                                }|                                 |S Nr   rd  ri  )rA   r  start_pass_timingr  r  finish_pass_timingrN  )rd  r@   r  r  reportr2   s        r   run_with_timingz9TestPassBuilder.test_time_passes.<locals>.run_with_timing|
  s    ++--C[Q??B  """))++CGGC**,,FHHJJJMr4   rk  r   zPass execution timing reportr_   N)r  r   r6   count)r2   r  	report_O3	report_O0s   `   r   test_time_passesz TestPassBuilder.test_time_passesz
  s    	 	 	 	 	 $OA&&	#OA&&	i---i---)GHH!LLL)GHH!LLLLLr4   c                 L   |                                  }|                                 }|                                }|                    ||           |                                 |                                }|                                 |                     |           d S r)   )rA   r  r  r  r  r  rN  r  )r2   r@   r  r  r  s        r   test_empty_reportz!TestPassBuilder.test_empty_report
  s    kkmmWWYY%%''R
&&((



     r4   c                    |                                  }|                                 }|                                 |                                }|                    ||           |                                 |                     t          d          5  |                                 d d d            n# 1 swxY w Y   |                                 d S )Nzonly be done once)	rA   r  r  r  r  r  r,  r   rN  r2   r@   r  r  s       r   test_multiple_timers_errorz*TestPassBuilder.test_multiple_timers_error
  s    kkmmWWYY
%%''R
##L2EFF 	# 	#  """	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#





s   B77B;>B;c                 `   |                                  }|                                 }|                                }|                    ||           |                     t
          d          5  |                                 d d d            n# 1 swxY w Y   |                                 d S )Nznot enabled)rA   r  r  r  r,  r   r  rN  r  s       r   test_empty_report_errorz'TestPassBuilder.test_empty_report_error
  s    kkmmWWYY%%''R##L-@@ 	$ 	$!!###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$





s   .BBBN)rN   rO   rP   rR  r  r  r  r  r  r  r  rR   r4   r   r  r  ]
  s          	 	 	    M M M(! ! !	 	 	    r4   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestNewModulePassManagerc                 (    t          j                    S r)   )r*   rX  r1   s    r   pmzTestNewModulePassManager.pm
  r`  r4   c                     |                                  }t          |          }|                     |d          }|                                }|                    ||           t          |          }||fS r  )rA   r   r  r  r  )r2   levelr@   orig_asmr  r  optimized_asms          r   run_o_nz TestNewModulePassManager.run_o_n
  sj    kkmms88WW1W55%%''RC&&r4   c                 V    |                                  }|                                 d S r)   r  rN  r2   r  s     r   rR  z#TestNewModulePassManager.test_close
       ggii		r4   c                     |                      d          \  }}|                     d|           |                     d|           d S Nrk  %.4r  r   r  r2   r  r  s      r   test_run_o3z$TestNewModulePassManager.test_run_o3
  F    "&,,q//-eX&&&.....r4   c                     |                      d          \  }}|                     d|           |                     d|           d S Nr   r  r  r   r  s      r   test_run_o0z$TestNewModulePassManager.test_run_o0
  D    "&,,q//-eX&&&e]+++++r4   c                 r   |                                  }|                                 }|                                 |                     t                    }t          |          }|                    ||           t          |          }|                     d|           |                     d|           d S )N%.3)	r  r  add_instruction_combine_passrA   asm_sum4r   r  r   r  )r2   r  r  r@   r  r  s         r   test_instcombinez)TestNewModulePassManager.test_instcombine
  s    WWYYggii((***kk(##s88RCeX&&&.....r4   c                    |                      dd          }t          t                              dd                    }t	          j        |          }|                                }|                    ||           t          |          }|                     d|           | 	                    d|           t          t                    }|                                }t	          j        |          }|                    ||           t          |          }|                     d|           |                     d|           d S )Nrk  r   r  optnone r   alloca)
r  r   asm_alloca_optnonereplacer*   r=   r  r  r   r  )r2   r  r  r@   r  r  orig_asm_optnoneoptimized_asm_optnones           r   test_optnonez%TestNewModulePassManager.test_optnone
  s"   WWqW11)11*bAABB!(++%%''RCh)))=111 122%%''!"233R #Ch 0111h 566666r4   c                 	   |                                  }|                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |	                                 |
                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                  |                                 |!                                 |"                                 |#                                 |$                                 |%                                 |&                                 |'                                 |(                                 |)                                 |*                                 |+                                 |,                                 |-                                 |.                                 |/                                 |0                                 |1                                 |2                                 |3                                 |4                                 |5                                 |6                                 |7                                 |8                                 |9                                 |:                                 |;                                 |<                                 d S r)   )=r  add_argument_promotion_pass'add_post_order_function_attributes_passadd_verifieradd_constant_merge_passadd_dead_arg_elimination_passadd_dot_call_graph_printer_passadd_always_inliner_passadd_rpo_function_attrs_pass#add_global_dead_code_eliminate_passadd_global_opt_passadd_ipsccp_passadd_internalize_passadd_loop_extract_passadd_merge_functions_passadd_partial_inliner_passadd_strip_symbols_passadd_strip_dead_debug_info_passadd_strip_dead_prototype_passadd_strip_debug_declare_pass add_strip_non_debug_symbols_passadd_aa_eval_passadd_simplify_cfg_passadd_loop_unroll_passr  add_jump_threading_passadd_cfg_printer_passadd_cfg_only_printer_passadd_dom_printer_passadd_dom_only_printer_passadd_post_dom_printer_passadd_post_dom_only_printer_passadd_dom_viewer_passadd_post_dom_viewer_passadd_post_dom_only_viewer_passadd_lint_passadd_aggressive_dce_passadd_break_critical_edges_passadd_dead_store_elimination_passadd_dead_code_elimination_passadd_aggressive_instcombine_passadd_lcssa_passadd_new_gvn_passadd_loop_simplify_passadd_loop_unroll_and_jam_passadd_sccp_passadd_lower_atomic_passadd_lower_invoke_passadd_lower_switch_passadd_mem_copy_opt_pass"add_unify_function_exit_nodes_passadd_reassociate_passadd_register_to_memory_passadd_sroa_passadd_sinking_passadd_tail_call_elimination_passadd_instruction_namer_passadd_loop_deletion_passadd_loop_strength_reduce_passadd_loop_rotate_passadd_refprune_passr  s     r   test_add_passesz(TestNewModulePassManager.test_add_passes
  s_   ggii'')))33555##%%%))+++++---##%%%'')))//111!!!  """!!###$$&&&$$&&&""$$$**,,,))+++((***,,...!!###  """((***##%%%  """%%'''  """%%'''%%'''**,,,!!!%%'''$$&&&))+++##%%%))+++++---**,,,++---""$$$((***!!###!!###!!###!!###..000  """'')))**,,,&&(((""$$$))+++  """r4   N)rN   rO   rP   r  r  rR  r  r  r  r  r  rR   r4   r   r  r  
  s        5 5 5' ' '  / / /
, , ,
	/ 	/ 	/7 7 7&>  >  >  >  > r4   r  c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestNewFunctionPassManagerc                 (    t          j                    S r)   )r*    create_new_function_pass_managerr1   s    r   r  zTestNewFunctionPassManager.pm(  s    4666r4   c                 V    |                                  }|                                 d S r)   r  r2   r  s     r   rR  z%TestNewFunctionPassManager.test_close+  r  r4   c                    |                                  }|                    d          }t          |          }|                     |d          }|                                }|                    ||           t          |          }||fS )Nrd  r   r  )rA   re  r   r  r  r  )r2   r  r@   funr  r  r  r  s           r   r  z"TestNewFunctionPassManager.run_o_n/  s}    kkmmu%%s88WW1W55''))RC&&r4   c                     |                      d          \  }}|                     d|           |                     d|           d S r  r  r  s      r   r  z&TestNewFunctionPassManager.test_run_o39  r  r4   c                     |                      d          \  }}|                     d|           |                     d|           d S r  r  r  s      r   r  z&TestNewFunctionPassManager.test_run_o0>  r  r4   c                    |                      dd          }t          t                              dd                    }t	          j        |                              d          }|                                }|                    ||           t          |          }| 	                    d|           | 
                    d|           t          t                    }t	          j        |                              d          }|                                }|                    ||           t          |          }| 	                    d|           | 	                    d|           d S )Nrk  r   r  r  r   r   r  )r  r   r  r  r*   r=   re  r  r  r   r  )r2   r  r  r  r  r  r  r  s           r   r  z'TestNewFunctionPassManager.test_optnoneC  s>   WWqW11)11*bAABB!(++88??''))RCh)))=111 122!"233@@GG''))R #Ch 0111h 566666r4   c                    |                                  }|                                 }|                     t                                        d          }|                                 t          |          }|                    ||           t          |          }|                     d|           | 	                    d|           d S )Nrd  r  )
r  r  rA   r  re  r  r   r  r   r  )r2   r  r  r  r  r  s         r   r  z+TestNewFunctionPassManager.test_instcombineV  s    WWYYggiikk(##0077((***s88RCeX&&&.....r4   c                     |                      d          }|                                }t          j        t                    j        D ]}|                    ||           d S rh  )r  r  r*   r=   asm_declarationr  r  )r2   r  r  r  s       r   test_declarationsz,TestNewFunctionPassManager.test_declarationsb  s`    WWQZZ''))&77A 	 	CGGC	 	r4   c                    |                                  }|                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |	                                 |
                                 |                                 |                                 |	                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                  |!                                 |"                                 |#                                 |$                                 |%                                 |&                                 |'                                 |(                                 d S r)   ))r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  s     r   r  z*TestNewFunctionPassManager.test_add_passesh  s   ggii!!###  """((***##%%%  """%%'''  """%%'''%%'''**,,,!!!%%'''$$&&&))+++##%%%))+++++---**,,,++---""$$$((***!!###!!###!!###!!###..000  """'')))**,,,&&(((""$$$))+++  """r4   N)rN   rO   rP   r  rR  r  r  r  r  r  r  r  rR   r4   r   r  r  '  s        7 7 7  ' ' '/ / /
, , ,
7 7 7&	/ 	/ 	/  *  *  *  *  * r4   r  rV   rW   c                   T   e Zd Z eg d           eg d          dd eg d          i eg d           eg d          dd	Z eg d
           eg d          dd eg d          i eg d           eg d          dd	Zd Zed             Ze	d             Z
dS )	TestBuild)	pthreadr  dlr   gcc_sr\  r)  stdc++ld-linux-x86-64)r  r  r  r   r   r\  r)  r!  )r  aarch64amd64)advapi32kernel32ntdllmsvcp140vcruntime140vcruntime140_1api-ms-win-crt-convert-l1-1-0!api-ms-win-crt-environment-l1-1-0api-ms-win-crt-heap-l1-1-0api-ms-win-crt-locale-l1-1-0api-ms-win-crt-math-l1-1-0api-ms-win-crt-runtime-l1-1-0api-ms-win-crt-stdio-l1-1-0api-ms-win-crt-string-l1-1-0api-ms-win-crt-time-l1-1-0api-ms-win-crt-utility-l1-1-0shell32ole32)llvmliter  r  corefoundationc++)r7  r  r  r9  )r  arm64)rU   r  darwin)r  r  zstdr  r   r   r\  r"  )r  r  r<  r  r   r   r\  zld-linux-aarch64)r  r<  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  )r7  r  r  r<  r8  r9  )r7  r  r  r<  r9  c                    t          j                                                    }t          j                                                    }|dk    r| j        |         |         }n,|dk    r| j        |         |         }nt          d|           t          |d                   }d |D             }	 |                     ||           d S # t          $ r}dt          |           dt          |           dt                              ||           d	t                              ||           d
t                              ||           d}t          |          |d }~ww xY w)Nr   r   zUnexpected package type: canonicalised_linked_librariesc                 @    h | ]}|                     d           rd n|S )r(  )r   )r{  rk   s     r   re  z*TestBuild.check_linkage.<locals>.<setcomp>0  s=     
 
 
 >>*55>ZZ3
 
 
r4   z:Unexpected linkage encountered for libllvmlite:
Expected: z
     Got: z

Difference: z
Only in Expected: z
Only in Got: 
)r   machinelowerr  wheel_expectedconda_expectedr  rw   r6   r7  r  symmetric_difference
difference)	r2   infopackage_typerA  os_nameexpectedrA  r   rR  s	            r   check_linkagezTestBuild.check_linkage#  s   "$$**,,/##))++7""*73G<HHW$$*73G<HHGGGHHH$7899
 

 
 

		-Xs+++++ 	- 	- 	-E &x 0 0E E &sE E #&":":8S"I"IE E ),x(E(E	E E
 $'>>#x#@#@E E EC !%%1,	-s   3C 
E!BEE!c                     t           j                                        }|                     |d         d           |                     |d         d           |                     |d           d S )Nllvm_linkage_typestaticllvm_assertions_stateonr   )r*   configget_sysinfor6   rK  r2   rG  s     r   test_wheel_buildzTestBuild.test_wheel_build@  si    {&&((12H===56===4)))))r4   c                 l   t           j                                        }|                     |d         d           |                     |d         d           |                     |d           t          j                                                    dk    r|                     |d         d           d S d S )NrM  rN  rO  rP  r   rU   libstdcxx_linkage_type)r*   rQ  rR  r6   rK  r   r  rB  rS  s     r   test_conda_buildzTestBuild.test_conda_buildG  s    {&&((12H===56===4)))?""$$//T":;XFFFFF 0/r4   N)rN   rO   rP   rw   rC  rD  rK  is_wheel_packagerT  is_conda_packagerW  rR   r4   r   r  r    s       B +.# /C /C /C +D +D -0C 1< 1< 1< -= -= "  "* #*33 0: 0: 0: ,; ,; "$& ,/3 08 08 08 ,9 ,9
 +.# /7 /7 /7 +8 +8	!# 	!#Q2 2Nh +.# /C /C /C +D +D -0C 1F 1F 1F -G -G "  ", #*33 0: 0: 0: ,; ,; "$* ,/3 08 08 08 ,9 ,9 +.# /7 /7 /7 +8 +8!# !#W7 7Nr- - -: * * * G G G G Gr4   r  __main__)lrO  rb  r   r   r   ctypes.utilr   r-   r   rm   r   ru   rp   r   r   
contextlibr   tempfiler   r7  r	   r
   r*   llvmlite.bindingr   llvmlite.testsr   rA  r  r   package_formatrY  rX  
_HAVE_LIEFliefImportError
needs_liefr   rQ   r  r  r  r  rD  rQ  r   r  r   ra  r  r/  r  r?  r  asm_inlineasm2asm_inlineasm3licm_asmr  rK  r   r   r   r   r   r  r  r  rH  rJ  asm_tli_exp2r  r  r  r'   rT   r   r   rI  objectr  r  r  skipr  rz  r
  r  r  r  r  r  r  r  r  r   r.  r4  rN  r\  r  r  r  r  rn   r   r  rN   mainrR   r4   r   <module>rl     sG	        , , , , , , , , , , $ $ $ $ $ $ 				  				  				     



  % % % % % %             $ $ $ $ $ $             # # # # # # 8!!!D!/222 '8&t':g'E)A+/+>)A )AC C  '8&t':g'E)A+/+>)A )AC C  
	KKKJJ 	 	 	D	 !X -IJJ
	- 	- 	-&
	
 "8!##v--#++O=NOON    ,BH&P :<	            "0- ( E  (+Z1h5 5 5 5 5x 5 5 5B/ / / / /x / / /dF+ F+ F+ F+ F+8 F+ F+ F+RM' M' M' M' M'x M' M' M'`@> @> @> @> @>H @> @> @>Fv- v- v- v- v-6 v- v- v-r4 4 4 4 4 4 4 44? ? ? ? ?, ? ? ?$ /00}! }! }! }! }!8 }! }! 10}!@o, o, o, o, o,8 o, o, o,d	s
 s
 s
 s
 s
( s
 s
 s
lX. X. X. X. X. X. X. X.vC C C C CX C C C>	E 	E 	E 	E 	E 	E 	E 	E
, 
, 
, 
, 
, 
, 
, 
,#1 #1 #1 #1 #18 #1 #1 #1L!# !# !# !# !#h !# !# !#H1 1 1 1 1Y 1 1 1847 47 47 47 47( 47 47 47n %X%''22599=II" " " " "H " " JI"UA UA UA UA UAX UA UA UAp8 8 8 8 8H 8 8 8:H H H H H H H HV    &   M M M M Mh 3 M M M`w  w  w  w  w x)< w  w  w tk  k  k  k  k +> k  k  k \ RZ^^$89913 3wG wG wG wG wG wG wG 3 3wGt zHMOOOOO s   C CC