Skip to content

Instantly share code, notes, and snippets.

@kmsquire
Last active August 29, 2015 14:01
Show Gist options
  • Save kmsquire/f9263e55326d624e4821 to your computer and use it in GitHub Desktop.
Save kmsquire/f9263e55326d624e4821 to your computer and use it in GitHub Desktop.
# @code_native union!(s, x[1], y[1])
.text
Filename: /home/kevin/.julia/v0.3/DataStructures/src/disjoint_set.jl
Source line: 47
push RBP
mov RBP, RSP
push R15
push R14
push R13
push R12
push RBX
sub RSP, 24
mov R15, RDX
mov R14, RDI
mov QWORD PTR [RBP - 64], 2
Source line: 47
movabs R12, 139990496763536
mov RAX, QWORD PTR [R12]
mov QWORD PTR [RBP - 56], RAX
lea RAX, QWORD PTR [RBP - 64]
mov QWORD PTR [R12], RAX
mov QWORD PTR [RBP - 48], 0
Source line: 47
movabs R13, 139990449958048
call R13
mov RBX, RAX
Source line: 48
mov RDI, R14
mov RSI, R15
call R13
Source line: 47
cmp RBX, RAX
jne 13
Source line: 62
mov RAX, QWORD PTR [RBP - 56]
mov QWORD PTR [R12], RAX
jmpq 177
Source line: 50
mov RCX, QWORD PTR [R14 + 16]
test RCX, RCX
je 184
mov QWORD PTR [RBP - 48], RCX
Source line: 51
mov RCX, QWORD PTR [RCX + 8]
Source line: 57
movabs RDI, 139990496061328
Source line: 52
mov RDX, QWORD PTR [RCX + 8*RAX - 8]
Source line: 51
mov RSI, QWORD PTR [RCX + 8*RBX - 8]
Source line: 57
mov RDI, QWORD PTR [RDI]
mov RCX, QWORD PTR [R14 + 8]
Source line: 51
cmp RSI, RDX
Source line: 54
jge 23
test RCX, RCX
Source line: 55
je 161
mov RCX, QWORD PTR [RCX + 8]
mov QWORD PTR [RCX + 8*RBX - 8], RAX
jmpq 63
test RCX, RCX
Source line: 57
je 155
mov RCX, QWORD PTR [RCX + 8]
mov QWORD PTR [RCX + 8*RAX - 8], RBX
Source line: 58
cmp RSI, RDX
jne 36
Source line: 59
mov RAX, QWORD PTR [R14 + 16]
test RAX, RAX
je 141
Source line: 51
lea RCX, QWORD PTR [RBX - 1]
Source line: 59
cmp RCX, QWORD PTR [RAX + 16]
jae 142
mov RAX, QWORD PTR [RAX + 8]
inc QWORD PTR [RAX + 8*RBX - 8]
Source line: 62
mov RAX, QWORD PTR [R14 + 24]
test RAX, RAX
je 150
dec QWORD PTR [RAX + 8]
movabs RAX, 139990496763536
mov RCX, QWORD PTR [RBP - 56]
mov QWORD PTR [RAX], RCX
mov EAX, 13562160
add RSP, 24
pop RBX
pop R12
pop R13
pop R14
pop R15
pop RBP
ret
Source line: 50
movabs RAX, 139990496061328
mov RDI, QWORD PTR [RAX]
movabs RAX, 139990481480128
mov ESI, 50
call RAX
Source line: 55
movabs RAX, 139990481480128
mov ESI, 55
call RAX
Source line: 57
movabs RAX, 139990481480128
mov ESI, 57
call RAX
Source line: 59
movabs RAX, 139990496061328
jmpq 10
movabs RAX, 139990496061312
mov RDI, QWORD PTR [RAX]
movabs RAX, 139990481480128
mov ESI, 59
call RAX
Source line: 62
movabs RAX, 139990496061328
mov RDI, QWORD PTR [RAX]
movabs RAX, 139990481480128
mov ESI, 62
call RAX
# @code_llvm union!(s, x[1], y[1])
define %jl_value_t* @"julia_union!18051"(%jl_value_t*, i64, i64) {
top:
%3 = alloca [3 x %jl_value_t*], align 8
%.sub26 = bitcast [3 x %jl_value_t*]* %3 to %jl_value_t**
%4 = getelementptr [3 x %jl_value_t*]* %3, i64 0, i64 2, !dbg !1088
store %jl_value_t* inttoptr (i64 2 to %jl_value_t*), %jl_value_t** %.sub26, align 8
%5 = getelementptr [3 x %jl_value_t*]* %3, i64 0, i64 1, !dbg !1088
%6 = load %jl_value_t*** @jl_pgcstack, align 8, !dbg !1088
%.c = bitcast %jl_value_t** %6 to %jl_value_t*, !dbg !1088
store %jl_value_t* %.c, %jl_value_t** %5, align 8, !dbg !1088
store %jl_value_t** %.sub26, %jl_value_t*** @jl_pgcstack, align 8, !dbg !1088
store %jl_value_t* null, %jl_value_t** %4, align 8, !dbg !1088
%7 = call i64 @julia_find_root18052(%jl_value_t* %0, i64 %1), !dbg !1089
%8 = call i64 @julia_find_root18052(%jl_value_t* %0, i64 %2), !dbg !1090
%9 = icmp eq i64 %7, %8, !dbg !1091
br i1 %9, label %L19, label %if, !dbg !1091
if: ; preds = %top
%10 = getelementptr inbounds %jl_value_t* %0, i64 2, i32 0, !dbg !1092
%11 = load %jl_value_t** %10, align 8, !dbg !1092
%12 = icmp eq %jl_value_t* %11, null, !dbg !1092
br i1 %12, label %fail, label %pass, !dbg !1092
fail: ; preds = %if
%13 = load %jl_value_t** @jl_undefref_exception, align 8, !dbg !1092, !tbaa %jtbaa_const
call void @jl_throw_with_superfluous_argument(%jl_value_t* %13, i32 50), !dbg !1092
unreachable, !dbg !1092
pass: ; preds = %if
%sunkaddr = ptrtoint [3 x %jl_value_t*]* %3 to i64, !dbg !1092
%sunkaddr27 = add i64 %sunkaddr, 16, !dbg !1092
%sunkaddr28 = inttoptr i64 %sunkaddr27 to %jl_value_t**, !dbg !1092
store %jl_value_t* %11, %jl_value_t** %sunkaddr28, align 8, !dbg !1092
%14 = add i64 %7, -1, !dbg !1095
%15 = getelementptr inbounds %jl_value_t* %11, i64 1, i32 0, !dbg !1095
%16 = load %jl_value_t** %15, align 8, !dbg !1095, !tbaa %jtbaa_arrayptr
%17 = getelementptr %jl_value_t* %16, i64 %14, !dbg !1095
%18 = bitcast %jl_value_t* %17 to i64*, !dbg !1095
%19 = load i64* %18, align 8, !dbg !1095, !tbaa %jtbaa_user
%20 = add i64 %8, -1, !dbg !1100
%21 = getelementptr %jl_value_t* %16, i64 %20, !dbg !1100
%22 = bitcast %jl_value_t* %21 to i64*, !dbg !1100
%23 = load i64* %22, align 8, !dbg !1100, !tbaa %jtbaa_user
%24 = icmp slt i64 %19, %23, !dbg !1101
%25 = getelementptr inbounds %jl_value_t* %0, i64 1, i32 0, !dbg !1102
%26 = load %jl_value_t** %25, align 8, !dbg !1102
%27 = load %jl_value_t** @jl_undefref_exception, align 8, !dbg !1102, !tbaa %jtbaa_const
br i1 %24, label %if1, label %L, !dbg !1101
if1: ; preds = %pass
%28 = icmp ne %jl_value_t* %26, null
br i1 %28, label %pass3, label %fail2, !dbg !1103
fail2: ; preds = %if1
call void @jl_throw_with_superfluous_argument(%jl_value_t* %27, i32 55), !dbg !1103
unreachable, !dbg !1103
pass3: ; preds = %if1
%29 = getelementptr inbounds %jl_value_t* %26, i64 1, i32 0, !dbg !1103
%30 = load %jl_value_t** %29, align 8, !dbg !1103, !tbaa %jtbaa_arrayptr
%.c22 = inttoptr i64 %8 to %jl_value_t*, !dbg !1103
%sunkaddr29 = ptrtoint %jl_value_t* %30 to i64, !dbg !1103
%sunkaddr30 = mul i64 %7, 8, !dbg !1103
%sunkaddr31 = add i64 %sunkaddr29, %sunkaddr30, !dbg !1103
%sunkaddr32 = add i64 %sunkaddr31, -8, !dbg !1103
%sunkaddr33 = inttoptr i64 %sunkaddr32 to %jl_value_t**, !dbg !1103
store %jl_value_t* %.c22, %jl_value_t** %sunkaddr33, align 8, !dbg !1103, !tbaa %jtbaa_user
br label %L13, !dbg !1103
L: ; preds = %pass
%31 = icmp ne %jl_value_t* %26, null
br i1 %31, label %pass5, label %fail4, !dbg !1102
fail4: ; preds = %L
call void @jl_throw_with_superfluous_argument(%jl_value_t* %27, i32 57), !dbg !1102
unreachable, !dbg !1102
pass5: ; preds = %L
%32 = getelementptr inbounds %jl_value_t* %26, i64 1, i32 0, !dbg !1102
%33 = load %jl_value_t** %32, align 8, !dbg !1102, !tbaa %jtbaa_arrayptr
%.c24 = inttoptr i64 %7 to %jl_value_t*, !dbg !1102
%sunkaddr34 = ptrtoint %jl_value_t* %33 to i64, !dbg !1102
%sunkaddr35 = mul i64 %8, 8, !dbg !1102
%sunkaddr36 = add i64 %sunkaddr34, %sunkaddr35, !dbg !1102
%sunkaddr37 = add i64 %sunkaddr36, -8, !dbg !1102
%sunkaddr38 = inttoptr i64 %sunkaddr37 to %jl_value_t**, !dbg !1102
store %jl_value_t* %.c24, %jl_value_t** %sunkaddr38, align 8, !dbg !1102, !tbaa %jtbaa_user
%34 = icmp eq i64 %19, %23, !dbg !1104
br i1 %34, label %if6, label %L13, !dbg !1104
if6: ; preds = %pass5
%sunkaddr39 = ptrtoint %jl_value_t* %0 to i64, !dbg !1105
%sunkaddr40 = add i64 %sunkaddr39, 16, !dbg !1105
%sunkaddr41 = inttoptr i64 %sunkaddr40 to %jl_value_t**, !dbg !1105
%35 = load %jl_value_t** %sunkaddr41, align 8, !dbg !1105
%36 = icmp eq %jl_value_t* %35, null, !dbg !1105
br i1 %36, label %fail7, label %pass8, !dbg !1105
fail7: ; preds = %if6
%37 = load %jl_value_t** @jl_undefref_exception, align 8, !dbg !1105, !tbaa %jtbaa_const
call void @jl_throw_with_superfluous_argument(%jl_value_t* %37, i32 59), !dbg !1105
unreachable, !dbg !1105
pass8: ; preds = %if6
%38 = getelementptr inbounds %jl_value_t* %35, i64 2, i32 0, !dbg !1105
%39 = load %jl_value_t** %38, align 8, !dbg !1105, !tbaa %jtbaa_arraylen
%40 = ptrtoint %jl_value_t* %39 to i64, !dbg !1105
%41 = icmp ult i64 %14, %40, !dbg !1105
br i1 %41, label %idxend12, label %oob, !dbg !1105
oob: ; preds = %pass8
%42 = load %jl_value_t** @jl_bounds_exception, align 8, !dbg !1105, !tbaa %jtbaa_const
call void @jl_throw_with_superfluous_argument(%jl_value_t* %42, i32 59), !dbg !1105
unreachable, !dbg !1105
idxend12: ; preds = %pass8
%43 = getelementptr inbounds %jl_value_t* %35, i64 1, i32 0, !dbg !1105
%44 = load %jl_value_t** %43, align 8, !dbg !1105, !tbaa %jtbaa_arrayptr
%sunkaddr42 = ptrtoint %jl_value_t* %44 to i64, !dbg !1105
%sunkaddr43 = mul i64 %7, 8, !dbg !1105
%sunkaddr44 = add i64 %sunkaddr42, %sunkaddr43, !dbg !1105
%sunkaddr45 = add i64 %sunkaddr44, -8, !dbg !1105
%sunkaddr46 = inttoptr i64 %sunkaddr45 to i64*, !dbg !1105
%45 = load i64* %sunkaddr46, align 8, !dbg !1105, !tbaa %jtbaa_user
%46 = add i64 %45, 1, !dbg !1105
%.c25 = inttoptr i64 %46 to %jl_value_t*, !dbg !1105
%sunkaddr47 = ptrtoint %jl_value_t* %44 to i64, !dbg !1105
%sunkaddr48 = mul i64 %7, 8, !dbg !1105
%sunkaddr49 = add i64 %sunkaddr47, %sunkaddr48, !dbg !1105
%sunkaddr50 = add i64 %sunkaddr49, -8, !dbg !1105
%sunkaddr51 = inttoptr i64 %sunkaddr50 to %jl_value_t**, !dbg !1105
store %jl_value_t* %.c25, %jl_value_t** %sunkaddr51, align 8, !dbg !1105, !tbaa %jtbaa_user
br label %L13, !dbg !1105
L13: ; preds = %pass5, %idxend12, %pass3
%47 = getelementptr inbounds %jl_value_t* %0, i64 3, i32 0, !dbg !1107
%48 = load %jl_value_t** %47, align 8, !dbg !1107
%49 = icmp eq %jl_value_t* %48, null, !dbg !1107
br i1 %49, label %fail14, label %pass17, !dbg !1107
fail14: ; preds = %L13
%50 = load %jl_value_t** @jl_undefref_exception, align 8, !dbg !1107, !tbaa %jtbaa_const
call void @jl_throw_with_superfluous_argument(%jl_value_t* %50, i32 62), !dbg !1107
unreachable, !dbg !1107
pass17: ; preds = %L13
%51 = getelementptr %jl_value_t* %48, i64 1, !dbg !1107
%52 = bitcast %jl_value_t* %51 to i64*, !dbg !1107
%53 = load i64* %52, align 8, !dbg !1107, !tbaa %jtbaa_user
%54 = add i64 %53, -1, !dbg !1107
%55 = getelementptr inbounds %jl_value_t* %48, i64 1, i32 0, !dbg !1107
%.c23 = inttoptr i64 %54 to %jl_value_t*, !dbg !1107
store %jl_value_t* %.c23, %jl_value_t** %55, align 8, !dbg !1107, !tbaa %jtbaa_user
%sunkaddr52 = ptrtoint [3 x %jl_value_t*]* %3 to i64, !dbg !1107
%sunkaddr53 = add i64 %sunkaddr52, 8, !dbg !1107
%sunkaddr54 = inttoptr i64 %sunkaddr53 to %jl_value_t**, !dbg !1107
%56 = load %jl_value_t** %sunkaddr54, align 8, !dbg !1107
%57 = bitcast %jl_value_t* %56 to %jl_value_t**
store %jl_value_t** %57, %jl_value_t*** @jl_pgcstack, align 8, !dbg !1107
ret %jl_value_t* inttoptr (i64 13562160 to %jl_value_t*), !dbg !1107
L19: ; preds = %top
%sunkaddr55 = ptrtoint [3 x %jl_value_t*]* %3 to i64, !dbg !1107
%sunkaddr56 = add i64 %sunkaddr55, 8, !dbg !1107
%sunkaddr57 = inttoptr i64 %sunkaddr56 to %jl_value_t**, !dbg !1107
%58 = load %jl_value_t** %sunkaddr57, align 8, !dbg !1107
%59 = bitcast %jl_value_t* %58 to %jl_value_t**
store %jl_value_t** %59, %jl_value_t*** @jl_pgcstack, align 8, !dbg !1107
ret %jl_value_t* inttoptr (i64 13562160 to %jl_value_t*), !dbg !1107
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment