Skip to content

Instantly share code, notes, and snippets.

@Keno
Created August 10, 2012 13:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Keno/3314286 to your computer and use it in GitHub Desktop.
Save Keno/3314286 to your computer and use it in GitHub Desktop.
julia> Base.disassemble(sum,typeof((m,)))
define %jl_value_t* @sum705(%jl_value_t*, %jl_value_t**, i32) {
top:
%3 = alloca [2 x %jl_value_t*], align 8, !dbg !6228
%4 = alloca %jl_gcframe_t, align 8, !dbg !6228
%.sub = getelementptr inbounds [2 x %jl_value_t*]* %3, i64 0, i64 0
%5 = bitcast [2 x %jl_value_t*]* %3 to %jl_value_t***, !dbg !6228
%6 = getelementptr %jl_gcframe_t* %4, i64 0, i32 0, !dbg !6228
store %jl_value_t*** %5, %jl_value_t**** %6, align 8, !dbg !6228
%7 = getelementptr %jl_gcframe_t* %4, i64 0, i32 1, !dbg !6228
store i64 2, i64* %7, align 8, !dbg !6228
%8 = getelementptr %jl_gcframe_t* %4, i64 0, i32 2, !dbg !6228
store i32 0, i32* %8, align 8, !dbg !6228
%9 = load %jl_gcframe_t** @jl_pgcstack, align 8, !dbg !6228
%10 = getelementptr %jl_gcframe_t* %4, i64 0, i32 3, !dbg !6228
store %jl_gcframe_t* %9, %jl_gcframe_t** %10, align 8, !dbg !6228
store %jl_gcframe_t* %4, %jl_gcframe_t** @jl_pgcstack, align 8, !dbg !6228
store %jl_value_t* null, %jl_value_t** %.sub, align 8, !dbg !6228
%11 = getelementptr [2 x %jl_value_t*]* %3, i64 0, i64 1, !dbg !6228
store %jl_value_t* null, %jl_value_t** %11, align 8, !dbg !6228
%12 = load %jl_value_t** %1, align 8, !dbg !6235
%13 = getelementptr inbounds %jl_value_t* %12, i64 0, i32 0, !dbg !6235
%14 = getelementptr %jl_value_t** %13, i64 2, !dbg !6235
%15 = load %jl_value_t** %14, align 8, !dbg !6235
%16 = ptrtoint %jl_value_t* %15 to i64, !dbg !6235
%17 = icmp eq %jl_value_t* %15, null, !dbg !6236
br i1 %17, label %if, label %pass, !dbg !6236
if: ; preds = %top
%18 = call %jl_value_t* @alloc_2w(), !dbg !6237
%19 = getelementptr inbounds %jl_value_t* %18, i64 0, i32 0, !dbg !6237
store %jl_value_t* inttoptr (i64 4312119520 to %jl_value_t*), %jl_value_t** %19, align 8, !dbg !6237
%20 = getelementptr %jl_value_t** %19, i64 1, !dbg !6237
%21 = bitcast %jl_value_t** %20 to double*, !dbg !6237
store double 0.000000e+00, double* %21, align 8, !dbg !6237
%22 = load %jl_gcframe_t** %10, align 8, !dbg !6237
store %jl_gcframe_t* %22, %jl_gcframe_t** @jl_pgcstack, align 8, !dbg !6237
ret %jl_value_t* %18, !dbg !6237
pass: ; preds = %top
%23 = getelementptr %jl_value_t** %13, i64 1, !dbg !6238
%24 = load %jl_value_t** %23, align 8, !dbg !6238
%25 = bitcast %jl_value_t* %24 to double*, !dbg !6238
%26 = load double* %25, align 8, !dbg !6238
br label %L1, !dbg !6239
L1: ; preds = %L7, %pass
%c.0 = phi double [ 0.000000e+00, %pass ], [ %storemerge, %L7 ]
%s.0 = phi double [ %26, %pass ], [ %40, %L7 ]
%"#134.0" = phi i64 [ 2, %pass ], [ %52, %L7 ]
%27 = icmp sgt i64 %"#134.0", %16, !dbg !6239
br i1 %27, label %L10, label %if2, !dbg !6239
if2: ; preds = %L1
%28 = load %jl_value_t** %1, align 8, !dbg !6240
%29 = getelementptr inbounds %jl_value_t* %28, i64 0, i32 0, !dbg !6240
%30 = getelementptr %jl_value_t** %29, i64 2, !dbg !6240
%31 = load %jl_value_t** %30, align 8, !dbg !6240
%32 = ptrtoint %jl_value_t* %31 to i64, !dbg !6240
%33 = add i64 %"#134.0", -1, !dbg !6240
%34 = icmp ult i64 %33, %32, !dbg !6240
br i1 %34, label %pass4, label %fail3, !dbg !6240
fail3: ; preds = %if2
call void @jl_error(i8* getelementptr inbounds ([37 x i8]* @_j_str608, i64 0, i64 0)), !dbg !6240
unreachable
pass4: ; preds = %if2
%35 = getelementptr %jl_value_t** %29, i64 1, !dbg !6240
%36 = load %jl_value_t** %35, align 8, !dbg !6240
%37 = bitcast %jl_value_t* %36 to double*, !dbg !6240
%38 = getelementptr double* %37, i64 %33, !dbg !6240
%39 = load double* %38, align 8, !dbg !6240
%40 = fadd double %s.0, %39, !dbg !6241
%41 = bitcast double %39 to i64, !dbg !6242
%42 = and i64 %41, 9223372036854775807, !dbg !6242
%43 = bitcast double %s.0 to i64, !dbg !6242
%44 = and i64 %43, 9223372036854775807, !dbg !6242
%45 = bitcast i64 %42 to double, !dbg !6242
%46 = bitcast i64 %44 to double, !dbg !6242
%47 = fcmp ugt double %45, %46, !dbg !6242
br i1 %47, label %L6, label %if5, !dbg !6242
if5: ; preds = %pass4
%48 = fsub double %s.0, %40, !dbg !6243
%49 = fadd double %48, %39, !dbg !6243
br label %L7, !dbg !6243
L6: ; preds = %pass4
%50 = fsub double %39, %40, !dbg !6244
%51 = fadd double %50, %s.0, !dbg !6244
br label %L7, !dbg !6244
L7: ; preds = %L6, %if5
%.pn = phi double [ %51, %L6 ], [ %49, %if5 ]
%storemerge = fadd double %c.0, %.pn, !dbg !6244
%52 = add i64 %"#134.0", 1, !dbg !6245
br label %L1, !dbg !6245
L10: ; preds = %L1
%53 = fadd double %s.0, %c.0, !dbg !6246
%54 = call %jl_value_t* @alloc_2w(), !dbg !6246
%55 = getelementptr inbounds %jl_value_t* %54, i64 0, i32 0, !dbg !6246
store %jl_value_t* inttoptr (i64 4312119520 to %jl_value_t*), %jl_value_t** %55, align 8, !dbg !6246
%56 = getelementptr %jl_value_t** %55, i64 1, !dbg !6246
%57 = bitcast %jl_value_t** %56 to double*, !dbg !6246
store double %53, double* %57, align 8, !dbg !6246
%58 = load %jl_gcframe_t** %10, align 8, !dbg !6246
store %jl_gcframe_t* %58, %jl_gcframe_t** @jl_pgcstack, align 8, !dbg !6246
ret %jl_value_t* %54, !dbg !6246
}
julia> Base.disassemble(sum,typeof((mc,)))
define %jl_value_t* @sum704(%jl_value_t*, %jl_value_t**, i32) {
top:
%3 = alloca [3 x %jl_value_t*], align 8, !dbg !6219
%4 = alloca %jl_gcframe_t, align 8, !dbg !6219
%.sub = getelementptr inbounds [3 x %jl_value_t*]* %3, i64 0, i64 0
%5 = bitcast [3 x %jl_value_t*]* %3 to %jl_value_t***, !dbg !6219
%6 = getelementptr %jl_gcframe_t* %4, i64 0, i32 0, !dbg !6219
store %jl_value_t*** %5, %jl_value_t**** %6, align 8, !dbg !6219
%7 = getelementptr %jl_gcframe_t* %4, i64 0, i32 1, !dbg !6219
store i64 3, i64* %7, align 8, !dbg !6219
%8 = getelementptr %jl_gcframe_t* %4, i64 0, i32 2, !dbg !6219
store i32 0, i32* %8, align 8, !dbg !6219
%9 = load %jl_gcframe_t** @jl_pgcstack, align 8, !dbg !6219
%10 = getelementptr %jl_gcframe_t* %4, i64 0, i32 3, !dbg !6219
store %jl_gcframe_t* %9, %jl_gcframe_t** %10, align 8, !dbg !6219
store %jl_gcframe_t* %4, %jl_gcframe_t** @jl_pgcstack, align 8, !dbg !6219
store %jl_value_t* null, %jl_value_t** %.sub, align 8, !dbg !6219
%11 = getelementptr [3 x %jl_value_t*]* %3, i64 0, i64 1, !dbg !6219
store %jl_value_t* null, %jl_value_t** %11, align 8, !dbg !6219
%12 = getelementptr [3 x %jl_value_t*]* %3, i64 0, i64 2, !dbg !6219
store %jl_value_t* null, %jl_value_t** %12, align 8, !dbg !6219
%13 = load %jl_value_t** %1, align 8, !dbg !6226
%14 = getelementptr inbounds %jl_value_t* %13, i64 0, i32 0, !dbg !6226
%15 = getelementptr %jl_value_t** %14, i64 2, !dbg !6226
%16 = load %jl_value_t** %15, align 8, !dbg !6226
%17 = icmp eq %jl_value_t* %16, null, !dbg !6226
br i1 %17, label %if, label %pass, !dbg !6226
if: ; preds = %top
%18 = call %jl_value_t* @allocobj(i64 24), !dbg !6227
%19 = getelementptr inbounds %jl_value_t* %18, i64 0, i32 0, !dbg !6227
store %jl_value_t* inttoptr (i64 4312929664 to %jl_value_t*), %jl_value_t** %19, align 8, !dbg !6227
%20 = getelementptr %jl_value_t** %19, i64 1, !dbg !6227
%21 = bitcast %jl_value_t** %20 to i128*, !dbg !6227
store i128 0, i128* %21, align 8, !dbg !6227
%22 = load %jl_gcframe_t** %10, align 8, !dbg !6227
store %jl_gcframe_t* %22, %jl_gcframe_t** @jl_pgcstack, align 8, !dbg !6227
ret %jl_value_t* %18, !dbg !6227
pass: ; preds = %top
%23 = getelementptr %jl_value_t** %14, i64 1, !dbg !6228
%24 = load %jl_value_t** %23, align 8, !dbg !6228
%25 = bitcast %jl_value_t* %24 to i128*, !dbg !6228
%26 = ptrtoint %jl_value_t* %16 to i64, !dbg !6229
br label %L1, !dbg !6229
L1: ; preds = %pass4, %pass
%"#134.0" = phi i64 [ 2, %pass ], [ %52, %pass4 ]
%v.0.in = phi i128* [ %25, %pass ], [ %51, %pass4 ]
%v.0 = load i128* %v.0.in, align 8, !dbg !6228
%27 = icmp sgt i64 %"#134.0", %26, !dbg !6229
%28 = call %jl_value_t* @allocobj(i64 24), !dbg !6230
%29 = getelementptr inbounds %jl_value_t* %28, i64 0, i32 0, !dbg !6230
store %jl_value_t* inttoptr (i64 4312929664 to %jl_value_t*), %jl_value_t** %29, align 8, !dbg !6230
%30 = getelementptr %jl_value_t** %29, i64 1, !dbg !6230
%31 = bitcast %jl_value_t** %30 to i128*, !dbg !6230
store i128 %v.0, i128* %31, align 8, !dbg !6230
br i1 %27, label %L6, label %if2, !dbg !6229
if2: ; preds = %L1
store %jl_value_t* %28, %jl_value_t** %.sub, align 8, !dbg !6231
%32 = load %jl_value_t** %1, align 8, !dbg !6231
%33 = getelementptr inbounds %jl_value_t* %32, i64 0, i32 0, !dbg !6231
%34 = getelementptr %jl_value_t** %33, i64 2, !dbg !6231
%35 = load %jl_value_t** %34, align 8, !dbg !6231
%36 = ptrtoint %jl_value_t* %35 to i64, !dbg !6231
%37 = add i64 %"#134.0", -1, !dbg !6231
%38 = icmp ult i64 %37, %36, !dbg !6231
br i1 %38, label %pass4, label %fail3, !dbg !6231
fail3: ; preds = %if2
call void @jl_error(i8* getelementptr inbounds ([37 x i8]* @_j_str608, i64 0, i64 0)), !dbg !6231
unreachable
pass4: ; preds = %if2
%39 = getelementptr %jl_value_t** %33, i64 1, !dbg !6231
%40 = load %jl_value_t** %39, align 8, !dbg !6231
%41 = bitcast %jl_value_t* %40 to i128*, !dbg !6231
%42 = getelementptr i128* %41, i64 %37, !dbg !6231
%43 = load i128* %42, align 8, !dbg !6231, !julia_type !6232
%44 = call %jl_value_t* @allocobj(i64 24), !dbg !6231
%45 = getelementptr inbounds %jl_value_t* %44, i64 0, i32 0, !dbg !6231
store %jl_value_t* inttoptr (i64 4312929664 to %jl_value_t*), %jl_value_t** %45, align 8, !dbg !6231
%46 = getelementptr %jl_value_t** %45, i64 1, !dbg !6231
%47 = bitcast %jl_value_t** %46 to i128*, !dbg !6231
store i128 %43, i128* %47, align 8, !dbg !6231
store %jl_value_t* %44, %jl_value_t** %11, align 8, !dbg !6231
%48 = call %jl_value_t* @"+667"(%jl_value_t* inttoptr (i64 4395888608 to %jl_value_t*), %jl_value_t** %.sub, i32 2), !dbg !6231
%49 = getelementptr inbounds %jl_value_t* %48, i64 0, i32 0, !dbg !6231
%50 = getelementptr %jl_value_t** %49, i64 1, !dbg !6231
%51 = bitcast %jl_value_t** %50 to i128*, !dbg !6231
%52 = add i64 %"#134.0", 1, !dbg !6231
br label %L1, !dbg !6231
L6: ; preds = %L1
%53 = load %jl_gcframe_t** %10, align 8, !dbg !6230
store %jl_gcframe_t* %53, %jl_gcframe_t** @jl_pgcstack, align 8, !dbg !6230
ret %jl_value_t* %28, !dbg !6230
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment