Last active
August 29, 2015 14:01
-
-
Save kmsquire/f9263e55326d624e4821 to your computer and use it in GitHub Desktop.
Updated union! assembly from https://github.com/JuliaLang/DataStructures.jl/pull/36
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# @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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# @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