
    sh                       S SK r S SKrS SK JrJrJr  S SKJr  S SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  \
R8                  " 5       S:X  a  \R:                  " S5        S rSrSr Sr!Sr"Sr#Sr$Sr%\
RL                  " 5       S:X  a  \%RO                  SS5      r%Sr(Sr)Sr*Sr+Sr,Sr-Sr.Sr/S r0S!r1S"r2S#r3S$r4S%r5/ S&Qr6/ S'Qr7/ S(Qr8S)r9S*r:S+r;S,r<S-r=S.r>S/r?S0r@S1rA " S2 S3\5      rB " S4 S5\B5      rC " S6 S7\B5      rD " S8 S9\B5      rE " S: S;\B5      rF " S< S=\G5      rH " S> S?\H5      rI " S@ SA\B\I5      rJ\R                  " \
R8                  " 5       R                  SB5      SC5       " SD SE\B5      5       rM " SF SG\B5      rN " SH SI\B5      rO " SJ SK\B5      rP " SL SM\B5      rQ " SN SO\B5      rR " SP SQ\B5      rS " SR SS\G5      rT " ST SU\B\T5      rU " SV SW\B\T5      rV " SX SY\B\T5      rW " SZ S[\B5      rX " S\ S]\B5      rY " S^ S_\B5      rZ " S` Sa\J5      r[ " Sb Sc\B5      r\\R                  " \
R8                  " 5       R                  SB5      Sd5       " Se Sf\B5      5       r] " Sg Sh\B5      r^ " Si Sj\B5      r_ " Sk Sl\B5      r` " Sm Sn\B5      ra " So Sp\G5      rb " Sq Sr\B\b5      rc " Ss St\B\b5      rd " Su Sv\B\b5      re\fSw:X  a  \R                  " 5         gg)x    N)	CFUNCTYPEc_intc_int32)find_library)contextmanager)mkstemp)ir)binding)ffi)TestCase)opaque_pointers_enabledarmv7lzlibgcc_s.so.1c                     [         R                  " [         R                  5      n  [         R                  " [         R                  S5         [         R                  " [         R                  U 5        g! [         R                   a(     [         R                  " [         R                  U 5        gf = f! [         R                  " [         R                  U 5        f = f)Nde_DEFT)locale	setlocaleLC_ALLError)curs    o/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/llvmlite/tests/test_binding.pyno_de_localer      s    


6==
)C-0 , <<  	,
 	,s#   %A2 2B.B1 -B..B1 1'Ca  
    ; ModuleID = '<string>'
    source_filename = "asm_sum.c"
    target triple = "{triple}"
    %struct.glob_type = type {{ i64, [2 x i64]}}
    %struct.glob_type_vec = type {{ i64, <2 x i64>}}

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

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

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

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

    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	ft0, 8(sp)zfmv.w.x	ft1, a0zfcvt.d.s	ft1, ft1fadd.d	ft0, ft1, ft0fsd	ft0, 8(sp)lw	a0, 8(sp)lw	a1, 12(sp)addi	sp, sp, 16ret)r   zsw	a0, 8(sp)zsw	a1, 12(sp)r   zfcvt.d.s	ft1, fa0r   r   r   r    r!   r"   )zfcvt.d.s	ft0, fa0zfadd.d	fa0, ft0, fa1r"   zc
declare void @a_readonly_func(i8 *) readonly

declare i8* @a_arg0_return_func(i8* returned, i32*)
a*  
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                   >    \ rS rSrS rS r\S4S jrS	S jrS r	Sr
g)
BaseTesti  c                    [         R                  " 5         [         R                  " 5         [         R                  " 5         [        R
                  " 5         [        R                  S S  U l        / [        R                  S S & g N)llvm
initializeinitialize_native_targetinitialize_native_asmprintergccollectgarbageold_garbageselfs    r   setUpBaseTest.setUp  sJ    %%'))+


::a=

1    c                 r    [         R                  " 5         U R                  [         R                  / 5        U ?g r(   )r-   r.   assertEqualr/   r0   r1   s    r   tearDownBaseTest.tearDown  s'     	

R(r5   Nc                 v    UR                  [        R                  " 5       S9n[        R                  " X5      nU$ )Ntriple)formatr)   get_default_tripleparse_assembly)r2   asmcontextmods       r   moduleBaseTest.module  s0    jj 7 7 9j:!!#/
r5   c                 J    Uc  U R                  5       nUR                  U5      $ r(   )rC   get_global_variable)r2   namerB   s      r   globBaseTest.glob  s#    ;++-C&&t,,r5   c                \    [         R                  R                  5       nUR                  US9$ )Njit)r)   Targetfrom_default_triplecreate_target_machine)r2   rL   targets      r   target_machineBaseTest.target_machine  s(    002+++44r5   )r0   )rH   N)__name__
__module____qualname____firstlineno__r3   r8   asm_sumrC   rH   rQ   __static_attributes__ r5   r   r&   r&     s"     !$ 
-
5r5   r&   c                       \ rS rSrSr\R                  " \R                  R                  S5      S5      \R                  " \
R                  R                  S5      S5      S 5       5       rSrg	)
TestDependenciesi  z:
Test DLL dependencies are within a certain expected set.
linuxzLinux-specific testLLVMLITE_DIST_TESTzDistribution-specific testc                    [         R                  R                  n[        R                  R                  5       nSUS'   [        R                  " SSU/[        R                  US9nUR                  5       u  pEU R                  SUR                  5        [        R                  " S5      n[        5       nUR                  5       R!                  5        H  nUR#                  5       n	U	(       d  M  U	S   S:X  d  M'  U	S	   n
UR%                  U
5      n['        U	5      S
:w  d  U(       d  U R)                  SU< 35        UR+                  UR-                  S	5      5        M     SU;  d  SU;  a  U R)                  SU< 35        [        / SQ5      n[.        R0                  " 5       S:X  a  UR+                  S5        U H;  n
U
R3                  S5      (       a  M  X;  d  M"  U R)                  SU
< SU< 35        M=     g )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libdlrh   libzlibmlibgcc_srg   zld-linuxld64r   libtinfoz	ld-linux-zunexpected dependency z in )r   lib_nameosenvironcopy
subprocessPopenPIPEcommunicater7   
returncoderecompilesetdecode
splitlinessplitmatchlenfailaddgroupplatformpython_implementation
startswith)r2   lib_pathrc   pout_lib_patdepslinepartsdepmalloweds                r   
test_linuxTestDependencies.test_linux  sz   
 77==jjooFix8$.OO>ALL)**EFuJJL++-DJJLEuqX-AhMM#&u:?!II4AB$ . T!9IItEF ? @))+v5KK
#C>>+..33E		c4HI r5   rY   N)rS   rT   rU   rV   __doc__unittest
skipUnlesssysr   r   rr   rs   getr   rX   rY   r5   r   r[   r[     sb     009.0(<=57J70Jr5   r[   c                   Z   ^  \ rS rSrSrSrU 4S jrS rS rS r	S r
S	 rS
 rS rSrU =r$ )TestRISCVABIi  zT
Test calling convention of floating point arguments of RISC-V
using different ABI.
zriscv32-unknown-linuxc                 v   > [         TU ]  5         [        R                  " 5         [        R                  " 5         g r(   )superr3   r)   initialize_all_targetsinitialize_all_asmprinters)r2   	__class__s    r   r3   TestRISCVABI.setUp  s$    ##%'')r5   c                      [         R                  R                  U R                  5        g ! [         a,  nS[        U5      ;   a  U R                  S5         S nAg UeS nAff = f)Nz/No available targets are compatible with triplez(RISCV target unsupported by linked LLVM.)r)   rM   from_tripler<   RuntimeErrorstrskipTest)r2   es     r   check_riscv_targetTestRISCVABI.check_riscv_target  sN    	KK##DKK0 	@CFJHII		s   ), 
A" AAA"c                 x    [         R                  R                  U R                  5      nUR                  " S0 UD6$ )NrY   )r)   rM   r   r<   rO   )r2   kwarglltargets      r   riscv_target_machine!TestRISCVABI.riscv_target_machine  s.    ;;**4;;7--666r5   c                 
   [         R                  " 5       n[         R                  " 5       n[         R                  " XU45      n[         R                  " 5       n[         R
                  " XCSS9nUR                  5       n[         R                  " U5      nUR                  u  pUR                  X5      n
UR                  X5      nUR                  U5        [        R                  " [        U5      5      nUR                  5         U$ )NfpaddrG   )r	   
DoubleType	FloatTypeFunctionTypeModuleFunctionappend_basic_block	IRBuilderargsfpextfaddr"   r)   r?   r   verify)r2   f64f32fntyrC   funcblockbuilderabarg0resultllmods                r   fpadd_ll_moduleTestRISCVABI.fpadd_ll_module  s    mmollns#J/{{6g6''),,u%yy}}Q$d&F##CK0r5   c                     / nUR                  5        H\  nUR                  5       nUR                  S5      (       a  M+  UR                  S5      (       a  MC  US:X  a  MK  UR                  U5        M^     U$ )N.r    )r~   stripr   append)r2   r@   asm_listr   s_lines        r   break_up_asmTestRISCVABI.break_up_asm  s^    NN$DZZ\F%%c**f.?.?.H.H|'	 %
 r5   c                     U R                  5         U R                  5       nU R                  SSS9nU R                  U R	                  UR                  U5      5      [        5        g )N+f,+dilp32featuresabiname)r   r   r   r7   r   emit_assemblyriscv_asm_ilp32r2   r   rP   s      r   test_rv32d_ilp32TestRISCVABI.test_rv32d_ilp32  sZ    !$$&**GW*M**6+?+?+FG(	*r5   c                     U R                  5         U R                  5       nU R                  SSS9nU R                  U R	                  UR                  U5      5      [        5        g )Nr   ilp32fr   )r   r   r   r7   r   r   riscv_asm_ilp32fr   s      r   test_rv32d_ilp32fTestRISCVABI.test_rv32d_ilp32f  Z    !$$&**GX*N**6+?+?+FG)	+r5   c                     U R                  5         U R                  5       nU R                  SSS9nU R                  U R	                  UR                  U5      5      [        5        g )Nr   ilp32dr   )r   r   r   r7   r   r   riscv_asm_ilp32dr   s      r   test_rv32d_ilp32dTestRISCVABI.test_rv32d_ilp32d  r   r5   rY   )rS   rT   rU   rV   r   r<   r3   r   r   r   r   r   r   r   rX   __classcell__)r   s   @r   r   r     s<     %F*
7"*++ +r5   r   c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS r\R&                  " \" 5       S5      S 5       rS rSrg)TestMisci#  z/
Test miscellaneous functions in llvm.binding.
c                 .    U R                  [        5        g r(   )rC   rW   r1   s    r   test_parse_assemblyTestMisc.test_parse_assembly(  s    Gr5   c                     U R                  [        5       nU R                  [        5        S S S 5        [	        WR
                  5      nU R                  SU5        U R                  SU5        g ! , (       d  f       NH= f)Nzparsing errorzinvalid operand type)assertRaisesr   rC   asm_parse_errorr   	exceptionassertIn)r2   cmss      r   test_parse_assembly_error"TestMisc.test_parse_assembly_error+  sW    |,KK( -oq),a0	 -,s   A..
A<c                    [         R                  " 5       n[         R                  " [         R                  " S5      / 5      n[         R                  " XS5      n[         R
                  " UR                  SS95      nUR                  [         R                  " [         R                  " S5      S5      5        [        U5      nU R                  U[        5        g )N    fooz<>!*''#r   i90  )r	   r   r   IntTyper   r   r   r"   Constantr   r7   asm_nonalphanum_blocklabel)r2   rB   ftfnbdr@   s         r   test_nonalphanum_block_name$TestMisc.test_nonalphanum_block_name2  s    iik__RZZ^R0[[%(\\"//Y/?@
r{{2::b>512#h89r5   c                     [         R                  R                  5       n[         R                  R                  5       nX:X  d   eg r(   )r)   rA   get_global_context)r2   	gcontext1	gcontext2s      r   test_global_contextTestMisc.test_global_context;  s2    LL335	LL335	%%%r5   c                     [         R                  " SS5        [         R                  " SS5        [         R                  " S5      nU R                  US5        [         R                  " S5      nU R	                  US 5        g )N__xyzzy  i.  __foobar)r)   
add_symboladdress_of_symbolr7   assertIs)r2   addrs     r   test_dylib_symbolsTestMisc.test_dylib_symbols@  s\    	4(	4(%%i0t$%%j1dD!r5   c                 |    [         R                  " 5       nU R                  U[        5        U R	                  U5        g r(   )r)   r>   assertIsInstancer   
assertTrue)r2   r<   s     r   test_get_default_triple TestMisc.test_get_default_tripleH  s,    ((*fc*r5   c                 6   S n[         R                  " 5       n[         R                  " 5       nU R                  U[        5        U R                  U5        U" UR                  S5      S   5      nU" UR                  S5      S   5      nU R                  XE5        g )Nc                     U S:X  a  gU $ )Npowerpc64leppc64lerY   )archs    r   normalize_ppc7TestMisc.test_get_process_triple.<locals>.normalize_ppcO  s    }$ r5   -r   )r)   get_process_tripler>   r  r   r  r   r7   )r2   r  r<   defaultdefault_archtriple_archs         r   test_get_process_triple TestMisc.test_get_process_tripleM  s    	 ((*))+fc*$W]]3%7%:;#FLL$5a$893r5   c                 ^   [         R                  " 5       nU R                  U[        5        U R                  U[         R                  5        UR                  5        HB  u  p#U R                  U[        5        U R                  U5        U R                  U[        5        MD     U R                  UR                  5       [        5        SnSR                  U5      nU R                  [        R                  " US5      5        U R                  [        R                  " US5      5        U R                  [        R                  " US5      5        [        U5      S:X  a!  U R                  UR                  5       S5        g U R                  [        R                  " XQR                  5       5      5        g )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=   assertIsNotNonerz   r   r   r7   )r2   r   kvre_termregexs         r   test_get_host_cpu_features#TestMisc.test_get_host_cpu_features_  s3   --/h-h8NN$DA!!!S)OOA!!!T* % 	h..0#6*&--g6RXXeR01RXXeU34RXXeX67x=AX--/4  %1A1A1C!DEr5   c                 |    [         R                  " 5       nU R                  U[        5        U R	                  U5        g r(   )r)   get_host_cpu_namer  r   r  )r2   cpus     r   test_get_host_cpu_nameTestMisc.test_get_host_cpu_namev  s,    $$&c3'r5   c                 V    Sn[         R                  " [        R                  SU/5        g )Na2  if 1:
            from llvmlite import binding as llvm

            llvm.initialize()
            llvm.initialize_native_target()
            llvm.initialize_native_asmprinter()
            llvm.initialize_all_targets()
            llvm.initialize_all_asmprinters()
            llvm.shutdown()
            -cru   
check_callr   
executabler2   codes     r   test_initfiniTestMisc.test_initfini{  s$    	 	s~~tT:;r5   c                 V    Sn[         R                  " [        R                  SU/5        g )Nzif 1:
            from llvmlite import binding as llvm

            llvm.set_option("progname", "-debug-pass=Disabled")
            r:  r;  r>  s     r   test_set_optionTestMisc.test_set_option  s$    
 	s~~tT:;r5   c                     [         R                  u  pnSnU R                  X5        U R                  U[        S5      5        g )N)         )r)   llvm_version_infor   range)r2   majorminorpatchvalids        r   test_versionTestMisc.test_version  s5    "44ee#eU1X&r5   c                 .    [         R                  " 5         g r(   )r)   check_jit_executionr1   s    r   test_check_jit_execution!TestMisc.test_check_jit_execution  s      "r5   zLocale not availablec                     U R                  [        5      n[        U5      n[        R                  " [        R
                  S5        [        U5      nU R                  X#5        g )Nr   )rC   asm_double_localer   r   r   r   r7   )r2   r   expectgots       r   test_print_double_locale!TestMisc.test_print_double_locale  sG    KK)*Q 	0!f%r5   c                 `    SnSn[         R                  USU/n[        R                  " U5        g )Nzfrom llvmlite import bindingz-Werrorr:  )r   r=  ru   r<  )r2   r?  flagscmdargss       r   test_no_accidental_warnings$TestMisc.test_no_accidental_warnings  s,    ->>5$5g&r5   rY   N)rS   rT   rU   rV   r   r   r   r  r  r  r  r$  r2  r7  r@  rC  rO  rS  r   skipIfr   rY  r^  rX   rY   r5   r   r   r   #  sp    1:&
" 
4$F.
<<'# __\^%;<	& =	&'r5   r   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rSrg)TestModuleRefi  c                     U R                  5       n[        U5      R                  5       nU R                  UR	                  S5      U5        g )Nz; ModuleID =)rC   r   r   r  r   r2   rB   r   s      r   test_strTestModuleRef.test_str  s4    kkmHNN^4a8r5   c                    U R                  5       n[        U5        UR                  5         U R                  [        R
                  5         [        U5        S S S 5        UR                  5         g ! , (       d  f       N= fr(   )rC   r   closer   ctypesArgumentErrorr2   rB   s     r   
test_closeTestModuleRef.test_close  sO    kkmC		v334H 5		 54s   A00
A>c                    U R                  5       n[        U5        U   [        U5        S S S 5        U R                  [        R                  5         [        U5        S S S 5        U R                  [
        5         U    S S S 5        S S S 5        g ! , (       d  f       Nl= f! , (       d  f       NJ= f! , (       d  f       N9= f! , (       d  f       g = fr(   )rC   r   r   ri  rj  r   rk  s     r   	test_withTestModuleRef.test_with  s    kkmCH v334H 5|,  -,	 S44  -,s;   BB!:C=B2?C
B!
B/2
C 	<C
Cc                     U R                  5       nSUl        U R                  UR                  S5        SUl        U R                  UR                  S5        g )Nr   bar)rC   rG   r7   rk  s     r   	test_nameTestModuleRef.test_name  sC    kkm5)5)r5   c                 \    U R                  5       nU R                  UR                  S5        g )Nz	asm_sum.c)rC   r7   source_filerk  s     r   test_source_fileTestModuleRef.test_source_file  s!    kkm+6r5   c                     U R                  5       nUR                  nU R                  U[        5        X!l        U R	                  X!R                  5        g r(   )rC   data_layoutr  r   r7   rd  s      r   test_data_layoutTestModuleRef.test_data_layout  s=    kkmOOa%OO,r5   c                     U R                  5       nUR                  nU R                  U[        R                  " 5       5        SUl        U R                  UR                  S5        g )Nr   )rC   r<   r7   r)   r>   rd  s      r   test_tripleTestModuleRef.test_triple  sJ    kkmJJD3356
R(r5   c                 Z   U R                  5       nU R                  UR                  5       S 5        U R                  [        5      nU R	                  [
        5       nUR                  5         S S S 5        [        WR                  5      nU R                  SU5        g ! , (       d  f       N6= f)Nz%.bug = add i32 1, %.bug)	rC   r  r   asm_verification_failr   r   r   r   r   )r2   rB   r   r   s       r   test_verifyTestModuleRef.test_verify  st    kkmcjjlD)kk/0|,JJL -0!4 -,s   B
B*c                 j   U R                  5       nUR                  S5      nU R                  U[        R                  5        U R                  UR                  S5        U R                  [        5         UR                  S5        S S S 5        A[        UR                   5        g ! , (       d  f       N%= f)Nsumr   )
rC   get_functionr  r)   ValueRefr7   rG   r   	NameErrorr   r2   rB   r   s      r   test_get_functionTestModuleRef.test_get_function  s    kkme$b$--0%(y)U# * BII *)   3B$$
B2c                 \   U R                  5       nUR                  S5      nU R                  UR                  S5        U R	                  [
        R                  " S[        U5      5      5        U R                  [        5         UR                  S5        S S S 5        g ! , (       d  f       g = f)Nstruct.glob_type8%struct\.glob_type(\.[\d]+)? = type { i64, \[2 x i64\] }zstruct.doesnt_exist)
rC   get_struct_typer7   rG   r-  rz   r   r   r   r  )r2   rB   st_tys      r   test_get_struct_type"TestModuleRef.test_get_struct_type  s    kkm##$67%78RXXGJ 	 y) 56 *))s   B
B+c                 j   U R                  5       nUR                  S5      nU R                  U[        R                  5        U R                  UR                  S5        U R                  [        5         UR                  S5        S S S 5        A[        UR                   5        g ! , (       d  f       N%= f)NrH   rr  )
rC   rF   r  r)   r  r7   rG   r   r  r   )r2   rB   gvs      r   test_get_global_variable&TestModuleRef.test_get_global_variable  s    kkm$$V,b$--0&)y)##E* * BII *)r  c                     U R                  5       nUR                  nA[        US S9nU R                  [	        U5      S5        U R                  U Vs/ s H  oDR
                  PM     sn/ SQ5        g s  snf )Nc                     U R                   $ r(   r   )values    r   <lambda>5TestModuleRef.test_global_variables.<locals>.<lambda>  s    UZZr5   )key   )rH   glob_bglob_fglob_struct)rC   global_variablessortedr7   r   rG   )r2   rB   itglobsgs        r   test_global_variables#TestModuleRef.test_global_variables  sd    kkm!!r78UQ'%0%Q&&%0D	F0s   A3c                     U R                  5       nUR                  nA[        U5      nU R                  [	        U5      S5        U R                  US   R
                  S5        g Nre   r   r  )rC   	functionslistr7   r   rG   )r2   rB   r  funcss       r   test_functionsTestModuleRef.test_functions  sN    kkm]]RUQ'q.r5   c           	      T   U R                  5       nUR                  nA[        U5      nU R                  [	        U5      S5        U R                  [        R                  " SUS   R                  5      5        U R                  [        R                  " S[        US   5      5      5        g )Nre   struct\.glob_type(\.[\d]+)?r   r  )
rC   struct_typesr  r7   r   r-  rz   r   rG   r   )r2   rB   r  structss       r   test_structsTestModuleRef.test_structs$  s    kkmr(Wq)RXX&D&-ajoo7 	8RXXG
O 	r5   c                    U R                  5       nU R                  [        5      nUR                  U5        U R                  [	        S UR
                   5       5      SS/5        UR                  S5        UR                  5         U R                  [        R                  5         UR                  S5        S S S 5        g ! , (       d  f       g = f)Nc              3   8   #    U  H  oR                   v   M     g 7fr(   r   .0fs     r   	<genexpr>-TestModuleRef.test_link_in.<locals>.<genexpr>5       2>a66>   mulr  )rC   asm_mullink_inr7   r  r  r  rh  r   ri  rj  )r2   destsrcs      r   test_link_inTestModuleRef.test_link_in0  s    {{}kk'"S24>>22UEN	D% 

v334U# 544s   %C  
Cc                 f   U R                  5       nU R                  [        5      nUR                  USS9  U R                  [	        S UR
                   5       5      SS/5        UR                  5         U R                  [	        S UR
                   5       5      S/5        UR                  S5        g )NTpreservec              3   8   #    U  H  oR                   v   M     g 7fr(   r   r  s     r   r  6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>@  r  r  r  r  c              3   8   #    U  H  oR                   v   M     g 7fr(   r   r  s     r   r  r  B  s     ?1r  )rC   r  r  r7   r  r  rh  r  )r2   r  src2s      r   test_link_in_preserve#TestModuleRef.test_link_in_preserve;  s    {{}{{7#TD)24>>22UEN	D

???%I% r5   c                    U R                  5       nU R                  [        5      nU R                  [        5       nUR	                  U5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nzsymbol multiply defined)rC   asm_sum2r   r   r  r   r   r   )r2   r  r  r   s       r   test_link_in_error TestModuleRef.test_link_in_errorE  s_     {{}kk(#|,LL -/R\\1BC -,s   A;;
B	c                     U R                  5       nUR                  5       nSnSnU R                  UR                  U5      =(       d    UR                  U5      5        g )Ns   s   BC)rC   
as_bitcoder  r   )r2   rB   bcbitcode_wrapper_magicbitcode_magics        r   test_as_bitcodeTestModuleRef.test_as_bitcodeN  sO    kkm^^ !4m4 =&;<	>r5   c                 "   U R                  [        5       n[        R                  " S5        S S S 5        U R	                  S[        WR                  5      5        U R	                  S[        UR                  5      5        g ! , (       d  f       NY= f)Nr5   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_error&TestModuleRef.test_parse_bitcode_errorX  s`    |,s# -2C4EF6BLL8I	
 -,s   B  
Bc                 B   [         R                  " 5       nU R                  US9R                  5       n[         R                  " 5       n[         R                  " X#5      nU R                  UR                  5       U5        UR                  S5        UR                  S5        g )NrA   r  rH   )r)   create_contextrC   r  r  r7   r  rF   )r2   context1r  context2rB   s        r   test_bitcode_roundtrip$TestModuleRef.test_bitcode_roundtrip`  sz    &&([[[*557&&(  .)2.'r5   c                     U R                  5       nUR                  5       nU R                  X!5        U R                  UR	                  5       UR	                  5       5        g r(   )rC   cloneassertIsNotr7   r  )r2   r   cloneds      r   test_cloningTestModuleRef.test_cloningk  sE    KKM#**,alln=r5   rY   N)rS   rT   rU   rV   re  rl  ro  rs  rw  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   rY   r5   r   rb  rb    sm    9
	*7-)	5
7F/
	$!D>
	(>r5   rb  c                   p    \ rS rSrSrSS jrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rSrg)JITTestMixinir  z"
Mixin for ExecutionEngine tests.
c                     UR                  5         UR                  U5      nU R                  U5        [        [        [        [        5      " U5      $ r(   )finalize_objectget_function_addressr  r   r   )r2   ee	func_namecfptrs       r   get_sumJITTestMixin.get_sumw  s>    
''	2u-e44r5   c                     U R                  5       nU R                  U5       nU R                  U5      nU" SS5      nU R                  SU5        S S S 5        g ! , (       d  f       g = fNrf   )rC   rL   r  r7   )r2   rB   r  cfuncress        r   test_run_codeJITTestMixin.test_run_code}  sM    kkmXXc]bLL$E2,CR% ]]s   -A
A&c                    U R                  U R                  5       5      nUR                  5         UR                  5         U R                  [        R
                  5         UR                  5         S S S 5        g ! , (       d  f       g = fr(   )rL   rC   rh  r   ri  rj  r  r2   r  s     r   rl  JITTestMixin.test_close  sT    XXdkkm$



v334  544s   A99
Bc                    U R                  U R                  5       5      nU    S S S 5        U R                  [        5         U    S S S 5        S S S 5        U R                  [        R
                  5         UR                  5         S S S 5        g ! , (       d  f       Nq= f! , (       d  f       N`= f! , (       d  f       Ni= f! , (       d  f       g = fr(   )rL   rC   r   r   ri  rj  r  r  s     r   ro  JITTestMixin.test_with  s    XXdkkm$ |,  - v334  54 R  -, 54s;   BB1B B15C
B 
B.	*B11
B?
Cc                     U R                  5       nU R                  U5      nUR                  5         UR                  5         g r(   rC   rL   rh  r2   rB   r  s      r   test_module_lifetime!JITTestMixin.test_module_lifetime  s,    kkmXXc]

		r5   c                     U R                  5       nU R                  U5      nUR                  5         UR                  5         g r(   r  r  s      r   test_module_lifetime2"JITTestMixin.test_module_lifetime2  s,    kkmXXc]		

r5   c                    U R                  U R                  5       5      nU R                  [        5      nUR                  U5        U R	                  [
        5         UR                  U5        S S S 5        U R                  UR                  5        UR                  5         U R                  UR                  5        g ! , (       d  f       NU= fr(   )
rL   rC   r  
add_moduler   KeyErrorassertFalseclosedrh  r  r2   r  rB   s      r   test_add_moduleJITTestMixin.test_add_module  s    XXdkkm$kk'"
cx(MM# )$



#	 )(s   B<<
C
c                     U R                  U R                  5       5      nU R                  [        5      nUR                  U5        UR	                  5         UR	                  5         g r(   rL   rC   r  r  rh  r  s      r   test_add_module_lifetime%JITTestMixin.test_add_module_lifetime  sB    XXdkkm$kk'"
c		

r5   c                     U R                  U R                  5       5      nU R                  [        5      nUR                  U5        UR	                  5         UR	                  5         g r(   r  r  s      r   test_add_module_lifetime2&JITTestMixin.test_add_module_lifetime2  sB    XXdkkm$kk'"
c

		r5   c                    U R                  U R                  5       5      nU R                  [        5      nUR                  U5        UR	                  U5        U R                  [        5         UR	                  U5        S S S 5        U R                  UR                  5        UR                  5         U R                  UR                  5        g ! , (       d  f       NU= fr(   )
rL   rC   r  r  remove_moduler   r  r  r  rh  r  s      r   test_remove_moduleJITTestMixin.test_remove_module  s    XXdkkm$kk'"
c
x(S! )$

$	 )(s   ,C
Cc                     U R                  5       nU R                  U5      nUR                  nU R                  UR                  U5        [	        U5        AA[	        U5        g r(   )rC   rL   target_datar  r   )r2   rB   r  tds       r   test_target_dataJITTestMixin.test_target_data  sH    kkmXXc]^^bnnb)BBr5   c                 d   U R                  5       nU R                  U5      nUR                  nUR                  S5      nUR                  S5      nUR                  S5      n[        R
                  S:  a  SOSnXEU4 H.  nU R                  UR                  UR                  5      U5        M0     U R                  UR                  UR                  5      S5        U R                  UR                  UR                  5      S5        U R                  UR                  UR                  5      S5        U R                  UR                  UR                  5      S5        U R                  UR                  UR                  5      S	5        U R                  UR                  UR                  5      S
5        g )NrH   r  r          r  rH  re   )re   rf   r     )r  rH  )rC   rL   r  rF   r   maxsizer7   get_abi_sizetypeglobal_value_typeget_abi_alignmentr   )	r2   rB   r  r  gv_i32gv_i8	gv_structpointer_sizer  s	            r   test_target_data_abi_enquiries+JITTestMixin.test_target_data_abi_enquiries  sO   kkmXXc]^^((0''1++M:	KK'1qq+AR__QVV4lC , 	)A)ABAF--f.F.FGK)@)@A1Eb**5+B+BCYO)D)DErJb**9+F+FGPr5   c                   ^ / mU4S jnU R                  5       nU R                  U5      nUR                  U5        U R                  [	        T5      S5        U R                  U5      nU" SS5        U R                  [	        T5      S5        U R                  TS   S   U5        U R                  TS   S   [        5        / TS S & U R                  [        5      nUR                  U5        U R                  US5      nU R                  [	        T5      S5        U R                  TS   S   U5        U R                  TS   S   [        5        g )Nc                 *   > TR                  X45        g r(   r   rB   bufnotifiess     r   notify5JITTestMixin.test_object_cache_notify.<locals>.notify      OOSJ'r5   r   rf   r  re   r  )rC   rL   set_object_cacher7   r   r  r  r  bytesr  r  )r2   r6  rB   r  r  mod2r5  s         @r   test_object_cache_notify%JITTestMixin.test_object_cache_notify  s   	( kkmXXc]
F#X*R aX*hqk!nc*hqk!ne4{{7#
dR'X*hqk!nd+hqk!ne4r5   c                 ~  ^^^	 / m/ mU4S jnU4S jnU R                  5       nU R                  U5      nUR                  X5        U R                  [	        T5      S5        U R                  [	        T5      S5        U R                  U5      nU R                  [	        T5      S5        U R                  [	        T5      S5        U R                  TS   U5        TS   S   m	UU	4S jn/ TS S & / TS S & U R                  [        5      nU R                  U5      nUR                  X5        U R                  [	        T5      S5        U R                  [	        T5      S5        U R                  U5      nU R                  U" SS5      S5        U R                  [	        T5      S5        U R                  [	        T5      S5        g )	Nc                 *   > TR                  X45        g r(   r2  r3  s     r   r6  8JITTestMixin.test_object_cache_getbuffer.<locals>.notify  r8  r5   c                 (   > TR                  U 5        g r(   r2  )rB   
getbufferss    r   	getbuffer;JITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer  s    c"r5   r   re   c                 *   > TR                  U 5        T$ r(   r2  )rB   rB  
sum_buffers    r   getbuffer_successfulFJITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer_successful  s    c"r5   rf   r  r  )rC   rL   r9  r7   r   r  r  r  )
r2   r6  rC  rB   r  r  rG  rB  r5  rF  s
          @@@r   test_object_cache_getbuffer(JITTestMixin.test_object_cache_getbuffer  st   
	(	# kkmXXc]
F. 	X*Z!,R X*Z!,jmS)a[^

	 
1kk'"XXc]
F9X*Z!,R q"r*X*Z!,r5   rY   N)r  )rS   rT   rU   rV   r   r  r  rl  ro  r  r  r  r  r  r  r   r.  r<  rI  rX   rY   r5   r   r  r  r  sN    5&!!$	%Q*56*-r5   r  c                        \ rS rSrS rS rSrg)JITWithTMTestMixini+  c                 4   U R                  SS9nU R                  5       nU R                  X!5      nUR                  U5      nU R	                  SU5        UR                  S5        UR                  U5      nU R	                  SU5        U R                  XE5        g)z%Test TargetMachineRef.emit_assembly()TrK   r  N)rQ   rC   rL   r   r   set_asm_verbosityassertNotEqual)r2   rQ   rB   r  raw_asmraw_asm_verboses         r   test_emit_assembly%JITWithTMTestMixin.test_emit_assembly-  s    ,,,6kkmXXc* ..s3eW%((.(66s;eW%G5r5   c                 &   U R                  SS9nU R                  5       nU R                  X!5      nUR                  U5      nU R	                  U[
        5        [        R                  R                  S5      (       a  U R                  SUSS 5        gg)z#Test TargetMachineRef.emit_object()TrK   r\   s   ELFN
   )
rQ   rC   rL   emit_objectr  r:  r   r   r   r   )r2   rQ   rB   r  code_objects        r   test_emit_object#JITWithTMTestMixin.test_emit_object9  s}    ,,,6kkmXXc*$005k51<<""7++MM&+cr"23 ,r5   rY   N)rS   rT   rU   rV   rR  rX  rX   rY   r5   r   rL  rL  +  s    
6	4r5   rL  c                   "    \ rS rSrSrSS jrSrg)	TestMCJitiE  z8
Test JIT engines created with create_mcjit_compiler().
Nc                 R    Uc  U R                  SS9n[        R                  " X5      $ )NTrK   )rQ   r)   create_mcjit_compiler)r2   rB   rQ   s      r   rL   TestMCJit.jitJ  s,    !!00T0:N))#>>r5   rY   r(   )rS   rT   rU   rV   r   rL   rX   rY   r5   r   r[  r[  E  s    ?r5   r[  x86x86 onlyc            	           \ rS rSr\SSS\" \\\5      S4S jrS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rSrg)TestOrcLLJITiT  r  NFc                    [         R                  " USUS9n[         R                  " 5       nU(       a  UR                  5         UR	                  UR                  [         R                  " 5       S95      R                  U5      R                  Xr5      n	X   n
U R                  U
5        U R                  X)R                  5        XyU" U
5      4$ )NF)use_jit_linksuppress_errorsr;   )r)   create_lljit_compilerJITLibraryBuilderadd_current_processadd_irr=   r>   export_symbollinkr  r7   rG   )r2   r@   r  rQ   add_process	func_typere  lljitr   rtr  s              r   rL   TestOrcLLJIT.jitW  s     **>8=;JL ((*'')VCJJd&=&=&?J@A]9%T%# 	 GG,)E***r5   c                     [         R                  " 5       n[         R                  " 5       R                  SS5      R	                  S5      R                  US5      nU R                  US   S5        g )Nr
  r  r   )r)   rf  rg  import_symbolrj  rk  r7   r2   rn  ro  s      r   test_define_symbolTestOrcLLJIT.test_define_symbolj  sW    **,##%33ItD]9%dd5%&8 	I-r5   c                    [         R                  " 5       nU R                  [        S5         UR	                  SS5        S S S 5        [         R
                  " 5       R                  SS5      R                  S5      R                  US5      nU R                  US   S5        U R                  [        S5         UR	                  SS5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NzNo such libraryr   r  r
  r  r   zSymbols not found.*__foobar)
r)   rf  assertRaisesRegexr   lookuprg  rr  rj  rk  rO  rs  s      r   "test_lookup_undefined_symbol_fails/TestOrcLLJIT.test_lookup_undefined_symbol_failsp  s    **,##L2CDLL
+ E##%33ItD]9%dd5%&8 	ByM1-##L$ACLL
+C C ED
C Cs   C6C#
C #
C1c                     [         R                  S:X  a4  U R                  [        S5         [        R
                  " SS9  S S S 5        g U R                  [        R
                  " SS95        g ! , (       d  f       g = f)Nwin32zJITLink .* WindowsT)rd  )r   r   rw  r   r)   rf  r-  r1   s    r   test_jit_linkTestOrcLLJIT.test_jit_link{  s_    <<7"''(<>**=> >   !;!;!NO	> >s   A--
A;c                     U R                  5       u  pnU   U" SS5      nU R                  SU5        S S S 5        g ! , (       d  f       g = fr  )rL   r7   )r2   rn  ro  r  r  s        r   r  TestOrcLLJIT.test_run_code  s:    !XXZE2,CR% UUs	   ;
A	c                     U R                  5       u  pnUR                  5         UR                  5         U R                  [        5         UR	                  SS5        S S S 5        g ! , (       d  f       g = fNr   r   )rL   rh  r   AssertionErrorrx  r2   rn  ro  r  s       r   rl  TestOrcLLJIT.test_close  sL    !XXZE~.LL% /..s   	A%%
A3c                 ~   U R                  5       u  pnU    S S S 5        U R                  [        5         U    S S S 5        S S S 5        U R                  [        5         UR	                  SS5        S S S 5        g ! , (       d  f       Ni= f! , (       d  f       NX= f! , (       d  f       Na= f! , (       d  f       g = fr  )rL   r   r   r  rx  r  s       r   ro  TestOrcLLJIT.test_with  s    !XXZE |,  - ~.LL% /. U  -, /.s8   A;BBBB.;
B	
B	B
B+.
B<c                    U R                  5       u  pn[        R                  " 5       R                  [        R                  [        R                  " 5       S95      R                  S5      R                  US5      n[        [        [        [        5      " US   5      " SS5      nU R                  SU5        U R                  UR                  SS5      S   S5        U R                  UR                  SS5      S   S5        U R                  [        5         UR                  SS5        S S S 5        U R                  [        5         UR                  SS5        S S S 5        g ! , (       d  f       N?= f! , (       d  f       g = f)Nr;   r  rf   r  ir  r   )rL   r)   rg  ri  r  r=   r>   rj  rk  r   r   r7   rO  rx  r   r   r2   rn  rt_sum	cfunc_sumrt_mulr  s         r   test_add_ir_moduleTestOrcLLJIT.test_add_ir_module  s   %)XXZ"	'')VGNN$*A*A*CNDE]5!T% 	 ue,VE];ArBc"ELL6u=qAELL6u=qA|,LL& -|,LL& -, -,,,s   E!E2!
E/2
F c                     U R                  5       u  pnA[        R                  " 5         U R                  [        5         UR                  SS5        S S S 5        UR                  5         g ! , (       d  f       N= fNr  )rL   r-   r.   r   r   rx  rh  )r2   rn  r  r   s       r   r  TestOrcLLJIT.test_remove_module  sQ    !XXZ


|,LL& - -,s   A++
A9c                    U R                  5       u  pn[        R                  " 5       R                  [        R                  [        R                  " 5       S95      R                  S5      R                  S5      R                  US5      n[        [        [        [        5      " US   5      " SS5      nU R                  SU5        g )Nr;   
square_sumr  rf   r  	   )rL   r)   rg  ri  asm_square_sumr=   r>   rj  add_jit_libraryrk  r   r   r7   r  s         r   test_lib_dependsTestOrcLLJIT.test_lib_depends  s    %)XXZ"	'')VN))1H1H1J)KL]<(_U#T%&	 	
 ue,VL-AB1bIC r5   c                     U R                  5       u  pnUR                  nU R                  UR                  U5        [        U5        A[        U5        g r(   )rL   r  r  r   )r2   rn  ro  r   r  s        r   r   TestOrcLLJIT.test_target_data  sA    Ae'',BBr5   c                    [        S5      n[        R                  " 5       n[        R                  " 5       nUR	                  [
        R                  [        R                  " 5       S95      R                  S[        R                  " U5      5      R                  S5      R                  US5      nUS   nU R                  U5        U R                  [        [         5      " U5      " 5       S5        AU R#                  UR$                  S5        g )Nr   r;   Ar         )r   r)   rf  rg  ri  asm_ext_ctorsr=   r>   rr  ri  	addressofrj  rk  r  r7   r   r   rO  r  )r2   shared_valuern  r   ro  r   s         r   test_global_ctors_dtors$TestOrcLLJIT.test_global_ctors_dtors  s     qz**,((*VM((0G0G0I(JK]3 0 0 >?]5!T%	 	
 i5)#.0"5L..3r5   c                     SnU R                  [        U5         U R                  [        SSS9  S S S 5        g ! , (       d  f       g = f)Nz*Failed to materialize symbols:.*getversion
getversionT)re  )rw  r   rL   asm_getversion)r2   msgs     r   (test_lookup_current_process_symbol_fails5TestOrcLLJIT.test_lookup_current_process_symbol_fails  s7     ;##L#6HH^\4HH 766s	   8
Ac                 4    U R                  [        SS S5        g )Nr  T)rL   r  r1   s    r   "test_lookup_current_process_symbol/TestOrcLLJIT.test_lookup_current_process_symbol  s    tT:r5   c                   ^^ [         R                  " 5       m[        R                  [         R                  " 5       S9mUU4S jn[        [        R                  " 5       5       Vs/ s H  n[        R                  " U" U5      S9PM     nnU H  nUR                  5         M     U H  nUR                  5         M     g s  snf )Nr;   c                    >^  U UU4S jnU$ )Nc            
         > / n [        S5       H[  nU R                  [        R                  " 5       R	                  T5      R                  S5      R                  TST SU 35      5        M]     g )N2   r  sum_r   )rJ  r   r)   rg  ri  rj  rk  )trackingcirn  llvm_irs     r   do_workDTestOrcLLJIT.test_thread_safe.<locals>.compile_many.<locals>.do_work  sY    rAOOD$:$:$<%+VG_%2]5%9%)T%4s!A3%@B #r5   rY   )r  r  rn  r  s   ` r   compile_many3TestOrcLLJIT.test_thread_safe.<locals>.compile_many  s    B Nr5   )rP   )r)   rf  rW   r=   r>   rJ  rr   	cpu_count	threadingThreadstartjoin)r2   r  r  thsthrn  r  s        @@r   test_thread_safeTestOrcLLJIT.test_thread_safe  s    **,..(?(?(A.B		 blln-/-1 |A7- 	 /BHHJ BGGI 	/s   %$B>c                    U R                  SS9nU R                  5       n[        R                  " U5      n[        R                  " 5       R                  UR                  U5      5      R                  S5      R                  US5      n[        [        [        [        5      " US   5      nU R                  U" SS5      S5        g )NFrK   r  rf         )rQ   rC   r)   rf  rg  add_object_imgrV  rj  rk  r   r   r7   )r2   rQ   rB   rn  ro  r  s         r   test_add_object_file!TestOrcLLJIT.test_add_object_file  s    ,,,7kkm**>:##%^N66s;<]5!T% 	 ue,RY7QA&r5   c                    U R                  SS9nU R                  5       nUR                  U5      n[        5       u  pE [        R
                  " US5       nUR                  U5        S S S 5        [        R                  " U5      n[        R                  " 5       R                  U5      R                  S5      R                  US5      n[        [        [        [        5      " US   5      n	U R                  U	" SS5      S5        [        R                   " U5        g ! , (       d  f       N= f! [        R                   " U5        f = f)NFrK   wbr  rf   r  r  )rQ   rC   rV  r   rr   fdopenwriter)   rf  rg  add_object_filerj  rk  r   r   r7   unlink)
r2   rQ   rB   obj_bin	temp_desc	temp_pathr  rn  ro  r  s
             r   $test_add_object_file_from_filesystem1TestOrcLLJIT.test_add_object_file_from_filesystem  s    ,,,7kkm ,,S1&y		!9d+q  ,..~>E'') +u%eU#  E5%0E;CSAY*IIi  ,+ IIi s$   D+ D'BD+ 
D($D+ +ErY   )rS   rT   rU   rV   rW   r   r   rL   rt  ry  r}  r  rl  ro  r  r  r  r   r  r  r  r  r  r  rX   rY   r5   r   rb  rb  T  ss     t5%)G!+&.	,P&&&'!4"I;,	'!r5   rb  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)TestValueRefi  c                 |    U R                  5       nUR                  S5      nU R                  [        U5      S5        g )NrH   z@glob = global i32 0)rC   rF   r7   r   r2   rB   rH   s      r   re  TestValueRef.test_str  s2    kkm&&v.T$:;r5   c                     U R                  5       nUR                  S5      nU R                  UR                  S5        SUl        U R                  UR                  S5        g )NrH   foobar)rC   rF   r7   rG   r  s      r   rs  TestValueRef.test_name  sL    kkm&&v.F+	H-r5   c                    U R                  5       nUR                  S5      nUR                  nU R                  UR                  [        R
                  5        X2l        U R                  UR                  U5        S HY  nX2l        U R                  UR                  [        R
                  5        U R                  UR                  R                  U5        M[     g )NrH   )internalexternal)rC   rF   linkager  r)   Linkager7   rG   )r2   rB   rH   r  s       r   test_linkageTestValueRef.test_linkage#  s    kkm&&v.,,dllDLL9w//G"L!!$,,=T\\..8 0r5   c                    U R                  5       nUR                  S5      nUR                  nU R                  UR                  [        R
                  5        X2l        U R                  UR                  U5        S HY  nX2l        U R                  UR                  [        R
                  5        U R                  UR                  R                  U5        M[     g )NrH   )hidden	protectedr!  )rC   rF   
visibilityr  r)   
Visibilityr7   rG   )r2   rB   rH   r  s       r   test_visibilityTestValueRef.test_visibility/  s    kkm&&v.__
doot?$*5<J(O!!$//4??CT__11:> =r5   c                    U R                  5       nUR                  S5      nUR                  nU R                  UR                  [        R
                  5        X2l        U R                  UR                  U5        S HY  nX2l        U R                  UR                  [        R
                  5        U R                  UR                  R                  U5        M[     g )NrH   )	dllimport	dllexportr!  )rC   rF   storage_classr  r)   StorageClassr7   rG   )r2   rB   rH   r  s       r   test_storage_classTestValueRef.test_storage_class;  s    kkm&&v.**d00$2C2CD*++];BM!.!!$"4"4d6G6GHT//44mD Cr5   c                 2   U R                  5       nUR                  S5      nUR                  S5        U R                  [        5       nUR                  S5        S S S 5        U R                  [        WR                  5      S5        g ! , (       d  f       N4= f)Nr  	nocapturezextzno such attribute 'zext')rC   r  add_function_attributer   
ValueErrorr7   r   r   )r2   rB   r   raisess       r   test_add_function_attribute(TestValueRef.test_add_function_attributeG  ss    kkme$
!!+.z*f%%f- +V--.0JK +*s   B
Bc                 ~    U R                  5       nUR                  S5      nU R                  UR                   U5        g NrH   )rC   rF   r  r  s      r   test_moduleTestValueRef.test_moduleO  s/    kkm&&v.dkk3'r5   c                     U R                  5       nUR                  S5      nUR                  nU R                  U[        R
                  5        g r  )rC   rF   r'  r  r)   TypeRefr2   rB   rH   tps       r   	test_typeTestValueRef.test_typeT  s:    kkm&&v.YYb$,,/r5   c                 ,   U R                  5       nUR                  S5      nUR                  nU R                  UR                  S5        UR                  S5      nU R                  [        R                  " SUR                  R                  5      5        g )NrH   r   r  r  )	rC   rF   r'  r7   rG   r-  rz   r   r(  )r2   rB   rH   r   sts        r   test_type_nameTestValueRef.test_type_nameZ  sw    kkm&&v.YY"%$$]3RXX&D&(&:&:&?&?A 	Br5   c                     U R                  5       nUR                  S5      nUR                  nU R                  [	        U5      S5        g )NrH   i32)rC   rF   r(  r7   r   r  s       r   test_type_printing_variable(TestValueRef.test_type_printing_variablec  s<    kkm&&v.##R%(r5   c                     U R                  5       nUR                  S5      nU R                  [        UR                  5      S5        g )Nr  zi32 (i32, i32))rC   r  r7   r   r(  r  s      r   test_type_printing_function(TestValueRef.test_type_printing_functioni  s9    kkme$R1124DEr5   c                    U R                  5       nUR                  S5      nU R                  UR                  R                  5        [
        (       a:  U R                  [        R                  " S[        UR                  5      5      5        O9U R                  [        R                  " S[        UR                  5      5      5        U R                  [        R                  " S[        UR                  5      5      5        g )Nr  ptrz%struct\.glob_type(\.[\d]+)?\*r  )rC   rF   r  r'  
is_pointerr   r-  rz   r   r   r(  )r2   rB   r  s      r   test_type_printing_struct&TestValueRef.test_type_printing_structn  s    kkm$$]3**+""  &#bgg,!?@  *K*-bgg,"8 9RXXG$$%' 	(r5   c                 d    U R                  5       nUR                  5         UR                  5         g r(   )rH   rh  )r2   rH   s     r   rl  TestValueRef.test_close|  s    yy{



r5   c                     U R                  5       R                  S5      nU R                  [        5      R                  S5      nU R                  UR                  5        U R                  UR                  5        g r  )rC   r  asm_sum_declarer  is_declarationr  )r2   defineddeclareds      r   test_is_declaration TestValueRef.test_is_declaration  sW    ++-,,U3;;/<<UC//0//0r5   c                     U R                  [        5      n[        UR                  5      nU R	                  [        U5      S5        U H  nU R                  UR                  5        M      g Nr  )rC   rW   r  r  r7   r   r  	is_global)r2   rB   gvarsr/  s       r   test_module_global_variables)TestValueRef.test_module_global_variables  sN    kk'"S))*UQ'AOOAKK( r5   c                 ^   U R                  5       n[        UR                  5      nU R                  [	        U5      S5        US   nU R                  UR                  5        U R                  UR                  S5        U R                  [        5         UR                    S S S 5        U R                  [        5         UR                    S S S 5        U R                  [        5         UR                    S S S 5        g ! , (       d  f       Nc= f! , (       d  f       NJ= f! , (       d  f       g = fr  )rC   r  r  r7   r   r  is_functionrG   r   r  instructionsoperandsopcode)r2   rB   r  r   s       r   test_module_functions"TestValueRef.test_module_functions  s    kkmS]]#UQ'Qx(()E*z* +z*MM +z*KK +*	 +*****s$   C<<D&D<
D

D
D,c                 h   U R                  5       nUR                  S5      nU R                  UR                  5        [	        UR
                  5      nU R                  [        U5      S5        U R                  US   R                  5        U R                  US   R                  5        U R                  US   R                  S5        U R                  [        US   R                  5      S5        U R                  US   R                  S5        U R                  [        US   R                  5      S5        U R                  [        5         US   R                    S S S 5        U R                  [        5         US   R
                    S S S 5        g ! , (       d  f       N<= f! , (       d  f       g = f)Nr  rf   r   re   .1r  .2)rC   r  r  r#  r  	argumentsr7   r   is_argumentrG   r   r'  r   r  blocks)r2   rB   r   r   s       r   test_function_arguments$TestValueRef.test_function_arguments  s8   kkm&(()DNN#TA&Q++,Q++,at,T!W\\*E2at,T!W\\*E2z*GNN +z*G +* +***s   F9F#
F #
F1c                     U R                  5       R                  S5      n[        UR                  5      nU R	                  [        U5      S5        US   nU R                  UR                  5        g )Nr  re   r   )rC   r  r  r.  r7   r   r  is_block)r2   r   r.  r   s       r   test_function_blocks!TestValueRef.test_function_blocks  sS    {{}))%0dkk"Va(q	'r5   c                 <   U R                  5       R                  S5      n[        [        UR                  5      S   R                  5      nU R                  [        U5      S5        U R                  US   R                  5        U R                  US   R                  5        U R                  US   R                  5        U R                  US   R                  S5        U R                  US   R                  S5        U R                  US   R                  S5        g )Nr  r   r  re   rf   r   r"   )
rC   r  r  r.  r$  r7   r   r  is_instructionr&  )r2   r   instss      r   test_block_instructions$TestValueRef.test_block_instructions  s    {{}))%0T$++&q)667UQ'a//0a//0a//0q%0q%0q%0r5   c                    U R                  5       R                  S5      n[        [        UR                  5      S   R                  5      S   nU R                  UR                  S5        [        UR                  5      nU R                  [        U5      S5        U R                  US   R                  5        U R                  US   R                  5        U R                  US   R                  S5        U R                  [        US   R                  5      S5        U R                  US   R                  S5        U R                  [        US   R                  5      S5        g )	Nr  r   r   rf   re   r*  r  r+  )rC   r  r  r.  r$  r7   r&  r%  r   r  
is_operandrG   r   r'  )r2   r   r   r%  s       r   test_instruction_operands&TestValueRef.test_instruction_operands  s   {{}))%04$Q'445a8U+%X*../../!))40Xa[--.6!))40Xa[--.6r5   c                    [         R                  S   nUS:X  a  SOS/nU R                  [        5      nUR                   H  n[        UR                  5      nUR                  S:X  a  U R                  XR5        M;  UR                  S:X  d  MM  U R                  U/ 5        [        UR                  5      nU R                  [        US   R                  5      S/5        U R                  [        US   R                  5      / 5        M     g )	Nr   rG  s   memory(read)s   readonlya_readonly_funca_arg0_return_funcs   returnedre   )
r)   rI  rC   asm_attributesr  r  
attributesrG   r7   r,  )r2   verreadonly_attrsrB   r   attrsr   s          r   test_function_attributes%TestValueRef.test_function_attributes  s    $$Q'-0BY/KHkk.)MMD)Eyy--  722  +DNN+  d1g&8&8!9K=I  d1g&8&8!92> "r5   c                    U R                  5       nU R                  UR                  S5      R                  [        R
                  R                  5        UR                  S5      nU R                  UR                  [        R
                  R                  5        [        UR                  5      S   nU R                  UR                  [        R
                  R                  5        [        UR                  5      S   nU R                  UR                  [        R
                  R                  5        U R                  [        UR                  5      S   R                  [        R
                  R                  5        U R                  [        UR                  5      S   R                  [        R
                  R                  5        U R                  [         5      R                  S5      n[        [        UR                  5      S   R                  5      S   nU R                  [        UR                  5      S   R                  [        R
                  R"                  5        g )NrH   r  r   re   r   )rC   r7   rF   
value_kindr)   	ValueKindglobal_variabler  functionr  r.  basic_blockr$  instructionr%  constant_intasm_inlineasm
inline_asm)r2   rB   r   r   inst	iasm_func	iasm_insts          r   test_value_kindTestValueRef.test_value_kind  s   kkm008CC77	9&$..*A*ABT[[!!$))4>>+E+EFE&&'*$..*D*DEdmm,Q/::44	6dmm,Q/::33	5 KK.;;EB	i../2??@C	i001!4??22	4r5   c                 
   U R                  5       nU R                  UR                  S5      R                  5        SnUR                   H  nU R                  UR                  5        UR
                   Hw  nU R                  UR                  5        UR                   HI  nU R                  UR                  5        UR                   H  nUR                  (       d  M  US-  nM     MK     My     M     U R                  US5        g )NrH   r   re   )
rC   r  rF   is_constantr  r.  r  r$  r%  r7   )r2   rB   constant_operandsr   r   rR  ops          r   test_is_constantTestValueRef.test_is_constant  s    kkm//7CCDMMDOOD,,-  !2!23!..D$$T%5%56"mm>>>-2- , / % " 	*A.r5   c                 f   U R                  5       nUR                  S5      n[        [        UR                  5      S   R                  5      nU R                  US   R                  S5        [        US   R                  5      nU R                  US   R                  5        U R                  US   R                  5        U R                  US   R                  5       S5        U R                  [        5         US   R                  5         S S S 5        U R                  [        5      nUR                  S5      n[        [        UR                  5      S   R                  5      n[        US   R                  5      S   n[        US   R                  5      S   nU R                  UR                  5       S5        U R                  UR                  SS9S	5        UR                  S
S9n[        R!                  UR#                  SS5      SSS9nU R                  US	5        g ! , (       d  f       GN= f)Nr  r   re   r   rf   r  T)
signed_intr  FrH  little)signed)rC   r  r  r.  r$  r7   r&  r%  r  rX  r  get_constant_valuer   r  asm_sum3int
from_bytesto_bytes)	r2   rB   r   r7  r%  posint64negint64as_u64as_i64s	            r   test_constant_intTestValueRef.test_constant_int   s   kkm&T$++&q)667q%0a))*//0!001!7791=z*QK**, + kk(#&T$++&q)667a))*1-a))*1-446:444ErJ ,,,>8 <h'+   -$ +*s   8H!!
H0c                    U R                  [        5      nUR                  S5      n[        [        UR                  5      S   R
                  5      nU R                  [        U5      S5        U R                  US   R                  S5        [        US   R                  5      nU R                  US   R                  5        U R                  US   R                  5       S5        U R                  US   R                  5        U R                  US   R                  5       S5        U R                  [        5      nUR                  S5      n[        [        UR                  5      S   R
                  5      S   n[        UR                  5      nU R                  [         5         US   R                  5         S S S 5        U R                  US   R                  SS	9S5        g ! , (       d  f       N1= f)
Nr   r   rf   r   g        re   gQ	@T)round_fp)rC   rV  r  r  r.  r$  r7   r   r&  r%  r  rX  assertAlmostEqualra  asm_double_inaccurater   r  )r2   rB   r   r7  r%  rR  s         r   test_constant_fpTestValueRef.test_constant_fp  s   kk+,&T$++&q)667UQ'q&1a))*//0x{==?E//0x{==?Fkk/0&D%a(556q9&z*QK**, +x{==t=LaP +*s   $G##
G1c                    U R                  [        5      nUR                  S5      n[        [        UR                  5      S   R
                  5      S   n[        UR                  5      S   nU R                  UR                  5        [        (       a!  U R                  UR                  5       S5        g U R                  UR                  5       S5        g )Nrr  r   zptr nullz	i64* null)rC   asm_null_constantr  r  r.  r$  r%  r  rX  r   r7   ra  )r2   rB   r   rR  args        r   test_constant_as_string$TestValueRef.test_constant_as_string.  s    kk+,&D%a(556q94==!!$(""S335zBS335{Cr5   c                    U R                  [        5      nUR                  S5      n[        UR                  5      n[        US   R
                  5      nU R                  US   R                  5        U R                  US   R                  S5        [        US   R                  5      nU R                  [        U5      S5        U R                  US   R                  5        U R                  US   R                  5        U R                  US   US   5        U R                  US   US   5        U R                  US   R                  S5        U R                  [        5         US   R                    S S S 5        g ! , (       d  f       g = f)Nr   r   phirf   re   )rC   asm_phi_blocksr  r  r.  r$  r  r6  r7   r&  incoming_blocksr   r2  rO  r   r  )r2   rB   r   r.  r$  r{  s         r   test_incoming_phi_blocks%TestValueRef.test_incoming_phi_blocks:  s>   kk.)&dkk"F2J334Q667a//7|A>>?_-q1*334*334+VBZ8+VAY7 	LO22E:z*O++ +**s   $E==
FrY   N) rS   rT   rU   rV   re  rs  r  r  r  r  r  r  r  r	  r  r  rl  r  r   r'  r/  r3  r8  r<  rF  rU  r[  rj  rp  ru  r|  rX   rY   r5   r   r  r    s    <
.
9
?
EL(
0B)F
(
1)$(	17?4(/ %4Q(
D,r5   r  c                   V    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)TestTypeRefiP  c                    U R                  5       nUR                  S5      nU R                  [        UR                  5      S5        UR                  S5      nU R                  [        U5      S5        [        UR                  5      nU R                  [        U5      S5        U R                  [        US   5      S5        U R                  [        US   5      S	5        g )
NrH   r  r  z+%struct.glob_type = type { i64, [2 x i64] }rf   r   i64re   z	[2 x i64])	rC   rF   r7   r   r(  r  r  elementsr   )r2   rB   rH   glob_struct_typer  s        r   re  TestTypeRef.test_strR  s    kkm&&v.T334e<../AB-.F	H (112X*Xa[)51Xa[);7r5   c                    U R                  5       nUR                  S5      nU R                  UR                  R                  [
        R                  R                  5        U R                  UR                  R                  5        UR                  S5      nU R                  UR                  R                  [
        R                  R                  5        U R                  UR                  R                  5        UR                  nU R                  UR                  [
        R                  R                  5        U R                  UR                  5        UR                  u  pVU R                  UR                  [
        R                  R                  5        U R                  UR                  [
        R                  R                  5        U R                  UR                   5        UR#                  S5      nUR                  u  pU R                  U	R                  [
        R                  R$                  5        U R                  U	R&                  5        UR)                  S5      R                  n
U R                  U
R                  [
        R                  R                  5        UR)                  S5      R                  nU R                  UR                  [
        R                  R*                  5        g )NrH   r  struct.glob_type_vecr  )rC   rF   r7   r'  	type_kindr)   TypeKindpointerr  r  r(  struct	is_structr  integerarrayis_arrayr  vector	is_vectorr  rL  )r2   rB   rH   r  stypestype_astype_bglob_vec_struct_typer   vector_typefuncptrfunctypes               r   test_type_kindTestTypeRef.test_type_kind_  s   kkm&&v.,,dmm.C.CD		,,---m<))33T]]5J5JK((334--$--*>*>?( >>**DMM,A,AB**DMM,?,?@(()"223IJ-66..0D0DE--.""5)..**DMM,A,AB##E*<<++T]]-C-CDr5   c                    U R                  5       nUR                  S5      nUR                  u  p4U R                  UR                  S5        U R                  [        5         UR                    S S S 5        g ! , (       d  f       g = f)Nr  rf   )rC   r  r  r7   element_countr   r  )r2   rB   r  r   
array_types        r   test_element_countTestTypeRef.test_element_count|  se    kkm../AB(111115z*** +**s   !A77
Bc                    U R                  5       nUR                  S5      nUR                  S5      nUR                  u  pEUR                  u  pgU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        g )Nr  r  @      r   )rC   r  r  r7   
type_width)r2   rB   r  r  integer_typer  r   r  s           r   test_type_widthTestTypeRef.test_type_width  s    kkm../AB"223IJ#3#<#< -6600"5//8 	)44a8..2r5   c                    U R                  [        5      nUR                  S5      nUR                  nU R	                  UR
                  5        U R                  [        5      nUR                  S5      nUR                  nU R                  UR
                  5        U R	                  UR                  R                  5        U R                  [        5       nUR                  R
                    S S S 5        [        (       a&  U R                  S[        WR                  5      5        g U R                  S[        WR                  5      5        g ! , (       d  f       Ne= f)Nvarargr  zType ptr is not a functionz&Type i32 (i32, i32)* is not a function)rC   asm_vararg_declarer  r(  r  is_function_varargr  r  r'  r  r   r  r   r   r   r   )r2   rB   r   decltyper  s        r   test_vararg_function TestTypeRef.test_vararg_function  s    kk,-)))334kk/*&))445 			,,-z*fII(( + #"MM6F<L<L8MNMMBf../1 +*s   E
Ec                 8   U R                  5       n[        UR                  5      u  nU R                  UR                  R
                  [        R                  R                  5        U R                  UR                  R                  5        UR                  nU R                  UR
                  [        R                  R                  5        U R                  UR                  5        UR                  [        R                   5      nU R#                  U[        R$                  5        U R                  UR&                  [        R(                  " S5      [        R(                  " S5      45        U R                  UR*                  [        R(                  " S5      5        g Nr   )rC   r  r  r7   r'  r  r)   r  r  r  r#  r(  rL  r  as_irr	   global_contextr  r   r   r   return_type)r2   rB   r   r   tyirs        r   test_function_typeref_as_ir'TestTypeRef.test_function_typeref_as_ir  s   kkmCMM"**DMM,A,AB,,-##)?)?@(()zz"++,dBOO4RZZ^RZZ^$DE))2::b>:r5   c                    [         R                  " [         R                  " 5       S5      n[         R                  " 5       n[         R                  " X!S5      nU R                  [        U5      5      nUR                  S5      nUR                  nU R                  UR                  UR                  [         R                  5      R                  5        g )NrY   r   )r	   r   VoidTyper   r   rC   r   r  r(  r7   r  r  r  )r2   r   irmodr   rB   gvtys         r   test_void_typeref_as_ir#TestTypeRef.test_void_typeref_as_ir  s    r{{}b1		[[e,kk#e*%e$##))B$5$56BB	Dr5   c           	        ^ SSK Jn  [        R                  " 5       mSS1n0 nS nXCS'   S nXSS'   S	 nXcS
'   S nXsS'   U4S jnXS'   S n	XS'   S n
XS'   S nXS'   U R	                  UR                  5        Vs1 s H  oR                  iM     sn[        UR                  5       5      [        U5      -  5        UR                  5        GH  u  pUR                  U;   a  M  X=R                     " 5        H  nU R                  U< SU 35         [        R                  " TS9n[        R                  " UUSS9  [        U5      n[        R                  " U5      nUR                  S5      nUR                   nUR#                  [        R                  " 5       5      nU R	                  UU5        U R%                  UU5        S S S 5        M     GM     g s  snf ! , (       d  f       M  = f)Nr   )_TypeKindToIRTyperL  voidc               3   :   #    [         R                  " 5       v   g 7fr(   )r	   HalfTyperY   r5   r   
maker_half9TestTypeRef.test_global_typeref_as_ir.<locals>.maker_half  s     ++-   halfc               3   :   #    [         R                  " 5       v   g 7fr(   )r	   r   rY   r5   r   maker_float:TestTypeRef.test_global_typeref_as_ir.<locals>.maker_float  s     ,,. r  floatc               3   :   #    [         R                  " 5       v   g 7fr(   )r	   r   rY   r5   r   maker_double;TestTypeRef.test_global_typeref_as_ir.<locals>.maker_double  s     --/!r  doublec               3   <   #    [         R                  " S5      v   g 7fr  )r	   r   rY   r5   r   maker_integer<TestTypeRef.test_global_typeref_as_ir.<locals>.maker_integer  s     **R. s   r  c               3   8  >#    [         R                  " [         R                  " S5      5      v   TR                  S5      R	                  5       v   TR                  S5      n U R                  [         R                  " S5      5        U R	                  5       v   g 7f)NrH  myclassmyclass2)r	   PointerTyper   get_identified_type
as_pointerset_body)r  ctxs    r   maker_pointer<TestTypeRef.test_global_typeref_as_ir.<locals>.maker_pointer  sl     ..A//)))4??AA..z:Hbjjm,%%''s   BBr  c               3   f   #    [         R                  " [         R                  " S5      S5      v   g 7f)NrH  {   )r	   	ArrayTyper   rY   r5   r   maker_array:TestTypeRef.test_global_typeref_as_ir.<locals>.maker_array  s     ,,rzz!}c22s   /1r  c               3   d   #    [         R                  " [         R                  " 5       S5      v   g 7f)Nrf   )r	   
VectorTyper   rY   r5   r   maker_vector;TestTypeRef.test_global_typeref_as_ir.<locals>.maker_vector  s     --22s   .0r  c               3     #    [         R                  " [         R                  " 5       [         R                  " S5      /5      v   [         R                  " [         R                  " 5       [         R                  " S5      /SS9v   g 7f)Nr  Tpacked)r	   LiteralStructTyper   r   rY   r5   r   maker_struct;TestTypeRef.test_global_typeref_as_ir.<locals>.maker_struct  sT     &&

2'GHH&&

2'G.24 4s   BBr  z -> r  r  r   )llvmlite.binding.typerefr  r	   Contextr7   keysrG   r|   r*  subTestr   GlobalVariabler   r)   r?   rF   r(  r  r  )r2   r  skippedmakersr  r  r  r  r  r  r  r  xr  irtypetyr  r@   rB   r  r  rX  r  s                         @r   test_global_typeref_as_ir%TestTypeRef.test_global_typeref_as_ir  s   >jjl 

 	  $v	! &w	" (x	! *y	( *y	3 &w	3 (x	4
 (x 	*;*@*@*BC*BQ&&*BCV[[]+c'l:	< "3!8!8!:I~~(^^,.\\YMbT":;IIc2E%%eRd;e*C--c2C006B//D**RZZ\2C$$S"-))#v6 <; / ";	 D <;s   ;GB1G
G'c                 P   [         R                  " U5      nUR                  U5      nUR                  n[        R
                  " 5       nUR                  US9n[        R                  " US9n[        R                  " XUR                  S9n	[        R                  " XSS9n
[        R                  " U
R                  5       5      nUR                  XR                  5        UR                  5         [         R                  " [        U5      5      nU R!                  UR                  U	R                  5      R"                  SS9  UR%                  USS9  U R'                  [)        [+        UR,                  5      5      [)        [+        UR,                  5      5      S	-   S
S9  U R/                  UR                  U	R                  5      R"                  SS9  U R'                  UR                  U	R                  5      R                  UR                  U
R                  5      R                  SS9  g )N)ir_ctxr  r   wrapperzdeclfn must not have a body)r  Tr  re   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?   r  r(  r	   r  r  r   r   rG   r   r   callr   ret_voidr   r  r  r  r7   r   r  r  r  )r2   r@   target_symbolrB   cppfn	cppfntype
my_contextr  wrapper_moddeclfnwrapfnr   new_mods                r   !_check_typeref_as_ir_for_wrappers-TestTypeRef._check_typeref_as_ir_for_wrappers  s   !!#&  /++	 ZZ\
__J_/ ii
3[5::>[9=,,v88:;V[[)%%c+&67,,V[[9HH9 	 	; 	d+T'"3"345T#--01A5C 	 	E 	--fkk:II: 	 	<--fkk:LL --fkk:LLM 	 	Or5   c                 0    U R                  [        S5        g)zdExercise 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_class8TestTypeRef.test_typeref_as_ir_for_wrappers_of_cpp_class6  s     	..-	
r5   c                 0    U R                  [        S5        g)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_struct@TestTypeRef.test_typeref_as_ir_for_wrappers_of_cpp_vector_struct?  s     	.. 	
r5   rY   N)rS   rT   rU   rV   re  r  r  r  r  r  r  r  r  r  r  rX   rY   r5   r   r  r  P  s?    8E:+31.;"	DM7^!OF
	
r5   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)

TestTargetiK  c                    [         R                  R                  nU R                  [        5       nU" S5        S S S 5        U R                  S[        WR                  5      5        [         R                  " 5       nU" U5      nU R                  UR                  U5        UR                  5         g ! , (       d  f       N}= f)Nr  z(No available targets are compatible with)r)   rM   r   r   r   r   r   r   r>   r7   r<   rh  )r2   r  r   r<   rP   s        r   test_from_tripleTestTarget.test_from_tripleM  s    KK##|,hK -@",,'	)((*6/ -,s   	B00
B>c                     [         R                  R                  [         R                  " 5       5      nUR	                  SSSSS5        [         R
                  " 5       nUR	                  USSSS5        g )Nr   re   r!  )r)   rM   r   r>   rO   r5  )r2   rP   r6  s      r   test_create_target_machine%TestTarget.test_create_target_machineX  sY    (()@)@)BC$$RQ	9E$$&$$S"aIFr5   c                 0   [         R                  R                  [         R                  " 5       5      n[         R                  R	                  5       nU R                  UR                  [        5        U R                  UR                  UR                  5        g r(   )	r)   rM   r   r>   rN   r  rG   r   r7   r2   tus      r   rs  TestTarget.test_name`  s]    KK##D$;$;$=>KK++-affc*(r5   c                 0   [         R                  R                  [         R                  " 5       5      n[         R                  R	                  5       nU R                  UR                  [        5        U R                  UR                  UR                  5        g r(   )	r)   rM   r   r>   rN   r  descriptionr   r7   r  s      r   test_descriptionTestTarget.test_descriptionf  s]    KK##D$;$;$=>KK++-ammS16r5   c                     [         R                  R                  [         R                  " 5       5      n[	        U5      nU R                  UR                  U5        U R                  UR                  U5        g r(   )r)   rM   r   r>   r   r   rG   r  )r2   rP   r   s      r   re  TestTarget.test_strl  sN    (()@)@)BCKfkk1%f((!,r5   c                 ,   S[         R                  R                  SSSSSSS94S	[         R                  R                  SSSSSSS94S
[         R                  R                  SSSSSSS94S[         R                  R                  SSSSSSS94S[         R                  R                  SSSSSSS94S[         R                  R                  SSSSSSS94S[         R                  R                  SSSSSSS94S[         R                  R                  SSSSSSS94S[         R                  R                  S SS!S"SS#S94S$[         R                  R                  S%SSS&SS'S94/
nU H.  nUu  p4[         R                  " U5      nU R	                  XT5        M0     g )(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v6hlr\   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_partsr7   )r2   casescase
triple_str
triple_objr  s         r   test_get_parts_from_triple%TestTarget.test_get_parts_from_tripler  s'    \\  h(.5%.U ! DE \\  h(.5%.U ! DE %\\  i(1i%.U ! DE *\\  i(1i%.U ! DE *\\  eV(1g%.U ! DE &\\  fb(1g%* ! @A !\\  fb(/H%.W ! FG  \\  fb(1i%+& ! BC \\  gr(-%%.V ! EF \\  h(1f%.V ! EFK)
V D%)"J''
3CS-	 r5   rY   N)rS   rT   rU   rV   r  r  rs  r  re  rH  rX   rY   r5   r   r  r  K  s!    	G)7-1.r5   r  c                   ,    \ rS rSrS rS rS rS rSrg)TestTargetDatai  c                 .    [         R                  " S5      $ )Nz%e-m:e-i64:64-f80:128-n8:16:32:64-S128)r)   create_target_datar1   s    r   r  TestTargetData.target_data  s    &&'NOOr5   c                     U R                  5       nU R                  5       nU R                  UR                  UR                  5      S5        g )NrH  )r  rH   r7   r&  r'  r2   r  rH   s      r   test_get_abi_size TestTargetData.test_get_abi_size  s8    yy{3Q7r5   c                    U R                  5       nU R                  5       nU R                  UR                  UR                  5      S5        U R                  S5      nU R                  UR                  UR                  5      S5        g )Nr  r  r$  )r  rH   r7   r&  r(  rP  s      r   test_get_pointee_abi_size(TestTargetData.test_get_pointee_abi_size  sg    yy{)?)?@!Dyy')?)?@"Er5   c                 |   U R                  5       nU R                  S5      nU R                  [        5         UR	                  UR
                  S5        S S S 5        UR                  nU R                  UR	                  US5      S5        U R                  UR	                  US5      S5        g ! , (       d  f       N_= f)Nr  r   re   rH  )r  rH   r   r  get_element_offsetr'  r(  r7   )r2   r  rH   struct_types       r   test_get_struct_element_offset-TestTargetData.test_get_struct_element_offset  s    yy'z*!!$))Q/ + ,,..{A>B..{A>B +*s   B--
B;rY   N)	rS   rT   rU   rV   r  rQ  rT  rY  rX   rY   r5   r   rK  rK    s    P8
F	Cr5   rK  c                        \ rS rSrS rS rSrg)TestTargetMachinei  c                 n    U R                  SS9n[        R                  " 5       nUR                  U5        g NFrK   )rQ   r)   create_module_pass_manageradd_analysis_passes)r2   tmpms      r   test_add_analysis_passes*TestTargetMachine.test_add_analysis_passes  s1      U +,,.
r"r5   c                    U R                  SS9nUR                  nU R                  5       nUR                  S5      n[        R
                  S:  a  SOSnU R                  UR                  UR                  5      U5        g )NFrK   rH   r#  r  rH  )	rQ   r  rC   rF   r   r%  r7   r&  r'  )r2   ra  r  rB   r*  r-  s         r   test_target_data_from_tm*TestTargetMachine.test_target_data_from_tm  sh      U +^^kkm((0KK'1qq5|Dr5   rY   N)rS   rT   rU   rV   rc  rf  rX   rY   r5   r   r\  r\    s    #
Er5   r\  c                   V    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)TestPassManagerBuilderi  c                 ,    [         R                  " 5       $ r(   )r)   PassManagerBuilderr1   s    r   pmbTestPassManagerBuilder.pmb  s    &&((r5   c                 J    [         R                  " 5       nSUl        SUl        g )Nrf   r  )r)   create_pass_manager_builderinlining_threshold	opt_levelr2   rl  s     r   test_old_api#TestPassManagerBuilder.test_old_api  s    ..0!"r5   c                 d    U R                  5       nUR                  5         UR                  5         g r(   )rl  rh  rr  s     r   rl  !TestPassManagerBuilder.test_close  s    hhj				r5   c                     U R                  5       nU R                  UR                  [        5        [	        S5       H%  nX!l        U R                  UR                  U5        M'     g r  )rl  r  rq  rc  rJ  r7   r2   rl  r  s      r   test_opt_level%TestPassManagerBuilder.test_opt_level  sH    hhjcmmS1qAMS]]A. r5   c                     U R                  5       nU R                  UR                  [        5        [	        S5       H%  nX!l        U R                  UR                  U5        M'     g r  )rl  r  
size_levelrc  rJ  r7   rx  s      r   test_size_level&TestPassManagerBuilder.test_size_level  H    hhjcnnc2qANS^^Q/ r5   c                     U R                  5       nU R                  [        5         UR                    S S S 5        S H	  nX!l        M     g ! , (       d  f       N= f)N)   P   i^  )rl  r   NotImplementedErrorrp  rx  s      r   test_inlining_threshold.TestPassManagerBuilder.test_inlining_threshold  sC    hhj23"" 4A%&"  43s   A
Ac                     U R                  5       nU R                  UR                  [        5        S H%  nX!l        U R	                  UR                  U5        M'     g N)TF)rl  r  disable_unroll_loopsr+  r7   r2   rl  r   s      r   test_disable_unroll_loops0TestPassManagerBuilder.test_disable_unroll_loops  sI    hhjc66=A'($S55q9 r5   c                     U R                  5       nU R                  UR                  [        5        S H%  nX!l        U R	                  UR                  U5        M'     g r  )rl  r  loop_vectorizer+  r7   r  s      r   test_loop_vectorize*TestPassManagerBuilder.test_loop_vectorize	  I    hhjc00$7A!"S//3 r5   c                     U R                  5       nU R                  UR                  [        5        S H%  nX!l        U R	                  UR                  U5        M'     g r  )rl  r  slp_vectorizer+  r7   r  s      r   test_slp_vectorize)TestPassManagerBuilder.test_slp_vectorize		  sI    hhjc//6A !S..2 r5   c                     U R                  5       n[        R                  " 5       nUR                  U5        UR	                  5         UR	                  5         g r(   )rl  r)   r_  populaterh  )r2   rl  rb  s      r   !test_populate_module_pass_manager8TestPassManagerBuilder.test_populate_module_pass_manager	  s9    hhj,,.R		

r5   c                     U R                  5       nU R                  5       n[        R                  " U5      nUR	                  U5        UR                  5         UR                  5         g r(   )rC   rl  r)   create_function_pass_managerr  rh  )r2   rB   rl  rb  s       r   #test_populate_function_pass_manager:TestPassManagerBuilder.test_populate_function_pass_manager	  sF    kkmhhj..s3R		

r5   rY   N)rS   rT   rU   rV   rl  rs  rl  ry  r}  r  r  r  r  r  r  rX   rY   r5   r   ri  ri    s9    )
/0':43r5   ri  c                        \ rS rSrS rS rSrg)PassManagerTestMixini 	  c                 L    [         R                  " 5       nSUl        SUl        U$ )Nrf   i,  )r)   ro  rq  rp  rr  s     r   rl  PassManagerTestMixin.pmb"	  s$    ..0!$
r5   c                 d    U R                  5       nUR                  5         UR                  5         g r(   rb  rh  r2   rb  s     r   rl  PassManagerTestMixin.test_close(	  s    WWY



r5   rY   N)rS   rT   rU   rV   rl  rl  rX   rY   r5   r   r  r   	  s    r5   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestModulePassManageri.	  c                 ,    [         R                  " 5       $ r(   r)   r_  r1   s    r   rb  TestModulePassManager.pm0	      ..00r5   c                 "   U R                  5       nU R                  5       R                  U5        U R                  5       n[	        U5      nUR                  U5        [	        U5      nUR                  5       n[        U5       H  u  pgUR                  5       R                  S5      (       d  M+  SS1nU H
  n	X;   d  M
    O   [        S5      eX1-  R                  5       n
U R                  SU5        U R                  X5          g    [        S5      e)Nzret i32%.3%.4zexpected tokens not foundzexpected IR not found)rb  rl  r  rC   r   runr~   	enumerater   r   r   popr   assertNotIn)r2   rb  rB   orig_asmopt_asmopt_asm_splitidxltoksr  
othertokens              r   test_runTestModulePassManager.test_run3	  s    WWY
Bkkms8
sc(  **,.FCwwy##I..u~Av  ''BCC"Sj--/
eX.  5 / 677r5   c                 >   U R                  5       nUR                  S5        U R                  5       R                  U5        U R	                  [
        5      nUR                  U5      u  p4U R                  U5        U R                  SU5        U R                  SU5        g )NF   Passedinlineme	rb  add_function_inlining_passrl  r  rC   asm_inlineasm2run_with_remarksr  r   r2   rb  rB   statusremarkss        r   'test_run_with_remarks_successful_inline=TestModulePassManager.test_run_with_remarks_successful_inlineQ	  sx    WWY
%%b)
Bkk.)//4h(j'*r5   c                 b   U R                  5       nUR                  S5        U R                  5       R                  U5        U R	                  [
        5      nUR                  U5      u  p4U R                  U5        U R                  SU5        U R                  SU5        U R                  SU5        g )Nr   Missedr  znoinline function attribute)	rb  r  rl  r  rC   asm_inlineasm3r  r  r   r  s        r   #test_run_with_remarks_failed_inline9TestModulePassManager.test_run_with_remarks_failed_inline\	  s    WWY
%%a(
Bkk.)//4 	h(j'*3W=r5   c                    U R                  5       nUR                  S5        U R                  5       R                  U5        U R	                  [
        5      nUR                  USS9u  p4U R                  U5        U R                  SU5        g )Nr  nothingremarks_filterr   )	rb  r  rl  r  rC   r  r  r  r7   r  s        r   'test_run_with_remarks_inline_filter_out=TestModulePassManager.test_run_with_remarks_inline_filter_outi	  sq    WWY
%%b)
Bkk.)//I/NW%r5   c                 <   U R                  5       nUR                  S5        U R                  5       R                  U5        U R	                  [
        5      nUR                  USS9u  p4U R                  U5        U R                  SU5        U R                  SU5        g )Nr  zinlin.*r  r  r  r  r  s        r   &test_run_with_remarks_inline_filter_in<TestModulePassManager.test_run_with_remarks_inline_filter_inr	  s}    WWY
%%b)
Bkk.)//I/Nh(j'*r5   rY   N)rS   rT   rU   rV   rb  r  r  r  r  r  rX   rY   r5   r   r  r  .	  s     18<	+>&+r5   r  c                   <    \ rS rSrS
S jrS rS rS rS rS r	S	r
g)TestFunctionPassManageri}	  Nc                 `    U=(       d    U R                  5       n[        R                  " U5      $ r(   )rC   r)   r  rk  s     r   rb  TestFunctionPassManager.pm	  s#    "T[[]0055r5   c                 d    U R                  5       nUR                  5         UR                  5         g r(   )rb  r*   finalizer  s     r   r@  %TestFunctionPassManager.test_initfini	  s    WWY

r5   c                    U R                  5       nUR                  S5      nU R                  U5      nU R                  5       R	                  U5        UR                  5         [        U5      nUR                  5         UR                  U5        UR                  5         [        U5      nU R                  SU5        U R                  SU5        g )Nr  r  )rC   r  rb  rl  r  rh  r   r*   r  r  r   r  )r2   rB   r   rb  r  r  s         r   r   TestFunctionPassManager.test_run	  s    kkme$WWS\
B		r7

r

b'eX&(r5   c                    U R                  [        5      nUR                  S5      nU R                  U5      nUR	                  5         U R                  5       R                  U5        UR                  5         UR                  5         UR                  U5      u  pEUR                  5         U R                  U5        U R                  SU5        U R                  SU5        g )Nlicmr  rC   licm_asmr  rb  add_licm_passrl  r  rh  r*   r  r  r  r   r2   rB   r   rb  okr  s         r   test_run_with_remarks-TestFunctionPassManager.test_run_with_remarks	  s    kk(#f%WWS\

B		
++B/
h(fg&r5   c                    U R                  [        5      nUR                  S5      nU R                  U5      nUR	                  5         U R                  5       R                  U5        UR                  5         UR                  5         UR                  USS9u  pEUR                  5         U R                  U5        U R                  SU5        g )Nr  r  r  r   )rC   r  r  rb  r  rl  r  rh  r*   r  r  r  r7   r  s         r    test_run_with_remarks_filter_out8TestFunctionPassManager.test_run_with_remarks_filter_out	  s    kk(#f%WWS\

B		
++By+I
W%r5   c                    U R                  [        5      nUR                  S5      nU R                  U5      nUR	                  5         U R                  5       R                  U5        UR                  5         UR                  5         UR                  USS9u  pEUR                  5         U R                  U5        U R                  SU5        U R                  SU5        g )Nr  r  r  r  r  s         r   test_run_with_remarks_filter_in7TestFunctionPassManager.test_run_with_remarks_filter_in	  s    kk(#f%WWS\

B		
++Bv+F
h(fg&r5   rY   r(   )rS   rT   rU   rV   rb  r@  r  r  r  r  rX   rY   r5   r   r  r  }	  s     6
)'&'r5   r  c                       \ rS rSrS rS r\R                  " \R                  " 5       R                  S5      S5      S 5       rS rSrg	)

TestPassesi	  c                 ,    [         R                  " 5       $ r(   r  r1   s    r   rb  TestPasses.pm	  r  r5   c                    [         R                  S   nU R                  5       nUR                  S5        UR	                  5         UR                  5         UR                  5         UR                  S5        UR                  5         UR                  5         UR                  5         UR                  5         UR                  5         UR                  5         UR                  5         UR                  5         UR!                  5         UR#                  5         UR%                  5         UR'                  5         UR)                  5         UR+                  5         UR-                  5         UR/                  5         UR1                  5         UR3                  5         UR5                  5         UR7                  5         UR9                  5         US:  a  UR;                  5         UR=                  5         UR?                  S5        URA                  5         URC                  5         URE                  5         URG                  5         URI                  5         URK                  5         URM                  5         URO                  5         URQ                  5         URS                  5         URU                  5         URW                  5         URY                  5         UR[                  5         UR]                  5         US:  a  UR_                  5         URa                  5         URc                  5         URe                  5         URg                  5         URi                  5         URk                  5         URm                  5         URo                  5         URq                  5         URs                  5         URu                  5         URw                  5         URy                  5         UR{                  5         UR}                  5         UR                  5         UR                  5         UR                  5         UR                  5         UR                  5         UR                  5         UR                  5         g )Nr   r      rG     )Fr)   rI  rb  add_target_library_infoadd_constant_merge_passadd_dead_arg_elimination_passadd_function_attrs_passr  add_global_dce_passadd_global_optimizer_passadd_ipsccp_passadd_dead_code_elimination_passadd_cfg_simplification_passadd_gvn_passadd_instruction_combining_passr  add_sccp_passadd_sroa_pass"add_type_based_alias_analysis_passadd_basic_alias_analysis_passadd_loop_rotate_passadd_region_info_passadd_scalar_evolution_aa_pass)add_aggressive_dead_code_elimination_passadd_aa_eval_passadd_always_inliner_passadd_break_critical_edges_passadd_dead_store_elimination_pass*add_reverse_post_order_function_attrs_pass)add_aggressive_instruction_combining_passadd_internalize_passadd_jump_threading_passadd_lcssa_passadd_loop_deletion_passadd_loop_extractor_passadd_single_loop_extractor_passadd_loop_strength_reduce_passadd_loop_simplification_passadd_loop_unroll_passadd_loop_unroll_and_jam_passadd_lower_atomic_passadd_lower_invoke_passadd_lower_switch_passadd_memcpy_optimization_passadd_merge_functions_passadd_merge_returns_passadd_partial_inlining_pass!add_prune_exception_handling_pass add_reassociate_expressions_pass"add_demote_register_to_memory_passadd_sink_passadd_strip_symbols_passadd_strip_dead_debug_info_passadd_strip_dead_prototypes_passadd_strip_debug_declare_passadd_strip_nondebug_symbols_passadd_tail_call_elimination_passadd_basic_aa_passadd_dependence_analysis_passadd_dot_call_graph_passadd_dot_cfg_printer_passadd_dot_dom_printer_passadd_dot_postdom_printer_passadd_globals_mod_ref_aa_passadd_iv_users_passadd_lazy_value_info_passadd_lint_passadd_module_debug_info_passadd_refprune_passadd_instruction_namer_pass)r2   llvm_verrb  s      r   test_populateTestPasses.test_populate	  sS   ))!,WWY
""2&
""$
((*
""$
%%c*
 
$$&

))+
&&(

))+



--/
((*
!
!
'')
446

""$
((*
**,
557b=88:
!
""1%

!!#
""$
))+
((*
'')
!
'')
  "
  "
  "
'')
##%
!!#
$$&b=002
++-
--/

!!#
))+
))+
'')
**,
))+

'')
""$
##%
##%
'')
&&(

##%

%%'

%%'r5   r_  r`  c                     S nU" SS9nU R                  S[        U5      5        U" SS9nU R                  S[        U5      5        U R                  S[        U5      5        g)zzTest a specific situation that demonstrate TLI is affecting
optimization. See https://github.com/numba/numba/issues/8898.
c                 ~   [         R                  " [        5      n[         R                  R	                  UR
                  5      nUR                  5       n[         R                  " 5       nUR                  U5        U (       a  UR                  UR
                  5        UR                  5         UR                  U5        U$ r(   )r)   r?   asm_tli_exp2rM   r   r<   rO   ModulePassManagerr`  r  r  r  )use_tlirB   rP   ra  rb  s        r   r  9TestPasses.test_target_library_info_behavior.<locals>.run
  s    %%l3C[[,,SZZ8F--/B'')B""2&**3::6--/FF3KJr5   T)r=  zcall float @llvm.exp2.f32Fzcall float @ldexpfN)r   r   r  )r2   r  rB   s      r   !test_target_library_info_behavior,TestPasses.test_target_library_info_behavior
  sZ    

	 $13s8< % 4c#h?*CH5r5   c                    [         R                  [        R                  " 5       S9n[        R                  " U5      n[        R
                  " 5       nUR                  5         UR                  U5        UR                  S5      n[        UR                  5      n[        UR                  5      nU R                  US   R                  S5        U R                  US   R                  S5        g )Nr;   r   r   r  re   i2)r  r=   r)   r>   r?   r<  r5  r  r  nextr.  r  r$  r7   rG   )r2   r@   rB   rb  r   first_blockr$  s          r   test_instruction_namer_pass&TestPasses.test_instruction_namer_pass1
  s    ##4+B+B+D#E!!#& ##%
%%'
s &4;;'K445a--s3a--t4r5   rY   N)rS   rT   rU   rV   rb  r7  r   r   r   machiner   r?  rE  rX   rY   r5   r   r  r  	  sI    1L(\ ))+66u=zJ6 K625r5   r  c                   p    \ rS rSrS r\R                  " \R                  " 5       S;   S5      S 5       r	Sr
g)	TestDylibiB
  c                     U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       g = f)Nzzzzasdkf;jasd;l)r   r   r)   load_library_permanentlyr1   s    r   test_bad_libraryTestDylib.test_bad_libraryD
  s+    |,))*;< -,,s	   6
A)Linuxztest only works on Linuxc                 F    [        S5      n[        R                  " U5        g )Nr   )r   r)   rK  )r2   rl   s     r   	test_libmTestDylib.test_libmH
  s     C %%d+r5   rY   N)rS   rT   rU   rV   rL  r   r   r   systemrP  rX   rY   r5   r   rI  rI  B
  s7    = *i735,5,r5   rI  c                   &    \ rS rSrS rS rS rSrg)TestAnalysisiO
  c                    [         R                  " 5       n[         R                  " [         R                  " S5      [         R                  " S5      [         R                  " S5      /5      n[         R                  " XS5      n[         R
                  " UR                  5       5      nUR                  u  pVUR                  XV5      nUR                  U5        U$ )Nr   r   )
r	   r   r   r   r   r   r   r   r   r"   )r2   r   r   r   r   r  yzs           r   build_ir_moduleTestAnalysis.build_ir_moduleP
  s    IIK__RZZ^bjjnbjjn-MN[[&\\"//12wwFF1L
q	r5   c                     U R                  5       nUR                  S5      n[        R                  " U5      n[        R                  " USS9nSnU R	                  XS5        U R                  XT5        g )Nr   F	show_instz%.5 = add i32 %.1, %.2)rX  
get_globalr)   get_function_cfgr   r  )r2   rB   r   dot_showing_instdot_without_instrR  s         r   test_get_function_cfg_on_ir(TestAnalysis.test_get_function_cfg_on_irZ
  sa    ""$nnU#00500F'd-0r5   c                 n   U R                  5       R                  S5      n[        R                  " USS9n[        R                  " USS9nSnU R	                  XB5        U R	                  XC5        SnU R	                  XR5        U R	                  XS5        SnU R	                  Xb5        U R                  Xc5        g )Nr  Tr[  FdigraphzCFG for 'sum' functionz%.3 = add i32 %.1, %.2)rC   r  r)   r^  r   r  )r2   r  r_  r`  prefixfnamerR  s          r   test_function_cfg_on_llvm_value,TestAnalysis.test_function_cfg_on_llvm_valuec
  s    ++-,,U300DI00EJf/f/(e.e.'d-0r5   rY   N)rS   rT   rU   rV   rX  ra  rg  rX   rY   r5   r   rT  rT  O
  s    11r5   rT  c                   *    \ rS rSr\S 5       rS rSrg)TestTypeParsingiu
  c              #      #    [         R                  " 5       nUv   [        U5      n[        R                  " U5        g 7fr(   )r	   r   r   r)   r?   )r2   rB   r@   s      r   check_parsingTestTypeParsing.check_parsingv
  s.     iik 	#hC s   <>c                 r   U R                  5        n[        R                  " [        R                  " S5      /5      n[        R                  " XS5      n[        R
                  " US/5      Ul        S S S 5        U R                  5        n[        R                  " [        R                  " S5      /SS9n[        R                  " XS5      n[        R
                  " US/5      Ul        S S S 5        U R                  5        n[        R
                  R                  [        R                  " S5      " S5      [        R                  " S5      " S5      /SS9n[        R                  " XR                  S5      nXCl        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   re   Tr  rf   )	rl  r	   r  r   r  r   initializerliteral_structr'  )r2   rB   typr  consts        r   test_literal_struct#TestTypeParsing.test_literal_struct
  sB   !S&&

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

2'7.24C""3U3B[[qc2BN " !SKK..

2q0A02

2q0A0C6: / <E ""3

E:B"N "! "! "! "!s&   A F	AF A<F(
F
F%(
F6rY   N)rS   rT   rU   rV   r   rl  rs  rX   rY   r5   r   rj  rj  u
  s    ! !#r5   rj  c                       \ rS rSrS rSrg)TestGlobalConstructorsi
  c                    U R                  [        5      nU R                  U5      nUR                  5         UR	                  5         UR                  S5      n[        R                  " [        R                  5      n[        R                  " X45      nU R                  UR                  R                  S5        UR                  S5      n[        R                  " [        R                  5      " U5      nU R                  U" 5       S5        UR                  5         U R                  UR                  R                  S5        g )Nr  rU  r   r  r  )rC   asm_global_ctorsrL   r  run_static_constructorsget_global_value_addressri  POINTERr   castr7   contentsr  r  r   run_static_destructors)r2   rB   r  ptr_addrptr_tr  foo_addrr   s           r   r  .TestGlobalConstructors.test_global_ctors_dtors
  s     kk*+XXc]

""$ ..s3v~~.kk(*++R0**51v~~.x8#
!!# 	++R0r5   rY   N)rS   rT   rU   rV   r  rX   rY   r5   r   rv  rv  
  s    1r5   rv  c                   `    \ rS rSrSS jrS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)TestGlobalVariablesi
  c                 $   [         R                  " 5       n[         R                  " S5      n[         R                  " X4S5      nXl        [        U5      nU(       a  U R                  SU5        OU R                  SU5        U R                  U5        g )Nr   r   undef)	r	   r   r   r  r  r   r   r  rC   )r2   r  	has_undefrB   rq  r  r@   s          r   check_global_variable_linkage1TestGlobalVariables.check_global_variable_linkage
  si     iikjjns/
#hMM'3'Wc*Cr5   c                 &    U R                  S5        g )Nr  r  r1   s    r   test_internal_linkage)TestGlobalVariables.test_internal_linkage
      **:6r5   c                 &    U R                  S5        g )Ncommonr  r1   s    r   test_common_linkage'TestGlobalVariables.test_common_linkage
  s    **84r5   c                 $    U R                  SSS9  g )Nr  Fr  r  r1   s    r   test_external_linkage)TestGlobalVariables.test_external_linkage
  s    **:*Gr5   c                 &    U R                  S5        g )Navailable_externallyr  r1   s    r   !test_available_externally_linkage5TestGlobalVariables.test_available_externally_linkage
  s    **+ABr5   c                 &    U R                  S5        g )Nprivater  r1   s    r   test_private_linkage(TestGlobalVariables.test_private_linkage
  s    **95r5   c                 &    U R                  S5        g )Nlinkoncer  r1   s    r   test_linkonce_linkage)TestGlobalVariables.test_linkonce_linkage
  r  r5   c                 &    U R                  S5        g )Nweakr  r1   s    r   test_weak_linkage%TestGlobalVariables.test_weak_linkage
  s    **62r5   c                 &    U R                  S5        g )N	appendingr  r1   s    r   test_appending_linkage*TestGlobalVariables.test_appending_linkage
  s    **;7r5   c                 $    U R                  SSS9  g )Nextern_weakFr  r  r1   s    r   test_extern_weak_linkage,TestGlobalVariables.test_extern_weak_linkage
  s    **=E*Jr5   c                 &    U R                  S5        g )Nlinkonce_odrr  r1   s    r   test_linkonce_odr_linkage-TestGlobalVariables.test_linkonce_odr_linkage
  s    **>:r5   c                 &    U R                  S5        g )Nweak_odrr  r1   s    r   test_weak_odr_linkage)TestGlobalVariables.test_weak_odr_linkage
  r  r5   rY   N)T)rS   rT   rU   rV   r  r  r  r  r  r  r  r  r  r  r  r  rX   rY   r5   r   r  r  
  sA    (75HC6738K;7r5   r  zonly on x86c                       \ rS rSrS rSrg)TestInlineAsmi
  c                     [         R                  " 5         U R                  [        S9nU R	                  SS9nUR                  U5      nU R                  SU5        g )N)r@   FrK   nop)r)   initialize_native_asmparserrC   rP  rQ   r   r   )r2   r   ra  r@   s       r   test_inlineasmTestInlineAsm.test_inlineasm
  sO    ((*KKMK*  U +q!eS!r5   rY   N)rS   rT   rU   rV   r  rX   rY   r5   r   r  r  
  s    "r5   r  c                   0    \ rS rSrSrS rS rS rS rSr	g)	TestObjectFilei
  a,  
        ;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                    U R                  SS9nU R                  5       nUR                  U5      n[        R                  R                  U5      nSnSnUR                  5        H  nUR                  5       (       d  M  SnU R                  UR                  5       5        U R                  UR                  5       S:  5        U R                  [        UR                  5       5      S:  5        U R                  UR                  5       5        U R                  XgR                  5       :  5        UR                  5       n  O   U R                  U5        g )NFrK   rx  Tr   )rQ   rC   rV  r)   ObjectFileRef	from_datasectionsis_textr-  rG   r  sizer   dataaddress)r2   rQ   rB   r  objhas_textlast_addressr   s           r   test_object_fileTestObjectFile.test_object_file  s    ,,,7kkm ,,S1  **73Ayy{{$$QVVX.1-AFFH 12$$QYY[1yy{ :; yy{   	!r5   c                    U R                  SS9nU R                  5       nUR                  U5      n[        R                  R                  U5      n[        R                  " U R                  U R                  5      U5      nUR                  U5        [        [        [        [        5      " UR                  S5      5      nU R                  U" SS5      S5        g )NFrK   	sum_twicerf   r  rU  )rQ   rC   rV  r)   r  r  r]  mod_asmr  r   r   r  r7   )r2   rQ   rB   r  r  rL   r  s          r   r  #TestObjectFile.test_add_object_file  s    ,,,7kkm ,,S1  **73((T\\)B)79 	C eUE2$$[13	 	1a"-r5   c                    U R                  SS9nU R                  5       nUR                  U5      n[        5       u  pE  [        R
                  " US5      nUR                  U5        UR                  5         UR                  5         [        R                  " U R                  U R                  5      U5      nUR                  U5        [        R                  " U5        [        [        [        [        5      " UR!                  S5      5      nU R#                  U" SS5      S5        g ! WR                  5         f = f! [        R                  " U5        f = f)NFrK   r  r  rf   r  rU  )rQ   rC   rV  r   rr   r  r  flushrh  r)   r]  r  r  r  r   r   r  r7   )	r2   rQ   rB   r  r  r  r  rL   r  s	            r   r  3TestObjectFile.test_add_object_file_from_filesystem'  s   ,,,7kkm ,,S1&y		!IIi. 		,,T[[-F-;=C 	*IIi eUE2$$[13	 	1a"- 	 IIi s   8D& 7AD; &D88D; ;Ec                    [         R                  [        5      n[        R                  R                  U5      nUR                  5        Hu  nUR                  5       (       d  M  U R                  [        UR                  5       5      S5        U R                  UR                  5       R                  5       [        5        Mw     g )N   )r:  fromhexissue_632_elfr)   r  r  r  r  r7   r   r  hexissue_632_text)r2   elfr  r   s       r   test_get_section_content'TestObjectFile.test_get_section_contentA  sy     mmM*  **3/Ayy{{  QVVX3  @  r5   rY   N)
rS   rT   rU   rV   r  r  r  r  r  rX   rY   r5   r   r  r  
  s    G"(. .4Ar5   r  c                        \ rS rSrS rS rSrg)TestTimePassesiL  c                    [         R                  " 5       n[         R                  " 5       nSUl        UR	                  U5         [         R
                  " S5        UR                  U R                  5       5        UR                  U R                  5       5        UR                  U R                  5       5        [         R                  " 5       n[         R
                  " S5        U R                  U[        5        U R                  UR                  S5      S5        g ! [         R                  " 5       n[         R
                  " S5        f = f)Nr  TFzPass execution timing reportre   )r)   r_  ro  rq  r  set_time_passesr  rC   report_and_reset_timingsr  r   r7   count)r2   mprl  reports       r   test_reportingTestTimePasses.test_reportingM  s    ,,...0R	(  &FF4;;=!FF4;;=!FF4;;=!224F  'fc*&DEqI	 224F  's   A3D -Ec                 L    U R                  [        R                  " 5       5        g r(   )r  r)   r  r1   s    r   test_empty_report TestTimePasses.test_empty_report`  s    6689r5   rY   N)rS   rT   rU   rV   r  r  rX   rY   r5   r   r  r  L  s    J&:r5   r  c                       \ rS rSrS rSrg)TestLLVMLockCallbacksie  c                   ^ / mU4S jnU4S jn[         R                  R                  X5        U R                  T5        [         R                  " 5         U R                  ST5        U R                  ST5        [         R                  R                  X5        U R                  [        5         [         R                  R                  X5        S S S 5        g ! , (       d  f       g = f)Nc                  (   > T R                  S5        g )Nacqr2  eventss   r   r  6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.acqi      MM% r5   c                  (   > T R                  S5        g )Nrelr2  r  s   r   r  6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.rell  r  r5   r  r  )	r)   r   register_lock_callbackr  r_  r   unregister_lock_callbackr   r  )r2   r  r  r  s      @r   test_lock_callbacks)TestLLVMLockCallbacks.test_lock_callbacksf  s    	!	! 	''1 	 '')eV$eV$ 	))#3 z*HH--c7 +**s   - C
C$rY   N)rS   rT   rU   rV   r  rX   rY   r5   r   r  r  e  s    8r5   r  c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)TestPipelineTuningOptionsi  c                 ,    [         R                  " 5       $ r(   )r)   create_pipeline_tuning_optionsr1   s    r   ptoTestPipelineTuningOptions.pto      2244r5   c                 D    U R                  5       nUR                  5         g r(   )r  rh  r2   r  s     r   rl  $TestPipelineTuningOptions.test_close  s    hhj		r5   c                     U R                  5       nU R                  UR                  [        5        [	        S5       H%  nX!l        U R                  UR                  U5        M'     g r  )r  r  speed_levelrc  rJ  r7   r2   r  r  s      r   test_speed_level*TestPipelineTuningOptions.test_speed_level  sH    hhjcoos3qAOS__a0 r5   c                     U R                  5       nU R                  UR                  [        5        [	        S5       H%  nX!l        U R                  UR                  U5        M'     g Nr  )r  r  r|  rc  rJ  r7   r  s      r   r}  )TestPipelineTuningOptions.test_size_level  r  r5   c                     U R                  5       nU R                  UR                  [        5        S H%  nX!l        U R	                  UR                  U5        M'     g r  )r  r  loop_interleavingr+  r7   r2   r  r   s      r   test_loop_interleaving0TestPipelineTuningOptions.test_loop_interleaving  I    hhjc33T:A$%!S22A6 r5   c                     U R                  5       nU R                  UR                  [        5        S H%  nX!l        U R	                  UR                  U5        M'     g r  )r  r  loop_vectorizationr+  r7   r  s      r   test_loop_vectorization1TestPipelineTuningOptions.test_loop_vectorization  sI    hhjc44d;A%&"S33Q7 r5   c                     U R                  5       nU R                  UR                  [        5        S H%  nX!l        U R	                  UR                  U5        M'     g r  )r  r  slp_vectorizationr+  r7   r  s      r   test_slp_vectorization0TestPipelineTuningOptions.test_slp_vectorization  r  r5   c                     U R                  5       nU R                  UR                  [        5        S H%  nX!l        U R	                  UR                  U5        M'     g r  )r  r  loop_unrollingr+  r7   r  s      r   test_loop_unrolling-TestPipelineTuningOptions.test_loop_unrolling  r  r5   c                     U R                  5       nU R                  [        5         SUl        S S S 5        U R                  [        5         SUl        S S S 5        g ! , (       d  f       N4= f! , (       d  f       g = f)Nr  rx  )r  r   r  r  r  s     r   test_speed_level_constraints6TestPipelineTuningOptions.test_speed_level_constraints  sT    hhjz*CO +z* CO +* +***s   AA-
A*-
A;c                 v   U R                  5       nU R                  [        5         SUl        S S S 5        U R                  [        5         SUl        S S S 5        U R                  [        5         SUl        SUl        S S S 5        g ! , (       d  f       N`= f! , (       d  f       NL= f! , (       d  f       g = f)Nr  rx  rf   )r  r   r  r|  r  r  s     r   test_size_level_constraints5TestPipelineTuningOptions.test_size_level_constraints  s|    hhjz*CN +z* CO +z*COCN +*	 +*****s#   BB0B*
B
B'*
B8rY   N)rS   rT   rU   rV   r  rl  r  r}  r  r  r  r  r  r"  rX   rY   r5   r   r  r    s4    5107874!r5   r  c                       \ rS rSrSS jrSrg)NewPassManagerMixini  c                 |    U R                  SS9n[        R                  " X5      n[        R                  " X45      nU$ r^  )rQ   r)   r  create_pass_builder)r2   r  r|  ra  r  pbs         r   r(  NewPassManagerMixin.pb  s:      U +11+J%%b.	r5   rY   N)r   r   )rS   rT   rU   rV   r(  rX   rY   r5   r   r%  r%    s    r5   r%  c                   ,    \ rS rSrS rS rS rS rSrg)TestPassBuilderi  c                 D    U R                  5       nUR                  5         g r(   )r(  rh  )r2   r(  s     r   rl  TestPassBuilder.test_close  s    WWY

r5   c                     U R                  SS9n[        R                  " SS5      nSUl        SUl        SUl        SUl        SUl        [        R                  " X5      nUR                  5         g )NFrK   r  r   rf   T)
rQ   r)   r  rp  r  r  r  r  r'  rh  )r2   ra  r  r(  s       r   test_ptoTestPassBuilder.test_pto  sh      U +11!Q7!" $!% $"%%b.

r5   c                     U R                  5       nUR                  5       nUR                  U R                  5       U5        UR	                  5         g r(   )r(  getModulePassManagerr  rC   rh  )r2   r(  mpms      r   test_get_module_pass_manager,TestPassBuilder.test_get_module_pass_manager  s8    WWY%%'r"

r5   c                     U R                  5       nUR                  5       nUR                  U R                  5       R	                  S5      U5        UR                  5         g r  )r(  getFunctionPassManagerr  rC   r  rh  )r2   r(  fpms      r   test_get_function_pass_manager.TestPassBuilder.test_get_function_pass_manager  sC    WWY'')**5126

r5   rY   N)	rS   rT   rU   rV   rl  r/  r4  r9  rX   rY   r5   r   r+  r+    s    	r5   r+  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestNewModulePassManageri  c                 ,    [         R                  " 5       $ r(   )r)   create_new_module_pass_managerr1   s    r   rb  TestNewModulePassManager.pm  r   r5   c                     U R                  5       n[        U5      nU R                  USS9nUR                  5       nUR	                  X$5        [        U5      nX64$ )Nr   r  r|  )rC   r   r(  r2  r  )r2   levelrB   r  r(  r3  optimized_asms          r   run_o_n TestNewModulePassManager.run_o_n  sT    kkms8WW1W5%%'C&&r5   c                 D    U R                  5       nUR                  5         g r(   r  r2   r3  s     r   rl  #TestNewModulePassManager.test_close      ggi		r5   c                 r    U R                  S5      u  pU R                  SU5        U R                  SU5        g Nr  r  rD  r   r  r2   r  rC  s      r   test_run_o3$TestNewModulePassManager.test_run_o3  0    "&,,q/eX&.r5   c                 r    U R                  S5      u  pU R                  SU5        U R                  SU5        g Nr   r  rD  r   rM  s      r   test_run_o0$TestNewModulePassManager.test_run_o0  .    "&,,q/eX&e]+r5   c                 $   U R                  5       nU R                  5       nUR                  5         U R                  [        5      n[        U5      nUR                  X15        [        U5      nU R                  SU5        U R                  SU5        g )Nr  )	r(  rb  add_instruction_combine_passrC   asm_sum4r   r  r   r  )r2   r(  r3  rB   r  rC  s         r   test_instcombine)TestNewModulePassManager.test_instcombine  sn    WWYggi((*kk(#s8CeX&.r5   c                    U R                  SSS9n[        [        R                  SS5      5      n[        R
                  " U5      nUR                  5       nUR                  X15        [        U5      nU R                  SU5        U R                  SU5        [        [        5      nUR                  5       n[        R
                  " U5      nUR                  X15        [        U5      nU R                  SU5        U R                  SU5        g )Nr  r   rA  optnone r   alloca)
r(  r   asm_alloca_optnonereplacer)   r?   r2  r  r   r  )r2   r(  r  rB   r3  rC  orig_asm_optnoneoptimized_asm_optnones           r   test_optnone%TestNewModulePassManager.test_optnone  s    WWqW1)11*bAB!!(+%%'Ch)=1 12%%'!!"23 #Ch 01h 56r5   c                 $   U R                  5       nUR                  5         UR                  5         UR                  5         UR	                  5         UR                  5         UR                  5         UR                  5         UR                  5         g r(   )	rb  add_verifierr  add_simplify_cfg_passr  r  rX  r  r4  rG  s     r   test_add_passes(TestNewModulePassManager.test_add_passes/  sm    ggi!!#  "  "((*##%r5   rY   N)rS   rT   rU   rV   rb  rD  rl  rN  rT  rZ  rc  rh  rX   rY   r5   r   r<  r<    s*    5'/
,
	/7&	 r5   r<  c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)TestNewFunctionPassManageri;  c                 ,    [         R                  " 5       $ r(   )r)    create_new_function_pass_managerr1   s    r   rb  TestNewFunctionPassManager.pm<  s    4466r5   c                 D    U R                  5       nUR                  5         g r(   r  r2   r8  s     r   rl  %TestNewFunctionPassManager.test_close?  rI  r5   c                     U R                  5       nUR                  S5      n[        U5      nU R                  USS9nUR	                  5       nUR                  X55        [        U5      nXG4$ )Nr  r   rA  )rC   r  r   r(  r7  r  )r2   rB  rB   funr  r(  r8  rC  s           r   rD  "TestNewFunctionPassManager.run_o_nC  sd    kkmu%s8WW1W5'')C&&r5   c                 r    U R                  S5      u  pU R                  SU5        U R                  SU5        g rK  rL  rM  s      r   rN  &TestNewFunctionPassManager.test_run_o3M  rP  r5   c                 r    U R                  S5      u  pU R                  SU5        U R                  SU5        g rR  rS  rM  s      r   rT  &TestNewFunctionPassManager.test_run_o0R  rV  r5   c                 T   U R                  SSS9n[        [        R                  SS5      5      n[        R
                  " U5      R                  S5      nUR                  5       nUR                  X15        [        U5      nU R                  SU5        U R                  SU5        [        [        5      n[        R
                  " U5      R                  S5      nUR                  5       nUR                  X15        [        U5      nU R                  SU5        U R                  SU5        g )Nr  r   rA  r]  r   r   r^  )r(  r   r_  r`  r)   r?   r  r7  r  r   r  )r2   r(  r  rs  r8  rC  ra  rb  s           r   rc  'TestNewFunctionPassManager.test_optnoneW  s    WWqW1)11*bAB!!(+88?'')Ch)=1 12!!"23@@G'') #Ch 01h 56r5   c                 B   U R                  5       nU R                  5       nU R                  [        5      R	                  S5      nUR                  5         [        U5      nUR                  X15        [        U5      nU R                  SU5        U R                  SU5        g )Nr  r  )
r(  rb  rC   rY  r  rX  r   r  r   r  )r2   r(  r8  rs  r  rC  s         r   rZ  +TestNewFunctionPassManager.test_instcombinej  sy    WWYggikk(#007((*s8CeX&.r5   c                     U R                  S5      nUR                  5       n[        R                  " [        5      R
                   H  nUR                  X15        M     g r
  )r(  r7  r)   r?   asm_declarationr  r  )r2   r(  r8  rs  s       r   test_declarations,TestNewFunctionPassManager.test_declarationsv  sE    WWQZ'')&&7AACGGC Br5   c                    U R                  5       nUR                  5         UR                  5         UR                  5         UR	                  5         UR                  5         UR                  5         UR                  5         g r(   )rb  r  rg  r  r  rX  r  r4  rp  s     r   rh  *TestNewFunctionPassManager.test_add_passes|  sa    ggi!!#  "  "((*##%r5   rY   N)rS   rT   rU   rV   rb  rl  rD  rN  rT  rc  rZ  r  rh  rX   rY   r5   r   rk  rk  ;  s/    7'/
,
7&	/ r5   rk  __main__)hri  r  r   r   r   ctypes.utilr   r-   r   rr   r   rz   ru   r   r   
contextlibr   tempfiler   llvmliter	   r
   r)   llvmlite.bindingr   llvmlite.testsr   r   rG  rK  r   rW   r  rb  rY  r  r  r  r   r`  r   r  r  r  ro  rV  rP  r  r  r  rx  r  r   rs  r   r   r   rA  r_  r~  r  r  r;  rz  r  r
  r&   r[   r   r   rb  objectr  rL  r[  r   r   rb  r  r  r  rK  r\  ri  r  r  r  r  rI  rT  rj  rv  r  r  r  r  r  r  r%  r+  r<  rk  rS   mainrY   r5   r   <module>r     s     , , $ 	  	  	  
  %   $   # - !!!/2	-&
	
 !!#v-#++O=NON    ,BH&P :<	      "0- ( E  (+Z1h5x 5D'Jx 'JTF+8 F+RI'x I'X@>H @>Fv-6 v-r4 44?, ? 
X%%'2259:F}!8 }! G}!@x,8 x,v	x
( x
vX. X.vCX C>E E"GX GT6 L+H&: L+^D'h(< D'N{5/ {5|
, 
,#18 #1L!#h !#H1Y 1447( 47n 
X%%'2259=I"H " J"UAX UAp:X :28H 8:J JZ& h 3 <B x)< B JI +> I X zMMO r5   