Skip to content

Instantly share code, notes, and snippets.

@yuyichao
Created May 31, 2015 02:12
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save yuyichao/a4647d0f9b9aab63ea6e to your computer and use it in GitHub Desktop.
Save yuyichao/a4647d0f9b9aab63ea6e to your computer and use it in GitHub Desktop.
Current Master
define i64 @julia_f0_20827(i64, i64) {
top:
ret i64 %0
}
define i64 @julia_f1_20829(i64, i64) {
top:
%2 = icmp eq i64 %1, 0
br i1 %2, label %if, label %L
if: ; preds = %top
%3 = load %jl_value_t** inttoptr (i64 140728668609784 to %jl_value_t**), align 8
call void @julia_throw1_20830(%jl_value_t* %3, i64 %0, i64 0)
br label %L
L: ; preds = %if, %top
ret i64 %0
}
define i64 @julia_f2_20831(i64, i64) {
top:
%2 = alloca [3 x %jl_value_t*], align 8
%.sub = getelementptr inbounds [3 x %jl_value_t*]* %2, i64 0, i64 0
%3 = getelementptr [3 x %jl_value_t*]* %2, i64 0, i64 2
%4 = bitcast [3 x %jl_value_t*]* %2 to i64*
store i64 2, i64* %4, align 8
%5 = getelementptr [3 x %jl_value_t*]* %2, i64 0, i64 1
%6 = bitcast %jl_value_t** %5 to %jl_value_t***
%7 = load %jl_value_t*** @jl_pgcstack, align 8
store %jl_value_t** %7, %jl_value_t*** %6, align 8
store %jl_value_t** %.sub, %jl_value_t*** @jl_pgcstack, align 8
store %jl_value_t* null, %jl_value_t** %3, align 8
%8 = icmp eq i64 %1, 0
br i1 %8, label %if, label %L
if: ; preds = %top
%9 = call %jl_value_t* @jl_box_int64(i64 signext %0)
store %jl_value_t* %9, %jl_value_t** %3, align 8
%10 = call %jl_value_t* @alloc_2w()
%11 = getelementptr inbounds %jl_value_t* %10, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140728668509360 to %jl_value_t*), %jl_value_t** %11, align 8
%12 = getelementptr inbounds %jl_value_t* %10, i64 0, i32 0
store %jl_value_t* %9, %jl_value_t** %12, align 8
%13 = getelementptr inbounds %jl_value_t* %10, i64 1, i32 0
store %jl_value_t* null, %jl_value_t** %13, align 8
store %jl_value_t* %10, %jl_value_t** %3, align 8
%14 = call %jl_value_t* @jl_box_int64(i64 signext 0)
store %jl_value_t* %14, %jl_value_t** %13, align 8
%15 = icmp eq %jl_value_t* %14, null
br i1 %15, label %cont1, label %wb_not_null
wb_not_null: ; preds = %if
%16 = bitcast %jl_value_t** %11 to i64*
%17 = load i64* %16, align 8
%18 = and i64 %17, 1
%19 = icmp eq i64 %18, 0
br i1 %19, label %cont1, label %wb_may_trigger
wb_may_trigger: ; preds = %wb_not_null
%20 = getelementptr inbounds %jl_value_t* %14, i64 -1, i32 0
%21 = bitcast %jl_value_t** %20 to i64*
%22 = load i64* %21, align 8
%23 = and i64 %22, 1
%24 = icmp eq i64 %23, 0
br i1 %24, label %wb_trigger, label %cont1
wb_trigger: ; preds = %wb_may_trigger
call void @gc_queue_root(%jl_value_t* %10)
br label %cont1
cont1: ; preds = %wb_trigger, %wb_may_trigger, %wb_not_null, %if
call void @jl_throw_with_superfluous_argument(%jl_value_t* %10, i32 31)
%.pre = load %jl_value_t*** %6, align 8
br label %L
L: ; preds = %cont1, %top
%25 = phi %jl_value_t** [ %7, %top ], [ %.pre, %cont1 ]
store %jl_value_t** %25, %jl_value_t*** @jl_pgcstack, align 8
ret i64 %0
}
define %jl_value_t* @julia_getindex_20835(%jl_value_t*, i64) {
top:
%2 = alloca [3 x %jl_value_t*], align 8
%.sub = getelementptr inbounds [3 x %jl_value_t*]* %2, i64 0, i64 0
%3 = getelementptr [3 x %jl_value_t*]* %2, i64 0, i64 2
%4 = bitcast [3 x %jl_value_t*]* %2 to i64*
store i64 2, i64* %4, align 8
%5 = getelementptr [3 x %jl_value_t*]* %2, i64 0, i64 1
%6 = bitcast %jl_value_t** %5 to %jl_value_t***
%7 = load %jl_value_t*** @jl_pgcstack, align 8
store %jl_value_t** %7, %jl_value_t*** %6, align 8
store %jl_value_t** %.sub, %jl_value_t*** @jl_pgcstack, align 8
store %jl_value_t* null, %jl_value_t** %3, align 8
%8 = icmp slt i64 %1, 1
br i1 %8, label %if2, label %L1
L1: ; preds = %top
%9 = bitcast %jl_value_t* %0 to i64*
%10 = load i64* %9, align 8
%phitmp8 = icmp slt i64 %10, %1
br i1 %phitmp8, label %if2, label %L4
if2: ; preds = %L1, %top
%11 = call %jl_value_t* @alloc_2w()
%12 = getelementptr inbounds %jl_value_t* %11, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140728668509360 to %jl_value_t*), %jl_value_t** %12, align 8
%13 = getelementptr inbounds %jl_value_t* %11, i64 0, i32 0
store %jl_value_t* %0, %jl_value_t** %13, align 8
%14 = getelementptr inbounds %jl_value_t* %11, i64 1, i32 0
store %jl_value_t* null, %jl_value_t** %14, align 8
store %jl_value_t* %11, %jl_value_t** %3, align 8
%15 = call %jl_value_t* @jl_box_int64(i64 signext %1)
store %jl_value_t* %15, %jl_value_t** %14, align 8
%16 = icmp eq %jl_value_t* %15, null
br i1 %16, label %cont3, label %wb_not_null
wb_not_null: ; preds = %if2
%17 = bitcast %jl_value_t** %12 to i64*
%18 = load i64* %17, align 8
%19 = and i64 %18, 1
%20 = icmp eq i64 %19, 0
br i1 %20, label %cont3, label %wb_may_trigger
wb_may_trigger: ; preds = %wb_not_null
%21 = getelementptr inbounds %jl_value_t* %15, i64 -1, i32 0
%22 = bitcast %jl_value_t** %21 to i64*
%23 = load i64* %22, align 8
%24 = and i64 %23, 1
%25 = icmp eq i64 %24, 0
br i1 %25, label %wb_trigger, label %cont3
wb_trigger: ; preds = %wb_may_trigger
call void @gc_queue_root(%jl_value_t* %11)
br label %cont3
cont3: ; preds = %wb_trigger, %wb_may_trigger, %wb_not_null, %if2
call void @jl_throw_with_superfluous_argument(%jl_value_t* %11, i32 193)
br label %L4
L4: ; preds = %cont3, %L1
%26 = ptrtoint %jl_value_t* %0 to i64
%27 = shl i64 %1, 3
%28 = add i64 %27, %26
%29 = inttoptr i64 %28 to i8**
%30 = load i8** %29, align 1
%31 = icmp eq i8* %30, null
br i1 %31, label %if5, label %L7
if5: ; preds = %L4
call void @jl_throw_with_superfluous_argument(%jl_value_t* inttoptr (i64 140728668586024 to %jl_value_t*), i32 196)
br label %L7
L7: ; preds = %if5, %L4
%32 = bitcast i8* %30 to %jl_value_t*
%33 = load %jl_value_t*** %6, align 8
store %jl_value_t** %33, %jl_value_t*** @jl_pgcstack, align 8
ret %jl_value_t* %32
}
f0
1.428 seconds
f1
1.462 seconds
f2
1.592 seconds
getindex
1.747 seconds
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment