JIT vs Imaging mode

Created Diff never expires
67 removals
161 lines
91 additions
185 lines
; @ array.jl:629 within `zeros`
; @ array.jl:629 within `zeros`
define nonnull {}* @julia_zeros_131(i64 signext %"dims[1]::Int64") #0 {
define nonnull {}* @julia_zeros_151(i64 signext %"dims[1]::Int64") #0 {
top:
top:
%dims = alloca [1 x i64], align 8
%dims = alloca [1 x i64], align 8
%newstruct = alloca [1 x i64], align 8
%newstruct = alloca [1 x i64], align 8
%pgcstack = call {}*** @julia.get_pgcstack()
%pgcstack = call {}*** @julia.get_pgcstack()
%0 = bitcast {}*** %pgcstack to {}**
%0 = bitcast {}*** %pgcstack to {}**
%current_task = getelementptr inbounds {}*, {}** %0, i64 -14
%current_task = getelementptr inbounds {}*, {}** %0, i64 -14
%1 = bitcast {}** %current_task to i64*
%1 = bitcast {}** %current_task to i64*
%world_age = getelementptr inbounds i64, i64* %1, i64 15
%world_age = getelementptr inbounds i64, i64* %1, i64 15
%2 = getelementptr inbounds [1 x i64], [1 x i64]* %newstruct, i32 0, i32 0
%2 = getelementptr inbounds [1 x i64], [1 x i64]* %newstruct, i32 0, i32 0
store i64 %"dims[1]::Int64", i64* %2, align 8
store i64 %"dims[1]::Int64", i64* %2, align 8
%memcpy_refined_src = getelementptr inbounds [1 x i64], [1 x i64]* %newstruct, i32 0, i32 0
%memcpy_refined_src = getelementptr inbounds [1 x i64], [1 x i64]* %newstruct, i32 0, i32 0
%memcpy_refined_dst = getelementptr inbounds [1 x i64], [1 x i64]* %dims, i32 0, i32 0
%memcpy_refined_dst = getelementptr inbounds [1 x i64], [1 x i64]* %dims, i32 0, i32 0
%3 = load i64, i64* %memcpy_refined_src, align 8
%3 = load i64, i64* %memcpy_refined_src, align 8
store i64 %3, i64* %memcpy_refined_dst, align 8
store i64 %3, i64* %memcpy_refined_dst, align 8
; @ array.jl:629 within `zeros` @ array.jl:631 @ array.jl:634
; @ array.jl:629 within `zeros` @ array.jl:631 @ array.jl:634
; ┌ @ boot.jl:484 within `Array`
; ┌ @ boot.jl:484 within `Array`
%"*Core.getfield#1" = load {}*, {}** @"*Core.getfield#1", align 8
%4 = bitcast {}* %"*Core.getfield#1" to {}**
%5 = getelementptr inbounds {}*, {}** %4, i64 0
%"dims.<unknown field>_ptr" = getelementptr inbounds [1 x i64], [1 x i64]* %dims, i32 0, i32 0
%"dims.<unknown field>_ptr" = getelementptr inbounds [1 x i64], [1 x i64]* %dims, i32 0, i32 0
; │ @ boot.jl:484 within `Array` @ boot.jl:475
; │ @ boot.jl:484 within `Array` @ boot.jl:475
%"dims.<unknown field>_ptr.unbox" = load i64, i64* %"dims.<unknown field>_ptr", align 8
%"dims.<unknown field>_ptr.unbox" = load i64, i64* %"dims.<unknown field>_ptr", align 8
%4 = call nonnull {}* inttoptr (i64 140036589843104 to {}* ({}*, i64)*)({}* inttoptr (i64 140036228716336 to {}*), i64 %"dims.<unknown field>_ptr.unbox")
%6 = call nonnull {}* inttoptr (i64 139718400307872 to {}* ({}*, i64)*)({}* inttoptr (i64 139718039246640 to {}*), i64 %"dims.<unknown field>_ptr.unbox")
; └
; └
; @ array.jl:629 within `zeros` @ array.jl:631 @ array.jl:635
; @ array.jl:629 within `zeros` @ array.jl:631 @ array.jl:635
; ┌ @ array.jl:392 within `fill!`
; ┌ @ array.jl:392 within `fill!`
; │┌ @ abstractarray.jl:318 within `eachindex`
; │┌ @ abstractarray.jl:318 within `eachindex`
; ││┌ @ abstractarray.jl:134 within `axes1`
; ││┌ @ abstractarray.jl:134 within `axes1`
; │││┌ @ abstractarray.jl:98 within `axes`
; │││┌ @ abstractarray.jl:98 within `axes`
; ││││┌ @ array.jl:191 within `size`
; ││││┌ @ array.jl:191 within `size`
%5 = bitcast {}* %4 to { i8*, i64, i16, i16, i32 }*
%"*Core.arraysize#2" = load {}*, {}** @"*Core.arraysize#2", align 8
%.length_ptr = getelementptr inbounds { i8*, i64, i16, i16, i32 }, { i8*, i64, i16, i16, i32 }* %5, i32 0, i32 1
%7 = bitcast {}* %"*Core.arraysize#2" to {}**
%8 = getelementptr inbounds {}*, {}** %7, i64 0
%9 = bitcast {}* %6 to { i8*, i64, i16, i16, i32 }*
%.length_ptr = getelementptr inbounds { i8*, i64, i16, i16, i32 }, { i8*, i64, i16, i16, i32 }* %9, i32 0, i32 1
%.length = load i64, i64* %.length_ptr, align 8
%.length = load i64, i64* %.length_ptr, align 8
; │└└└└
; │└└└└
; │┌ @ range.jl:897 within `iterate`
; │┌ @ range.jl:897 within `iterate`
; ││┌ @ range.jl:674 within `isempty`
; ││┌ @ range.jl:674 within `isempty`
; │││┌ @ operators.jl:378 within `>`
; │││┌ @ operators.jl:378 within `>`
; ││││┌ @ int.jl:83 within `<`
; ││││┌ @ int.jl:83 within `<`
%6 = icmp slt i64 %.length, 1
%"*Core.Intrinsics.slt_int#3" = load {}*, {}** @"*Core.Intrinsics.slt_int#3", align 8
%10 = bitcast {}* %"*Core.Intrinsics.slt_int#3" to {}**
%11 = getelementptr inbounds {}*, {}** %10, i64 0
%12 = icmp slt i64 %.length, 1
; ││└└└
; ││└└└
%7 = zext i1 %6 to i8
%13 = zext i1 %12 to i8
%8 = trunc i8 %7 to i1
%14 = trunc i8 %13 to i1
%9 = xor i1 %8, true
%15 = xor i1 %14, true
br i1 %9, label %L7, label %L6
br i1 %15, label %L7, label %L6


L6: ; preds = %top
L6: ; preds = %top
br label %L8
br label %L8


L7: ; preds = %top
L7: ; preds = %top
br label %L8
br label %L8


L8: ; preds = %L7, %L6
L8: ; preds = %L7, %L6
%value_phi = phi i8 [ 1, %L6 ], [ 0, %L7 ]
%value_phi = phi i8 [ 1, %L6 ], [ 0, %L7 ]
%value_phi1 = phi i64 [ 1, %L7 ], [ undef, %L6 ]
%value_phi1 = phi i64 [ 1, %L7 ], [ undef, %L6 ]
%value_phi2 = phi i64 [ 1, %L7 ], [ undef, %L6 ]
%value_phi2 = phi i64 [ 1, %L7 ], [ undef, %L6 ]
; │└
; │└
%10 = trunc i8 %value_phi to i1
%"*Core.Intrinsics.not_int#4" = load {}*, {}** @"*Core.Intrinsics.not_int#4", align 8
%11 = xor i1 %10, true
%16 = bitcast {}* %"*Core.Intrinsics.not_int#4" to {}**
%12 = zext i1 %11 to i8
%17 = getelementptr inbounds {}*, {}** %16, i64 0
%13 = trunc i8 %12 to i1
%18 = trunc i8 %value_phi to i1
%14 = xor i1 %13, true
%19 = xor i1 %18, true
br i1 %14, label %L27, label %L8.L13_crit_edge
%20 = zext i1 %19 to i8
%21 = trunc i8 %20 to i1
%22 = xor i1 %21, true
br i1 %22, label %L27, label %L8.L13_crit_edge


L8.L13_crit_edge: ; preds = %L8
L8.L13_crit_edge: ; preds = %L8
; │┌ @ range.jl:897 within `iterate`
; │┌ @ range.jl:897 within `iterate`
br label %L13
br label %L13


L13: ; preds = %L26, %L8.L13_crit_edge
L13: ; preds = %L26, %L8.L13_crit_edge
%value_phi3 = phi i64 [ %value_phi1, %L8.L13_crit_edge ], [ %value_phi8, %L26 ]
%value_phi3 = phi i64 [ %value_phi1, %L8.L13_crit_edge ], [ %value_phi8, %L26 ]
%value_phi4 = phi i64 [ %value_phi2, %L8.L13_crit_edge ], [ %value_phi9, %L26 ]
%value_phi4 = phi i64 [ %value_phi2, %L8.L13_crit_edge ], [ %value_phi9, %L26 ]
; │└
; │└
; │ @ array.jl:393 within `fill!`
; │ @ array.jl:393 within `fill!`
; │┌ @ array.jl:1019 within `setindex!`
; │┌ @ array.jl:1019 within `setindex!`
%15 = sub i64 %value_phi3, 1
%"*Core.arrayset#5" = load {}*, {}** @"*Core.arrayset#5", align 8
%16 = mul i64 %15, 1
%23 = bitcast {}* %"*Core.arrayset#5" to {}**
%17 = add i64 0, %16
%24 = getelementptr inbounds {}*, {}** %23, i64 0
%18 = bitcast {}* %4 to { i8*, i64, i16, i16, i32 }*
%25 = sub i64 %value_phi3, 1
%.length_ptr5 = getelementptr inbounds { i8*, i64, i16, i16, i32 }, { i8*, i64, i16, i16, i32 }* %18, i32 0, i32 1
%26 = mul i64 %25, 1
%27 = add i64 0, %26
%28 = bitcast {}* %6 to { i8*, i64, i16, i16, i32 }*
%.length_ptr5 = getelementptr inbounds { i8*, i64, i16, i16, i32 }, { i8*, i64, i16, i16, i32 }* %28, i32 0, i32 1
%.length6 = load i64, i64* %.length_ptr5, align 8
%.length6 = load i64, i64* %.length_ptr5, align 8
%inbounds = icmp ult i64 %17, %.length6
%inbounds = icmp ult i64 %27, %.length6
br i1 %inbounds, label %idxend, label %oob
br i1 %inbounds, label %idxend, label %oob


L18: ; preds = %idxend
L18: ; preds = %idxend
; │└
; │└
; │ @ array.jl:394 within `fill!`
; │ @ array.jl:394 within `fill!`
; │┌ @ range.jl:901 within `iterate`
; │┌ @ range.jl:901 within `iterate`
br label %L21
br label %L21


L19: ; preds = %idxend
L19: ; preds = %idxend
; ││ @ range.jl:902 within `iterate`
; ││ @ range.jl:902 within `iterate`
; ││┌ @ int.jl:87 within `+`
; ││┌ @ int.jl:87 within `+`
%19 = add i64 %value_phi4, 1
%"*Core.Intrinsics.add_int#7" = load {}*, {}** @"*Core.Intrinsics.add_int#7", align 8
%29 = bitcast {}* %"*Core.Intrinsics.add_int#7" to {}**
%30 = getelementptr inbounds {}*, {}** %29, i64 0
%31 = add i64 %value_phi4, 1
; ││└
; ││└
; ││ @ range.jl:901 within `iterate`
; ││ @ range.jl:901 within `iterate`
br label %L21
br label %L21


L21: ; preds = %L19, %L18
L21: ; preds = %L19, %L18
%value_phi8 = phi i64 [ %19, %L19 ], [ undef, %L18 ]
%value_phi8 = phi i64 [ %31, %L19 ], [ undef, %L18 ]
%value_phi9 = phi i64 [ %19, %L19 ], [ undef, %L18 ]
%value_phi9 = phi i64 [ %31, %L19 ], [ undef, %L18 ]
%value_phi10 = phi i8 [ 1, %L18 ], [ 0, %L19 ]
%value_phi10 = phi i8 [ 1, %L18 ], [ 0, %L19 ]
; │└
; │└
%20 = trunc i8 %value_phi10 to i1
%"*Core.Intrinsics.not_int#411" = load {}*, {}** @"*Core.Intrinsics.not_int#4", align 8
%21 = xor i1 %20, true
%32 = bitcast {}* %"*Core.Intrinsics.not_int#411" to {}**
%22 = zext i1 %21 to i8
%33 = getelementptr inbounds {}*, {}** %32, i64 0
%23 = trunc i8 %22 to i1
%34 = trunc i8 %value_phi10 to i1
%24 = xor i1 %23, true
%35 = xor i1 %34, true
br i1 %24, label %L27, label %L26
%36 = zext i1 %35 to i8
%37 = trunc i8 %36 to i1
%38 = xor i1 %37, true
br i1 %38, label %L27, label %L26


L26: ; preds = %L21
L26: ; preds = %L21
; │ @ array.jl:392 within `fill!`
; │ @ array.jl:392 within `fill!`
; │┌ @ range.jl:897 within `iterate`
; │┌ @ range.jl:897 within `iterate`
br label %L13
br label %L13


L27: ; preds = %L21, %L8
L27: ; preds = %L21, %L8
; │└
; │└
; │ @ array.jl:395 within `fill!`
; │ @ array.jl:395 within `fill!`
br label %L28
br label %L28


L28: ; preds = %L27
L28: ; preds = %L27
; └
; └
; @ array.jl:629 within `zeros` @ array.jl:631 @ array.jl:636
; @ array.jl:629 within `zeros` @ array.jl:631 @ array.jl:636
br label %L29
br label %L29


L29: ; preds = %L28
L29: ; preds = %L28
; @ array.jl:629 within `zeros` @ array.jl:631
; @ array.jl:629 within `zeros` @ array.jl:631
br label %L30
br label %L30


L30: ; preds = %L29
L30: ; preds = %L29
; @ array.jl:629 within `zeros`
; @ array.jl:629 within `zeros`
ret {}* %4
ret {}* %6


oob: ; preds = %L13
oob: ; preds = %L13
; @ array.jl:629 within `zeros` @ array.jl:631 @ array.jl:635
; @ array.jl:629 within `zeros` @ array.jl:631 @ array.jl:635
; ┌ @ array.jl:393 within `fill!`
; ┌ @ array.jl:393 within `fill!`
; │┌ @ array.jl:1019 within `setindex!`
; │┌ @ array.jl:1019 within `setindex!`
%errorbox = alloca i64, i64 1, align 8
%errorbox = alloca i64, i64 1, align 8
%25 = getelementptr inbounds i64, i64* %errorbox, i64 0
%39 = getelementptr inbounds i64, i64* %errorbox, i64 0
store i64 %value_phi3, i64* %25, align 8
store i64 %value_phi3, i64* %39, align 8
call void @ijl_bounds_error_ints({}* %4, i64* %errorbox, i64 1)
call void @ijl_bounds_error_ints({}* %6, i64* %errorbox, i64 1)
unreachable
unreachable


idxend: ; preds = %L13
idxend: ; preds = %L13
%26 = bitcast {}* %4 to { i8*, i64, i16, i16, i32 }*
%40 = bitcast {}* %6 to { i8*, i64, i16, i16, i32 }*
%.data_ptr = getelementptr inbounds { i8*, i64, i16, i16, i32 }, { i8*, i64, i16, i16, i32 }* %26, i32 0, i32 0
%.data_ptr = getelementptr inbounds { i8*, i64, i16, i16, i32 }, { i8*, i64, i16, i16, i32 }* %40, i32 0, i32 0
%.data = load i8*, i8** %.data_ptr, align 8
%.data = load i8*, i8** %.data_ptr, align 8
%27 = bitcast i8* %.data to double*
%41 = bitcast i8* %.data to double*
%memcpy_refined_dst7 = getelementptr inbounds double, double* %27, i64 %17
%memcpy_refined_dst7 = getelementptr inbounds double, double* %41, i64 %27
%28 = load double, double* @_j_const1, align 8
%42 = load double, double* @_j_const1, align 8
store double %28, double* %memcpy_refined_dst7, align 8
store double %42, double* %memcpy_refined_dst7, align 8
; │└
; │└
; │ @ array.jl:394 within `fill!`
; │ @ array.jl:394 within `fill!`
; │┌ @ range.jl:901 within `iterate`
; │┌ @ range.jl:901 within `iterate`
; ││┌ @ promotion.jl:521 within `==`
; ││┌ @ promotion.jl:521 within `==`
%29 = icmp eq i64 %value_phi4, %.length
%"*Core.===#6" = load {}*, {}** @"*Core.===#6", align 8
%30 = zext i1 %29 to i8
%43 = bitcast {}* %"*Core.===#6" to {}**
%44 = getelementptr inbounds {}*, {}** %43, i64 0
%45 = icmp eq i64 %value_phi4, %.length
%46 = zext i1 %45 to i8
; ││└
; ││└
%31 = trunc i8 %30 to i1
%47 = trunc i8 %46 to i1
%32 = xor i1 %31, true
%48 = xor i1 %47, true
br i1 %32, label %L19, label %L18
br i1 %48, label %L19, label %L18
; └└
; └└
}
}