Skip to content

Instantly share code, notes, and snippets.

@tkelman
Created November 21, 2014 03:37
Show Gist options
  • Select an option

  • Save tkelman/556fb9c10e9048e426bf to your computer and use it in GitHub Desktop.

Select an option

Save tkelman/556fb9c10e9048e426bf to your computer and use it in GitHub Desktop.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.3.0 (2014-08-20 20:43 UTC)
_/ |\__'_|_|_|\__'_| | Official http://julialang.org/ build
|__/ | i686-w64-mingw32
julia> using Blosc
julia> a=rand(Float64,32);
julia> roundtrip(orig) = Blosc.decompress(eltype(orig), Blosc.compress(orig)) ==
orig
roundtrip (generic function with 1 method)
julia> @code_llvm Blosc.decompress(eltype(a), Blosc.compress(a)) == a
; Function Attrs: alignstack(8)
define i1 @"julia_==;1222"(%jl_value_t*, %jl_value_t*) #2 {
top:
%2 = alloca [3 x %jl_value_t*], align 4
%.sub = getelementptr inbounds [3 x %jl_value_t*]* %2, i32 0, i32 0
%3 = getelementptr [3 x %jl_value_t*]* %2, i32 0, i32 2, !dbg !3720
store %jl_value_t* inttoptr (i32 2 to %jl_value_t*), %jl_value_t** %.sub, alig
n 4
%4 = getelementptr [3 x %jl_value_t*]* %2, i32 0, i32 1, !dbg !3720
%5 = load %jl_value_t*** @jl_pgcstack, align 4, !dbg !3720
%.c = bitcast %jl_value_t** %5 to %jl_value_t*, !dbg !3720
store %jl_value_t* %.c, %jl_value_t** %4, align 4, !dbg !3720
store %jl_value_t** %.sub, %jl_value_t*** @jl_pgcstack, align 4, !dbg !3720
store %jl_value_t* null, %jl_value_t** %3, align 4
%6 = load %jl_value_t** inttoptr (i32 49253896 to %jl_value_t**), align 8, !db
g !3721
%7 = getelementptr inbounds %jl_value_t* %6, i32 1, i32 0, !dbg !3721
%8 = load %jl_value_t** %7, align 4, !dbg !3721, !tbaa %jtbaa_func
%9 = bitcast %jl_value_t* %8 to %jl_value_t* (%jl_value_t*, %jl_value_t**, i32
)*, !dbg !3721
store %jl_value_t* %0, %jl_value_t** %3, align 4, !dbg !3721
%10 = call %jl_value_t* %9(%jl_value_t* %6, %jl_value_t** %3, i32 1), !dbg !37
21
%11 = getelementptr inbounds %jl_value_t* %10, i32 2, i32 0, !dbg !3721
%12 = load %jl_value_t** %11, align 4, !dbg !3721
%13 = getelementptr inbounds %jl_value_t* %12, i32 1, i32 0, !dbg !3721
%14 = bitcast %jl_value_t** %13 to i32*, !dbg !3721
%15 = load i32* %14, align 4, !dbg !3721
%16 = insertelement <1 x i32> undef, i32 %15, i32 0, !dbg !3721, !julia_type !
3725
%17 = load %jl_value_t** inttoptr (i32 49253896 to %jl_value_t**), align 8, !d
bg !3721
%18 = getelementptr inbounds %jl_value_t* %17, i32 1, i32 0, !dbg !3721
%19 = load %jl_value_t** %18, align 4, !dbg !3721, !tbaa %jtbaa_func
%20 = bitcast %jl_value_t* %19 to %jl_value_t* (%jl_value_t*, %jl_value_t**, i
32)*, !dbg !3721
store %jl_value_t* %1, %jl_value_t** %3, align 4, !dbg !3721
%21 = call %jl_value_t* %20(%jl_value_t* %17, %jl_value_t** %3, i32 1), !dbg !
3721
%22 = getelementptr inbounds %jl_value_t* %21, i32 2, i32 0, !dbg !3721
%23 = load %jl_value_t** %22, align 4, !dbg !3721
%24 = getelementptr inbounds %jl_value_t* %23, i32 1, i32 0, !dbg !3721
%25 = bitcast %jl_value_t** %24 to i32*, !dbg !3721
%26 = load i32* %25, align 4, !dbg !3721
%27 = insertelement <1 x i32> undef, i32 %26, i32 0, !dbg !3721, !julia_type !
3725
%28 = call i1 @"julia_==;954"(<1 x i32> %16, <1 x i32> %27), !dbg !3721
br i1 %28, label %L3, label %if, !dbg !3721
if: ; preds = %top
%29 = load %jl_value_t** %4, align 4, !dbg !3726
%30 = getelementptr inbounds %jl_value_t* %29, i32 0, i32 0, !dbg !3726
store %jl_value_t** %30, %jl_value_t*** @jl_pgcstack, align 4, !dbg !3726
ret i1 false, !dbg !3726
L3: ; preds = %top
%31 = getelementptr inbounds %jl_value_t* %0, i32 2, i32 0, !dbg !3727
%32 = load %jl_value_t** %31, align 4, !dbg !3727, !tbaa %jtbaa_arraylen
%33 = ptrtoint %jl_value_t* %32 to i32, !dbg !3727
%34 = icmp sle %jl_value_t* %32, null, !dbg !3727
%35 = select i1 %34, i32 0, i32 %33, !dbg !3727
%36 = icmp eq i32 %35, 0, !dbg !3727
br i1 %36, label %L12, label %L5.preheader, !dbg !3727
L5.preheader: ; preds = %L3
%37 = load %jl_value_t** %31, align 4, !dbg !3730, !tbaa %jtbaa_arraylen
%38 = ptrtoint %jl_value_t* %37 to i32, !dbg !3730
%39 = getelementptr inbounds %jl_value_t* %1, i32 2, i32 0, !dbg !3730
%40 = getelementptr inbounds %jl_value_t* %0, i32 1, i32 0, !dbg !3730
%41 = getelementptr inbounds %jl_value_t* %1, i32 1, i32 0, !dbg !3730
br label %L5, !dbg !3727
L5: ; preds = %L5.preheader, %L10
%"#s116.0" = phi i32 [ %60, %L10 ], [ 1, %L5.preheader ]
%42 = add i32 %"#s116.0", -1, !dbg !3730
%43 = icmp ult i32 %42, %38, !dbg !3730
br i1 %43, label %idxend, label %oob, !dbg !3730
if6: ; preds = %idxend8
%44 = load %jl_value_t** %4, align 4, !dbg !3731
%45 = getelementptr inbounds %jl_value_t* %44, i32 0, i32 0, !dbg !3731
store %jl_value_t** %45, %jl_value_t*** @jl_pgcstack, align 4, !dbg !3731
ret i1 false, !dbg !3731
oob: ; preds = %L5
%46 = load %jl_value_t** @jl_bounds_exception, align 4, !dbg !3730, !tbaa %jtb
aa_const
call void @jl_throw_with_superfluous_argument(%jl_value_t* %46, i32 883), !dbg
!3730
unreachable, !dbg !3730
idxend: ; preds = %L5
%47 = load %jl_value_t** %39, align 4, !dbg !3730, !tbaa %jtbaa_arraylen
%48 = ptrtoint %jl_value_t* %47 to i32, !dbg !3730
%49 = icmp ult i32 %42, %48, !dbg !3730
br i1 %49, label %idxend8, label %oob7, !dbg !3730
oob7: ; preds = %idxend
%50 = load %jl_value_t** @jl_bounds_exception, align 4, !dbg !3730, !tbaa %jtb
aa_const
call void @jl_throw_with_superfluous_argument(%jl_value_t* %50, i32 883), !dbg
!3730
unreachable, !dbg !3730
idxend8: ; preds = %idxend
%51 = load %jl_value_t** %40, align 4, !dbg !3730, !tbaa %jtbaa_arrayptr
%52 = bitcast %jl_value_t* %51 to double*, !dbg !3730
%53 = getelementptr double* %52, i32 %42, !dbg !3730
%54 = load double* %53, align 8, !dbg !3730, !tbaa %jtbaa_user
%55 = load %jl_value_t** %41, align 4, !dbg !3730, !tbaa %jtbaa_arrayptr
%56 = bitcast %jl_value_t* %55 to double*, !dbg !3730
%57 = getelementptr double* %56, i32 %42, !dbg !3730
%58 = load double* %57, align 8, !dbg !3730, !tbaa %jtbaa_user
%59 = fcmp oeq double %54, %58, !dbg !3730
br i1 %59, label %L10, label %if6, !dbg !3730
L10: ; preds = %idxend8
%60 = add i32 %"#s116.0", 1, !dbg !3727
%61 = icmp eq i32 %"#s116.0", %35, !dbg !3731
br i1 %61, label %L12, label %L5, !dbg !3731
L12: ; preds = %L10, %L3
%62 = load %jl_value_t** %4, align 4, !dbg !3735
%63 = getelementptr inbounds %jl_value_t* %62, i32 0, i32 0, !dbg !3735
store %jl_value_t** %63, %jl_value_t*** @jl_pgcstack, align 4, !dbg !3735
ret i1 true, !dbg !3735
}
julia> @code_llvm roundtrip(a)
; Function Attrs: alignstack(8)
define i1 @"julia_roundtrip;1230"(%jl_value_t*) #2 {
top:
%1 = alloca [6 x %jl_value_t*], align 4
%.sub = getelementptr inbounds [6 x %jl_value_t*]* %1, i32 0, i32 0
%2 = getelementptr [6 x %jl_value_t*]* %1, i32 0, i32 2, !dbg !3745
store %jl_value_t* inttoptr (i32 8 to %jl_value_t*), %jl_value_t** %.sub, alig
n 4
%3 = getelementptr [6 x %jl_value_t*]* %1, i32 0, i32 1, !dbg !3745
%4 = load %jl_value_t*** @jl_pgcstack, align 4, !dbg !3745
%.c = bitcast %jl_value_t** %4 to %jl_value_t*, !dbg !3745
store %jl_value_t* %.c, %jl_value_t** %3, align 4, !dbg !3745
store %jl_value_t** %.sub, %jl_value_t*** @jl_pgcstack, align 4, !dbg !3745
store %jl_value_t* null, %jl_value_t** %2, align 4, !dbg !3745
%5 = getelementptr [6 x %jl_value_t*]* %1, i32 0, i32 3, !dbg !3745
store %jl_value_t* null, %jl_value_t** %5, align 4, !dbg !3745
%6 = getelementptr [6 x %jl_value_t*]* %1, i32 0, i32 4
%7 = getelementptr [6 x %jl_value_t*]* %1, i32 0, i32 5
store %jl_value_t* null, %jl_value_t** %7, align 4
store %jl_value_t* inttoptr (i32 21441248 to %jl_value_t*), %jl_value_t** %6,
align 4, !dbg !3746
%8 = call %jl_value_t* inttoptr (i32 1737033888 to %jl_value_t* (%jl_value_t*,
i32)*)(%jl_value_t* inttoptr (i32 21441248 to %jl_value_t*), i32 0), !dbg !3746
store %jl_value_t* %8, %jl_value_t** %2, align 4, !dbg !3746
store %jl_value_t* %8, %jl_value_t** %6, align 4, !dbg !3746
store %jl_value_t* %0, %jl_value_t** %7, align 4, !dbg !3746
%9 = call %jl_value_t* @"julia___compress#5__;1208"(%jl_value_t* inttoptr (i32
84387344 to %jl_value_t*), %jl_value_t** %6, i32 2), !dbg !3746
store %jl_value_t* %9, %jl_value_t** %5, align 4, !dbg !3746
store %jl_value_t* inttoptr (i32 26987696 to %jl_value_t*), %jl_value_t** %6,
align 4, !dbg !3746
%10 = call %jl_value_t* inttoptr (i32 1737033888 to %jl_value_t* (%jl_value_t*
, i32)*)(%jl_value_t* inttoptr (i32 26987696 to %jl_value_t*), i32 0), !dbg !374
6
store %jl_value_t* %10, %jl_value_t** %6, align 4, !dbg !3746
store %jl_value_t* %9, %jl_value_t** %7, align 4, !dbg !3746
%11 = call %jl_value_t* @"julia_decompress!;1215"(%jl_value_t* inttoptr (i32 8
5180336 to %jl_value_t*), %jl_value_t** %6, i32 2), !dbg !3746
store %jl_value_t* %11, %jl_value_t** %6, align 4, !dbg !3746
%12 = call i1 @"julia_==;1222"(%jl_value_t* %11, %jl_value_t* %0), !dbg !3746
%13 = load %jl_value_t** %3, align 4, !dbg !3746
%14 = getelementptr inbounds %jl_value_t* %13, i32 0, i32 0, !dbg !3746
store %jl_value_t** %14, %jl_value_t*** @jl_pgcstack, align 4, !dbg !3746
ret i1 %12, !dbg !3746
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment