Skip to content

Instantly share code, notes, and snippets.

@mbauman
Created July 28, 2015 16:53
Show Gist options
  • Save mbauman/c248710723561fc75fdc to your computer and use it in GitHub Desktop.
Save mbauman/c248710723561fc75fdc to your computer and use it in GitHub Desktop.
julia> @code_llvm sumcart_manual(A)
define double @julia_sumcart_manual_21152(%jl_value_t*) {
top:
%1 = getelementptr inbounds %jl_value_t* %0, i64 4, i32 0
%2 = bitcast %jl_value_t** %1 to i64*
%3 = load i64* %2, align 8
%4 = icmp sgt i64 %3, 0
%5 = select i1 %4, i64 %3, i64 0
%6 = icmp eq i64 %5, 0
br i1 %6, label %L7, label %L.preheader
L.preheader: ; preds = %top
%7 = bitcast %jl_value_t* %0 to i8**
%8 = load i8** %7, align 8
%9 = bitcast i8* %8 to double*
%10 = getelementptr inbounds %jl_value_t* %0, i64 3, i32 0
%11 = bitcast %jl_value_t** %10 to i64*
%12 = load i64* %11, align 8
%13 = icmp sgt i64 %12, 0
%14 = select i1 %13, i64 %12, i64 0
%15 = icmp eq i64 %14, 0
br label %L
L: ; preds = %L5, %L.preheader
%s.0 = phi double [ %s.2, %L5 ], [ 0.000000e+00, %L.preheader ]
%"#s2.0" = phi i64 [ %25, %L5 ], [ 1, %L.preheader ]
br i1 %15, label %L5, label %L2.preheader
L2.preheader: ; preds = %L
%16 = add i64 %"#s2.0", -1
%17 = mul i64 %16, %12
%18 = add i64 %17, -1
br label %L2
L2: ; preds = %L2, %L2.preheader
%s.1 = phi double [ %23, %L2 ], [ %s.0, %L2.preheader ]
%"#s1.0" = phi i64 [ %19, %L2 ], [ 1, %L2.preheader ]
%19 = add i64 %"#s1.0", 1
%20 = add i64 %18, %"#s1.0"
%21 = getelementptr double* %9, i64 %20
%22 = load double* %21, align 8
%23 = fadd double %s.1, %22
%24 = icmp eq i64 %"#s1.0", %14
br i1 %24, label %L5, label %L2
L5: ; preds = %L2, %L
%s.2 = phi double [ %s.0, %L ], [ %23, %L2 ]
%25 = add i64 %"#s2.0", 1
%26 = icmp eq i64 %"#s2.0", %5
br i1 %26, label %L7, label %L
L7: ; preds = %L5, %top
%s.3 = phi double [ 0.000000e+00, %top ], [ %s.2, %L5 ]
ret double %s.3
}
julia> @code_llvm sumcart_iter(A)
define double @julia_sumcart_iter_20985(%jl_value_t*) {
top:
%1 = getelementptr inbounds %jl_value_t* %0, i64 1
%2 = bitcast %jl_value_t* %1 to i64*
%3 = load i64* %2, align 8
%4 = icmp sgt i64 %3, 0
%5 = select i1 %4, i64 %3, i64 0
%6 = icmp eq i64 %5, 0
br i1 %6, label %L3, label %L.preheader
L.preheader: ; preds = %top
%7 = bitcast %jl_value_t* %0 to i8**
%8 = load i8** %7, align 8
%9 = bitcast i8* %8 to double*
br label %L
L: ; preds = %L, %L.preheader
%s.0 = phi double [ %14, %L ], [ 0.000000e+00, %L.preheader ]
%"#s2.0" = phi i64 [ %10, %L ], [ 1, %L.preheader ]
%10 = add i64 %"#s2.0", 1
%11 = add i64 %"#s2.0", -1
%12 = getelementptr double* %9, i64 %11
%13 = load double* %12, align 8
%14 = fadd double %s.0, %13
%15 = icmp eq i64 %"#s2.0", %5
br i1 %15, label %L3, label %L
L3: ; preds = %L, %top
%s.1 = phi double [ 0.000000e+00, %top ], [ %14, %L ]
ret double %s.1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment