Skip to content

Instantly share code, notes, and snippets.

@catamorphism
Created November 6, 2012 03:16
Show Gist options
  • Select an option

  • Save catamorphism/4022340 to your computer and use it in GitHub Desktop.

Select an option

Save catamorphism/4022340 to your computer and use it in GitHub Desktop.
pub pure fn with_capacity<T>(capacity: uint) -> ~int {
let mut vec = ~5;
return move vec;
}
fn main() {
with_capacity::<uint>(500);
}
// ---------------------------------
; ModuleID = 'zzz.rc'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-apple-darwin"
%shapes = type opaque
%tydesc = type { i64, i64, void (i1*, i1*, %tydesc**, i8*)*, void (i1*, i1*, %tydesc**, i8*)*, void (i1*, i1*, %tydesc**, i8*)*, void (i1*, i1*, %tydesc**, i8*)*, i8*, i8* }
%"~enum intrinsic::TyDesc[#0]" = type { [16 x i8] }
@_rust_crate_map_toplevel = global { i32, i8*, i64, [2 x i64] } { i32 1, i8* bitcast (void (i1*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*)* @_ZN7cleanup10annihilate16_9d8aa08e67953763_05E to i8*), i64 ptrtoint ([1 x { i64, i64 }]* @_rust_mod_map to i64), [2 x i64] [i64 ptrtoint (i64* @_rust_crate_map_core_0.5_c3ca5d77d81b46c1 to i64), i64 0] }
@shapes = external global %shapes
@_ZN9intrinsic6TyDesc6TyDesc7descrim16_65c4bb9c8a8df583_00E = constant i64 0
@tydesc_1737 = internal constant %tydesc { i64 ptrtoint (i64* getelementptr (i64* null, i32 1) to i64), i64 ptrtoint (i64* getelementptr ({ i1, i64 }* null, i64 0, i32 1) to i64), void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, i32*)* @glue_take_1741 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, i32*)* @glue_drop_1743 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, i32*)* @glue_free_1745 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, i64*)* @glue_visit_1747 to void (i1*, i1*, %tydesc**, i8*)*), i8* null, i8* null }
@tydesc_1739 = internal constant %tydesc { i64 ptrtoint (i32* getelementptr (i32* null, i32 1) to i64), i64 ptrtoint (i32* getelementptr ({ i1, i32 }* null, i64 0, i32 1) to i64), void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, i32*)* @glue_take_1741 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, i32*)* @glue_drop_1743 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, i32*)* @glue_free_1745 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* null, i8* null, i8* null }
@tydesc_1749 = internal constant %tydesc { i64 ptrtoint (i1 addrspace(1)** getelementptr (i1 addrspace(1)** null, i32 1) to i64), i64 ptrtoint (i1 addrspace(1)** getelementptr ({ i1, i1 addrspace(1)* }* null, i64 0, i32 1) to i64), void (i1*, i1*, %tydesc**, i8*)* null, void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)**)* @glue_drop_1755 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)**)* @glue_free_1753 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* null, i8* null, i8* null }
@tydesc_1751 = internal constant %tydesc { i64 ptrtoint (i1 addrspace(1)** getelementptr (i1 addrspace(1)** null, i32 1) to i64), i64 ptrtoint (i1 addrspace(1)** getelementptr ({ i1, i1 addrspace(1)* }* null, i64 0, i32 1) to i64), void (i1*, i1*, %tydesc**, i8*)* null, void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)**)* @glue_drop_1755 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* bitcast (void (i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)**)* @glue_free_1753 to void (i1*, i1*, %tydesc**, i8*)*), void (i1*, i1*, %tydesc**, i8*)* null, i8* null, i8* null }
@_rust_crate_map_core_0.5_c3ca5d77d81b46c1 = external global i64
@_rust_mod_map = internal global [1 x { i64, i64 }] zeroinitializer
@rust_abi_version = constant i64 1
declare void @llvm.gcroot(i8**, i8*) nounwind
declare void @llvm.gcread(i8*, i8**) nounwind readonly
declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind
declare void @llvm.trap() noreturn nounwind
declare i8* @llvm.frameaddress(i32) nounwind readnone
declare void @upcall_trace(i8*, i8*, i64)
declare i8* @upcall_malloc(%tydesc*, i64) nounwind
declare void @upcall_free(i8*) nounwind
declare i8* @upcall_exchange_malloc(%tydesc*, i64) nounwind
declare void @upcall_exchange_free(i8*) nounwind
declare void @upcall_validate_box(i8*) nounwind
declare void @upcall_log_type(%tydesc*, i8*, i32)
declare i64 @upcall_call_shim_on_c_stack(i8*, i8*)
declare i64 @upcall_call_shim_on_rust_stack(i8*, i8*)
declare i32 @upcall_rust_personality() nounwind
declare void @upcall_reset_stack_limit() nounwind
define internal void @_ZN9intrinsic6TyDesc6TyDesc6TyDesc16_3cdf4616d082b3e3_00E(%"~enum intrinsic::TyDesc[#0]"*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*, { { i64, i64 } }*) inlinehint {
static_allocas:
br label %load_env
load_env: ; preds = %static_allocas
br label %3
return: ; preds = %3
ret void
; <label>:3 ; preds = %load_env
%4 = bitcast %"~enum intrinsic::TyDesc[#0]"* %0 to { { { i64, i64 } } }*
%5 = getelementptr inbounds { { { i64, i64 } } }* %4, i32 0, i32 0
%6 = bitcast { { i64, i64 } }* %2 to i8*
%7 = bitcast { { i64, i64 } }* %5 to i8*
call void @llvm.memmove.p0i8.p0i8.i64(i8* %7, i8* %6, i64 mul nuw (i64 ptrtoint (i64* getelementptr (i64* null, i32 1) to i64), i64 2), i32 1, i1 false)
br label %return
}
define internal void @_ZN4main17_681e78d55eb073833_00E(i1*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*) uwtable {
static_allocas:
%2 = alloca { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)*
%3 = alloca i64
br label %load_env
load_env: ; preds = %static_allocas
br label %4
return: ; preds = %7
ret void
; <label>:4 ; preds = %load_env
br label %5
; <label>:5 ; preds = %4
store i64 500, i64* %3
%6 = load i64* %3
call void @_ZN18with_capacity_173316_58c42215619ab3a3_00E({ i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %2, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)* undef, i64 %6)
call void bitcast (void (i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)**)* @glue_drop_1755 to void (i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)**)*)(i1* null, i1* null, %tydesc** null, { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %2)
br label %7
; <label>:7 ; preds = %5
br label %return
}
define void @_rust_main(i1*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*, { i64, %tydesc*, i8*, i8*, { i64, i64, [0 x { i64, %tydesc*, i8*, i8*, { i64, i64, [0 x i8] } } addrspace(1)*] } } addrspace(1)*) {
static_allocas:
br label %load_env
load_env: ; preds = %static_allocas
br label %3
return: ; preds = %3
ret void
; <label>:3 ; preds = %load_env
call void @_ZN4main17_681e78d55eb073833_00E(i1* %0, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)* %1)
br label %return
}
define i64 @main(i64, i64) {
top:
%2 = call i64 @rust_start(void (i1*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*, { i64, %tydesc*, i8*, i8*, { i64, i64, [0 x { i64, %tydesc*, i8*, i8*, { i64, i64, [0 x i8] } } addrspace(1)*] } } addrspace(1)*)* @_rust_main, i64 %0, i64 %1, { i32, i8*, i64, [2 x i64] }* @_rust_crate_map_toplevel)
ret i64 %2
}
declare i64 @rust_start(void (i1*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*, { i64, %tydesc*, i8*, i8*, { i64, i64, [0 x { i64, %tydesc*, i8*, i8*, { i64, i64, [0 x i8] } } addrspace(1)*] } } addrspace(1)*)*, i64, i64, { i32, i8*, i64, [2 x i64] }*)
define internal void @_ZN18with_capacity_173316_58c42215619ab3a3_00E({ i64, %tydesc*, i8*, i8*, i64 } addrspace(1)**, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*, i64) uwtable {
static_allocas:
%3 = alloca i64
%4 = alloca { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)*
%5 = alloca i8*
%6 = bitcast i8** %5 to i8*
call void @llvm.memset.p0i8.i64(i8* %6, i8 0, i64 ptrtoint (i1** getelementptr (i1** null, i32 1) to i64), i32 1, i1 false)
%7 = alloca { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)*
%8 = alloca { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)**
%9 = alloca { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)*
%10 = alloca { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)*
%11 = bitcast { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %10 to i8*
call void @llvm.memset.p0i8.i64(i8* %11, i8 0, i64 ptrtoint (i1 addrspace(1)** getelementptr (i1 addrspace(1)** null, i32 1) to i64), i32 1, i1 false)
br label %load_env
load_env: ; preds = %static_allocas
br label %12
return: ; preds = %24
ret void
; <label>:12 ; preds = %load_env
store i64 %2, i64* %3
br label %13
; <label>:13 ; preds = %12
call void @_ZN2rt18rt_exchange_malloc17_9c8a1439dd31f1b93_05E(i8** %5, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)* undef, i8* bitcast (%tydesc* @tydesc_1737 to i8*), i64 ptrtoint (i64* getelementptr (i64* null, i32 1) to i64))
br label %14
; <label>:14 ; preds = %13
%15 = load i8** %5
%16 = bitcast i8* %15 to { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)*
%17 = bitcast { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)* %16 to { i64, %tydesc*, i8*, i8*, i64 }*
%18 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i64 }* %17, i32 0, i32 4
store i64 5, i64* %18
store { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)* %16, { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %7
store { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %7, { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)*** %8
%19 = load { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)*** %8
%20 = load { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %19
store { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)* %20, { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %9
%21 = bitcast { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %19 to i8*
call void @llvm.memset.p0i8.i64(i8* %21, i8 0, i64 ptrtoint (i1 addrspace(1)** getelementptr (i1 addrspace(1)** null, i32 1) to i64), i32 1, i1 false)
%22 = load { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %9
store { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)* %22, { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %0
%23 = bitcast { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %9 to i8*
call void @llvm.memset.p0i8.i64(i8* %23, i8 0, i64 ptrtoint (i1 addrspace(1)** getelementptr (i1 addrspace(1)** null, i32 1) to i64), i32 1, i1 false)
br label %24
; <label>:24 ; preds = %14
store { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)* %16, { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %10
call void bitcast (void (i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)**)* @glue_free_1753 to void (i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)**)*)(i1* null, i1* null, %tydesc** null, { i64, %tydesc*, i8*, i8*, i64 } addrspace(1)** %10)
br label %return
}
define internal void @glue_take_1741(i1*, i1*, %tydesc**, i32*) alwaysinline {
static_allocas:
br label %load_env
load_env: ; preds = %static_allocas
br label %4
return: ; preds = %4
ret void
; <label>:4 ; preds = %load_env
br label %return
}
define internal void @glue_drop_1743(i1*, i1*, %tydesc**, i32*) alwaysinline {
static_allocas:
br label %load_env
load_env: ; preds = %static_allocas
br label %4
return: ; preds = %4
ret void
; <label>:4 ; preds = %load_env
br label %return
}
define internal void @glue_free_1745(i1*, i1*, %tydesc**, i32*) alwaysinline {
static_allocas:
br label %load_env
load_env: ; preds = %static_allocas
br label %4
return: ; preds = %4
ret void
; <label>:4 ; preds = %load_env
br label %return
}
define internal void @glue_visit_1747(i1*, i1*, %tydesc**, i64*) alwaysinline {
static_allocas:
%4 = alloca i1
br label %load_env
load_env: ; preds = %static_allocas
br label %5
return: ; preds = %7
ret void
; <label>:5 ; preds = %load_env
%6 = bitcast i64* %3 to { %tydesc*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)* }*
br label %8
; <label>:7 ; preds = %21, %19
br label %return
; <label>:8 ; preds = %5
%9 = getelementptr inbounds { %tydesc*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)* }* %6, i32 0, i32 0
%10 = bitcast %tydesc** %9 to [1 x i8*]**
%11 = load [1 x i8*]** %10
%12 = getelementptr inbounds { %tydesc*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)* }* %6, i32 0, i32 1
%13 = load { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)** %12
%14 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)* %13, i32 0, i32 4
%15 = getelementptr inbounds [1 x i8*]* %11, i32 0, i32 3
%16 = load i8** %15
%17 = bitcast i8* %16 to void (i1*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*)*
%18 = bitcast i8 addrspace(1)* %14 to { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*
call void %17(i1* %4, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)* %18)
br label %19
; <label>:19 ; preds = %8
%20 = load i1* %4
br i1 %20, label %21, label %7
; <label>:21 ; preds = %19
br label %7
}
declare void @_ZN2rt18rt_exchange_malloc17_9c8a1439dd31f1b93_05E(i8**, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*, i8*, i64)
define internal void @glue_free_1753(i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)**) alwaysinline {
static_allocas:
br label %load_env
load_env: ; preds = %static_allocas
br label %4
return: ; preds = %7
ret void
; <label>:4 ; preds = %load_env
%5 = load { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)** %3
%6 = icmp ne { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)* %5, null
br i1 %6, label %8, label %7
; <label>:7 ; preds = %14, %4
br label %return
; <label>:8 ; preds = %4
%9 = bitcast { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)* %5 to { i64, %tydesc*, i8*, i8* }*
%10 = getelementptr inbounds { i64, %tydesc*, i8*, i8* }* %9, i32 1
%11 = bitcast { i64, %tydesc*, i8*, i8* }* %10 to i32*
%12 = bitcast { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)* %5 to i8*
br label %13
; <label>:13 ; preds = %8
call void @_ZN2rt16rt_exchange_free15_566dfde8e786233_05E(i1* undef, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)* undef, i8* %12)
br label %14
; <label>:14 ; preds = %13
br label %7
}
declare void @_ZN2rt16rt_exchange_free15_566dfde8e786233_05E(i1*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*, i8*)
define internal void @glue_drop_1755(i1*, i1*, %tydesc**, { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)**) alwaysinline {
static_allocas:
br label %load_env
load_env: ; preds = %static_allocas
br label %4
return: ; preds = %4
ret void
; <label>:4 ; preds = %load_env
call void @glue_free_1753(i1* null, i1* null, %tydesc** null, { i64, %tydesc*, i8*, i8*, i32 } addrspace(1)** %3)
br label %return
}
declare void @_ZN7cleanup10annihilate16_9d8aa08e67953763_05E(i1*, { i64, %tydesc*, i8*, i8*, i8 } addrspace(1)*)
warning: no debug symbols in executable (-arch x86_64)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment