Skip to content

Instantly share code, notes, and snippets.

@brson
Created April 8, 2011 00:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save brson/909044 to your computer and use it in GitHub Desktop.
Save brson/909044 to your computer and use it in GitHub Desktop.
define internal fastcc void @_rust_fn1_id(i8*, %task*, %1*, %tydesc*, i8*) {
allocas:
%5 = getelementptr %tydesc* %3, i32 0, i32 0
%6 = load %tydesc*** %5
%7 = getelementptr %tydesc* %3, i32 0, i32 3
%8 = load void (i1*, %task*, i1*, %tydesc**, i8*)** %7
%9 = ptrtoint void (i1*, %task*, i1*, %tydesc**, i8*)* %8 to i32
%10 = ptrtoint %tydesc* %3 to i32
%11 = add i32 %9, %10
%12 = inttoptr i32 %11 to void (i1*, %task*, i1*, %tydesc**, i8*)*
tail call fastcc void %12(i1* null, %task* %1, i1* null, %tydesc** %6, i8* %4)
%13 = getelementptr %tydesc* %3, i32 0, i32 1
%14 = load i32* %13
tail call fastcc void @rust_memcpy_glue(i8* %0, i8* %4, i32 %14)
ret void
}
define internal fastcc void @_rust_fn2_main(i1*, %task*, %1*) {
allocas:
%3 = alloca %"@int"
%4 = alloca %"@int"
%5 = ptrtoint %task* %1 to i32
%6 = call fastcc i32 @rust_native_rust_3(i32 ptrtoint (i32 (i32, i32, i32)* @upcall_malloc to i32), i32 %5, i32 trunc (i64 mul nuw (i64 ptrtoint (i32* getelementptr (i32* null, i32 1) to i64), i64 2) to i32), i32 0)
%7 = inttoptr i32 %6 to %"@int"
%8 = getelementptr %"@int" %7, i32 0, i32 0
%9 = getelementptr %"@int" %7, i32 0, i32 1
store i32 1, i32* %8
store i32 100, i32* %9
%10 = bitcast %"@int" %7 to i8*
call fastcc void inttoptr (i32 add (i32 sub (i32 ptrtoint (void (i1*, %task*, i1*, %tydesc**, i8*)* @_rust_f04bf2966a4fb2fe_glue_take to i32), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)) to void (i1*, %task*, i1*, %tydesc**, i8*)*)(i1* null, %task* %1, i1* null, %tydesc** null, i8* %10)
store %"@int" %7, %"@int"* %3
%11 = bitcast %"@int"* %4 to i8*
%12 = bitcast %"@int"* %3 to i8*
call fastcc void inttoptr (i32 add (i32 sub (i32 ptrtoint (void (i1*, %task*, i1*, %tydesc**, i8*)* @_rust_f04bf2966a4fb2fe_glue_take to i32), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)) to void (i1*, %task*, i1*, %tydesc**, i8*)*)(i1* null, %task* %1, i1* null, %tydesc** null, i8* %12)
call fastcc void @rust_memcpy_glue(i8* %11, i8* %12, i32 ptrtoint (i1** getelementptr (i1** null, i32 1) to i32))
%13 = load %"@int"* %4
%14 = bitcast %"@int" %13 to i8*
call fastcc void inttoptr (i32 add (i32 sub (i32 ptrtoint (void (i1*, %task*, i1*, %tydesc**, i8*)* @_rust_f04bf2966a4fb2fe_glue_take to i32), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)) to void (i1*, %task*, i1*, %tydesc**, i8*)*)(i1* null, %task* %1, i1* null, %tydesc** null, i8* %14)
%15 = getelementptr %"@int" %13, i32 0, i32 1
%16 = load i32* %15
%17 = call fastcc i32 @rust_native_rust_2(i32 ptrtoint (i32 (i32, i32)* @upcall_log_int to i32), i32 %5, i32 %16)
%18 = load %"@int"* %3
%19 = getelementptr %"@int" %18, i32 0, i32 1
%20 = load i32* %19
%21 = load i32* %15
%22 = icmp eq i32 %20, %21
br i1 %22, label %next17, label %fail14
fail14: ; preds = %allocas
%23 = call fastcc i32 @rust_native_rust_4(i32 ptrtoint (i32 (i32, i32, i32, i32)* @upcall_fail to i32), i32 %5, i32 ptrtoint ([21 x i8]* @str15 to i32), i32 ptrtoint ([42 x i8]* @str16 to i32), i32 12)
unreachable
next17: ; preds = %allocas
call fastcc void inttoptr (i32 add (i32 sub (i32 ptrtoint (void (i1*, %task*, i1*, %tydesc**, i8*)* @_rust_f04bf2966a4fb2fe_glue_drop to i32), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)) to void (i1*, %task*, i1*, %tydesc**, i8*)*)(i1* null, %task* %1, i1* null, %tydesc** null, i8* %14)
call fastcc void inttoptr (i32 add (i32 sub (i32 ptrtoint (void (i1*, %task*, i1*, %tydesc**, i8*)* @_rust_f04bf2966a4fb2fe_glue_drop to i32), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)) to void (i1*, %task*, i1*, %tydesc**, i8*)*)(i1* null, %task* %1, i1* null, %tydesc** null, i8* %14)
call fastcc void inttoptr (i32 add (i32 sub (i32 ptrtoint (void (i1*, %task*, i1*, %tydesc**, i8*)* @_rust_f04bf2966a4fb2fe_glue_drop to i32), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)) to void (i1*, %task*, i1*, %tydesc**, i8*)*)(i1* null, %task* %1, i1* null, %tydesc** null, i8* %10)
%24 = load %"@int"* %3
%25 = bitcast %"@int" %24 to i8*
call fastcc void inttoptr (i32 add (i32 sub (i32 ptrtoint (void (i1*, %task*, i1*, %tydesc**, i8*)* @_rust_f04bf2966a4fb2fe_glue_drop to i32), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)), i32 ptrtoint (%tydesc* @tydesc_boxed_int5 to i32)) to void (i1*, %task*, i1*, %tydesc**, i8*)*)(i1* null, %task* %1, i1* null, %tydesc** null, i8* %25)
ret void
}
declare i32 @upcall_malloc(i32, i32, i32)
define internal fastcc void @_rust_f04bf2966a4fb2fe_glue_take(i1*, %task*, i1*, %tydesc**, i8*) nounwind {
allocas:
%5 = bitcast i8* %4 to %"@int"
%6 = getelementptr %"@int" %5, i32 0, i32 0
%7 = load i32* %6
%8 = icmp eq i32 %7, 2074999502
br i1 %8, label %next8, label %"rc++7"
"rc++7": ; preds = %allocas
%9 = add i32 %7, 1
store i32 %9, i32* %6
br label %next8
next8: ; preds = %"rc++7", %allocas
ret void
}
define internal fastcc void @_rust_f04bf2966a4fb2fe_glue_drop(i1*, %task*, i1*, %tydesc**, i8*) {
allocas:
%5 = bitcast i8* %4 to %"@int"
%6 = icmp eq i8* %4, null
br i1 %6, label %next13, label %"load rc10"
"load rc10": ; preds = %allocas
%7 = getelementptr %"@int" %5, i32 0, i32 0
%8 = load i32* %7
%9 = icmp eq i32 %8, 2074999502
br i1 %9, label %next13, label %rc--11
rc--11: ; preds = %"load rc10"
%10 = add i32 %8, -1
store i32 %10, i32* %7
%11 = icmp eq i32 %10, 0
br i1 %11, label %"free box12", label %next13
"free box12": ; preds = %rc--11
%12 = ptrtoint %"@int" %5 to i32
%13 = ptrtoint %task* %1 to i32
%14 = tail call fastcc i32 @rust_native_rust_3(i32 ptrtoint (i32 (i32, i32, i32)* @upcall_free to i32), i32 %13, i32 %12, i32 0)
br label %next13
next13: ; preds = %"free box12", %rc--11, %"load rc10", %allocas
ret void
}
declare i32 @upcall_free(i32, i32, i32)
declare i32 @upcall_log_int(i32, i32)
declare i32 @upcall_fail(i32, i32, i32, i32)
declare i32 @upcall_vec_grow(i32, i32, i32, i32, i32)
define i32 @main(i32, i32) {
%3 = tail call i32 @rust_start(i32 ptrtoint (void (i1*, %task*, %1*)* @_rust_fn2_main to i32), i32 ptrtoint (%crate* @rust_crate to i32), i32 %0, i32 %1)
ret i32 %3
}
declare i32 @rust_start(i32, i32, i32, i32)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment