JIT vs Imaging mode

Created Diff never expires
67 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
161 lines
91 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
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
; └└
; └└
}
}