Skip to content

Instantly share code, notes, and snippets.

@KristofferC
Last active August 29, 2015 14:22
Show Gist options
  • Save KristofferC/cee0a322fc61a2b31235 to your computer and use it in GitHub Desktop.
Save KristofferC/cee0a322fc61a2b31235 to your computer and use it in GitHub Desktop.
julia> @code_llvm getindex(s1, 1)
define %jl_value_t* @julia_getindex_21921(%jl_value_t*, %jl_value_t**, i32) {
top:
%3 = alloca [5 x %jl_value_t*], align 8
%.sub = getelementptr inbounds [5 x %jl_value_t*]* %3, i64 0, i64 0
%4 = getelementptr [5 x %jl_value_t*]* %3, i64 0, i64 2
store %jl_value_t* inttoptr (i64 6 to %jl_value_t*), %jl_value_t** %.sub, align 8
%5 = getelementptr [5 x %jl_value_t*]* %3, i64 0, i64 1
%6 = load %jl_value_t*** @jl_pgcstack, align 8
%.c = bitcast %jl_value_t** %6 to %jl_value_t*
store %jl_value_t* %.c, %jl_value_t** %5, align 8
store %jl_value_t** %.sub, %jl_value_t*** @jl_pgcstack, align 8
%7 = getelementptr [5 x %jl_value_t*]* %3, i64 0, i64 3
store %jl_value_t* null, %jl_value_t** %7, align 8
%8 = getelementptr [5 x %jl_value_t*]* %3, i64 0, i64 4
store %jl_value_t* null, %jl_value_t** %8, align 8
store %jl_value_t* null, %jl_value_t** %4, align 8
%9 = load %jl_value_t** %1, align 8
store %jl_value_t* %9, %jl_value_t** %7, align 8
%10 = icmp eq i32 %2, 1
br i1 %10, label %fail, label %pass2
fail: ; preds = %top
%11 = getelementptr %jl_value_t** %1, i64 1
call void @jl_bounds_error_tuple_int(%jl_value_t** %11, i64 0, i64 1)
unreachable
pass2: ; preds = %top
%12 = getelementptr %jl_value_t** %1, i64 1
%13 = load %jl_value_t** %12, align 8
store %jl_value_t* %13, %jl_value_t** %8, align 8
%14 = call %jl_value_t* @julia_checkbounds_20972(%jl_value_t* inttoptr (i64 140167516614576 to %jl_value_t*), %jl_value_t** %7, i32 2)
%15 = getelementptr inbounds %jl_value_t* %9, i64 0, i32 0
%16 = load %jl_value_t** %15, align 8
%17 = getelementptr %jl_value_t* %9, i64 4
%18 = bitcast %jl_value_t* %17 to i64*
%19 = load i64* %18, align 8
%20 = load %jl_value_t** %12, align 8
%21 = bitcast %jl_value_t* %20 to i64*
%22 = load i64* %21, align 8
%23 = add i64 %22, %19
%24 = add i64 %23, -2
%25 = getelementptr inbounds %jl_value_t* %16, i64 1
%26 = bitcast %jl_value_t* %25 to i64*
%27 = load i64* %26, align 8
%28 = icmp ult i64 %24, %27
br i1 %28, label %idxend, label %oob
oob: ; preds = %pass2
%29 = add i64 %23, -1
%30 = alloca i64, align 8
store i64 %29, i64* %30, align 8
call void @jl_bounds_error_ints(%jl_value_t* %16, i64* %30, i64 1)
unreachable
idxend: ; preds = %pass2
%31 = bitcast %jl_value_t* %16 to i8**
%32 = load i8** %31, align 8
%33 = bitcast i8* %32 to double*
%34 = getelementptr double* %33, i64 %24
%35 = load double* %34, align 8
%36 = call %jl_value_t* @alloc_1w()
%37 = getelementptr inbounds %jl_value_t* %36, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140167479142160 to %jl_value_t*), %jl_value_t** %37, align 8
%38 = bitcast %jl_value_t* %36 to double*
store double %35, double* %38, align 8
%39 = load %jl_value_t** %5, align 8
%40 = getelementptr inbounds %jl_value_t* %39, i64 0, i32 0
store %jl_value_t** %40, %jl_value_t*** @jl_pgcstack, align 8
ret %jl_value_t* %36
}
julia> @code_llvm getindex(s1, 1)
define double @julia_anonymous_44802(%jl_value_t*, i64) {
top:
%2 = getelementptr inbounds %jl_value_t* %0, i64 0, i32 0
%3 = load %jl_value_t** %2, align 8
%4 = getelementptr %jl_value_t* %0, i64 4
%5 = bitcast %jl_value_t* %4 to i64*
%6 = load i64* %5, align 8
%7 = add i64 %6, %1
%8 = add i64 %7, -2
%9 = getelementptr inbounds %jl_value_t* %3, i64 1
%10 = bitcast %jl_value_t* %9 to i64*
%11 = load i64* %10, align 8
%12 = icmp ult i64 %8, %11
br i1 %12, label %idxend, label %oob
oob: ; preds = %top
%13 = add i64 %7, -1
%14 = alloca i64, align 8
store i64 %13, i64* %14, align 8
call void @jl_bounds_error_ints(%jl_value_t* %3, i64* %14, i64 1)
unreachable
idxend: ; preds = %top
%15 = bitcast %jl_value_t* %3 to i8**
%16 = load i8** %15, align 8
%17 = bitcast i8* %16 to double*
%18 = getelementptr double* %17, i64 %8
%19 = load double* %18, align 8
ret double %19
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment