Skip to content

Instantly share code, notes, and snippets.

@lendle
Created November 20, 2014 06:03
Show Gist options
  • Save lendle/6d5ea92b37c6fb89ca59 to your computer and use it in GitHub Desktop.
Save lendle/6d5ea92b37c6fb89ca59 to your computer and use it in GitHub Desktop.
julia> function testgetindex(v)
@inbounds x = v[1]
x
end
testgetindex (generic function with 1 method)
julia> @code_llvm testgetindex(v)
define double @"julia_testgetindex;42178"(%jl_value_t*) {
top:
%1 = getelementptr inbounds %jl_value_t* %0, i64 1, !dbg !1972
%2 = bitcast %jl_value_t* %1 to i8**, !dbg !1972
%3 = load i8** %2, align 8, !dbg !1972, !tbaa %jtbaa_arrayptr
%4 = bitcast i8* %3 to double*, !dbg !1972
%5 = load double* %4, align 8, !dbg !1972, !tbaa %jtbaa_user
ret double %5, !dbg !1979
}
julia> @code_llvm testgetindex(vn)
define %Nullable @"julia_testgetindex;42179"(%jl_value_t*) {
top:
%1 = getelementptr inbounds %jl_value_t* %0, i64 1, !dbg !1975
%2 = bitcast %jl_value_t* %1 to i8**, !dbg !1975
%3 = load i8** %2, align 8, !dbg !1975, !tbaa %jtbaa_arrayptr
%4 = bitcast i8* %3 to %Nullable*, !dbg !1975
%5 = load %Nullable* %4, align 8, !dbg !1975, !tbaa %jtbaa_user, !julia_type !1982
ret %Nullable %5, !dbg !1983
}
julia> @code_llvm testgetindex(nv)
define %Nullable @"julia_testgetindex;42180"(%jl_value_t*) {
top:
%1 = getelementptr inbounds %jl_value_t* %0, i64 1, i32 0, !dbg !1978
%2 = load %jl_value_t** %1, align 8, !dbg !1978, !tbaa %jtbaa_immut
%3 = call i1 @julia_getindex2385(%jl_value_t* %2, i64 1), !dbg !1978
br i1 %3, label %L1, label %L, !dbg !1978
L: ; preds = %top
%4 = getelementptr inbounds %jl_value_t* %0, i64 2, i32 0, !dbg !1978
%5 = load %jl_value_t** %4, align 8, !dbg !1978, !tbaa %jtbaa_immut
%6 = getelementptr inbounds %jl_value_t* %5, i64 1, !dbg !1978
%7 = bitcast %jl_value_t* %6 to i8**, !dbg !1978
%8 = load i8** %7, align 8, !dbg !1978, !tbaa %jtbaa_arrayptr
%9 = bitcast i8* %8 to double*, !dbg !1978
%10 = load double* %9, align 8, !dbg !1978, !tbaa %jtbaa_user
%11 = insertvalue %Nullable { i8 0, double undef }, double %10, 1, !dbg !1978, !julia_type !1986
br label %L1, !dbg !1978
L1: ; preds = %top, %L
%_var0.0 = phi %Nullable [ %11, %L ], [ { i8 1, double undef }, %top ]
ret %Nullable %_var0.0, !dbg !1987
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment