Skip to content

Instantly share code, notes, and snippets.

@SiegeLord
Last active August 29, 2015 14:01
Show Gist options
  • Save SiegeLord/69770cf0ba61e5515523 to your computer and use it in GitHub Desktop.
Save SiegeLord/69770cf0ba61e5515523 to your computer and use it in GitHub Desktop.
Benchmark regression
; ModuleID = 'algebloat.rs'
target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%"struct.core::intrinsics::TypeId[#3]" = type { i64 }
%str_slice = type { i8*, i64 }
%"struct.test::Bencher[#5]" = type { i64, i64, i64, i64 }
%"struct.std::fmt::Arguments[#1]" = type { { %"enum.std::fmt::rt::Piece[#1]"*, i64 }, { %"struct.std::fmt::Argument[#1]"*, i64 } }
%"enum.std::fmt::rt::Piece[#1]" = type { i8, [7 x i8], [9 x i64] }
%"struct.std::fmt::Argument[#1]" = type { void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)*, %"enum.core::any::Void[#3]"* }
%"enum.core::result::Result<(),std::io::IoError>[#3]" = type { i8, [7 x i8], [5 x i64] }
%"struct.std::fmt::Formatter[#1]" = type { i64, i32, i8, %"enum.core::option::Option<uint>[#3]", %"enum.core::option::Option<uint>[#3]", { void (i8*)**, i8* }, %"struct.core::slice::Items<std::fmt::Argument>[#3]", { %"struct.std::fmt::Argument[#1]"*, i64 } }
%"enum.core::option::Option<uint>[#3]" = type { i8, [7 x i8], [1 x i64] }
%"struct.core::slice::Items<std::fmt::Argument>[#3]" = type { %"struct.std::fmt::Argument[#1]"*, %"struct.std::fmt::Argument[#1]"*, %"struct.core::kinds::marker::ContravariantLifetime[#3]" }
%"struct.core::kinds::marker::ContravariantLifetime[#3]" = type {}
%"enum.core::any::Void[#3]" = type {}
%struct.Vector = type { %"struct.std::vec::Vec<core::cell::Cell<f32>>[#1]" }
%"struct.std::vec::Vec<core::cell::Cell<f32>>[#1]" = type { i64, i64, %"struct.core::cell::Cell<f32>[#3]"* }
%"struct.core::cell::Cell<f32>[#3]" = type { %"struct.core::ty::Unsafe<f32>[#3]", %"struct.core::kinds::marker::NoShare[#3]" }
%"struct.core::ty::Unsafe<f32>[#3]" = type { float, %"struct.core::kinds::marker::InvariantType<f32>[#3]" }
%"struct.core::kinds::marker::InvariantType<f32>[#3]" = type {}
%"struct.core::kinds::marker::NoShare[#3]" = type {}
%"struct.std::rt::libunwind::_Unwind_Exception[#1]" = type { i64, void (i32, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*)*, [2 x i64] }
%"enum.std::rt::libunwind::_Unwind_Context[#1]" = type {}
%"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>" = type { %"struct.Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>", %struct.Vector* }
%"struct.Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>" = type { %struct.Vector*, %"struct.Multiplier<&'static Vector,&'static Vector>" }
%"struct.Multiplier<&'static Vector,&'static Vector>" = type { %struct.Vector*, %struct.Vector* }
%"struct.rand::XorShiftRng[#7]" = type { i32, i32, i32, i32 }
%"struct.std::vec::Vec<f32>[#1]" = type { i64, i64, float* }
%"struct.std::vec::Vec<~str>[#1]" = type { i64, i64, { i64, i64, [0 x i8] }** }
%"struct.test::TestDescAndFn[#5]" = type { %"struct.test::TestDesc[#5]", %"enum.test::TestFn[#5]" }
%"struct.test::TestDesc[#5]" = type { %"enum.test::TestName[#5]", i8, i8 }
%"enum.test::TestName[#5]" = type { i8, [7 x i8], [2 x i64] }
%"enum.test::TestFn[#5]" = type { i8, [7 x i8], [2 x i64] }
@str2220 = internal constant [14 x i8] c"src/new_lib.rs"
@str2221 = internal constant [18 x i8] c"assertion failed: "
@vtable2356 = internal constant { void (i8**)*, %"struct.core::intrinsics::TypeId[#3]" (%str_slice*)* } { void (i8**)* @"_ZN7_$UP$i814glue_drop.234017hb75657ce3a7ee077E", %"struct.core::intrinsics::TypeId[#3]" (%str_slice*)* @_ZN3any5T.Any11get_type_id20h30360513813683836744v0.0E }
@str2360 = internal constant [17 x i8] c"capacity overflow"
@str2466 = internal constant [39 x i8] c"/home/siege/src/rust2/src/libstd/vec.rs"
@str2500 = internal constant [42 x i8] c"/home/siege/src/rust2/src/libcore/slice.rs"
@str2501 = internal constant [35 x i8] c"assertion failed: end <= self.len()"
@str2547 = internal constant [21 x i8] c"self.len() == v.len()"
@str2563 = internal constant [18 x i8] c"a.len() == b.len()"
@str2566 = internal constant [11 x i8] c"sum != 96.0"
@_ZN4test14vec_speed_loop15__STATIC_FMTSTR20h2754a7156d484e2eI1a4v0.0E = internal unnamed_addr constant { { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } } { { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([18 x i8]* @str2221, i32 0, i32 0), i64 18 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef } }
@str2577 = internal constant [19 x i8] c"test::vec_speed_vec"
@str2578 = internal constant [20 x i8] c"test::vec_speed_loop"
@const = private constant { { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8, [6 x i8] }, { i8, void (%"struct.test::Bencher[#5]"*)*, [8 x i8] } }, { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8, [6 x i8] }, { i8, void (%"struct.test::Bencher[#5]"*)*, [8 x i8] } } } { { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8, [6 x i8] }, { i8, void (%"struct.test::Bencher[#5]"*)*, [8 x i8] } } { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8, [6 x i8] } { { i8, { i8*, i64 }, [0 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([19 x i8]* @str2577, i32 0, i32 0), i64 19 }, [0 x i8] undef }, i8 0, i8 0, [6 x i8] undef }, { i8, void (%"struct.test::Bencher[#5]"*)*, [8 x i8] } { i8 1, void (%"struct.test::Bencher[#5]"*)* @_ZN4test13vec_speed_vec20h6a651987ed997271vWa4v0.0E, [8 x i8] undef } }, { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8, [6 x i8] }, { i8, void (%"struct.test::Bencher[#5]"*)*, [8 x i8] } } { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8, [6 x i8] } { { i8, { i8*, i64 }, [0 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([20 x i8]* @str2578, i32 0, i32 0), i64 20 }, [0 x i8] undef }, i8 0, i8 0, [6 x i8] undef }, { i8, void (%"struct.test::Bencher[#5]"*)*, [8 x i8] } { i8 1, void (%"struct.test::Bencher[#5]"*)* @_ZN4test14vec_speed_loop20he36626d22787d321hZa4v0.0E, [8 x i8] undef } } }
; Function Attrs: cold noinline noreturn
declare void @_ZN2rt6unwind16begin_unwind_fmt20h1360f91e7709ea39KsF9v0.11.preE(%"struct.std::fmt::Arguments[#1]"* nocapture, %str_slice* noalias nocapture, i64) unnamed_addr #0
; Function Attrs: uwtable
define internal fastcc void @_ZN6Vector3new20hf0f9aad5a0222bb5Uda4v0.0E(%struct.Vector* noalias nocapture sret, float* readonly %.0.0.val, i64 %.0.1.val) unnamed_addr #1 {
entry-block:
%1 = alloca %str_slice, align 8
%2 = alloca %str_slice, align 8
%3 = getelementptr inbounds float* %.0.0.val, i64 %.0.1.val
%4 = icmp eq i64 %.0.1.val, 0
br i1 %4, label %_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit, label %else-block.i.i.i
else-block.i.i.i: ; preds = %entry-block
%umul_with_overflow.i.i = shl nuw i64 %.0.1.val, 2
%5 = tail call i8* @malloc(i64 %umul_with_overflow.i.i) #8
%6 = icmp eq i8* %5, null
br i1 %6, label %then-block-3949-.i.i.i.i, label %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i.preheader"
then-block-3949-.i.i.i.i: ; preds = %else-block.i.i.i
tail call void @llvm.trap() #8
unreachable
"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i.preheader": ; preds = %else-block.i.i.i
%7 = bitcast i8* %5 to %"struct.core::cell::Cell<f32>[#3]"*
%8 = bitcast %str_slice* %1 to i8*
%9 = bitcast %str_slice* %2 to i8*
br label %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i"
"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i": ; preds = %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i.preheader", %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i"
%10 = phi float* [ %13, %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i" ], [ %.0.0.val, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i.preheader" ]
%11 = phi i64 [ %34, %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i" ], [ 0, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i.preheader" ]
%12 = phi i64 [ %32, %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i" ], [ %.0.1.val, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i.preheader" ]
%vector.sroa.12.0.oldload45.i13.i = phi %"struct.core::cell::Cell<f32>[#3]"* [ %vector.sroa.12.0.oldload44.i.i, %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i" ], [ %7, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i.preheader" ]
%13 = getelementptr inbounds float* %10, i64 1
%14 = icmp eq float* %10, null
br i1 %14, label %_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit.loopexit, label %match_case.i.i.i.i.i
match_case.i.i.i.i.i: ; preds = %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i"
%15 = load float* %10, align 4
%oldret.i.i = insertvalue %"struct.core::ty::Unsafe<f32>[#3]" undef, float %15, 0
%oldret.i = insertvalue %"struct.core::cell::Cell<f32>[#3]" undef, %"struct.core::ty::Unsafe<f32>[#3]" %oldret.i.i, 0
call void @llvm.lifetime.start(i64 16, i8* %8)
call void @llvm.lifetime.start(i64 16, i8* %9)
%16 = icmp eq i64 %11, %12
br i1 %16, label %then-block-4623-.i.i.i, label %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i"
unwind_ast_3607_.nonloopexit.i.i: ; preds = %then-block-4666-.i.i.i
%lpad.nonloopexit.i.i = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%17 = bitcast %"struct.core::cell::Cell<f32>[#3]"* %vector.sroa.12.0.oldload45.i13.i.lcssa17 to i8*
tail call void @free(i8* %17) #8
resume { i8*, i32 } %lpad.nonloopexit.i.i
then-block-4623-.i.i.i: ; preds = %match_case.i.i.i.i.i
%18 = icmp eq i64 %11, 0
%..i.i = select i1 %18, i64 2, i64 %11
%19 = shl i64 %..i.i, 2
%20 = shl i64 %..i.i, 1
%21 = shl i64 %..i.i, 3
%22 = icmp ugt i64 %19, %21
br i1 %22, label %then-block-4666-.i.i.i, label %next-block1.i.i.i
then-block-4666-.i.i.i: ; preds = %then-block-4623-.i.i.i
%vector.sroa.12.0.oldload45.i13.i.lcssa17 = phi %"struct.core::cell::Cell<f32>[#3]"* [ %vector.sroa.12.0.oldload45.i13.i, %then-block-4623-.i.i.i ]
%23 = getelementptr inbounds %str_slice* %1, i64 0, i32 0
store i8* getelementptr inbounds ([17 x i8]* @str2360, i64 0, i64 0), i8** %23, align 8
%24 = getelementptr inbounds %str_slice* %1, i64 0, i32 1
store i64 17, i64* %24, align 8
%25 = getelementptr inbounds %str_slice* %2, i64 0, i32 0
store i8* getelementptr inbounds ([39 x i8]* @str2466, i64 0, i64 0), i8** %25, align 8
%26 = getelementptr inbounds %str_slice* %2, i64 0, i32 1
store i64 39, i64* %26, align 8
invoke fastcc void @_ZN2rt6unwind12begin_unwind18h995620736527304054v0.0E(%str_slice* nocapture %1, %str_slice* nocapture %2, i64 554)
to label %.noexc40.i.i unwind label %unwind_ast_3607_.nonloopexit.i.i
.noexc40.i.i: ; preds = %then-block-4666-.i.i.i
unreachable
next-block1.i.i.i: ; preds = %then-block-4623-.i.i.i
%27 = bitcast %"struct.core::cell::Cell<f32>[#3]"* %vector.sroa.12.0.oldload45.i13.i to i8*
%28 = icmp eq i64 %21, 0
br i1 %28, label %then-block-4745-.i.i.i.i, label %else-block.i.i38.i.i
then-block-4745-.i.i.i.i: ; preds = %next-block1.i.i.i
tail call void @free(i8* %27) #8
br label %_ZN2rt11global_heap11realloc_raw20h6d6fc9759276e719pob4v0.0E.exit.i.i.i
else-block.i.i38.i.i: ; preds = %next-block1.i.i.i
%29 = tail call i8* @realloc(i8* %27, i64 %21) #8
%30 = icmp eq i8* %29, null
br i1 %30, label %then-block-4777-.i.i.i.i, label %_ZN2rt11global_heap11realloc_raw20h6d6fc9759276e719pob4v0.0E.exit.i.i.i
then-block-4777-.i.i.i.i: ; preds = %else-block.i.i38.i.i
tail call void @llvm.trap() #8
unreachable
_ZN2rt11global_heap11realloc_raw20h6d6fc9759276e719pob4v0.0E.exit.i.i.i: ; preds = %else-block.i.i38.i.i, %then-block-4745-.i.i.i.i
%__make_return_pointer.0.i.i39.i.i = phi i8* [ null, %then-block-4745-.i.i.i.i ], [ %29, %else-block.i.i38.i.i ]
%31 = bitcast i8* %__make_return_pointer.0.i.i39.i.i to %"struct.core::cell::Cell<f32>[#3]"*
br label %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i"
"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i": ; preds = %_ZN2rt11global_heap11realloc_raw20h6d6fc9759276e719pob4v0.0E.exit.i.i.i, %match_case.i.i.i.i.i
%vector.sroa.12.0.oldload44.i.i = phi %"struct.core::cell::Cell<f32>[#3]"* [ %31, %_ZN2rt11global_heap11realloc_raw20h6d6fc9759276e719pob4v0.0E.exit.i.i.i ], [ %vector.sroa.12.0.oldload45.i13.i, %match_case.i.i.i.i.i ]
%32 = phi i64 [ %20, %_ZN2rt11global_heap11realloc_raw20h6d6fc9759276e719pob4v0.0E.exit.i.i.i ], [ %12, %match_case.i.i.i.i.i ]
%33 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %vector.sroa.12.0.oldload44.i.i, i64 %11
store %"struct.core::cell::Cell<f32>[#3]" %oldret.i, %"struct.core::cell::Cell<f32>[#3]"* %33, align 4
%34 = add i64 %11, 1
call void @llvm.lifetime.end(i64 16, i8* %8)
call void @llvm.lifetime.end(i64 16, i8* %9)
%35 = icmp eq float* %13, %3
br i1 %35, label %_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit.loopexit, label %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i"
_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit.loopexit: ; preds = %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i", %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i"
%.lcssa9.i.ph = phi i64 [ %11, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i" ], [ %34, %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i" ]
%.lcssa.i.ph = phi i64 [ %12, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i" ], [ %32, %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i" ]
%vector.sroa.12.0.oldload45.i.lcssa.i.ph = phi %"struct.core::cell::Cell<f32>[#3]"* [ %vector.sroa.12.0.oldload45.i13.i, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h110212424784378364914v0.0E.exit.i.i.i.i" ], [ %vector.sroa.12.0.oldload44.i.i, %"_ZN3vec12Vec$LT$T$GT$4push20h46733768910178461114v0.0E.exit.i.i" ]
br label %_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit
_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit: ; preds = %_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit.loopexit, %entry-block
%.lcssa9.i = phi i64 [ 0, %entry-block ], [ %.lcssa9.i.ph, %_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit.loopexit ]
%.lcssa.i = phi i64 [ 0, %entry-block ], [ %.lcssa.i.ph, %_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit.loopexit ]
%vector.sroa.12.0.oldload45.i.lcssa.i = phi %"struct.core::cell::Cell<f32>[#3]"* [ null, %entry-block ], [ %vector.sroa.12.0.oldload45.i.lcssa.i.ph, %_ZN4iter8Iterator7collect21h157530482907772535334v0.0E.exit.loopexit ]
%vector.sroa.0.0..sroa_idx.i.i = getelementptr inbounds %struct.Vector* %0, i64 0, i32 0, i32 0
store i64 %.lcssa9.i, i64* %vector.sroa.0.0..sroa_idx.i.i, align 8
%vector.sroa.8.0..sroa_idx41.i.i = getelementptr inbounds %struct.Vector* %0, i64 0, i32 0, i32 1
store i64 %.lcssa.i, i64* %vector.sroa.8.0..sroa_idx41.i.i, align 8
%vector.sroa.12.0..sroa_idx43.i.i = getelementptr inbounds %struct.Vector* %0, i64 0, i32 0, i32 2
store %"struct.core::cell::Cell<f32>[#3]"* %vector.sroa.12.0.oldload45.i.lcssa.i, %"struct.core::cell::Cell<f32>[#3]"** %vector.sroa.12.0..sroa_idx43.i.i, align 8
ret void
}
; Function Attrs: cold noinline noreturn uwtable
define internal fastcc void @_ZN2rt6unwind12begin_unwind18h995620736527304054v0.0E(%str_slice* noalias nocapture readonly, %str_slice* noalias nocapture readonly, i64) unnamed_addr #2 {
entry-block:
%__adjust = alloca { void (i8*)**, i8* }, align 8
%arg = alloca %str_slice, align 8
%3 = tail call i8* @malloc(i64 16) #8
%4 = icmp eq i8* %3, null
br i1 %4, label %then-block-3949-.i.i, label %_ZN2rt11global_heap15exchange_malloc20h2fda127de8d70239Kab4v0.0E.exit
then-block-3949-.i.i: ; preds = %entry-block
tail call void @llvm.trap() #8
unreachable
_ZN2rt11global_heap15exchange_malloc20h2fda127de8d70239Kab4v0.0E.exit: ; preds = %entry-block
%5 = bitcast %str_slice* %0 to i8*
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %5, i64 16, i32 8, i1 false)
%6 = getelementptr inbounds { void (i8*)**, i8* }* %__adjust, i64 0, i32 1
store i8* %3, i8** %6, align 8
%7 = getelementptr inbounds { void (i8*)**, i8* }* %__adjust, i64 0, i32 0
store void (i8*)** bitcast ({ void (i8**)*, %"struct.core::intrinsics::TypeId[#3]" (%str_slice*)* }* @vtable2356 to void (i8*)**), void (i8*)*** %7, align 8
%8 = bitcast %str_slice* %1 to i8*
%9 = bitcast %str_slice* %arg to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %8, i64 16, i32 8, i1 false)
call void @_ZN2rt6unwind18begin_unwind_inner20h483d0e1a956a5c13AtF9v0.11.preE({ void (i8*)**, i8* }* nocapture %__adjust, %str_slice* nocapture %arg, i64 %2)
unreachable
}
; Function Attrs: cold noinline noreturn
declare void @_ZN2rt6unwind18begin_unwind_inner20h483d0e1a956a5c13AtF9v0.11.preE({ void (i8*)**, i8* }* noalias nocapture, %str_slice* noalias nocapture, i64) unnamed_addr #0
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) unnamed_addr #3
; Function Attrs: noreturn nounwind
declare void @llvm.trap() unnamed_addr #4
; Function Attrs: nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) unnamed_addr #3
; Function Attrs: nounwind
define internal void @"_ZN7_$UP$i814glue_drop.234017hb75657ce3a7ee077E"(i8** nocapture readonly) unnamed_addr #3 {
entry-block:
%1 = load i8** %0, align 8
%2 = icmp eq i8* %1, null
br i1 %2, label %next, label %cond
next: ; preds = %entry-block, %cond
ret void
cond: ; preds = %entry-block
tail call void @free(i8* %1) #8
br label %next
}
; Function Attrs: nounwind
declare void @free(i8* nocapture) unnamed_addr #3
; Function Attrs: nounwind readnone uwtable
define internal %"struct.core::intrinsics::TypeId[#3]" @_ZN3any5T.Any11get_type_id20h30360513813683836744v0.0E(%str_slice* nocapture readnone) unnamed_addr #5 {
entry-block:
ret %"struct.core::intrinsics::TypeId[#3]" { i64 8802261786977977801 }
}
declare i32 @rust_eh_personality(i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*) unnamed_addr #6
; Function Attrs: nounwind
declare noalias i8* @realloc(i8* nocapture, i64) unnamed_addr #3
; Function Attrs: uwtable
define void @_ZN4test13vec_speed_vec20h6a651987ed997271vWa4v0.0E(%"struct.test::Bencher[#5]"* noalias nocapture) unnamed_addr #1 {
entry-block:
%dummy.i.i = alloca {}, align 8
%1 = alloca %str_slice, align 8
%2 = alloca %str_slice, align 8
%3 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args.i87 = alloca %"struct.std::fmt::Arguments[#1]", align 8
%4 = alloca %str_slice, align 8
%5 = alloca %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>", align 8
%6 = alloca <2 x %struct.Vector*>, align 16
%tmpcast = bitcast <2 x %struct.Vector*>* %6 to %"struct.Multiplier<&'static Vector,&'static Vector>"*
%7 = alloca %str_slice, align 8
%8 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args.i = alloca %"struct.std::fmt::Arguments[#1]", align 8
%9 = alloca %str_slice, align 8
%10 = alloca %str_slice, align 8
%rng = alloca %"struct.rand::XorShiftRng[#7]", align 8
%a = alloca %struct.Vector, align 8
%11 = alloca %"struct.std::vec::Vec<f32>[#1]", align 8
call void @_ZN8weak_rng20hfdeb0b8a85b490be0Tc9v0.11.preE(%"struct.rand::XorShiftRng[#7]"* noalias nocapture sret %rng)
call fastcc void @_ZN3Rng7gen_vec20h28934972009731545304v0.0E(%"struct.std::vec::Vec<f32>[#1]"* noalias nocapture sret %11, %"struct.rand::XorShiftRng[#7]"* %rng)
%.idx12 = getelementptr %"struct.std::vec::Vec<f32>[#1]"* %11, i64 0, i32 0
%.idx12.val = load i64* %.idx12, align 8
%.idx13 = getelementptr %"struct.std::vec::Vec<f32>[#1]"* %11, i64 0, i32 2
%.idx13.val = load float** %.idx13, align 8
%12 = bitcast %str_slice* %9 to i8*
call void @llvm.lifetime.start(i64 16, i8* %12)
%13 = bitcast %str_slice* %10 to i8*
call void @llvm.lifetime.start(i64 16, i8* %13)
%14 = icmp ugt i64 %.idx12.val, 9
br i1 %14, label %normal-return, label %then-block-5126-.i.i
then-block-5126-.i.i: ; preds = %entry-block
%15 = getelementptr inbounds %str_slice* %9, i64 0, i32 0
store i8* getelementptr inbounds ([35 x i8]* @str2501, i64 0, i64 0), i8** %15, align 8
%16 = getelementptr inbounds %str_slice* %9, i64 0, i32 1
store i64 35, i64* %16, align 8
%17 = getelementptr inbounds %str_slice* %10, i64 0, i32 0
store i8* getelementptr inbounds ([42 x i8]* @str2500, i64 0, i64 0), i8** %17, align 8
%18 = getelementptr inbounds %str_slice* %10, i64 0, i32 1
store i64 42, i64* %18, align 8
invoke void @_ZN7failure12begin_unwind20ha3b1880e6a964addrxF9v0.11.preE(%str_slice* nocapture %9, %str_slice* nocapture %10, i64 549)
to label %.noexc unwind label %unwind_ast_3011_
.noexc: ; preds = %then-block-5126-.i.i
unreachable
normal-return: ; preds = %entry-block
call void @llvm.lifetime.end(i64 16, i8* %12)
call void @llvm.lifetime.end(i64 16, i8* %13)
invoke fastcc void @_ZN6Vector3new20hf0f9aad5a0222bb5Uda4v0.0E(%struct.Vector* noalias nocapture sret %a, float* %.idx13.val, i64 10)
to label %normal-return1 unwind label %unwind_ast_3011_
unwind_ast_3011_: ; preds = %then-block-5126-.i.i, %normal-return
%19 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.fca.0.extract = extractvalue { i8*, i32 } %19, 0
%.fca.1.extract = extractvalue { i8*, i32 } %19, 1
%20 = bitcast float* %.idx13.val to i8*
call void @free(i8* %20) #8
br label %resume
resume: ; preds = %unwind_ast_3004_, %unwind_ast_3011_
%.sroa.3.0 = phi i32 [ %.fca.1.extract8, %unwind_ast_3004_ ], [ %.fca.1.extract, %unwind_ast_3011_ ]
%.sroa.0.0 = phi i8* [ %.fca.0.extract6, %unwind_ast_3004_ ], [ %.fca.0.extract, %unwind_ast_3011_ ]
%.fca.0.insert = insertvalue { i8*, i32 } undef, i8* %.sroa.0.0, 0
%.fca.1.insert = insertvalue { i8*, i32 } %.fca.0.insert, i32 %.sroa.3.0, 1
resume { i8*, i32 } %.fca.1.insert
normal-return1: ; preds = %normal-return
%21 = bitcast float* %.idx13.val to i8*
call void @free(i8* %21) #8
%22 = invoke i64 @_ZN15precise_time_ns20h3c754008add7480eaqa9v0.11.preE()
to label %.noexc17 unwind label %unwind_ast_3004_.nonloopexit
.noexc17: ; preds = %normal-return1
%23 = getelementptr inbounds %"struct.test::Bencher[#5]"* %0, i64 0, i32 1
store i64 %22, i64* %23, align 8
%24 = getelementptr inbounds %"struct.test::Bencher[#5]"* %0, i64 0, i32 0
%25 = load i64* %24, align 8
%26 = icmp eq i64 %25, 0
br i1 %26, label %join3.i, label %match_else.lr.ph.i
match_else.lr.ph.i: ; preds = %.noexc17
%27 = bitcast {}* %dummy.i.i to i8*
%28 = bitcast %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* %5 to i8*
%29 = bitcast <2 x %struct.Vector*>* %6 to i8*
%30 = bitcast %str_slice* %7 to i8*
%31 = bitcast %"struct.std::fmt::Argument[#1]"* %8 to i8*
%32 = bitcast %"struct.std::fmt::Arguments[#1]"* %__args.i to i8*
%33 = bitcast %str_slice* %2 to i8*
%34 = bitcast %"struct.std::fmt::Argument[#1]"* %3 to i8*
%35 = bitcast %"struct.std::fmt::Arguments[#1]"* %__args.i87 to i8*
%36 = getelementptr inbounds %struct.Vector* %a, i64 0, i32 0, i32 0
%.sroa.0197.0..sroa_idx = getelementptr inbounds %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* %5, i64 0, i32 0, i32 0
%.sroa.5199.0..sroa_idx201 = getelementptr inbounds %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* %5, i64 0, i32 0, i32 1, i32 0
%37 = getelementptr inbounds %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* %5, i64 0, i32 1
%38 = getelementptr inbounds %struct.Vector* %a, i64 0, i32 0, i32 2
br label %.noexc25
.noexc25: ; preds = %.noexc18, %match_else.lr.ph.i
%39 = phi i64 [ 0, %match_else.lr.ph.i ], [ %40, %.noexc18 ]
%40 = add i64 %39, 1
call void @llvm.lifetime.start(i64 32, i8* %28)
call void @llvm.lifetime.start(i64 16, i8* %29)
call void @llvm.lifetime.start(i64 16, i8* %30)
call void @llvm.lifetime.start(i64 16, i8* %31)
call void @llvm.lifetime.start(i64 32, i8* %32)
br label %.noexc66
.noexc66: ; preds = %.noexc29, %.noexc25
%41 = phi i64 [ 0, %.noexc25 ], [ %45, %.noexc29 ]
%42 = icmp slt i64 %41, 100
br i1 %42, label %.noexc82, label %.noexc47.preheader
.noexc47.preheader: ; preds = %.noexc66
%43 = load i64* %36, align 8
%44 = load %"struct.core::cell::Cell<f32>[#3]"** %38, align 8
br label %.noexc47
.noexc82: ; preds = %.noexc66
%45 = add i64 %41, 1
invoke fastcc void @"_ZN29Multiplier$LT$TA$C$$x20TB$GT$3new20h43690195969142038944v0.0E"(%"struct.Multiplier<&'static Vector,&'static Vector>"* noalias nocapture sret %tmpcast, %struct.Vector* %a, %struct.Vector* %a)
to label %.noexc91 unwind label %unwind_ast_3004_.loopexit.loopexit
.noexc91: ; preds = %.noexc82
%46 = load <2 x %struct.Vector*>* %6, align 16
call void @llvm.lifetime.start(i64 16, i8* %33)
call void @llvm.lifetime.start(i64 16, i8* %34)
call void @llvm.lifetime.start(i64 32, i8* %35)
%47 = load i64* %36, align 8
%48 = extractelement <2 x %struct.Vector*> %46, i32 0
%49 = getelementptr inbounds %struct.Vector* %48, i64 0, i32 0, i32 0
%50 = load i64* %49, align 8
%51 = icmp eq i64 %47, %50
br i1 %51, label %.noexc29, label %.noexc93
.noexc93: ; preds = %.noexc91
%52 = getelementptr inbounds %str_slice* %2, i64 0, i32 0
store i8* getelementptr inbounds ([18 x i8]* @str2563, i64 0, i64 0), i8** %52, align 8
%53 = getelementptr inbounds %str_slice* %2, i64 0, i32 1
store i64 18, i64* %53, align 8
%54 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %3, i64 0, i32 0
store void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @_ZN3fmt13secret_string21h168541290156162148204v0.0E to void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)*), void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)** %54, align 8
%55 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %3, i64 0, i32 1
%56 = bitcast %str_slice* %2 to %"enum.core::any::Void[#3]"*
store %"enum.core::any::Void[#3]"* %56, %"enum.core::any::Void[#3]"** %55, align 8
%arg.i105.sroa.0.0..sroa_idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i87, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN4test14vec_speed_loop15__STATIC_FMTSTR20h2754a7156d484e2eI1a4v0.0E to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %arg.i105.sroa.0.0..sroa_idx, align 8
%arg.i105.sroa.4.0..sroa_idx228 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i87, i64 0, i32 0, i32 1
store i64 2, i64* %arg.i105.sroa.4.0..sroa_idx228, align 8
%__adjust.sroa.0.0..sroa_idx.i101 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i87, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %3, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0..sroa_idx.i101, align 8
%__adjust.sroa.2.0..sroa_idx1.i102 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i87, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0..sroa_idx1.i102, align 8
%57 = bitcast %str_slice* %1 to i8*
call void @llvm.lifetime.start(i64 16, i8* %57)
%58 = getelementptr inbounds %str_slice* %1, i64 0, i32 0
store i8* getelementptr inbounds ([14 x i8]* @str2220, i64 0, i64 0), i8** %58, align 8
%59 = getelementptr inbounds %str_slice* %1, i64 0, i32 1
store i64 14, i64* %59, align 8
invoke void @_ZN2rt6unwind16begin_unwind_fmt20h1360f91e7709ea39KsF9v0.11.preE(%"struct.std::fmt::Arguments[#1]"* nocapture %__args.i87, %str_slice* nocapture %1, i64 320)
to label %.noexc95 unwind label %unwind_ast_3004_.loopexit.nonloopexit
.noexc95: ; preds = %.noexc93
unreachable
.noexc29: ; preds = %.noexc91
call void @llvm.lifetime.end(i64 16, i8* %33)
call void @llvm.lifetime.end(i64 16, i8* %34)
call void @llvm.lifetime.end(i64 32, i8* %35)
store %struct.Vector* %a, %struct.Vector** %.sroa.0197.0..sroa_idx, align 8
%60 = bitcast %struct.Vector** %.sroa.5199.0..sroa_idx201 to <2 x %struct.Vector*>*
store <2 x %struct.Vector*> %46, <2 x %struct.Vector*>* %60, align 8
store %struct.Vector* %a, %struct.Vector** %37, align 8
invoke fastcc void @"_ZN27LHS.VectorAssign$LT$RHS$GT$6assign21h155967611411155622994v0.0E"(%struct.Vector* %a, %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* nocapture %5)
to label %.noexc66 unwind label %unwind_ast_3004_.loopexit.loopexit
.noexc47: ; preds = %.noexc47.preheader, %match_else16.i
%.sroa.5.8.load235 = phi i64 [ %64, %match_else16.i ], [ 0, %.noexc47.preheader ]
%sum.0.i = phi float [ %65, %match_else16.i ], [ 0.000000e+00, %.noexc47.preheader ]
%61 = icmp ult i64 %.sroa.5.8.load235, %43
br i1 %61, label %match_else16.i, label %join19.i
match_else16.i: ; preds = %.noexc47
%62 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %44, i64 %.sroa.5.8.load235, i32 0, i32 0
%63 = load float* %62, align 4
%64 = add i64 %.sroa.5.8.load235, 1
%65 = fadd float %sum.0.i, %63
br label %.noexc47
join19.i: ; preds = %.noexc47
%sum.0.i.lcssa = phi float [ %sum.0.i, %.noexc47 ]
%66 = fcmp une float %sum.0.i.lcssa, 9.600000e+01
br i1 %66, label %.noexc18, label %.noexc34
.noexc34: ; preds = %join19.i
%67 = getelementptr inbounds %str_slice* %7, i64 0, i32 0
store i8* getelementptr inbounds ([11 x i8]* @str2566, i64 0, i64 0), i8** %67, align 8
%68 = getelementptr inbounds %str_slice* %7, i64 0, i32 1
store i64 11, i64* %68, align 8
%69 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %8, i64 0, i32 0
store void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @_ZN3fmt13secret_string21h168541290156162148204v0.0E to void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)*), void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)** %69, align 8
%70 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %8, i64 0, i32 1
%71 = bitcast %str_slice* %7 to %"enum.core::any::Void[#3]"*
store %"enum.core::any::Void[#3]"* %71, %"enum.core::any::Void[#3]"** %70, align 8
%arg.i40.sroa.0.0..sroa_idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN4test14vec_speed_loop15__STATIC_FMTSTR20h2754a7156d484e2eI1a4v0.0E to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %arg.i40.sroa.0.0..sroa_idx, align 8
%arg.i40.sroa.4.0..sroa_idx177 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i, i64 0, i32 0, i32 1
store i64 2, i64* %arg.i40.sroa.4.0..sroa_idx177, align 8
%__adjust.sroa.0.0..sroa_idx.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %8, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0..sroa_idx.i, align 8
%__adjust.sroa.2.0..sroa_idx1.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0..sroa_idx1.i, align 8
%72 = bitcast %str_slice* %4 to i8*
call void @llvm.lifetime.start(i64 16, i8* %72)
%73 = getelementptr inbounds %str_slice* %4, i64 0, i32 0
store i8* getelementptr inbounds ([14 x i8]* @str2220, i64 0, i64 0), i8** %73, align 8
%74 = getelementptr inbounds %str_slice* %4, i64 0, i32 1
store i64 14, i64* %74, align 8
invoke void @_ZN2rt6unwind16begin_unwind_fmt20h1360f91e7709ea39KsF9v0.11.preE(%"struct.std::fmt::Arguments[#1]"* nocapture %__args.i, %str_slice* nocapture %4, i64 357)
to label %.noexc36 unwind label %unwind_ast_3004_.loopexit.nonloopexit
.noexc36: ; preds = %.noexc34
unreachable
.noexc18: ; preds = %join19.i
call void @llvm.lifetime.end(i64 32, i8* %28)
call void @llvm.lifetime.end(i64 16, i8* %29)
call void @llvm.lifetime.end(i64 16, i8* %30)
call void @llvm.lifetime.end(i64 16, i8* %31)
call void @llvm.lifetime.end(i64 32, i8* %32)
call void @llvm.lifetime.start(i64 0, i8* %27) #8
call void asm "", "r,~{dirflag},~{fpsr},~{flags}"({}* %dummy.i.i) #8
call void @llvm.lifetime.end(i64 0, i8* %27) #8
%exitcond.i = icmp eq i64 %40, %25
br i1 %exitcond.i, label %join3.i.loopexit, label %.noexc25
join3.i.loopexit: ; preds = %.noexc18
br label %join3.i
join3.i: ; preds = %join3.i.loopexit, %.noexc17
%75 = invoke i64 @_ZN15precise_time_ns20h3c754008add7480eaqa9v0.11.preE()
to label %normal-return2 unwind label %unwind_ast_3004_.nonloopexit
normal-return2: ; preds = %join3.i
%76 = getelementptr inbounds %"struct.test::Bencher[#5]"* %0, i64 0, i32 2
store i64 %75, i64* %76, align 8
%.idx1.i = getelementptr %struct.Vector* %a, i64 0, i32 0, i32 2
%.idx1.val.i = load %"struct.core::cell::Cell<f32>[#3]"** %.idx1.i, align 8
%77 = bitcast %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i to i8*
call void @free(i8* %77) #8
ret void
unwind_ast_3004_.loopexit.loopexit: ; preds = %.noexc29, %.noexc82
%lpad.loopexit238 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
br label %unwind_ast_3004_
unwind_ast_3004_.loopexit.nonloopexit: ; preds = %.noexc34, %.noexc93
%lpad.nonloopexit239 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
br label %unwind_ast_3004_
unwind_ast_3004_.nonloopexit: ; preds = %normal-return1, %join3.i
%lpad.nonloopexit = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.idx1.i20.pre = getelementptr %struct.Vector* %a, i64 0, i32 0, i32 2
br label %unwind_ast_3004_
unwind_ast_3004_: ; preds = %unwind_ast_3004_.loopexit.loopexit, %unwind_ast_3004_.loopexit.nonloopexit, %unwind_ast_3004_.nonloopexit
%.idx1.i20.pre-phi = phi %"struct.core::cell::Cell<f32>[#3]"** [ %.idx1.i20.pre, %unwind_ast_3004_.nonloopexit ], [ %38, %unwind_ast_3004_.loopexit.nonloopexit ], [ %38, %unwind_ast_3004_.loopexit.loopexit ]
%lpad.phi = phi { i8*, i32 } [ %lpad.nonloopexit, %unwind_ast_3004_.nonloopexit ], [ %lpad.nonloopexit239, %unwind_ast_3004_.loopexit.nonloopexit ], [ %lpad.loopexit238, %unwind_ast_3004_.loopexit.loopexit ]
%.fca.0.extract6 = extractvalue { i8*, i32 } %lpad.phi, 0
%.fca.1.extract8 = extractvalue { i8*, i32 } %lpad.phi, 1
%.idx1.val.i21 = load %"struct.core::cell::Cell<f32>[#3]"** %.idx1.i20.pre-phi, align 8
%78 = bitcast %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i21 to i8*
call void @free(i8* %78) #8
br label %resume
}
declare void @_ZN8weak_rng20hfdeb0b8a85b490be0Tc9v0.11.preE(%"struct.rand::XorShiftRng[#7]"* noalias sret) unnamed_addr #6
; Function Attrs: cold noreturn
declare void @_ZN7failure12begin_unwind20ha3b1880e6a964addrxF9v0.11.preE(%str_slice* nocapture, %str_slice* noalias nocapture, i64) unnamed_addr #7
; Function Attrs: uwtable
define internal fastcc void @_ZN3Rng7gen_vec20h28934972009731545304v0.0E(%"struct.std::vec::Vec<f32>[#1]"* noalias nocapture sret, %"struct.rand::XorShiftRng[#7]"* noalias) unnamed_addr #1 {
entry-block:
%2 = tail call i8* @malloc(i64 40) #8
%3 = icmp eq i8* %2, null
br i1 %3, label %then-block-3949-.i.i.i, label %"_ZN3vec12Vec$LT$T$GT$13with_capacity21h175822918645250882804v0.0E.exit.i"
then-block-3949-.i.i.i: ; preds = %entry-block
tail call void @llvm.trap() #8
unreachable
"_ZN3vec12Vec$LT$T$GT$13with_capacity21h175822918645250882804v0.0E.exit.i": ; preds = %entry-block
%4 = bitcast i8* %2 to float*
%5 = getelementptr inbounds %"struct.rand::XorShiftRng[#7]"* %1, i64 0, i32 0
%6 = getelementptr inbounds %"struct.rand::XorShiftRng[#7]"* %1, i64 0, i32 1
%7 = getelementptr inbounds %"struct.rand::XorShiftRng[#7]"* %1, i64 0, i32 2
%8 = getelementptr inbounds %"struct.rand::XorShiftRng[#7]"* %1, i64 0, i32 3
%.promoted = load i32* %5, align 4
%.promoted3 = load i32* %6, align 4
%.promoted5 = load i32* %7, align 4
%.promoted7 = load i32* %8, align 4
%9 = shl i32 %.promoted, 11
%10 = xor i32 %9, %.promoted
%11 = lshr i32 %.promoted7, 19
%12 = lshr i32 %10, 8
%13 = xor i32 %12, %10
%14 = xor i32 %13, %.promoted7
%15 = xor i32 %14, %11
%16 = lshr i32 %15, 8
%17 = uitofp i32 %16 to float
%18 = fmul float %17, 0x3E70000000000000
store float %18, float* %4, align 4
%19 = shl i32 %.promoted3, 11
%20 = xor i32 %19, %.promoted3
%21 = lshr i32 %14, 19
%22 = lshr i32 %20, 8
%23 = xor i32 %22, %20
%24 = xor i32 %23, %15
%25 = xor i32 %24, %21
%26 = lshr i32 %25, 8
%27 = uitofp i32 %26 to float
%28 = fmul float %27, 0x3E70000000000000
%29 = getelementptr inbounds i8* %2, i64 4
%30 = bitcast i8* %29 to float*
store float %28, float* %30, align 4
%31 = shl i32 %.promoted5, 11
%32 = xor i32 %31, %.promoted5
%33 = lshr i32 %24, 19
%34 = lshr i32 %32, 8
%35 = xor i32 %34, %32
%36 = xor i32 %35, %25
%37 = xor i32 %36, %33
%38 = lshr i32 %37, 8
%39 = uitofp i32 %38 to float
%40 = fmul float %39, 0x3E70000000000000
%41 = getelementptr inbounds i8* %2, i64 8
%42 = bitcast i8* %41 to float*
store float %40, float* %42, align 4
%43 = shl i32 %.promoted7, 11
%44 = xor i32 %43, %.promoted7
%45 = lshr i32 %36, 19
%46 = lshr i32 %44, 8
%47 = xor i32 %46, %44
%48 = xor i32 %47, %37
%49 = xor i32 %48, %45
%50 = lshr i32 %49, 8
%51 = uitofp i32 %50 to float
%52 = fmul float %51, 0x3E70000000000000
%53 = getelementptr inbounds i8* %2, i64 12
%54 = bitcast i8* %53 to float*
store float %52, float* %54, align 4
%55 = shl i32 %15, 11
%56 = xor i32 %55, %15
%57 = lshr i32 %48, 19
%58 = lshr i32 %56, 8
%59 = xor i32 %58, %56
%60 = xor i32 %59, %49
%61 = xor i32 %60, %57
%62 = lshr i32 %61, 8
%63 = uitofp i32 %62 to float
%64 = fmul float %63, 0x3E70000000000000
%65 = getelementptr inbounds i8* %2, i64 16
%66 = bitcast i8* %65 to float*
store float %64, float* %66, align 4
%67 = shl i32 %25, 11
%68 = xor i32 %67, %25
%69 = lshr i32 %60, 19
%70 = lshr i32 %68, 8
%71 = xor i32 %70, %68
%72 = xor i32 %71, %61
%73 = xor i32 %72, %69
%74 = lshr i32 %73, 8
%75 = uitofp i32 %74 to float
%76 = fmul float %75, 0x3E70000000000000
%77 = getelementptr inbounds i8* %2, i64 20
%78 = bitcast i8* %77 to float*
store float %76, float* %78, align 4
%79 = shl i32 %37, 11
%80 = xor i32 %79, %37
%81 = lshr i32 %72, 19
%82 = lshr i32 %80, 8
%83 = xor i32 %82, %80
%84 = xor i32 %83, %73
%85 = xor i32 %84, %81
%86 = lshr i32 %85, 8
%87 = uitofp i32 %86 to float
%88 = fmul float %87, 0x3E70000000000000
%89 = getelementptr inbounds i8* %2, i64 24
%90 = bitcast i8* %89 to float*
store float %88, float* %90, align 4
%91 = shl i32 %49, 11
%92 = xor i32 %91, %49
%93 = lshr i32 %84, 19
%94 = lshr i32 %92, 8
%95 = xor i32 %94, %92
%96 = xor i32 %95, %85
%97 = xor i32 %96, %93
%98 = lshr i32 %97, 8
%99 = uitofp i32 %98 to float
%100 = fmul float %99, 0x3E70000000000000
%101 = getelementptr inbounds i8* %2, i64 28
%102 = bitcast i8* %101 to float*
store float %100, float* %102, align 4
%103 = shl i32 %61, 11
%104 = xor i32 %103, %61
%105 = lshr i32 %96, 19
%106 = lshr i32 %104, 8
%107 = xor i32 %106, %104
%108 = xor i32 %107, %97
%109 = xor i32 %108, %105
%110 = lshr i32 %109, 8
%111 = uitofp i32 %110 to float
%112 = fmul float %111, 0x3E70000000000000
%113 = getelementptr inbounds i8* %2, i64 32
%114 = bitcast i8* %113 to float*
store float %112, float* %114, align 4
%115 = shl i32 %73, 11
%116 = xor i32 %115, %73
%117 = lshr i32 %108, 19
%118 = lshr i32 %116, 8
%119 = xor i32 %118, %116
%120 = xor i32 %119, %109
%121 = xor i32 %120, %117
%122 = lshr i32 %121, 8
%123 = uitofp i32 %122 to float
%124 = fmul float %123, 0x3E70000000000000
%125 = getelementptr inbounds i8* %2, i64 36
%126 = bitcast i8* %125 to float*
store float %124, float* %126, align 4
store i32 %85, i32* %5, align 4
store i32 %97, i32* %6, align 4
store i32 %109, i32* %7, align 4
store i32 %121, i32* %8, align 4
%127 = bitcast %"struct.std::vec::Vec<f32>[#1]"* %0 to <2 x i64>*
store <2 x i64> <i64 10, i64 10>, <2 x i64>* %127, align 8
%xs.sroa.12.0..sroa_idx5.i = getelementptr inbounds %"struct.std::vec::Vec<f32>[#1]"* %0, i64 0, i32 2
store float* %4, float** %xs.sroa.12.0..sroa_idx5.i, align 8
ret void
}
declare i64 @_ZN15precise_time_ns20h3c754008add7480eaqa9v0.11.preE() unnamed_addr #6
; Function Attrs: uwtable
define internal fastcc void @"_ZN27LHS.VectorAssign$LT$RHS$GT$6assign21h155967611411155622994v0.0E"(%struct.Vector* nocapture readonly, %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* noalias nocapture readonly) unnamed_addr #1 {
entry-block:
%2 = alloca %str_slice, align 8
%3 = alloca %str_slice, align 8
%4 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args = alloca %"struct.std::fmt::Arguments[#1]", align 8
%.idx.i = getelementptr %struct.Vector* %0, i64 0, i32 0, i32 0
%.idx.val.i = load i64* %.idx.i, align 8
%.idx.i20 = getelementptr %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* %1, i64 0, i32 0, i32 0
%.idx.val.i21 = load %struct.Vector** %.idx.i20, align 8
%.idx.val.idx.i22 = getelementptr %struct.Vector* %.idx.val.i21, i64 0, i32 0, i32 0
%.idx.val.idx.val.i23 = load i64* %.idx.val.idx.i22, align 8
%5 = icmp eq i64 %.idx.val.i, %.idx.val.idx.val.i23
br i1 %5, label %loop_body.preheader, label %then-block-103-
loop_body.preheader: ; preds = %entry-block
%6 = icmp eq i64 %.idx.val.i, 0
br i1 %6, label %join10, label %match_else.lr.ph
match_else.lr.ph: ; preds = %loop_body.preheader
%.idx1.i.i.i = getelementptr %struct.Vector* %.idx.val.i21, i64 0, i32 0, i32 2
%.idx.i.i = getelementptr %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* %1, i64 0, i32 0, i32 1, i32 0
%.idx.val.i.i = load %struct.Vector** %.idx.i.i, align 8
%.idx4.i.i = getelementptr %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* %1, i64 0, i32 0, i32 1, i32 1
%.idx4.val.i.i = load %struct.Vector** %.idx4.i.i, align 8
%.idx.val.idx.i.i = getelementptr %struct.Vector* %.idx.val.i.i, i64 0, i32 0, i32 2
%.idx4.val.idx.i.i = getelementptr %struct.Vector* %.idx4.val.i.i, i64 0, i32 0, i32 2
%7 = getelementptr inbounds %"struct.Divider<Adder<&'static Vector,Multiplier<&'static Vector,&'static Vector>>,&'static Vector>"* %1, i64 0, i32 1
%.val.i = load %struct.Vector** %7, align 8
%.idx1.i.i = getelementptr %struct.Vector* %.val.i, i64 0, i32 0, i32 2
%.idx1.i = getelementptr %struct.Vector* %0, i64 0, i32 0, i32 2
br label %match_else
then-block-103-: ; preds = %entry-block
%8 = getelementptr inbounds %str_slice* %3, i64 0, i32 0
store i8* getelementptr inbounds ([21 x i8]* @str2547, i64 0, i64 0), i8** %8, align 8
%9 = getelementptr inbounds %str_slice* %3, i64 0, i32 1
store i64 21, i64* %9, align 8
%10 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %4, i64 0, i32 0
store void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @_ZN3fmt13secret_string21h168541290156162148204v0.0E to void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)*), void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)** %10, align 8
%11 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %4, i64 0, i32 1
%12 = bitcast %str_slice* %3 to %"enum.core::any::Void[#3]"*
store %"enum.core::any::Void[#3]"* %12, %"enum.core::any::Void[#3]"** %11, align 8
%__adjust.sroa.0.0..sroa_idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN4test14vec_speed_loop15__STATIC_FMTSTR20h2754a7156d484e2eI1a4v0.0E to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.sroa.0.0..sroa_idx, align 8
%__adjust.sroa.2.0..sroa_idx26 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 1
store i64 2, i64* %__adjust.sroa.2.0..sroa_idx26, align 8
%__adjust.sroa.0.0..sroa_idx.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %4, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0..sroa_idx.i, align 8
%__adjust.sroa.2.0..sroa_idx1.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0..sroa_idx1.i, align 8
%13 = bitcast %str_slice* %2 to i8*
call void @llvm.lifetime.start(i64 16, i8* %13)
%14 = getelementptr inbounds %str_slice* %2, i64 0, i32 0
store i8* getelementptr inbounds ([14 x i8]* @str2220, i64 0, i64 0), i8** %14, align 8
%15 = getelementptr inbounds %str_slice* %2, i64 0, i32 1
store i64 14, i64* %15, align 8
call void @_ZN2rt6unwind16begin_unwind_fmt20h1360f91e7709ea39KsF9v0.11.preE(%"struct.std::fmt::Arguments[#1]"* nocapture %__args, %str_slice* nocapture %2, i64 38)
unreachable
match_else: ; preds = %match_else, %match_else.lr.ph
%.sroa.024.0.load3133 = phi i64 [ 0, %match_else.lr.ph ], [ %16, %match_else ]
%16 = add i64 %.sroa.024.0.load3133, 1
%.idx1.val.i.i.i = load %"struct.core::cell::Cell<f32>[#3]"** %.idx1.i.i.i, align 8
%17 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i.i.i, i64 %.sroa.024.0.load3133, i32 0, i32 0
%18 = load float* %17, align 4
%.idx.val.idx.val.i.i = load %"struct.core::cell::Cell<f32>[#3]"** %.idx.val.idx.i.i, align 8
%.idx4.val.idx.val.i.i = load %"struct.core::cell::Cell<f32>[#3]"** %.idx4.val.idx.i.i, align 8
%19 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %.idx.val.idx.val.i.i, i64 %.sroa.024.0.load3133, i32 0, i32 0
%20 = load float* %19, align 4
%21 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %.idx4.val.idx.val.i.i, i64 %.sroa.024.0.load3133, i32 0, i32 0
%22 = load float* %21, align 4
%23 = fmul float %20, %22
%24 = fadd float %18, %23
%.idx1.val.i.i = load %"struct.core::cell::Cell<f32>[#3]"** %.idx1.i.i, align 8
%25 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i.i, i64 %.sroa.024.0.load3133, i32 0, i32 0
%26 = load float* %25, align 4
%27 = fdiv float %24, %26
%.idx1.val.i = load %"struct.core::cell::Cell<f32>[#3]"** %.idx1.i, align 8
%28 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i, i64 %.sroa.024.0.load3133, i32 0, i32 0
store float %27, float* %28, align 4
%exitcond = icmp eq i64 %16, %.idx.val.i
br i1 %exitcond, label %join10.loopexit, label %match_else
join10.loopexit: ; preds = %match_else
br label %join10
join10: ; preds = %join10.loopexit, %loop_body.preheader
ret void
}
; Function Attrs: uwtable
define internal void @_ZN3fmt13secret_string21h168541290156162148204v0.0E(%"enum.core::result::Result<(),std::io::IoError>[#3]"* noalias nocapture sret, %str_slice* nocapture readonly, %"struct.std::fmt::Formatter[#1]"* noalias) unnamed_addr #1 {
entry-block:
%3 = alloca %str_slice, align 8
%4 = bitcast %str_slice* %3 to i8*
call void @llvm.lifetime.start(i64 16, i8* %4)
%5 = bitcast %str_slice* %1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false) #8
call void @"_ZN3fmt22Formatter$LT$$x27a$GT$3pad20h30fa0e01affd8d1aHJv9v0.11.preE"(%"enum.core::result::Result<(),std::io::IoError>[#3]"* noalias nocapture sret %0, %"struct.std::fmt::Formatter[#1]"* %2, %str_slice* nocapture %3)
call void @llvm.lifetime.end(i64 16, i8* %4)
ret void
}
declare void @"_ZN3fmt22Formatter$LT$$x27a$GT$3pad20h30fa0e01affd8d1aHJv9v0.11.preE"(%"enum.core::result::Result<(),std::io::IoError>[#3]"* noalias sret, %"struct.std::fmt::Formatter[#1]"* noalias, %str_slice* nocapture) unnamed_addr #6
; Function Attrs: uwtable
define internal fastcc void @"_ZN29Multiplier$LT$TA$C$$x20TB$GT$3new20h43690195969142038944v0.0E"(%"struct.Multiplier<&'static Vector,&'static Vector>"* noalias nocapture sret, %struct.Vector*, %struct.Vector*) unnamed_addr #1 {
entry-block:
%3 = alloca %str_slice, align 8
%4 = alloca %str_slice, align 8
%5 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args = alloca %"struct.std::fmt::Arguments[#1]", align 8
%.idx.i = getelementptr %struct.Vector* %1, i64 0, i32 0, i32 0
%.idx.val.i = load i64* %.idx.i, align 8
%.idx.i5 = getelementptr %struct.Vector* %2, i64 0, i32 0, i32 0
%.idx.val.i6 = load i64* %.idx.i5, align 8
%6 = icmp eq i64 %.idx.val.i, %.idx.val.i6
br i1 %6, label %next-block, label %then-block-1383-
then-block-1383-: ; preds = %entry-block
%7 = getelementptr inbounds %str_slice* %4, i64 0, i32 0
store i8* getelementptr inbounds ([18 x i8]* @str2563, i64 0, i64 0), i8** %7, align 8
%8 = getelementptr inbounds %str_slice* %4, i64 0, i32 1
store i64 18, i64* %8, align 8
%9 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %5, i64 0, i32 0
store void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @_ZN3fmt13secret_string21h168541290156162148204v0.0E to void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)*), void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)** %9, align 8
%10 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %5, i64 0, i32 1
%11 = bitcast %str_slice* %4 to %"enum.core::any::Void[#3]"*
store %"enum.core::any::Void[#3]"* %11, %"enum.core::any::Void[#3]"** %10, align 8
%__adjust.sroa.0.0..sroa_idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN4test14vec_speed_loop15__STATIC_FMTSTR20h2754a7156d484e2eI1a4v0.0E to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.sroa.0.0..sroa_idx, align 8
%__adjust.sroa.2.0..sroa_idx7 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 1
store i64 2, i64* %__adjust.sroa.2.0..sroa_idx7, align 8
%__adjust.sroa.0.0..sroa_idx.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %5, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0..sroa_idx.i, align 8
%__adjust.sroa.2.0..sroa_idx1.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0..sroa_idx1.i, align 8
%12 = bitcast %str_slice* %3 to i8*
call void @llvm.lifetime.start(i64 16, i8* %12)
%13 = getelementptr inbounds %str_slice* %3, i64 0, i32 0
store i8* getelementptr inbounds ([14 x i8]* @str2220, i64 0, i64 0), i8** %13, align 8
%14 = getelementptr inbounds %str_slice* %3, i64 0, i32 1
store i64 14, i64* %14, align 8
call void @_ZN2rt6unwind16begin_unwind_fmt20h1360f91e7709ea39KsF9v0.11.preE(%"struct.std::fmt::Arguments[#1]"* nocapture %__args, %str_slice* nocapture %3, i64 322)
unreachable
next-block: ; preds = %entry-block
%15 = getelementptr inbounds %"struct.Multiplier<&'static Vector,&'static Vector>"* %0, i64 0, i32 0
store %struct.Vector* %1, %struct.Vector** %15, align 8
%16 = getelementptr inbounds %"struct.Multiplier<&'static Vector,&'static Vector>"* %0, i64 0, i32 1
store %struct.Vector* %2, %struct.Vector** %16, align 8
ret void
}
; Function Attrs: uwtable
define void @_ZN4test14vec_speed_loop20he36626d22787d321hZa4v0.0E(%"struct.test::Bencher[#5]"* noalias nocapture) unnamed_addr #1 {
entry-block:
%dummy.i.i = alloca {}, align 8
%1 = alloca %str_slice, align 8
%2 = alloca %str_slice, align 8
%3 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args.i = alloca %"struct.std::fmt::Arguments[#1]", align 8
%4 = alloca %str_slice, align 8
%5 = alloca %str_slice, align 8
%rng = alloca %"struct.rand::XorShiftRng[#7]", align 8
%a = alloca %struct.Vector, align 8
%6 = alloca %"struct.std::vec::Vec<f32>[#1]", align 8
call void @_ZN8weak_rng20hfdeb0b8a85b490be0Tc9v0.11.preE(%"struct.rand::XorShiftRng[#7]"* noalias nocapture sret %rng)
call fastcc void @_ZN3Rng7gen_vec20h28934972009731545304v0.0E(%"struct.std::vec::Vec<f32>[#1]"* noalias nocapture sret %6, %"struct.rand::XorShiftRng[#7]"* %rng)
%.idx12 = getelementptr %"struct.std::vec::Vec<f32>[#1]"* %6, i64 0, i32 0
%.idx12.val = load i64* %.idx12, align 8
%.idx13 = getelementptr %"struct.std::vec::Vec<f32>[#1]"* %6, i64 0, i32 2
%.idx13.val = load float** %.idx13, align 8
%7 = bitcast %str_slice* %4 to i8*
call void @llvm.lifetime.start(i64 16, i8* %7)
%8 = bitcast %str_slice* %5 to i8*
call void @llvm.lifetime.start(i64 16, i8* %8)
%9 = icmp ugt i64 %.idx12.val, 9
br i1 %9, label %normal-return, label %then-block-5126-.i.i
then-block-5126-.i.i: ; preds = %entry-block
%10 = getelementptr inbounds %str_slice* %4, i64 0, i32 0
store i8* getelementptr inbounds ([35 x i8]* @str2501, i64 0, i64 0), i8** %10, align 8
%11 = getelementptr inbounds %str_slice* %4, i64 0, i32 1
store i64 35, i64* %11, align 8
%12 = getelementptr inbounds %str_slice* %5, i64 0, i32 0
store i8* getelementptr inbounds ([42 x i8]* @str2500, i64 0, i64 0), i8** %12, align 8
%13 = getelementptr inbounds %str_slice* %5, i64 0, i32 1
store i64 42, i64* %13, align 8
invoke void @_ZN7failure12begin_unwind20ha3b1880e6a964addrxF9v0.11.preE(%str_slice* nocapture %4, %str_slice* nocapture %5, i64 549)
to label %.noexc unwind label %unwind_ast_3183_
.noexc: ; preds = %then-block-5126-.i.i
unreachable
normal-return: ; preds = %entry-block
call void @llvm.lifetime.end(i64 16, i8* %7)
call void @llvm.lifetime.end(i64 16, i8* %8)
invoke fastcc void @_ZN6Vector3new20hf0f9aad5a0222bb5Uda4v0.0E(%struct.Vector* noalias nocapture sret %a, float* %.idx13.val, i64 10)
to label %normal-return1 unwind label %unwind_ast_3183_
unwind_ast_3183_: ; preds = %then-block-5126-.i.i, %normal-return
%14 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.fca.0.extract = extractvalue { i8*, i32 } %14, 0
%.fca.1.extract = extractvalue { i8*, i32 } %14, 1
%15 = bitcast float* %.idx13.val to i8*
call void @free(i8* %15) #8
br label %resume
resume: ; preds = %unwind_ast_3176_, %unwind_ast_3183_
%.sroa.3.0 = phi i32 [ %.fca.1.extract8, %unwind_ast_3176_ ], [ %.fca.1.extract, %unwind_ast_3183_ ]
%.sroa.0.0 = phi i8* [ %.fca.0.extract6, %unwind_ast_3176_ ], [ %.fca.0.extract, %unwind_ast_3183_ ]
%.fca.0.insert = insertvalue { i8*, i32 } undef, i8* %.sroa.0.0, 0
%.fca.1.insert = insertvalue { i8*, i32 } %.fca.0.insert, i32 %.sroa.3.0, 1
resume { i8*, i32 } %.fca.1.insert
normal-return1: ; preds = %normal-return
%16 = bitcast float* %.idx13.val to i8*
call void @free(i8* %16) #8
%17 = invoke i64 @_ZN15precise_time_ns20h3c754008add7480eaqa9v0.11.preE()
to label %.noexc17 unwind label %unwind_ast_3176_.nonloopexit
.noexc17: ; preds = %normal-return1
%18 = getelementptr inbounds %"struct.test::Bencher[#5]"* %0, i64 0, i32 1
store i64 %17, i64* %18, align 8
%19 = getelementptr inbounds %"struct.test::Bencher[#5]"* %0, i64 0, i32 0
%20 = load i64* %19, align 8
%21 = icmp eq i64 %20, 0
br i1 %21, label %join3.i, label %match_else.lr.ph.i
match_else.lr.ph.i: ; preds = %.noexc17
%22 = bitcast {}* %dummy.i.i to i8*
%23 = bitcast %str_slice* %2 to i8*
%24 = bitcast %"struct.std::fmt::Argument[#1]"* %3 to i8*
%25 = bitcast %"struct.std::fmt::Arguments[#1]"* %__args.i to i8*
%.idx.i45 = getelementptr %struct.Vector* %a, i64 0, i32 0, i32 0
%.idx.val.i46 = load i64* %.idx.i45, align 8
%26 = icmp eq i64 %.idx.val.i46, 0
%.idx1.i41 = getelementptr %struct.Vector* %a, i64 0, i32 0, i32 2
%.idx1.val.i42 = load %"struct.core::cell::Cell<f32>[#3]"** %.idx1.i41, align 8
br i1 %26, label %match_else.i.match_else.i.split_crit_edge.preheader, label %match_else.i.split.us.us.preheader
match_else.i.split.us.us.preheader: ; preds = %match_else.lr.ph.i
br label %match_else.i.split.us.us
match_else.i.match_else.i.split_crit_edge.preheader: ; preds = %match_else.lr.ph.i
br label %match_else.i.match_else.i.split_crit_edge
loop_body23.i.us: ; preds = %loop_body23.i.us.preheader, %match_else29.i.us
%.sroa.5.8.load86.us = phi i64 [ %30, %match_else29.i.us ], [ 0, %loop_body23.i.us.preheader ]
%sum.0.i.us = phi float [ %31, %match_else29.i.us ], [ 0.000000e+00, %loop_body23.i.us.preheader ]
%27 = icmp ult i64 %.sroa.5.8.load86.us, %.idx.val.i46
br i1 %27, label %match_else29.i.us, label %join32.i.us
match_else29.i.us: ; preds = %loop_body23.i.us
%28 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i42, i64 %.sroa.5.8.load86.us, i32 0, i32 0
%29 = load float* %28, align 4
%30 = add i64 %.sroa.5.8.load86.us, 1
%31 = fadd float %sum.0.i.us, %29
br label %loop_body23.i.us
join32.i.us: ; preds = %loop_body23.i.us
%sum.0.i.us.lcssa = phi float [ %sum.0.i.us, %loop_body23.i.us ]
%32 = fcmp une float %sum.0.i.us.lcssa, 9.600000e+01
br i1 %32, label %.noexc18.us, label %then-block-3294-.i
.noexc18.us: ; preds = %join32.i.us
call void @llvm.lifetime.end(i64 16, i8* %23)
call void @llvm.lifetime.end(i64 16, i8* %24)
call void @llvm.lifetime.end(i64 32, i8* %25)
call void @llvm.lifetime.start(i64 0, i8* %22) #8
call void asm "", "r,~{dirflag},~{fpsr},~{flags}"({}* %dummy.i.i) #8
call void @llvm.lifetime.end(i64 0, i8* %22) #8
%exitcond.i.us = icmp eq i64 %55, %20
br i1 %exitcond.i.us, label %join3.i.loopexit131, label %match_else.i.split.us.us
loop_body.i.loopexit.us.us.loopexit: ; preds = %.noexc25.us.us
br label %loop_body.i.loopexit.us.us
loop_body.i.loopexit.us.us: ; preds = %loop_body.i.loopexit.us.us.loopexit, %middle.block
%exitcond112 = icmp eq i64 %34, 100
br i1 %exitcond112, label %loop_body23.i.us.preheader, label %.noexc25.lr.ph.us.us
loop_body23.i.us.preheader: ; preds = %loop_body.i.loopexit.us.us
br label %loop_body23.i.us
.noexc25.lr.ph.us.us: ; preds = %match_else.i.split.us.us, %loop_body.i.loopexit.us.us
%33 = phi i64 [ 0, %match_else.i.split.us.us ], [ %34, %loop_body.i.loopexit.us.us ]
%34 = add i64 %33, 1
%n.vec = and i64 %.idx.val.i46, -8
%cmp.zero = icmp eq i64 %n.vec, 0
br i1 %cmp.zero, label %middle.block, label %vector.body.preheader
vector.body.preheader: ; preds = %.noexc25.lr.ph.us.us
br label %vector.body
vector.body: ; preds = %vector.body.preheader, %vector.body
%index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.body.preheader ]
%35 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i42, i64 %index, i32 0, i32 0
%36 = bitcast float* %35 to <4 x float>*
%wide.load = load <4 x float>* %36, align 4
%37 = getelementptr float* %35, i64 4
%38 = bitcast float* %37 to <4 x float>*
%wide.load116 = load <4 x float>* %38, align 4
%39 = fmul <4 x float> %wide.load, %wide.load
%40 = fmul <4 x float> %wide.load116, %wide.load116
%41 = fadd <4 x float> %wide.load, %39
%42 = fadd <4 x float> %wide.load116, %40
%43 = fdiv <4 x float> %41, %wide.load
%44 = fdiv <4 x float> %42, %wide.load116
%45 = bitcast float* %35 to <4 x float>*
store <4 x float> %43, <4 x float>* %45, align 4
%46 = bitcast float* %37 to <4 x float>*
store <4 x float> %44, <4 x float>* %46, align 4
%index.next = add i64 %index, 8
%47 = icmp eq i64 %index.next, %n.vec
br i1 %47, label %middle.block.loopexit, label %vector.body, !llvm.loop !0
middle.block.loopexit: ; preds = %vector.body
br label %middle.block
middle.block: ; preds = %middle.block.loopexit, %.noexc25.lr.ph.us.us
%resume.val = phi i64 [ 0, %.noexc25.lr.ph.us.us ], [ %n.vec, %middle.block.loopexit ]
%cmp.n = icmp eq i64 %.idx.val.i46, %resume.val
br i1 %cmp.n, label %loop_body.i.loopexit.us.us, label %.noexc25.us.us.preheader
.noexc25.us.us.preheader: ; preds = %middle.block
br label %.noexc25.us.us
.noexc25.us.us: ; preds = %.noexc25.us.us.preheader, %.noexc25.us.us
%.sroa.065.0..val.i449397.us.us = phi i64 [ %48, %.noexc25.us.us ], [ %resume.val, %.noexc25.us.us.preheader ]
%48 = add i64 %.sroa.065.0..val.i449397.us.us, 1
%49 = getelementptr inbounds %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i42, i64 %.sroa.065.0..val.i449397.us.us, i32 0, i32 0
%50 = load float* %49, align 4
%51 = fmul float %50, %50
%52 = fadd float %50, %51
%53 = fdiv float %52, %50
store float %53, float* %49, align 4
%exitcond111 = icmp eq i64 %48, %.idx.val.i46
br i1 %exitcond111, label %loop_body.i.loopexit.us.us.loopexit, label %.noexc25.us.us, !llvm.loop !3
match_else.i.split.us.us: ; preds = %match_else.i.split.us.us.preheader, %.noexc18.us
%54 = phi i64 [ %55, %.noexc18.us ], [ 0, %match_else.i.split.us.us.preheader ]
%55 = add i64 %54, 1
call void @llvm.lifetime.start(i64 16, i8* %23)
call void @llvm.lifetime.start(i64 16, i8* %24)
call void @llvm.lifetime.start(i64 32, i8* %25)
br label %.noexc25.lr.ph.us.us
match_else.i.match_else.i.split_crit_edge: ; preds = %match_else.i.match_else.i.split_crit_edge.preheader, %loop_body.i.loopexit
%56 = phi i64 [ %57, %loop_body.i.loopexit ], [ 0, %match_else.i.match_else.i.split_crit_edge.preheader ]
%57 = add i64 %56, 1
call void @llvm.lifetime.start(i64 16, i8* %23)
call void @llvm.lifetime.start(i64 16, i8* %24)
call void @llvm.lifetime.start(i64 32, i8* %25)
br label %vector.body120
vector.body120: ; preds = %match_else.i.match_else.i.split_crit_edge
br label %loop_body.i.loopexit
loop_body.i.loopexit: ; preds = %vector.body120
call void @llvm.lifetime.end(i64 16, i8* %23)
call void @llvm.lifetime.end(i64 16, i8* %24)
call void @llvm.lifetime.end(i64 32, i8* %25)
call void @llvm.lifetime.start(i64 0, i8* %22) #8
call void asm "", "r,~{dirflag},~{fpsr},~{flags}"({}* %dummy.i.i) #8
call void @llvm.lifetime.end(i64 0, i8* %22) #8
%exitcond.i = icmp eq i64 %57, %20
br i1 %exitcond.i, label %join3.i.loopexit, label %match_else.i.match_else.i.split_crit_edge
then-block-3294-.i: ; preds = %join32.i.us
%58 = getelementptr inbounds %str_slice* %2, i64 0, i32 0
store i8* getelementptr inbounds ([11 x i8]* @str2566, i64 0, i64 0), i8** %58, align 8
%59 = getelementptr inbounds %str_slice* %2, i64 0, i32 1
store i64 11, i64* %59, align 8
%60 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %3, i64 0, i32 0
store void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @_ZN3fmt13secret_string21h168541290156162148204v0.0E to void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)*), void (%"enum.core::result::Result<(),std::io::IoError>[#3]"*, %"enum.core::any::Void[#3]"*, %"struct.std::fmt::Formatter[#1]"*)** %60, align 8
%61 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %3, i64 0, i32 1
%62 = bitcast %str_slice* %2 to %"enum.core::any::Void[#3]"*
store %"enum.core::any::Void[#3]"* %62, %"enum.core::any::Void[#3]"** %61, align 8
%__adjust.i.sroa.0.0..sroa_idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN4test14vec_speed_loop15__STATIC_FMTSTR20h2754a7156d484e2eI1a4v0.0E to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.i.sroa.0.0..sroa_idx, align 8
%__adjust.i.sroa.4.0..sroa_idx56 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i, i64 0, i32 0, i32 1
store i64 2, i64* %__adjust.i.sroa.4.0..sroa_idx56, align 8
%__adjust.sroa.0.0..sroa_idx.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %3, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0..sroa_idx.i, align 8
%__adjust.sroa.2.0..sroa_idx1.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0..sroa_idx1.i, align 8
%63 = bitcast %str_slice* %1 to i8*
call void @llvm.lifetime.start(i64 16, i8* %63)
%64 = getelementptr inbounds %str_slice* %1, i64 0, i32 0
store i8* getelementptr inbounds ([14 x i8]* @str2220, i64 0, i64 0), i8** %64, align 8
%65 = getelementptr inbounds %str_slice* %1, i64 0, i32 1
store i64 14, i64* %65, align 8
invoke void @_ZN2rt6unwind16begin_unwind_fmt20h1360f91e7709ea39KsF9v0.11.preE(%"struct.std::fmt::Arguments[#1]"* nocapture %__args.i, %str_slice* nocapture %1, i64 385)
to label %.noexc29 unwind label %unwind_ast_3176_.loopexit
.noexc29: ; preds = %then-block-3294-.i
unreachable
join3.i.loopexit: ; preds = %loop_body.i.loopexit
br label %join3.i
join3.i.loopexit131: ; preds = %.noexc18.us
br label %join3.i
join3.i: ; preds = %join3.i.loopexit131, %join3.i.loopexit, %.noexc17
%66 = invoke i64 @_ZN15precise_time_ns20h3c754008add7480eaqa9v0.11.preE()
to label %normal-return2 unwind label %unwind_ast_3176_.nonloopexit
normal-return2: ; preds = %join3.i
%67 = getelementptr inbounds %"struct.test::Bencher[#5]"* %0, i64 0, i32 2
store i64 %66, i64* %67, align 8
%.idx1.i = getelementptr %struct.Vector* %a, i64 0, i32 0, i32 2
%.idx1.val.i = load %"struct.core::cell::Cell<f32>[#3]"** %.idx1.i, align 8
%68 = bitcast %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i to i8*
call void @free(i8* %68) #8
ret void
unwind_ast_3176_.loopexit: ; preds = %then-block-3294-.i
%lpad.loopexit = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
br label %unwind_ast_3176_
unwind_ast_3176_.nonloopexit: ; preds = %normal-return1, %join3.i
%lpad.nonloopexit = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.idx1.i20.phi.trans.insert = getelementptr %struct.Vector* %a, i64 0, i32 0, i32 2
%.idx1.val.i21.pre = load %"struct.core::cell::Cell<f32>[#3]"** %.idx1.i20.phi.trans.insert, align 8
br label %unwind_ast_3176_
unwind_ast_3176_: ; preds = %unwind_ast_3176_.nonloopexit, %unwind_ast_3176_.loopexit
%.idx1.val.i21 = phi %"struct.core::cell::Cell<f32>[#3]"* [ %.idx1.val.i42, %unwind_ast_3176_.loopexit ], [ %.idx1.val.i21.pre, %unwind_ast_3176_.nonloopexit ]
%lpad.phi = phi { i8*, i32 } [ %lpad.loopexit, %unwind_ast_3176_.loopexit ], [ %lpad.nonloopexit, %unwind_ast_3176_.nonloopexit ]
%.fca.0.extract6 = extractvalue { i8*, i32 } %lpad.phi, 0
%.fca.1.extract8 = extractvalue { i8*, i32 } %lpad.phi, 1
%69 = bitcast %"struct.core::cell::Cell<f32>[#3]"* %.idx1.val.i21 to i8*
call void @free(i8* %69) #8
br label %resume
}
; Function Attrs: uwtable
define internal void @_ZN6__test4main20hc397ed8eb090ed20u2a4v0.0E() unnamed_addr #1 {
normal-return:
%0 = alloca %"struct.std::vec::Vec<~str>[#1]", align 8
%__adjust = alloca { { i64, i64, [0 x i8] }**, i64 }, align 8
%__adjust1 = alloca { %"struct.test::TestDescAndFn[#5]"*, i64 }, align 8
call void @_ZN2os4args20hc2b572ca80555f59AKm9v0.11.preE(%"struct.std::vec::Vec<~str>[#1]"* noalias nocapture sret %0)
%.idx = getelementptr %"struct.std::vec::Vec<~str>[#1]"* %0, i64 0, i32 0
%.idx.val = load i64* %.idx, align 8
%.idx5 = getelementptr %"struct.std::vec::Vec<~str>[#1]"* %0, i64 0, i32 2
%.idx5.val = load { i64, i64, [0 x i8] }*** %.idx5, align 8
%1 = getelementptr inbounds { { i64, i64, [0 x i8] }**, i64 }* %__adjust, i64 0, i32 0
store { i64, i64, [0 x i8] }** %.idx5.val, { i64, i64, [0 x i8] }*** %1, align 8
%2 = getelementptr inbounds { { i64, i64, [0 x i8] }**, i64 }* %__adjust, i64 0, i32 1
store i64 %.idx.val, i64* %2, align 8
%3 = getelementptr inbounds { %"struct.test::TestDescAndFn[#5]"*, i64 }* %__adjust1, i64 0, i32 0
store %"struct.test::TestDescAndFn[#5]"* bitcast ({ { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8, [6 x i8] }, { i8, void (%"struct.test::Bencher[#5]"*)*, [8 x i8] } }, { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8, [6 x i8] }, { i8, void (%"struct.test::Bencher[#5]"*)*, [8 x i8] } } }* @const to %"struct.test::TestDescAndFn[#5]"*), %"struct.test::TestDescAndFn[#5]"** %3, align 8
%4 = getelementptr inbounds { %"struct.test::TestDescAndFn[#5]"*, i64 }* %__adjust1, i64 0, i32 1
store i64 2, i64* %4, align 8
invoke void @_ZN16test_main_static20hdca621cfdea2c272dqb9v0.11.preE({ { i64, i64, [0 x i8] }**, i64 }* nocapture %__adjust, { %"struct.test::TestDescAndFn[#5]"*, i64 }* nocapture %__adjust1)
to label %normal-return2 unwind label %unwind_ast_3372_
unwind_ast_3372_: ; preds = %normal-return
%5 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%6 = getelementptr inbounds { i64, i64, [0 x i8] }** %.idx5.val, i64 %.idx.val
%7 = icmp eq i64 %.idx.val, 0
br i1 %7, label %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit16", label %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i11.preheader"
"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i11.preheader": ; preds = %unwind_ast_3372_
br label %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i11"
"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i11": ; preds = %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i11.preheader", %loop_body.backedge.i.i14
%.0.2.val34.i.i10 = phi { i64, i64, [0 x i8] }** [ %8, %loop_body.backedge.i.i14 ], [ %.idx5.val, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i11.preheader" ]
%8 = getelementptr inbounds { i64, i64, [0 x i8] }** %.0.2.val34.i.i10, i64 1
%9 = icmp eq { i64, i64, [0 x i8] }** %.0.2.val34.i.i10, null
br i1 %9, label %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit16.loopexit", label %match_else.i.i13
match_else.i.i13: ; preds = %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i11"
%.val.i.i12 = load { i64, i64, [0 x i8] }** %.0.2.val34.i.i10, align 8
%10 = icmp eq { i64, i64, [0 x i8] }* %.val.i.i12, null
br i1 %10, label %loop_body.backedge.i.i14, label %cond.i.i.i15
loop_body.backedge.i.i14: ; preds = %cond.i.i.i15, %match_else.i.i13
%11 = icmp eq { i64, i64, [0 x i8] }** %8, %6
br i1 %11, label %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit16.loopexit", label %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i11"
cond.i.i.i15: ; preds = %match_else.i.i13
%12 = bitcast { i64, i64, [0 x i8] }* %.val.i.i12 to i8*
tail call void @free(i8* %12) #8
br label %loop_body.backedge.i.i14
"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit16.loopexit": ; preds = %loop_body.backedge.i.i14, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i11"
br label %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit16"
"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit16": ; preds = %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit16.loopexit", %unwind_ast_3372_
%13 = bitcast { i64, i64, [0 x i8] }** %.idx5.val to i8*
tail call void @free(i8* %13) #8
resume { i8*, i32 } %5
normal-return2: ; preds = %normal-return
%14 = getelementptr inbounds { i64, i64, [0 x i8] }** %.idx5.val, i64 %.idx.val
%15 = icmp eq i64 %.idx.val, 0
br i1 %15, label %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit", label %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i.preheader"
"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i.preheader": ; preds = %normal-return2
br label %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i"
"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i": ; preds = %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i.preheader", %loop_body.backedge.i.i
%.0.2.val34.i.i = phi { i64, i64, [0 x i8] }** [ %16, %loop_body.backedge.i.i ], [ %.idx5.val, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i.preheader" ]
%16 = getelementptr inbounds { i64, i64, [0 x i8] }** %.0.2.val34.i.i, i64 1
%17 = icmp eq { i64, i64, [0 x i8] }** %.0.2.val34.i.i, null
br i1 %17, label %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit.loopexit", label %match_else.i.i
match_else.i.i: ; preds = %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i"
%.val.i.i = load { i64, i64, [0 x i8] }** %.0.2.val34.i.i, align 8
%18 = icmp eq { i64, i64, [0 x i8] }* %.val.i.i, null
br i1 %18, label %loop_body.backedge.i.i, label %cond.i.i.i
loop_body.backedge.i.i: ; preds = %cond.i.i.i, %match_else.i.i
%19 = icmp eq { i64, i64, [0 x i8] }** %16, %14
br i1 %19, label %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit.loopexit", label %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i"
cond.i.i.i: ; preds = %match_else.i.i
%20 = bitcast { i64, i64, [0 x i8] }* %.val.i.i to i8*
tail call void @free(i8* %20) #8
br label %loop_body.backedge.i.i
"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit.loopexit": ; preds = %loop_body.backedge.i.i, %"_ZN5slice57Items$LT$$x27a$C$$x20T$GT$.Iterator$LT$$BP$$x27a$x20T$GT$4next21h151933131302908977094v0.0E.exit.i.i"
br label %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit"
"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit": ; preds = %"_ZN28std..vec..Vec$LT$$UP$str$GT$14glue_drop.257217h34549b3bf7b232a7E.exit.loopexit", %normal-return2
%21 = bitcast { i64, i64, [0 x i8] }** %.idx5.val to i8*
tail call void @free(i8* %21) #8
ret void
}
define i64 @main(i64, i8**) unnamed_addr #6 {
top:
%2 = tail call i64 @_ZN10lang_start20h820a0f119a0c9218dYd9v0.11.preE(i8* bitcast (void ()* @_ZN6__test4main20hc397ed8eb090ed20u2a4v0.0E to i8*), i64 %0, i8** %1)
ret i64 %2
}
declare i64 @_ZN10lang_start20h820a0f119a0c9218dYd9v0.11.preE(i8*, i64, i8**) unnamed_addr #6
declare void @_ZN16test_main_static20hdca621cfdea2c272dqb9v0.11.preE({ { i64, i64, [0 x i8] }**, i64 }* nocapture, { %"struct.test::TestDescAndFn[#5]"*, i64 }* nocapture) unnamed_addr #6
declare void @_ZN2os4args20hc2b572ca80555f59AKm9v0.11.preE(%"struct.std::vec::Vec<~str>[#1]"* noalias sret) unnamed_addr #6
; Function Attrs: nounwind
declare void @llvm.lifetime.start(i64, i8* nocapture) #8
; Function Attrs: nounwind
declare void @llvm.lifetime.end(i64, i8* nocapture) #8
attributes #0 = { cold noinline noreturn "split-stack" }
attributes #1 = { uwtable "split-stack" }
attributes #2 = { cold noinline noreturn uwtable "split-stack" }
attributes #3 = { nounwind "split-stack" }
attributes #4 = { noreturn nounwind "split-stack" }
attributes #5 = { nounwind readnone uwtable "split-stack" }
attributes #6 = { "split-stack" }
attributes #7 = { cold noreturn "split-stack" }
attributes #8 = { nounwind }
!0 = metadata !{metadata !0, metadata !1, metadata !2}
!1 = metadata !{metadata !"llvm.vectorizer.width", i32 1}
!2 = metadata !{metadata !"llvm.vectorizer.unroll", i32 1}
!3 = metadata !{metadata !3, metadata !1, metadata !2}
#![feature(globs, macro_rules)]
#![crate_type="lib"]
#![crate_id="algebloat"]
use std::cell::Cell;
pub trait VectorGet
{
unsafe fn unsafe_get(&self, idx: uint) -> f32;
fn get(&self, idx: uint) -> f32;
}
pub trait VectorSet
{
unsafe fn unsafe_set(&self, idx: uint, val: f32);
fn set(&self, idx: uint, val: f32);
}
pub trait VectorAssign<T>
{
fn assign(&self, v: T);
}
pub trait VectorIter
{
fn iter2(self) -> VectorIterator<Self>;
}
impl<LHS: VectorSet + Container,
RHS: VectorGet + Container>
VectorAssign<RHS> for
LHS
{
fn assign(&self, v: RHS)
{
assert!(self.len() == v.len());
for i in range(0, v.len())
{
unsafe
{
self.unsafe_set(i, v.unsafe_get(i));
}
}
}
}
impl<T: VectorGet + Container>
VectorIter for
T
{
fn iter2(self) -> VectorIterator<T>
{
VectorIterator::new(self)
}
}
pub struct Vector
{
data: Vec<Cell<f32>>
}
impl Vector
{
pub fn new(data: &[f32]) -> Vector
{
Vector{ data: data.iter().map(|&v| Cell::new(v)).collect() }
}
}
impl
FromIterator<f32> for
Vector
{
fn from_iter<T: Iterator<f32>>(mut it: T) -> Vector
{
Vector{ data: it.by_ref().map(|v| Cell::new(v)).collect() }
}
}
impl<'l>
VectorGet for
&'l Vector
{
unsafe fn unsafe_get(&self, idx: uint) -> f32
{
(*self.data.as_slice().unsafe_ref(idx)).get()
}
fn get(&self, idx: uint) -> f32
{
self.data.get(idx).get()
}
}
impl<'l>
VectorSet for
&'l Vector
{
unsafe fn unsafe_set(&self, idx: uint, val: f32)
{
self.data.as_slice().unsafe_ref(idx).set(val);
}
fn set(&self, idx: uint, val: f32)
{
self.data.get(idx).set(val);
}
}
impl<'l>
Container for
&'l Vector
{
fn len(&self) -> uint
{
self.data.len()
}
}
impl<'l>
VectorGet for
Vector
{
unsafe fn unsafe_get(&self, idx: uint) -> f32
{
(*self.data.as_slice().unsafe_ref(idx)).get()
}
fn get(&self, idx: uint) -> f32
{
self.data.get(idx).get()
}
}
impl<'l>
VectorSet for
Vector
{
unsafe fn unsafe_set(&self, idx: uint, val: f32)
{
self.data.as_slice().unsafe_ref(idx).set(val);
}
fn set(&self, idx: uint, val: f32)
{
self.data.get(idx).set(val);
}
}
impl<'l>
Container for
Vector
{
fn len(&self) -> uint
{
self.data.len()
}
}
pub struct VectorIterator<T>
{
base: T,
idx: uint
}
impl<T: VectorGet + Container>
VectorIterator<T>
{
fn new(base: T) -> VectorIterator<T>
{
VectorIterator{ base: base, idx: 0 }
}
}
impl<T: VectorGet + Container>
Iterator<f32> for
VectorIterator<T>
{
fn next(&mut self) -> Option<f32>
{
let ret = if self.idx < self.base.len()
{
unsafe
{
Some(self.base.unsafe_get(self.idx))
}
}
else
{
None
};
self.idx += 1;
ret
}
}
macro_rules! expr
{
($e: expr) => { $e }
}
macro_rules! bin_op
{
($op_name: ident, $op_method: ident, $op_struct_name: ident, $op: tt) =>
{
pub struct $op_struct_name<TA, TB>
{
a: TA,
b: TB,
}
impl<TA: Container,
TB: Container>
$op_struct_name<TA, TB>
{
pub unsafe fn unsafe_new(a: TA, b: TB) -> $op_struct_name<TA, TB>
{
$op_struct_name{ a: a, b: b }
}
pub fn new(a: TA, b: TB) -> $op_struct_name<TA, TB>
{
assert!(a.len() == b.len());
$op_struct_name{ a: a, b: b }
}
}
impl<TA: Clone,
TB: Clone>
Clone for
$op_struct_name<TA, TB>
{
fn clone(&self) -> $op_struct_name<TA, TB>
{
$op_struct_name{ a: self.a.clone(), b: self.b.clone() }
}
}
impl<'l,
TA: VectorGet + Container,
TB: VectorGet + Container>
VectorGet for
$op_struct_name<TA, TB>
{
unsafe fn unsafe_get(&self, idx: uint) -> f32
{
expr!(self.a.unsafe_get(idx) $op self.b.unsafe_get(idx))
}
fn get(&self, idx: uint) -> f32
{
assert!(idx < self.len());
unsafe
{
expr!(self.a.unsafe_get(idx) $op self.b.unsafe_get(idx))
}
}
}
impl<'l,
TA: Container,
TB: Container>
Container for $op_struct_name<TA, TB>
{
fn len(&self) -> uint
{
self.a.len()
}
}
impl<'l,
RHS: VectorGet + Clone + Container>
$op_name<RHS, $op_struct_name<&'l Vector, RHS>> for
&'l Vector
{
fn $op_method(&self, rhs: &RHS) -> $op_struct_name<&'l Vector, RHS>
{
$op_struct_name::new(self.clone(), rhs.clone())
}
}
}
}
macro_rules! connect_op
{
($op_struct_lhs: ident : $($op_name: ident, $op_method: ident, $op_struct_name: ident);+) =>
{
$(
impl<RHS: VectorGet + Clone + Container,
TA: VectorGet + Clone + Container,
TB: VectorGet + Clone + Container>
$op_name<RHS, $op_struct_name<$op_struct_lhs<TA, TB>, RHS>> for
$op_struct_lhs<TA, TB>
{
fn $op_method(&self, rhs: &RHS) -> $op_struct_name<$op_struct_lhs<TA, TB>, RHS>
{
$op_struct_name::new(self.clone(), rhs.clone())
}
}
)+
}
}
macro_rules! connect_ops
{
($($op_struct: ident),+) =>
{
$(
connect_op!($op_struct:
Add, add, Adder;
Sub, sub, Subtracter;
Mul, mul, Multiplier;
Div, div, Divider)
)+
}
}
bin_op!(Add, add, Adder, +)
bin_op!(Sub, sub, Subtracter, -)
bin_op!(Mul, mul, Multiplier, *)
bin_op!(Div, div, Divider, /)
connect_ops!(Adder,
Subtracter,
Multiplier,
Divider)
#[cfg(test)]
mod test
{
extern crate test;
extern crate rand;
use super::*;
use self::test::Bencher;
use self::rand::{weak_rng, Rng};
#[bench]
fn vec_speed_vec(bh: &mut Bencher) {
let mut rng = weak_rng();
let a = Vector::new(rng.gen_vec(10).slice(0, 10));
bh.iter(|| {
for _ in range(0, 100)
{
a.assign((&a + &a * &a) / &a);
}
let mut sum = 0f32;
for v in (&a).iter2()
{
sum += v;
}
assert!(sum != 96.0);
})
}
#[bench]
fn vec_speed_loop(bh: &mut Bencher) {
let mut rng = weak_rng();
let a = Vector::new(rng.gen_vec(10).slice(0, 10));
bh.iter(|| {
for _ in range(0, 100)
{
for i in range(0, a.len())
{
unsafe
{
let v = a.unsafe_get(i);
a.unsafe_set(i, (v + v * v) / v)
}
}
}
let mut sum = 0f32;
for v in (&a).iter2()
{
sum += v;
}
assert!(sum != 96.0);
})
}
}
running 2 tests
test test::vec_speed_loop ... bench: 1169 ns/iter (+/- 22)
test test::vec_speed_vec ... bench: 4714 ns/iter (+/- 296)
test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured
; ModuleID = 'algebloat.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-S128"
target triple = "x86_64-unknown-linux-gnu"
%tydesc = type { i64, i64, void ({}*, i8*)*, void ({}*, i8*)*, void ({}*, i8*)*, { i8*, i64 } }
%"struct.std::unstable::intrinsics::TypeId[#1]" = type { i64 }
%"enum.std::util::Void[#1]" = type {}
%"struct.extra::test::BenchHarness[#4]" = type { i64, i64, i64, i64 }
%"struct.std::cell::Cell<f32>[#1]" = type { float }
%"struct.std::fmt::Argument[#1]" = type { void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*, %"enum.std::util::Void[#1]"* }
%"struct.std::fmt::Formatter[#1]" = type { i64, i32, i8, %"enum.std::option::Option<uint>[#1]", %"enum.std::option::Option<uint>[#1]", { %tydesc*, i8* }, %"struct.std::vec::Items<std::fmt::Argument>[#1]", { %"struct.std::fmt::Argument[#1]"*, i64 } }
%"enum.std::option::Option<uint>[#1]" = type { i8, [7 x i8], [1 x i64] }
%"struct.std::vec::Items<std::fmt::Argument>[#1]" = type { %"struct.std::fmt::Argument[#1]"*, %"struct.std::fmt::Argument[#1]"*, %"enum.std::option::Option<&'static std::fmt::Argument>[#1]" }
%"enum.std::option::Option<&'static std::fmt::Argument>[#1]" = type { %"struct.std::fmt::Argument[#1]"* }
%"struct.std::fmt::Arguments[#1]" = type { { %"enum.std::fmt::rt::Piece[#1]"*, i64 }, { %"struct.std::fmt::Argument[#1]"*, i64 } }
%"enum.std::fmt::rt::Piece[#1]" = type { i8, [7 x i8], [9 x i64] }
%str_slice = type { i8*, i64 }
%"enum.std::option::Option<~std::io::Writer:Send>[#1]" = type { i8, [7 x i8], [2 x i64] }
%"struct.std::rt::task::Task[#1]" = type { %"struct.std::rt::local_heap::LocalHeap[#1]", %"struct.std::rt::task::GarbageCollector[#1]", %"struct.std::rt::task::LocalStorage[#1]", %"struct.std::rt::unwind::Unwinder[#1]", %"struct.std::rt::task::Death[#1]", i8, %"enum.std::option::Option<std::send_str::SendStr>[#1]", %"enum.std::option::Option<~std::logging::Logger:Send>[#1]", %"enum.std::option::Option<~std::io::Writer:Send>[#1]", %"enum.std::option::Option<~std::io::Writer:Send>[#1]", %"enum.std::option::Option<~std::rt::Runtime:Send>[#1]", i8 }
%"struct.std::rt::local_heap::LocalHeap[#1]" = type { %"struct.std::rt::local_heap::MemoryRegion[#1]", i8, %"struct.std::unstable::raw::Box<()>[#1]"*, i8 }
%"struct.std::rt::local_heap::MemoryRegion[#1]" = type { { i64, i64, [0 x %"struct.std::rt::local_heap::AllocHeader[#1]"*] }*, i64, i8 }
%"struct.std::rt::local_heap::AllocHeader[#1]" = type {}
%"struct.std::unstable::raw::Box<()>[#1]" = type { i64, %"struct.std::unstable::intrinsics::TyDesc[#1]"*, %"struct.std::unstable::raw::Box<()>[#1]"*, %"struct.std::unstable::raw::Box<()>[#1]"*, {} }
%"struct.std::unstable::intrinsics::TyDesc[#1]" = type { i64, i64, void ({ i64, %tydesc*, i8*, i8*, i8 }*, i8*)*, void ({ i64, %tydesc*, i8*, i8*, i8 }*, i8*)*, void ({ i64, %tydesc*, i8*, i8*, i8 }*, i8*)*, %str_slice }
%"struct.std::rt::task::GarbageCollector[#1]" = type {}
%"struct.std::rt::task::LocalStorage[#1]" = type { %"enum.std::option::Option<~[std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>]>[#1]" }
%"enum.std::option::Option<~[std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>]>[#1]" = type { { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }* }
%"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]" = type { i8, [7 x i8], [4 x i64] }
%"struct.std::rt::unwind::Unwinder[#1]" = type { i8, %"enum.std::option::Option<~std::any::Any:Send>[#1]" }
%"enum.std::option::Option<~std::any::Any:Send>[#1]" = type { i8, [7 x i8], [2 x i64] }
%"struct.std::rt::task::Death[#1]" = type { %"enum.std::option::Option<proc:Send(std::result::Result<(),~std::any::Any:Send>)>[#1]", i8 }
%"enum.std::option::Option<proc:Send(std::result::Result<(),~std::any::Any:Send>)>[#1]" = type { i8, [7 x i8], [2 x i64] }
%"enum.std::option::Option<std::send_str::SendStr>[#1]" = type { i8, [7 x i8], [3 x i64] }
%"enum.std::option::Option<~std::logging::Logger:Send>[#1]" = type { i8, [7 x i8], [2 x i64] }
%"enum.std::option::Option<~std::rt::Runtime:Send>[#1]" = type { i8, [7 x i8], [2 x i64] }
%"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]" = type { i64, void (i32, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*)*, [2 x i64] }
%"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]" = type {}
%"struct.std::rand::XorShiftRng[#1]" = type { i32, i32, i32, i32 }
%struct.Vector = type { { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* }
%"struct.extra::test::TestDescAndFn[#4]" = type { %"struct.extra::test::TestDesc[#4]", %"enum.extra::test::TestFn[#4]" }
%"struct.extra::test::TestDesc[#4]" = type { %"enum.extra::test::TestName[#4]", i8, i8 }
%"enum.extra::test::TestName[#4]" = type { i8, [7 x i8], [2 x i64] }
%"enum.extra::test::TestFn[#4]" = type { i8, [7 x i8], [2 x i64] }
@_rust_crate_map_toplevel = global { i32, { i64, i64 }, { i64, i64 }, i64* } { i32 2, { i64, i64 } { i64 ptrtoint ([0 x { { i8*, i64 }, i64 }]* @_rust_mod_map to i64), i64 0 }, { i64, i64 } { i64 ptrtoint ([4 x i64]* @_crate_map_child_vectors to i64), i64 4 }, i64* @_ZN4uvio8new_loop19ha2f1f079a1df1d04a09v0.10.preE }
@str1789 = internal constant [19 x i8] c"assertion failed: \00"
@str1855 = internal constant [11 x i8] c"src/lib.rs\00"
@"_ZN8_$UP$str6tydesc19hf486c988072d7d43aiE" = internal constant %tydesc { i64 8, i64 ptrtoint (i1** getelementptr ({ i1, i1* }* null, i64 0, i32 1) to i64), void ({}*, i8*)* bitcast (void ({}*, {}*)* @"_ZN9_$LP$$RP$9glue_take19h0d906dfad616c965aFE" to void ({}*, i8*)*), void ({}*, i8*)* bitcast (void ({}*, { i64, i64, [0 x i8] }**)* @"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE" to void ({}*, i8*)*), void ({}*, i8*)* bitcast (void ({}*, { i64, i64, [0 x i8] }**)* @"_ZN8_$UP$str10glue_visit19hf486c988072d7d43aEE" to void ({}*, i8*)*), { i8*, i64 } { i8* getelementptr inbounds ([5 x i8]* @str1932, i32 0, i32 0), i64 4 } }
@str1932 = internal constant [5 x i8] c"~str\00"
@"_ZN12_$UP$$UP$str6tydesc19h4be2f769bb7f364cazE" = internal constant %tydesc { i64 8, i64 ptrtoint (i1** getelementptr ({ i1, i1* }* null, i64 0, i32 1) to i64), void ({}*, i8*)* bitcast (void ({}*, {}*)* @"_ZN9_$LP$$RP$9glue_take19h0d906dfad616c965aFE" to void ({}*, i8*)*), void ({}*, i8*)* bitcast (void ({}*, { i64, i64, [0 x i8] }***)* @"_ZN12_$UP$$UP$str9glue_drop19h4be2f769bb7f364caGE" to void ({}*, i8*)*), void ({}*, i8*)* bitcast (void ({}*, { i64, i64, [0 x i8] }***)* @"_ZN12_$UP$$UP$str10glue_visit19h4be2f769bb7f364caHE" to void ({}*, i8*)*), { i8*, i64 } { i8* getelementptr inbounds ([6 x i8]* @str1949, i32 0, i32 0), i64 5 } }
@str1949 = internal constant [6 x i8] c"~~str\00"
@vtable2015 = internal constant { %tydesc*, %"struct.std::unstable::intrinsics::TypeId[#1]" ({ i64, i64, [0 x i8] }**)*, %"enum.std::util::Void[#1]"* ({ i64, i64, [0 x i8] }**)*, %"enum.std::util::Void[#1]"* ({ i64, i64, [0 x i8] }**)* } { %tydesc* @"_ZN12_$UP$$UP$str6tydesc19h4be2f769bb7f364cazE", %"struct.std::unstable::intrinsics::TypeId[#1]" ({ i64, i64, [0 x i8] }**)* @"_ZN3any5Any$T11get_type_id21h161d4df8a2bc39a09Was4v0.0E", %"enum.std::util::Void[#1]"* ({ i64, i64, [0 x i8] }**)* @"_ZN3any5Any$T11as_void_ptr21h91cfce8f8bc934be9Wax4v0.0E", %"enum.std::util::Void[#1]"* ({ i64, i64, [0 x i8] }**)* @"_ZN3any5Any$T15as_mut_void_ptr21h05b1b923880fb5d09Way4v0.0E" }
@str2185 = internal constant [5 x i8] c"~Any\00"
@_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE = available_externally thread_local global i8* null
@str2226 = internal constant [12 x i8] c"failed at '\00"
@str2227 = internal constant [4 x i8] c"', \00"
@str2228 = internal constant [2 x i8] c":\00"
@_ZN2rt6unwind12begin_unwind15__STATIC_FMTSTR19hc82609ea93582c3baQ9v0.10.preE = internal unnamed_addr constant { { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } } { { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([12 x i8]* @str2226, i32 0, i32 0), i64 11 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef }, { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([4 x i8]* @str2227, i32 0, i32 0), i64 3 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef }, { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([2 x i8]* @str2228, i32 0, i32 0), i64 1 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef } }
@str2253 = internal constant [10 x i8] c"<unnamed>\00"
@str2274 = internal constant [7 x i8] c"task '\00"
@str2275 = internal constant [14 x i8] c"' failed at '\00"
@str2280 = internal constant [15 x i8] c"!ptr.is_null()\00"
@str2281 = internal constant [20 x i8] c" assertion failed: \00"
@_ZN2rt9local_ptr8compiled4take15__STATIC_FMTSTR19hcf722141b2fbba44aS9v0.10.preE = internal unnamed_addr constant { { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } } { { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([20 x i8]* @str2281, i32 0, i32 0), i64 19 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef } }
@_ZN2rt6unwind12begin_unwind15__STATIC_FMTSTR19h3cdf3b09c8333291aa9v0.10.preE = internal unnamed_addr constant { { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } } { { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([7 x i8]* @str2274, i32 0, i32 0), i64 6 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef }, { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([14 x i8]* @str2275, i32 0, i32 0), i64 13 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef }, { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([4 x i8]* @str2227, i32 0, i32 0), i64 3 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef }, { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([2 x i8]* @str2228, i32 0, i32 0), i64 1 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef } }
@str2285 = internal constant [60 x i8] c"task failed during unwinding (double-failure - total drag!)\00"
@_ZN2rt6unwind12begin_unwind15__STATIC_FMTSTR19hdd896b8b7372fd49au9v0.10.preE = internal unnamed_addr constant { { i8, { i8*, i64 }, [56 x i8] } } { { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([60 x i8]* @str2285, i32 0, i32 0), i64 59 }, [56 x i8] undef } }
@str2286 = internal constant [31 x i8] c"rust must abort now. so sorry.\00"
@_ZN2rt6unwind12begin_unwind15__STATIC_FMTSTR19hdd896b8b7372fd49a49v0.10.preE = internal unnamed_addr constant { { i8, { i8*, i64 }, [56 x i8] } } { { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([31 x i8]* @str2286, i32 0, i32 0), i64 30 }, [56 x i8] undef } }
@str2289 = internal constant [37 x i8] c"thread-local pointer is null. bogus!\00"
@_ZN2rt9local_ptr8compiled13unsafe_borrow15__STATIC_FMTSTR19hdd896b8b7372fd49ah9v0.10.preE = internal unnamed_addr constant { { i8, { i8*, i64 }, [56 x i8] } } { { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([37 x i8]* @str2289, i32 0, i32 0), i64 36 }, [56 x i8] undef } }
@str2290 = internal constant [27 x i8] c"vector size is too large: \00"
@str2291 = internal constant [28 x i8] c"/tmp/rust/src/libstd/vec.rs\00"
@"_ZN3vec22OwnedVector$$UP$$VEC$T7reserve15__STATIC_FMTSTR21hcf722141b2fbba44Ypa99v0.10.preE" = internal unnamed_addr constant { { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } } { { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([27 x i8]* @str2290, i32 0, i32 0), i64 26 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef } }
@str2492 = internal constant [12 x i8] c"sum != 96.0\00"
@_ZN4test14vec_speed_loop15__STATIC_FMTSTR19hee3bcecd8c266311am4v0.0E = internal unnamed_addr constant { { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } } { { i8, { i8*, i64 }, [56 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([19 x i8]* @str1789, i32 0, i32 0), i64 18 }, [56 x i8] undef }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } { i8 2, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } } { { i8, [15 x i8] } { i8 0, [15 x i8] undef }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } } { i32 32, i8 2, i64 0, { i8, [15 x i8] } { i8 3, [15 x i8] undef }, { i8, [15 x i8] } { i8 3, [15 x i8] undef } }, { i8* } zeroinitializer }, [0 x i8] undef } }
@str2500 = internal constant [20 x i8] c"test::vec_speed_vec\00"
@str2501 = internal constant [21 x i8] c"test::vec_speed_loop\00"
@const = private constant { { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8 }, { i8, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)*, [8 x i8] } }, { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8 }, { i8, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)*, [8 x i8] } } } { { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8 }, { i8, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)*, [8 x i8] } } { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8 } { { i8, { i8*, i64 }, [0 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([20 x i8]* @str2500, i32 0, i32 0), i64 19 }, [0 x i8] undef }, i8 0, i8 0 }, { i8, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)*, [8 x i8] } { i8 1, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)* @_ZN4test13vec_speed_vec19h7704b567022d3c1fai4v0.0E, [8 x i8] undef } }, { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8 }, { i8, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)*, [8 x i8] } } { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8 } { { i8, { i8*, i64 }, [0 x i8] } { i8 0, { i8*, i64 } { i8* getelementptr inbounds ([21 x i8]* @str2501, i32 0, i32 0), i64 20 }, [0 x i8] undef }, i8 0, i8 0 }, { i8, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)*, [8 x i8] } { i8 1, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)* @_ZN4test14vec_speed_loop19h3dbb0822dfa8143ea74v0.0E, [8 x i8] undef } } }
@_ZN19_rust_crate_map_std17_966edb7e67a78fa79v0.10.preE = external global i64
@_ZN21_rust_crate_map_green17_80d9e76ae01092f69v0.10.preE = external global i64
@_ZN22_rust_crate_map_rustuv17_09e0b9252547dab39v0.10.preE = external global i64
@_ZN21_rust_crate_map_extra17_64ade3d6312ae1df9v0.10.preE = external global i64
@_ZN4uvio8new_loop19ha2f1f079a1df1d04a09v0.10.preE = external global i64
@_crate_map_child_vectors = internal global [4 x i64] [i64 ptrtoint (i64* @_ZN19_rust_crate_map_std17_966edb7e67a78fa79v0.10.preE to i64), i64 ptrtoint (i64* @_ZN21_rust_crate_map_green17_80d9e76ae01092f69v0.10.preE to i64), i64 ptrtoint (i64* @_ZN22_rust_crate_map_rustuv17_09e0b9252547dab39v0.10.preE to i64), i64 ptrtoint (i64* @_ZN21_rust_crate_map_extra17_64ade3d6312ae1df9v0.10.preE to i64)]
@_rust_mod_map = internal global [0 x { { i8*, i64 }, i64 }] zeroinitializer
; Function Attrs: nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) unnamed_addr #0
; Function Attrs: nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) unnamed_addr #0
; Function Attrs: noreturn nounwind
declare void @llvm.trap() unnamed_addr #1
; Function Attrs: nounwind readnone
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) unnamed_addr #2
; Function Attrs: uwtable
define internal fastcc { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* @_ZN6Vector3new21h231b9303ce4bdf8bnfa24v0.0E(float* %.0.0.val, i64 %.0.1.val) unnamed_addr #3 {
entry-block:
%n.i.i.i.i.i.i.i = alloca i64, align 8
%0 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args.i.i.i.i.i.i.i = alloca %"struct.std::fmt::Arguments[#1]", align 8
%1 = alloca %str_slice, align 8
%capacity.i.i.i.i = alloca i64, align 8
%2 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args.i.i.i.i = alloca %"struct.std::fmt::Arguments[#1]", align 8
%3 = alloca %str_slice, align 8
%4 = getelementptr inbounds float* %.0.0.val, i64 %.0.1.val
%5 = bitcast i64* %capacity.i.i.i.i to i8*
call void @llvm.lifetime.start(i64 8, i8* %5)
%6 = bitcast %"struct.std::fmt::Argument[#1]"* %2 to i8*
call void @llvm.lifetime.start(i64 16, i8* %6)
%7 = bitcast %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i to i8*
call void @llvm.lifetime.start(i64 32, i8* %7)
%8 = bitcast %str_slice* %3 to i8*
call void @llvm.lifetime.start(i64 16, i8* %8)
store i64 %.0.1.val, i64* %capacity.i.i.i.i, align 8
%9 = shl nuw i64 %.0.1.val, 2
%uadd.i.i.i.i = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %9, i64 16)
%10 = extractvalue { i64, i1 } %uadd.i.i.i.i, 0
%11 = extractvalue { i64, i1 } %uadd.i.i.i.i, 1
br i1 %11, label %then-block-4106-.i.i.i.i, label %next-block.i.i.i.i
then-block-4106-.i.i.i.i: ; preds = %entry-block
%12 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %2, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, i64*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt12Default$uint3fmt21h9d24c533d4c27d2edaaR9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %12, align 8
%13 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %2, i64 0, i32 1
%14 = bitcast i64* %capacity.i.i.i.i to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %14, %"enum.std::util::Void[#1]"** %13, align 8
%__adjust.sroa.0.0.idx.i.i.i.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @"_ZN3vec22OwnedVector$$UP$$VEC$T7reserve15__STATIC_FMTSTR21hcf722141b2fbba44Ypa99v0.10.preE" to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.sroa.0.0.idx.i.i.i.i, align 8
%__adjust.sroa.2.0.idx2.i.i.i.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i, i64 0, i32 0, i32 1
store i64 2, i64* %__adjust.sroa.2.0.idx2.i.i.i.i, align 8
%__adjust.sroa.0.0.idx.i.i.i.i.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %2, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i.i.i.i.i, align 8
%__adjust.sroa.2.0.idx1.i.i.i.i.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0.idx1.i.i.i.i.i, align 8
%15 = call { i64, i64, [0 x i8] }* @_ZN3fmt6format19h356fa857e88c8c5bat9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i)
%16 = getelementptr inbounds %str_slice* %3, i64 0, i32 0
store i8* getelementptr inbounds ([28 x i8]* @str2291, i64 0, i64 0), i8** %16, align 8
%17 = getelementptr inbounds %str_slice* %3, i64 0, i32 1
store i64 27, i64* %17, align 8
call fastcc void @_ZN2rt6unwind12begin_unwind19h9443711abab5072daA4v0.0E({ i64, i64, [0 x i8] }* %15, %str_slice* %3, i64 183)
unreachable
next-block.i.i.i.i: ; preds = %entry-block
%18 = icmp eq i64 %10, 0
br i1 %18, label %_ZN3vec13with_capacity19h6f61fd28705b02a9ac4v0.0E.exit.i.i.i, label %else-block.i.i.i.i.i
else-block.i.i.i.i.i: ; preds = %next-block.i.i.i.i
%19 = call i8* @malloc(i64 %10) #0
%20 = icmp eq i8* %19, null
br i1 %20, label %then-block-4856-.i.i.i.i.i, label %_ZN3vec13with_capacity19h6f61fd28705b02a9ac4v0.0E.exit.i.i.i
then-block-4856-.i.i.i.i.i: ; preds = %else-block.i.i.i.i.i
call void @llvm.trap() #0
unreachable
_ZN3vec13with_capacity19h6f61fd28705b02a9ac4v0.0E.exit.i.i.i: ; preds = %else-block.i.i.i.i.i, %next-block.i.i.i.i
%__make_return_pointer.0.i.i.i.i.i = phi i8* [ null, %next-block.i.i.i.i ], [ %19, %else-block.i.i.i.i.i ]
%21 = getelementptr inbounds i8* %__make_return_pointer.0.i.i.i.i.i, i64 8
%22 = bitcast i8* %21 to i64*
store i64 %9, i64* %22, align 8
%23 = bitcast i8* %__make_return_pointer.0.i.i.i.i.i to i64*
store i64 0, i64* %23, align 8
call void @llvm.lifetime.end(i64 8, i8* %5)
call void @llvm.lifetime.end(i64 16, i8* %6)
call void @llvm.lifetime.end(i64 32, i8* %7)
call void @llvm.lifetime.end(i64 16, i8* %8)
%24 = bitcast i8* %__make_return_pointer.0.i.i.i.i.i to {}*
%25 = bitcast i64* %n.i.i.i.i.i.i.i to i8*
%26 = bitcast %"struct.std::fmt::Argument[#1]"* %0 to i8*
%27 = bitcast %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i.i.i.i to i8*
%28 = bitcast %str_slice* %1 to i8*
%29 = icmp eq i64 %.0.1.val, 0
br i1 %29, label %"_ZN3vec26ImmutableVector$$BP$$VEC$T3map21h6969c481d18ebc73jHa54v0.0E.exit", label %"_ZN3vec14Iterator$Items4next21hfa2b844f4a7f4ac10lac4v0.0E.exit.i.i.i.i"
"_ZN3vec14Iterator$Items4next21hfa2b844f4a7f4ac10lac4v0.0E.exit.i.i.i.i": ; preds = %_ZN3vec13with_capacity19h6f61fd28705b02a9ac4v0.0E.exit.i.i.i, %"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i"
%30 = phi {}* [ %87, %"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i" ], [ %24, %_ZN3vec13with_capacity19h6f61fd28705b02a9ac4v0.0E.exit.i.i.i ]
%31 = phi float* [ %32, %"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i" ], [ %.0.0.val, %_ZN3vec13with_capacity19h6f61fd28705b02a9ac4v0.0E.exit.i.i.i ]
%32 = getelementptr inbounds float* %31, i64 1
%33 = icmp eq float* %31, null
br i1 %33, label %"_ZN3vec26ImmutableVector$$BP$$VEC$T3map21h6969c481d18ebc73jHa54v0.0E.exit", label %match_case.i.i.i.i.i
match_case.i.i.i.i.i: ; preds = %"_ZN3vec14Iterator$Items4next21hfa2b844f4a7f4ac10lac4v0.0E.exit.i.i.i.i"
%34 = load float* %31, align 4
%oldret.i = insertvalue %"struct.std::cell::Cell<f32>[#1]" undef, float %34, 0
%35 = bitcast {}* %30 to { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }*
%36 = bitcast {}* %30 to i64*
%37 = load i64* %36, align 8
%38 = getelementptr inbounds { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %35, i64 0, i32 1
%39 = load i64* %38, align 8
%40 = icmp ugt i64 %39, %37
br i1 %40, label %"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i", label %then-block-6085-.i.i.i.i
unwind_ast_3907_.nonloopexit.i.i.i: ; preds = %.noexc6.i.i.i, %then-block-6495-.i.i.i.i.i.i.i
%lpad.nonloopexit.i.i.i = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%41 = icmp eq {}* %30, null
br i1 %41, label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit4.i.i.i", label %cond.i3.i.i.i
cond.i3.i.i.i: ; preds = %unwind_ast_3907_.nonloopexit.i.i.i
%42 = bitcast {}* %30 to i8*
call void @free(i8* %42) #0
br label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit4.i.i.i"
"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit4.i.i.i": ; preds = %cond.i3.i.i.i, %unwind_ast_3907_.nonloopexit.i.i.i
resume { i8*, i32 } %lpad.nonloopexit.i.i.i
then-block-6085-.i.i.i.i: ; preds = %match_case.i.i.i.i.i
%43 = lshr i64 %39, 2
%44 = lshr i64 %37, 2
%45 = icmp eq i64 %43, %44
br i1 %45, label %match_else.i.i.i.i.i, label %"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i"
match_else.i.i.i.i.i: ; preds = %then-block-6085-.i.i.i.i
%46 = add nuw i64 %43, 1
%47 = lshr i64 %37, 3
%48 = or i64 %43, %47
%49 = lshr i64 %48, 2
%50 = or i64 %49, %48
%51 = lshr i64 %50, 4
%52 = or i64 %51, %50
%53 = lshr i64 %52, 8
%54 = or i64 %53, %52
%55 = lshr i64 %54, 16
%56 = or i64 %55, %54
%57 = lshr i64 %56, 32
%58 = or i64 %57, %56
%59 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %58, i64 1) #0
%60 = extractvalue { i64, i1 } %59, 1
br i1 %60, label %_ZN4uint21next_power_of_two_opt19h38b6f90766e9a357aT4v0.0E.exit.i.i.i.i.i.i, label %else-block.i.i.i.i.i.i.i.i
else-block.i.i.i.i.i.i.i.i: ; preds = %match_else.i.i.i.i.i
%61 = extractvalue { i64, i1 } %59, 0
br label %_ZN4uint21next_power_of_two_opt19h38b6f90766e9a357aT4v0.0E.exit.i.i.i.i.i.i
_ZN4uint21next_power_of_two_opt19h38b6f90766e9a357aT4v0.0E.exit.i.i.i.i.i.i: ; preds = %else-block.i.i.i.i.i.i.i.i, %match_else.i.i.i.i.i
%.sroa.0.0.load4.i.i.i.i.i.i = phi i64 [ %61, %else-block.i.i.i.i.i.i.i.i ], [ %46, %match_else.i.i.i.i.i ]
call void @llvm.lifetime.start(i64 8, i8* %25)
call void @llvm.lifetime.start(i64 16, i8* %26)
call void @llvm.lifetime.start(i64 32, i8* %27)
call void @llvm.lifetime.start(i64 16, i8* %28)
store i64 %.sroa.0.0.load4.i.i.i.i.i.i, i64* %n.i.i.i.i.i.i.i, align 8
%62 = load i64* %38, align 8
%63 = lshr i64 %62, 2
%64 = icmp ult i64 %63, %.sroa.0.0.load4.i.i.i.i.i.i
br i1 %64, label %then-block-6530-.i.i.i.i.i.i.i, label %"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i"
then-block-6530-.i.i.i.i.i.i.i: ; preds = %_ZN4uint21next_power_of_two_opt19h38b6f90766e9a357aT4v0.0E.exit.i.i.i.i.i.i
%65 = shl i64 %.sroa.0.0.load4.i.i.i.i.i.i, 2
%uadd.i.i.i.i.i.i.i = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %65, i64 16)
%66 = extractvalue { i64, i1 } %uadd.i.i.i.i.i.i.i, 0
%67 = and i64 %.sroa.0.0.load4.i.i.i.i.i.i, 4611686018427387903
%68 = icmp ne i64 %67, %.sroa.0.0.load4.i.i.i.i.i.i
%69 = zext i1 %68 to i8
br i1 %68, label %join.i.i.i.i.i.i.i, label %before_rhs.i.i.i.i.i.i.i
join.i.i.i.i.i.i.i: ; preds = %before_rhs.i.i.i.i.i.i.i, %then-block-6530-.i.i.i.i.i.i.i
%70 = phi i8 [ %69, %then-block-6530-.i.i.i.i.i.i.i ], [ %73, %before_rhs.i.i.i.i.i.i.i ]
%71 = icmp eq i8 %70, 0
br i1 %71, label %next-block.i.i.i.i.i.i.i, label %then-block-6495-.i.i.i.i.i.i.i
before_rhs.i.i.i.i.i.i.i: ; preds = %then-block-6530-.i.i.i.i.i.i.i
%72 = extractvalue { i64, i1 } %uadd.i.i.i.i.i.i.i, 1
%73 = zext i1 %72 to i8
br label %join.i.i.i.i.i.i.i
then-block-6495-.i.i.i.i.i.i.i: ; preds = %join.i.i.i.i.i.i.i
%74 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %0, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, i64*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt12Default$uint3fmt21h9d24c533d4c27d2edaaR9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %74, align 8
%75 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %0, i64 0, i32 1
%76 = bitcast i64* %n.i.i.i.i.i.i.i to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %76, %"enum.std::util::Void[#1]"** %75, align 8
%__adjust.sroa.0.0.idx.i.i.i.i.i.i.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i.i.i.i, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @"_ZN3vec22OwnedVector$$UP$$VEC$T7reserve15__STATIC_FMTSTR21hcf722141b2fbba44Ypa99v0.10.preE" to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.sroa.0.0.idx.i.i.i.i.i.i.i, align 8
%__adjust.sroa.2.0.idx16.i.i.i.i.i.i.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i.i.i.i, i64 0, i32 0, i32 1
store i64 2, i64* %__adjust.sroa.2.0.idx16.i.i.i.i.i.i.i, align 8
%__adjust.sroa.0.0.idx.i.i.i.i.i.i.i.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i.i.i.i, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %0, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i.i.i.i.i.i.i.i, align 8
%__adjust.sroa.2.0.idx1.i.i.i.i.i.i.i.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i.i.i.i, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0.idx1.i.i.i.i.i.i.i.i, align 8
%77 = invoke { i64, i64, [0 x i8] }* @_ZN3fmt6format19h356fa857e88c8c5bat9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args.i.i.i.i.i.i.i)
to label %.noexc6.i.i.i unwind label %unwind_ast_3907_.nonloopexit.i.i.i
.noexc6.i.i.i: ; preds = %then-block-6495-.i.i.i.i.i.i.i
%78 = getelementptr inbounds %str_slice* %1, i64 0, i32 0
store i8* getelementptr inbounds ([28 x i8]* @str2291, i64 0, i64 0), i8** %78, align 8
%79 = getelementptr inbounds %str_slice* %1, i64 0, i32 1
store i64 27, i64* %79, align 8
invoke fastcc void @_ZN2rt6unwind12begin_unwind19h9443711abab5072daA4v0.0E({ i64, i64, [0 x i8] }* %77, %str_slice* %1, i64 1478)
to label %.noexc7.i.i.i unwind label %unwind_ast_3907_.nonloopexit.i.i.i
.noexc7.i.i.i: ; preds = %.noexc6.i.i.i
unreachable
next-block.i.i.i.i.i.i.i: ; preds = %join.i.i.i.i.i.i.i
%80 = bitcast {}* %30 to i8*
%81 = icmp eq i64 %66, 0
br i1 %81, label %then-block-6583-.i.i.i.i.i.i.i.i, label %else-block.i.i3.i.i.i.i.i.i
then-block-6583-.i.i.i.i.i.i.i.i: ; preds = %next-block.i.i.i.i.i.i.i
call void @free(i8* %80) #0
unreachable
else-block.i.i3.i.i.i.i.i.i: ; preds = %next-block.i.i.i.i.i.i.i
%82 = call i8* @realloc(i8* %80, i64 %66) #0
%83 = icmp eq i8* %82, null
br i1 %83, label %then-block-6605-.i.i.i.i.i.i.i.i, label %_ZN2rt11global_heap11realloc_raw19h516dd31982ba661faU4v0.0E.exit.i.i.i.i.i.i.i
then-block-6605-.i.i.i.i.i.i.i.i: ; preds = %else-block.i.i3.i.i.i.i.i.i
call void @llvm.trap() #0
unreachable
_ZN2rt11global_heap11realloc_raw19h516dd31982ba661faU4v0.0E.exit.i.i.i.i.i.i.i: ; preds = %else-block.i.i3.i.i.i.i.i.i
%.c.i.i.i.i.i.i.i = bitcast i8* %82 to { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }*
%84 = bitcast i8* %82 to {}*
%85 = getelementptr inbounds i8* %82, i64 8
%86 = bitcast i8* %85 to i64*
store i64 %65, i64* %86, align 8
br label %"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i"
"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i": ; preds = %_ZN2rt11global_heap11realloc_raw19h516dd31982ba661faU4v0.0E.exit.i.i.i.i.i.i.i, %_ZN4uint21next_power_of_two_opt19h38b6f90766e9a357aT4v0.0E.exit.i.i.i.i.i.i, %then-block-6085-.i.i.i.i, %match_case.i.i.i.i.i
%87 = phi {}* [ %84, %_ZN2rt11global_heap11realloc_raw19h516dd31982ba661faU4v0.0E.exit.i.i.i.i.i.i.i ], [ %30, %_ZN4uint21next_power_of_two_opt19h38b6f90766e9a357aT4v0.0E.exit.i.i.i.i.i.i ], [ %30, %then-block-6085-.i.i.i.i ], [ %30, %match_case.i.i.i.i.i ]
%88 = phi { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* [ %.c.i.i.i.i.i.i.i, %_ZN2rt11global_heap11realloc_raw19h516dd31982ba661faU4v0.0E.exit.i.i.i.i.i.i.i ], [ %35, %_ZN4uint21next_power_of_two_opt19h38b6f90766e9a357aT4v0.0E.exit.i.i.i.i.i.i ], [ %35, %then-block-6085-.i.i.i.i ], [ %35, %match_case.i.i.i.i.i ]
%89 = getelementptr inbounds { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %88, i64 0, i32 0
%90 = load i64* %89, align 8
%91 = add i64 %90, 4
store i64 %91, i64* %89, align 8
%92 = bitcast {}* %87 to { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }*
%93 = getelementptr inbounds { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %92, i64 1
%94 = bitcast { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %93 to i8*
%95 = getelementptr inbounds i8* %94, i64 %90
%96 = bitcast i8* %95 to %"struct.std::cell::Cell<f32>[#1]"*
store %"struct.std::cell::Cell<f32>[#1]" %oldret.i, %"struct.std::cell::Cell<f32>[#1]"* %96, align 4
%97 = icmp eq float* %32, %4
br i1 %97, label %"_ZN3vec26ImmutableVector$$BP$$VEC$T3map21h6969c481d18ebc73jHa54v0.0E.exit", label %"_ZN3vec14Iterator$Items4next21hfa2b844f4a7f4ac10lac4v0.0E.exit.i.i.i.i"
"_ZN3vec26ImmutableVector$$BP$$VEC$T3map21h6969c481d18ebc73jHa54v0.0E.exit": ; preds = %"_ZN3vec14Iterator$Items4next21hfa2b844f4a7f4ac10lac4v0.0E.exit.i.i.i.i", %"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i", %_ZN3vec13with_capacity19h6f61fd28705b02a9ac4v0.0E.exit.i.i.i
%.lcssa.i.i = phi {}* [ %24, %_ZN3vec13with_capacity19h6f61fd28705b02a9ac4v0.0E.exit.i.i.i ], [ %30, %"_ZN3vec14Iterator$Items4next21hfa2b844f4a7f4ac10lac4v0.0E.exit.i.i.i.i" ], [ %87, %"_ZN3vec22OwnedVector$$UP$$VEC$T4push21hfda9574a9a3c87bazZaq4v0.0E.exit.i.i.i" ]
%98 = bitcast {}* %.lcssa.i.i to { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }*
ret { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %98
}
; Function Attrs: cold noinline noreturn uwtable
define internal fastcc void @_ZN2rt6unwind12begin_unwind19h9443711abab5072daA4v0.0E({ i64, i64, [0 x i8] }* noalias, %str_slice* nocapture readonly, i64) unnamed_addr #4 {
entry-block:
%tmp.i.i.sroa.4 = alloca [23 x i8], align 1
%src.i.sroa.6 = alloca [23 x i8], align 1
%__auto_borrow_obj.i = alloca { %tydesc*, i8* }, align 8
%_x.i = alloca { %tydesc*, i8* }, align 8
%tmp.i.i.sroa.4.i = alloca [23 x i8], align 1
%src.i.sroa.6.i = alloca [23 x i8], align 1
%.sroa.2.i64 = alloca [23 x i8], align 1
%3 = alloca %str_slice, align 8
%tmp.sroa.5.i.i.i = alloca [7 x i8], align 1
%tmp.sroa.6.i.i.i = alloca [7 x i8], align 1
%src.sroa.6.i.i = alloca [7 x i8], align 1
%src.sroa.9.i.i = alloca [7 x i8], align 1
%.sroa.2.i = alloca [7 x i8], align 1
%.sroa.4.i = alloca [7 x i8], align 1
%file = alloca %str_slice, align 8
%line = alloca i64, align 8
%msg1 = alloca { %tydesc*, i8* }, align 8
%msg_s = alloca %str_slice, align 8
%4 = alloca [3 x %"struct.std::fmt::Argument[#1]"], align 8
%__args = alloca %"struct.std::fmt::Arguments[#1]", align 8
%name.sroa.5 = alloca [7 x i8], align 1
%name.sroa.10 = alloca [7 x i8], align 1
%n = alloca %str_slice, align 8
%5 = alloca %"enum.std::option::Option<~std::io::Writer:Send>[#1]", align 8
%stderr = alloca { %tydesc*, i8* }, align 8
%6 = alloca [4 x %"struct.std::fmt::Argument[#1]"], align 8
%__args52 = alloca %"struct.std::fmt::Arguments[#1]", align 8
%7 = alloca %"enum.std::option::Option<~std::io::Writer:Send>[#1]", align 8
%.sroa.2 = alloca [23 x i8], align 1
%arg = alloca { %tydesc*, i8* }, align 8
%prev = alloca { %tydesc*, i8* }, align 8
%arg68 = alloca { %tydesc*, i8* }, align 8
%8 = alloca [4 x %"struct.std::fmt::Argument[#1]"], align 8
%__args81 = alloca %"struct.std::fmt::Arguments[#1]", align 8
%ExprAssign.sroa.2 = alloca [7 x i8], align 1
%ExprAssign.sroa.4 = alloca [7 x i8], align 1
%__args88 = alloca %"struct.std::fmt::Arguments[#1]", align 8
%__args94 = alloca %"struct.std::fmt::Arguments[#1]", align 8
%arg103 = alloca { %tydesc*, i8* }, align 8
%.sub5 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %8, i64 0, i64 0
%.sub4 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %6, i64 0, i64 0
%.sub = getelementptr inbounds [3 x %"struct.std::fmt::Argument[#1]"]* %4, i64 0, i64 0
%9 = bitcast %str_slice* %1 to i8*
%10 = bitcast %str_slice* %file to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %9, i64 16, i32 8, i1 false)
store i64 %2, i64* %line, align 8
%11 = call i8* @malloc(i64 8) #0
%12 = icmp eq i8* %11, null
br i1 %12, label %then-block-4856-.i.i, label %normal-return
then-block-4856-.i.i: ; preds = %entry-block
call void @llvm.trap() #0
unreachable
normal-return: ; preds = %entry-block
%13 = bitcast i8* %11 to { i64, i64, [0 x i8] }**
store { i64, i64, [0 x i8] }* %0, { i64, i64, [0 x i8] }** %13, align 8
%14 = getelementptr inbounds { %tydesc*, i8* }* %msg1, i64 0, i32 1
store i8* %11, i8** %14, align 8
%15 = getelementptr inbounds { %tydesc*, i8* }* %msg1, i64 0, i32 0
store %tydesc* bitcast ({ %tydesc*, %"struct.std::unstable::intrinsics::TypeId[#1]" ({ i64, i64, [0 x i8] }**)*, %"enum.std::util::Void[#1]"* ({ i64, i64, [0 x i8] }**)*, %"enum.std::util::Void[#1]"* ({ i64, i64, [0 x i8] }**)* }* @vtable2015 to %tydesc*), %tydesc** %15, align 8
%16 = bitcast i8* %11 to { i64, %tydesc*, i8*, i8*, i8 }*
%17 = invoke %"struct.std::unstable::intrinsics::TypeId[#1]" bitcast (%"struct.std::unstable::intrinsics::TypeId[#1]" ({ i64, i64, [0 x i8] }**)* @"_ZN3any5Any$T11get_type_id21h161d4df8a2bc39a09Was4v0.0E" to %"struct.std::unstable::intrinsics::TypeId[#1]" ({ i64, %tydesc*, i8*, i8*, i8 }*)*)({ i64, %tydesc*, i8*, i8*, i8 }* %16)
to label %.noexc unwind label %unwind_ast_4808_
.noexc: ; preds = %normal-return
%.fca.0.extract.i.i = extractvalue %"struct.std::unstable::intrinsics::TypeId[#1]" %17, 0
%18 = icmp eq i64 %.fca.0.extract.i.i, -7139287502465421498
br i1 %18, label %match_case, label %match_else
"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit": ; preds = %clean_ast_4808_, %cond.i18
%.fca.0.insert131 = insertvalue { i8*, i32 } undef, i8* %.sroa.0157.1, 0
%.fca.1.insert = insertvalue { i8*, i32 } %.fca.0.insert131, i32 %.sroa.8.1, 1
resume { i8*, i32 } %.fca.1.insert
unwind_ast_4808_: ; preds = %normal-return100, %join14, %then-block-5004-.i20, %match_else, %normal-return, %normal-return102
%19 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
br label %unwind_ast_4808_.body
unwind_ast_4808_.body: ; preds = %.noexc27, %unwind_ast_4808_
%eh.lpad-body = phi { i8*, i32 } [ %19, %unwind_ast_4808_ ], [ %227, %.noexc27 ]
%.fca.0.extract134 = extractvalue { i8*, i32 } %eh.lpad-body, 0
%.fca.1.extract136 = extractvalue { i8*, i32 } %eh.lpad-body, 1
br label %clean_ast_4808_
clean_ast_4808_: ; preds = %clean_ast_4782_32, %clean_ast_4782_32.thread, %unwind_ast_4782_, %cond.i.i.i54, %unwind_ast_4808_.body
%task.0.load171 = phi %"struct.std::rt::task::Task[#1]"* [ null, %unwind_ast_4808_.body ], [ null, %unwind_ast_4782_ ], [ %task.0.load175, %cond.i.i.i54 ], [ %task.0.load175, %clean_ast_4782_32 ], [ %task.0.load169, %clean_ast_4782_32.thread ]
%.sroa.0157.1 = phi i8* [ %.fca.0.extract134, %unwind_ast_4808_.body ], [ %.fca.0.extract138, %unwind_ast_4782_ ], [ %.sroa.0157.3, %cond.i.i.i54 ], [ %.sroa.0157.3, %clean_ast_4782_32 ], [ %.fca.0.extract142, %clean_ast_4782_32.thread ]
%.sroa.8.1 = phi i32 [ %.fca.1.extract136, %unwind_ast_4808_.body ], [ %.fca.1.extract140, %unwind_ast_4782_ ], [ %.sroa.8.3, %cond.i.i.i54 ], [ %.sroa.8.3, %clean_ast_4782_32 ], [ %.fca.1.extract144, %clean_ast_4782_32.thread ]
call fastcc void @"_ZN24_$UP$std..rt..task..Task9glue_drop19h1061f94893119fc6auE"(%"struct.std::rt::task::Task[#1]"* %task.0.load171)
%20 = load i8** %14, align 8
%21 = icmp eq i8* %20, null
br i1 %21, label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit", label %cond.i18
cond.i18: ; preds = %clean_ast_4808_
%22 = load %tydesc** %15, align 8
%23 = bitcast %tydesc* %22 to %tydesc**
%24 = load %tydesc** %23, align 8
%25 = bitcast i8** %14 to i8*
%26 = getelementptr inbounds %tydesc* %24, i64 0, i32 3
%27 = load void ({}*, i8*)** %26, align 8
call void %27({}* null, i8* %25)
br label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit"
match_else: ; preds = %.noexc
%28 = load %tydesc** %15, align 8
%29 = load i8** %14, align 8
%30 = bitcast i8* %29 to { i64, %tydesc*, i8*, i8*, i8 }*
%31 = getelementptr inbounds %tydesc* %28, i64 0, i32 1
%32 = bitcast i64* %31 to i8**
%33 = load i8** %32, align 8
%34 = bitcast i8* %33 to %"struct.std::unstable::intrinsics::TypeId[#1]" ({ i64, %tydesc*, i8*, i8*, i8 }*)*
%35 = invoke %"struct.std::unstable::intrinsics::TypeId[#1]" %34({ i64, %tydesc*, i8*, i8*, i8 }* %30)
to label %.noexc22 unwind label %unwind_ast_4808_
.noexc22: ; preds = %match_else
%.fca.0.extract.i.i19 = extractvalue %"struct.std::unstable::intrinsics::TypeId[#1]" %35, 0
%36 = icmp eq i64 %.fca.0.extract.i.i19, 5777515549890468306
br i1 %36, label %then-block-5004-.i20, label %match_else11
then-block-5004-.i20: ; preds = %.noexc22
%37 = getelementptr inbounds %tydesc* %28, i64 0, i32 2
%38 = load void ({}*, i8*)** %37, align 8
%39 = bitcast void ({}*, i8*)* %38 to %"enum.std::util::Void[#1]"* ({ i64, %tydesc*, i8*, i8*, i8 }*)*
%40 = invoke %"enum.std::util::Void[#1]"* %39({ i64, %tydesc*, i8*, i8*, i8 }* %30)
to label %normal-return5 unwind label %unwind_ast_4808_
match_case: ; preds = %.noexc
%41 = bitcast %str_slice* %msg_s to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %41, i8* %11, i64 16, i32 8, i1 false)
br label %join14
normal-return5: ; preds = %then-block-5004-.i20
%42 = icmp eq %"enum.std::util::Void[#1]"* %40, null
br i1 %42, label %match_else11, label %match_case12
match_else11: ; preds = %.noexc22, %normal-return5
%43 = getelementptr inbounds %str_slice* %msg_s, i64 0, i32 0
store i8* getelementptr inbounds ([5 x i8]* @str2185, i64 0, i64 0), i8** %43, align 8
%44 = getelementptr inbounds %str_slice* %msg_s, i64 0, i32 1
store i64 4, i64* %44, align 8
br label %join14
match_case12: ; preds = %normal-return5
%45 = bitcast %"enum.std::util::Void[#1]"* %40 to { i64, i64, [0 x i8] }**
%.val = load { i64, i64, [0 x i8] }** %45, align 8
%46 = getelementptr inbounds { i64, i64, [0 x i8] }* %.val, i64 0, i32 2, i64 0
%47 = getelementptr inbounds { i64, i64, [0 x i8] }* %.val, i64 0, i32 0
%48 = load i64* %47, align 8
%s.sroa.0.0.idx.i = getelementptr inbounds %str_slice* %msg_s, i64 0, i32 0
store i8* %46, i8** %s.sroa.0.0.idx.i, align 8
%s.sroa.2.0.idx2.i = getelementptr inbounds %str_slice* %msg_s, i64 0, i32 1
store i64 %48, i64* %s.sroa.2.0.idx2.i, align 8
br label %join14
join14: ; preds = %match_case12, %match_else11, %match_case
%49 = invoke fastcc %"struct.std::rt::task::Task[#1]"* @_ZN2rt9local_ptr8compiled8try_take19h021887ac426c42f5ay4v0.0E()
to label %normal-return15 unwind label %unwind_ast_4808_
normal-return15: ; preds = %join14
%50 = icmp eq %"struct.std::rt::task::Task[#1]"* %49, null
br i1 %50, label %normal-return25, label %normal-return29
unwind_ast_4782_: ; preds = %normal-return25
%51 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.fca.0.extract138 = extractvalue { i8*, i32 } %51, 0
%.fca.1.extract140 = extractvalue { i8*, i32 } %51, 1
br label %clean_ast_4808_
normal-return25: ; preds = %normal-return15
%52 = getelementptr inbounds [3 x %"struct.std::fmt::Argument[#1]"]* %4, i64 0, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %52, align 8
%53 = getelementptr inbounds [3 x %"struct.std::fmt::Argument[#1]"]* %4, i64 0, i64 0, i32 1
%54 = bitcast %str_slice* %msg_s to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %54, %"enum.std::util::Void[#1]"** %53, align 8
%55 = getelementptr inbounds [3 x %"struct.std::fmt::Argument[#1]"]* %4, i64 0, i64 1, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %55, align 8
%56 = getelementptr inbounds [3 x %"struct.std::fmt::Argument[#1]"]* %4, i64 0, i64 1, i32 1
%57 = bitcast %str_slice* %file to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %57, %"enum.std::util::Void[#1]"** %56, align 8
%58 = getelementptr inbounds [3 x %"struct.std::fmt::Argument[#1]"]* %4, i64 0, i64 2, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, i64*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt12Default$uint3fmt21h9d24c533d4c27d2edaaR9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %58, align 8
%59 = getelementptr inbounds [3 x %"struct.std::fmt::Argument[#1]"]* %4, i64 0, i64 2, i32 1
%60 = bitcast i64* %line to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %60, %"enum.std::util::Void[#1]"** %59, align 8
%__adjust.sroa.0.0.idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN2rt6unwind12begin_unwind15__STATIC_FMTSTR19hc82609ea93582c3baQ9v0.10.preE to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.sroa.0.0.idx, align 8
%__adjust.sroa.2.0.idx117 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 1
store i64 6, i64* %__adjust.sroa.2.0.idx117, align 8
%__adjust.sroa.0.0.idx.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %.sub, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i, align 8
%__adjust.sroa.2.0.idx1.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 1
store i64 3, i64* %__adjust.sroa.2.0.idx1.i, align 8
invoke void @_ZN2rt4util12dumb_println19hc795bb121ba5c6ecaQ9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args)
to label %normal-return26 unwind label %unwind_ast_4782_
normal-return26: ; preds = %normal-return25
call void @llvm.trap() #0
unreachable
normal-return29: ; preds = %normal-return15
%.sroa.2.i.0.idx = getelementptr inbounds [7 x i8]* %.sroa.2.i, i64 0, i64 0
call void @llvm.lifetime.start(i64 7, i8* %.sroa.2.i.0.idx)
%.sroa.4.i.0.idx = getelementptr inbounds [7 x i8]* %.sroa.4.i, i64 0, i64 0
call void @llvm.lifetime.start(i64 7, i8* %.sroa.4.i.0.idx)
%src.sroa.6.i.0.idx.i = getelementptr inbounds [7 x i8]* %src.sroa.6.i.i, i64 0, i64 0
call void @llvm.lifetime.start(i64 7, i8* %src.sroa.6.i.0.idx.i)
%src.sroa.9.i.0.idx.i = getelementptr inbounds [7 x i8]* %src.sroa.9.i.i, i64 0, i64 0
call void @llvm.lifetime.start(i64 7, i8* %src.sroa.9.i.0.idx.i)
%tmp.sroa.5.i.0.idx.i.i = getelementptr inbounds [7 x i8]* %tmp.sroa.5.i.i.i, i64 0, i64 0
call void @llvm.lifetime.start(i64 7, i8* %tmp.sroa.5.i.0.idx.i.i)
%tmp.sroa.6.i.0.idx.i.i = getelementptr inbounds [7 x i8]* %tmp.sroa.6.i.i.i, i64 0, i64 0
call void @llvm.lifetime.start(i64 7, i8* %tmp.sroa.6.i.0.idx.i.i)
%tmp.sroa.0.0.idx1.i.i.i = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %49, i64 0, i32 6, i32 0
%tmp.sroa.0.0.copyload2.i.i.i = load i8* %tmp.sroa.0.0.idx1.i.i.i, align 8
%tmp.sroa.5.0.idx7.i.i.i = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %49, i64 0, i32 6, i32 1, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp.sroa.5.i.0.idx.i.i, i8* %tmp.sroa.5.0.idx7.i.i.i, i64 7, i32 1, i1 false) #0
%tmp.sroa.511.0.idx12.i.i.i = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %49, i64 0, i32 6, i32 2
%tmp.sroa.511.0.cast13.i.i.i = bitcast [3 x i64]* %tmp.sroa.511.0.idx12.i.i.i to i8*
%tmp.sroa.511.0.copyload14.i.i.i = load i8* %tmp.sroa.511.0.cast13.i.i.i, align 8
%tmp.sroa.6.0.raw_idx20.i.i.i = getelementptr inbounds i8* %tmp.sroa.0.0.idx1.i.i.i, i64 9
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp.sroa.6.i.0.idx.i.i, i8* %tmp.sroa.6.0.raw_idx20.i.i.i, i64 7, i32 1, i1 false) #0
%tmp.sroa.625.0.idx26.i.i.i = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %49, i64 0, i32 6, i32 2, i64 1
%tmp.sroa.625.0.cast27.i.i.i = bitcast i64* %tmp.sroa.625.0.idx26.i.i.i to { i64, i64, [0 x i8] }**
%tmp.sroa.625.0.copyload28.i.i.i = load { i64, i64, [0 x i8] }** %tmp.sroa.625.0.cast27.i.i.i, align 8
%tmp.sroa.7.0.idx32.i.i.i = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %49, i64 0, i32 6, i32 2, i64 2
%tmp.sroa.7.0.copyload33.i.i.i = load i64* %tmp.sroa.7.0.idx32.i.i.i, align 8
store i8 0, i8* %tmp.sroa.0.0.idx1.i.i.i, align 8
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp.sroa.5.0.idx7.i.i.i, i8* %.sroa.2.i.0.idx, i64 7, i32 1, i1 false) #0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp.sroa.6.0.raw_idx20.i.i.i, i8* %.sroa.4.i.0.idx, i64 7, i32 1, i1 false) #0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %src.sroa.6.i.0.idx.i, i8* %tmp.sroa.5.i.0.idx.i.i, i64 7, i32 1, i1 false) #0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %src.sroa.9.i.0.idx.i, i8* %tmp.sroa.6.i.0.idx.i.i, i64 7, i32 1, i1 false) #0
%tmp.sroa.625.0.copyload28.c.i.i.i = ptrtoint { i64, i64, [0 x i8] }* %tmp.sroa.625.0.copyload28.i.i.i to i64
call void @llvm.lifetime.end(i64 7, i8* %tmp.sroa.5.i.0.idx.i.i)
call void @llvm.lifetime.end(i64 7, i8* %tmp.sroa.6.i.0.idx.i.i)
%name.sroa.5.1.idx191 = getelementptr inbounds [7 x i8]* %name.sroa.5, i64 0, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %name.sroa.5.1.idx191, i8* %src.sroa.6.i.0.idx.i, i64 7, i32 1, i1 false)
%name.sroa.10.9.idx195 = getelementptr inbounds [7 x i8]* %name.sroa.10, i64 0, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %name.sroa.10.9.idx195, i8* %src.sroa.9.i.0.idx.i, i64 7, i32 1, i1 false)
call void @llvm.lifetime.end(i64 7, i8* %src.sroa.6.i.0.idx.i)
call void @llvm.lifetime.end(i64 7, i8* %src.sroa.9.i.0.idx.i)
call void @llvm.lifetime.end(i64 7, i8* %.sroa.2.i.0.idx)
call void @llvm.lifetime.end(i64 7, i8* %.sroa.4.i.0.idx)
%cond.i43 = icmp eq i8 %tmp.sroa.0.0.copyload2.i.i.i, 1
%61 = bitcast %str_slice* %3 to i8*
call void @llvm.lifetime.start(i64 16, i8* %61)
br i1 %cond.i43, label %match_case.i48, label %match_else.i59
match_case.i48: ; preds = %normal-return29
%cond.i.i187 = icmp eq i8 %tmp.sroa.511.0.copyload14.i.i.i, 0
br i1 %cond.i.i187, label %match_case.i.i, label %match_else.i.i
match_else.i.i: ; preds = %match_case.i48
%62 = getelementptr inbounds %str_slice* %3, i64 0, i32 0
%tmp.sroa.625.0.copyload28.c.i.i.i.c = bitcast { i64, i64, [0 x i8] }* %tmp.sroa.625.0.copyload28.i.i.i to i8*
store i8* %tmp.sroa.625.0.copyload28.c.i.i.i.c, i8** %62, align 8
%name.sroa.16.16.idx198 = getelementptr inbounds %str_slice* %3, i64 0, i32 1
store i64 %tmp.sroa.7.0.copyload33.i.i.i, i64* %name.sroa.16.16.idx198, align 8
br label %_ZN2rt6unwind12begin_unwind4anon7expr_fn4aAaqE.exit
match_case.i.i: ; preds = %match_case.i48
%63 = getelementptr inbounds { i64, i64, [0 x i8] }* %tmp.sroa.625.0.copyload28.i.i.i, i64 0, i32 2, i64 0
%64 = getelementptr inbounds { i64, i64, [0 x i8] }* %tmp.sroa.625.0.copyload28.i.i.i, i64 0, i32 0
%65 = load i64* %64, align 8
%s.sroa.0.0.idx.i.i.i = getelementptr inbounds %str_slice* %3, i64 0, i32 0
store i8* %63, i8** %s.sroa.0.0.idx.i.i.i, align 8
%s.sroa.2.0.idx2.i.i.i = getelementptr inbounds %str_slice* %3, i64 0, i32 1
store i64 %65, i64* %s.sroa.2.0.idx2.i.i.i, align 8
br label %_ZN2rt6unwind12begin_unwind4anon7expr_fn4aAaqE.exit
_ZN2rt6unwind12begin_unwind4anon7expr_fn4aAaqE.exit: ; preds = %match_else.i.i, %match_case.i.i
%n185186 = bitcast %str_slice* %n to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %n185186, i8* %61, i64 16, i32 8, i1 false)
call void @llvm.lifetime.end(i64 16, i8* %61)
br label %normal-return35
clean_ast_4782_32.thread: ; preds = %normal-return91, %normal-return97
%66 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.fca.0.extract142 = extractvalue { i8*, i32 } %66, 0
%.fca.1.extract144 = extractvalue { i8*, i32 } %66, 1
br label %clean_ast_4808_
clean_ast_4782_32: ; preds = %cond.i.i79, %enum-iter-variant-1.i78, %clean_ast_4695_
%cond.i50 = icmp ne i8 %tmp.sroa.0.0.copyload2.i.i.i, 1
%cond.i.i51 = icmp eq i8 %tmp.sroa.511.0.copyload14.i.i.i, 1
%or.cond = or i1 %cond.i50, %cond.i.i51
%67 = icmp eq { i64, i64, [0 x i8] }* %tmp.sroa.625.0.copyload28.i.i.i, null
%or.cond233 = or i1 %or.cond, %67
br i1 %or.cond233, label %clean_ast_4808_, label %cond.i.i.i54
cond.i.i.i54: ; preds = %clean_ast_4782_32
%68 = bitcast { i64, i64, [0 x i8] }* %tmp.sroa.625.0.copyload28.i.i.i to i8*
call void @free(i8* %68) #0
br label %clean_ast_4808_
match_else.i59: ; preds = %normal-return29
call void @llvm.lifetime.end(i64 16, i8* %61)
%def.i.sroa.0.0.idx = getelementptr inbounds %str_slice* %n, i64 0, i32 0
store i8* getelementptr inbounds ([10 x i8]* @str2253, i64 0, i64 0), i8** %def.i.sroa.0.0.idx, align 8
%def.i.sroa.4.0.idx142 = getelementptr inbounds %str_slice* %n, i64 0, i32 1
store i64 9, i64* %def.i.sroa.4.0.idx142, align 8
br label %normal-return35
normal-return35: ; preds = %match_else.i59, %_ZN2rt6unwind12begin_unwind4anon7expr_fn4aAaqE.exit
%.sroa.2.i64.0.idx = getelementptr inbounds [23 x i8]* %.sroa.2.i64, i64 0, i64 0
call void @llvm.lifetime.start(i64 23, i8* %.sroa.2.i64.0.idx)
%src.i.sroa.6.0.idx22.i = getelementptr inbounds [23 x i8]* %src.i.sroa.6.i, i64 0, i64 0
call void @llvm.lifetime.start(i64 23, i8* %src.i.sroa.6.0.idx22.i)
%tmp.i.i.sroa.4.0.idx20.i = getelementptr inbounds [23 x i8]* %tmp.i.i.sroa.4.i, i64 0, i64 0
call void @llvm.lifetime.start(i64 23, i8* %tmp.i.i.sroa.4.0.idx20.i)
%tmp.i.i.sroa.0.0.idx.i = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %49, i64 0, i32 9, i32 0
%tmp.i.i.sroa.0.0.copyload.i = load i8* %tmp.i.i.sroa.0.0.idx.i, align 8
%tmp.i.i.sroa.4.0.idx16.i = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %49, i64 0, i32 9, i32 1, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp.i.i.sroa.4.0.idx20.i, i8* %tmp.i.i.sroa.4.0.idx16.i, i64 23, i32 1, i1 false)
store i8 0, i8* %tmp.i.i.sroa.0.0.idx.i, align 8
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp.i.i.sroa.4.0.idx16.i, i8* %.sroa.2.i64.0.idx, i64 23, i32 1, i1 false)
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %src.i.sroa.6.0.idx22.i, i8* %tmp.i.i.sroa.4.0.idx20.i, i64 23, i32 1, i1 false)
call void @llvm.lifetime.end(i64 23, i8* %tmp.i.i.sroa.4.0.idx20.i)
%src.i.sroa.0.0.idx4.i = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %5, i64 0, i32 0
store i8 %tmp.i.i.sroa.0.0.copyload.i, i8* %src.i.sroa.0.0.idx4.i, align 8
%src.i.sroa.6.0.idx9.i = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %5, i64 0, i32 1, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %src.i.sroa.6.0.idx9.i, i8* %src.i.sroa.6.0.idx22.i, i64 23, i32 1, i1 false)
call void @llvm.lifetime.end(i64 23, i8* %src.i.sroa.6.0.idx22.i)
call void @llvm.lifetime.end(i64 23, i8* %.sroa.2.i64.0.idx)
%cond107 = icmp eq i8 %tmp.i.i.sroa.0.0.copyload.i, 1
br i1 %cond107, label %match_case40, label %normal-return84
match_case40: ; preds = %normal-return35
%69 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %5, i64 0, i32 2
%70 = bitcast [2 x i64]* %69 to i8*
%71 = bitcast { %tydesc*, i8* }* %stderr to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %71, i8* %70, i64 16, i32 8, i1 false)
call void @llvm.memset.p0i8.i64(i8* %70, i8 0, i64 16, i32 8, i1 false)
invoke fastcc void @_ZN2rt9local_ptr8compiled3put19h48db95f7430a5b1baI4v0.0E(%"struct.std::rt::task::Task[#1]"* %49)
to label %normal-return55 unwind label %.noexc74
.noexc74: ; preds = %match_case40
%72 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.pre.pre = getelementptr inbounds { %tydesc*, i8* }* %stderr, i64 0, i32 1
br label %unwind_custom_42.body
unwind_custom_42: ; preds = %normal-return56, %normal-return55
%73 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
br label %unwind_custom_42.body
unwind_custom_42.body: ; preds = %.noexc74, %unwind_custom_42
%.pre.pre-phi = phi i8** [ %.pre.pre, %.noexc74 ], [ %112, %unwind_custom_42 ]
%eh.lpad-body75 = phi { i8*, i32 } [ %72, %.noexc74 ], [ %73, %unwind_custom_42 ]
%.fca.0.extract146 = extractvalue { i8*, i32 } %eh.lpad-body75, 0
%.fca.1.extract148 = extractvalue { i8*, i32 } %eh.lpad-body75, 1
br label %clean_custom_43
clean_ast_4695_: ; preds = %cond.i81, %clean_custom_43, %unwind_ast_4695_
%task.0.load175 = phi %"struct.std::rt::task::Task[#1]"* [ %49, %unwind_ast_4695_ ], [ null, %clean_custom_43 ], [ null, %cond.i81 ]
%.sroa.0157.3 = phi i8* [ %.fca.0.extract154, %unwind_ast_4695_ ], [ %.sroa.0157.4, %clean_custom_43 ], [ %.sroa.0157.4, %cond.i81 ]
%.sroa.8.3 = phi i32 [ %.fca.1.extract156, %unwind_ast_4695_ ], [ %.sroa.8.4, %clean_custom_43 ], [ %.sroa.8.4, %cond.i81 ]
%74 = load i8* %src.i.sroa.0.0.idx4.i, align 8, !range !0
%cond.i77 = icmp eq i8 %74, 1
br i1 %cond.i77, label %enum-iter-variant-1.i78, label %clean_ast_4782_32
enum-iter-variant-1.i78: ; preds = %clean_ast_4695_
%75 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %5, i64 0, i32 2, i64 1
%76 = bitcast i64* %75 to i8**
%77 = load i8** %76, align 8
%78 = icmp eq i8* %77, null
br i1 %78, label %clean_ast_4782_32, label %cond.i.i79
cond.i.i79: ; preds = %enum-iter-variant-1.i78
%79 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %5, i64 0, i32 2
%80 = bitcast [2 x i64]* %79 to %tydesc**
%81 = load %tydesc** %80, align 8
%82 = bitcast %tydesc* %81 to %tydesc**
%83 = load %tydesc** %82, align 8
%84 = bitcast i64* %75 to i8*
%85 = getelementptr inbounds %tydesc* %83, i64 0, i32 3
%86 = load void ({}*, i8*)** %85, align 8
call void %86({}* null, i8* %84)
br label %clean_ast_4782_32
clean_custom_43: ; preds = %cond.i.i86, %enum-iter-variant-1.i85, %"_ZN25_$UP$std..io..Writer.Send9glue_drop19h16e2cfb5e66048dbaPE.exit89", %unwind_custom_42.body
%.pre-phi = phi i8** [ %112, %cond.i.i86 ], [ %112, %enum-iter-variant-1.i85 ], [ %112, %"_ZN25_$UP$std..io..Writer.Send9glue_drop19h16e2cfb5e66048dbaPE.exit89" ], [ %.pre.pre-phi, %unwind_custom_42.body ]
%.sroa.0157.4 = phi i8* [ %.fca.0.extract150, %cond.i.i86 ], [ %.fca.0.extract150, %enum-iter-variant-1.i85 ], [ %.fca.0.extract150, %"_ZN25_$UP$std..io..Writer.Send9glue_drop19h16e2cfb5e66048dbaPE.exit89" ], [ %.fca.0.extract146, %unwind_custom_42.body ]
%.sroa.8.4 = phi i32 [ %.fca.1.extract152, %cond.i.i86 ], [ %.fca.1.extract152, %enum-iter-variant-1.i85 ], [ %.fca.1.extract152, %"_ZN25_$UP$std..io..Writer.Send9glue_drop19h16e2cfb5e66048dbaPE.exit89" ], [ %.fca.1.extract148, %unwind_custom_42.body ]
%87 = load i8** %.pre-phi, align 8
%88 = icmp eq i8* %87, null
br i1 %88, label %clean_ast_4695_, label %cond.i81
cond.i81: ; preds = %clean_custom_43
%89 = getelementptr inbounds { %tydesc*, i8* }* %stderr, i64 0, i32 0
%90 = load %tydesc** %89, align 8
%91 = bitcast %tydesc* %90 to %tydesc**
%92 = load %tydesc** %91, align 8
%93 = bitcast i8** %.pre-phi to i8*
%94 = getelementptr inbounds %tydesc* %92, i64 0, i32 3
%95 = load void ({}*, i8*)** %94, align 8
call void %95({}* null, i8* %93)
br label %clean_ast_4695_
normal-return55: ; preds = %match_case40
%96 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %6, i64 0, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %96, align 8
%97 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %6, i64 0, i64 0, i32 1
%98 = bitcast %str_slice* %n to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %98, %"enum.std::util::Void[#1]"** %97, align 8
%99 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %6, i64 0, i64 1, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %99, align 8
%100 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %6, i64 0, i64 1, i32 1
%101 = bitcast %str_slice* %msg_s to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %101, %"enum.std::util::Void[#1]"** %100, align 8
%102 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %6, i64 0, i64 2, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %102, align 8
%103 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %6, i64 0, i64 2, i32 1
%104 = bitcast %str_slice* %file to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %104, %"enum.std::util::Void[#1]"** %103, align 8
%105 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %6, i64 0, i64 3, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, i64*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt12Default$uint3fmt21h9d24c533d4c27d2edaaR9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %105, align 8
%106 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %6, i64 0, i64 3, i32 1
%107 = bitcast i64* %line to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %107, %"enum.std::util::Void[#1]"** %106, align 8
%__adjust53.sroa.0.0.idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args52, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN2rt6unwind12begin_unwind15__STATIC_FMTSTR19h3cdf3b09c8333291aa9v0.10.preE to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust53.sroa.0.0.idx, align 8
%__adjust53.sroa.2.0.idx107 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args52, i64 0, i32 0, i32 1
store i64 8, i64* %__adjust53.sroa.2.0.idx107, align 8
%__adjust.sroa.0.0.idx.i90 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args52, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %.sub4, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i90, align 8
%__adjust.sroa.2.0.idx1.i91 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args52, i64 0, i32 1, i32 1
store i64 4, i64* %__adjust.sroa.2.0.idx1.i91, align 8
%108 = bitcast { %tydesc*, i8* }* %__auto_borrow_obj.i to i8*
call void @llvm.lifetime.start(i64 16, i8* %108)
%109 = getelementptr inbounds { %tydesc*, i8* }* %stderr, i64 0, i32 0
%110 = load %tydesc** %109, align 8
%111 = getelementptr inbounds { %tydesc*, i8* }* %__auto_borrow_obj.i, i64 0, i32 0
store %tydesc* %110, %tydesc** %111, align 8
%112 = getelementptr inbounds { %tydesc*, i8* }* %stderr, i64 0, i32 1
%113 = load i8** %112, align 8
%114 = getelementptr inbounds { %tydesc*, i8* }* %__auto_borrow_obj.i, i64 0, i32 1
store i8* %113, i8** %114, align 8
invoke void @_ZN3fmt7writeln19h322c2b586bbb2c1eaX9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, { %tydesc*, i8* }* %__auto_borrow_obj.i, %"struct.std::fmt::Arguments[#1]"* %__args52)
to label %normal-return56 unwind label %unwind_custom_42
normal-return56: ; preds = %normal-return55
call void @llvm.lifetime.end(i64 16, i8* %108)
%115 = invoke fastcc noalias %"struct.std::rt::task::Task[#1]"* @_ZN2rt9local_ptr8compiled4take19h8b0bb04cc5c11f7baV4v0.0E()
to label %normal-return59 unwind label %unwind_custom_42
normal-return59: ; preds = %normal-return56
%116 = bitcast { %tydesc*, i8* }* %arg to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %116, i8* %71, i64 16, i32 8, i1 false)
call void @llvm.memset.p0i8.i64(i8* %71, i8 0, i64 16, i32 8, i1 false)
%.sroa.2.8.idx = getelementptr inbounds [23 x i8]* %.sroa.2, i64 0, i64 7
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %.sroa.2.8.idx, i8* %116, i64 16, i32 1, i1 false)
%src.i.sroa.6.0.idx167 = getelementptr inbounds [23 x i8]* %src.i.sroa.6, i64 0, i64 0
call void @llvm.lifetime.start(i64 23, i8* %src.i.sroa.6.0.idx167)
%src.i.sroa.6.1.idx = getelementptr inbounds [23 x i8]* %.sroa.2, i64 0, i64 0
%tmp.i.i.sroa.4.0.idx165 = getelementptr inbounds [23 x i8]* %tmp.i.i.sroa.4, i64 0, i64 0
call void @llvm.lifetime.start(i64 23, i8* %tmp.i.i.sroa.4.0.idx165)
%tmp.i.i.sroa.0.0.idx = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %115, i64 0, i32 9, i32 0
%tmp.i.i.sroa.0.0.copyload = load i8* %tmp.i.i.sroa.0.0.idx, align 8
%tmp.i.i.sroa.4.0.idx161 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %115, i64 0, i32 9, i32 1, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp.i.i.sroa.4.0.idx165, i8* %tmp.i.i.sroa.4.0.idx161, i64 23, i32 1, i1 false)
store i8 1, i8* %tmp.i.i.sroa.0.0.idx, align 8
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp.i.i.sroa.4.0.idx161, i8* %src.i.sroa.6.1.idx, i64 23, i32 1, i1 false)
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %src.i.sroa.6.0.idx167, i8* %tmp.i.i.sroa.4.0.idx165, i64 23, i32 1, i1 false)
call void @llvm.lifetime.end(i64 23, i8* %tmp.i.i.sroa.4.0.idx165)
%src.i.sroa.0.0.idx149 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %7, i64 0, i32 0
store i8 %tmp.i.i.sroa.0.0.copyload, i8* %src.i.sroa.0.0.idx149, align 8
%src.i.sroa.6.0.idx154 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %7, i64 0, i32 1, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %src.i.sroa.6.0.idx154, i8* %src.i.sroa.6.0.idx167, i64 23, i32 1, i1 false)
call void @llvm.lifetime.end(i64 23, i8* %src.i.sroa.6.0.idx167)
%cond108 = icmp eq i8 %tmp.i.i.sroa.0.0.copyload, 1
br i1 %cond108, label %match_case64, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit68"
match_case64: ; preds = %normal-return59
%117 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %7, i64 0, i32 2
%118 = bitcast [2 x i64]* %117 to i8*
%119 = bitcast { %tydesc*, i8* }* %prev to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %119, i8* %118, i64 16, i32 8, i1 false)
call void @llvm.memset.p0i8.i64(i8* %118, i8 0, i64 16, i32 8, i1 false)
invoke fastcc void @_ZN2rt9local_ptr8compiled3put19h48db95f7430a5b1baI4v0.0E(%"struct.std::rt::task::Task[#1]"* %115)
to label %normal-return65 unwind label %.noexc100
.noexc100: ; preds = %match_case64
%120 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
br label %unwind_custom_66.body
normal-return65: ; preds = %match_case64
%121 = bitcast { %tydesc*, i8* }* %arg68 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %121, i8* %119, i64 16, i32 8, i1 false)
call void @llvm.memset.p0i8.i64(i8* %119, i8 0, i64 16, i32 8, i1 false)
%122 = bitcast { %tydesc*, i8* }* %_x.i to i8*
call void @llvm.lifetime.start(i64 16, i8* %122)
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %122, i8* %121, i64 16, i32 8, i1 false)
%123 = getelementptr inbounds { %tydesc*, i8* }* %_x.i, i64 0, i32 1
%124 = load i8** %123, align 8
%125 = icmp eq i8* %124, null
br i1 %125, label %normal-return69, label %cond.i.i92
cond.i.i92: ; preds = %normal-return65
%126 = getelementptr inbounds { %tydesc*, i8* }* %_x.i, i64 0, i32 0
%127 = load %tydesc** %126, align 8
%128 = bitcast %tydesc* %127 to %tydesc**
%129 = load %tydesc** %128, align 8
%130 = bitcast i8** %123 to i8*
%131 = getelementptr inbounds %tydesc* %129, i64 0, i32 3
%132 = load void ({}*, i8*)** %131, align 8
invoke void %132({}* null, i8* %130)
to label %normal-return69 unwind label %unwind_custom_66
unwind_custom_66: ; preds = %cond.i.i92, %normal-return69
%133 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
br label %unwind_custom_66.body
unwind_custom_66.body: ; preds = %.noexc100, %unwind_custom_66
%eh.lpad-body101 = phi { i8*, i32 } [ %133, %unwind_custom_66 ], [ %120, %.noexc100 ]
%.fca.0.extract150 = extractvalue { i8*, i32 } %eh.lpad-body101, 0
%.fca.1.extract152 = extractvalue { i8*, i32 } %eh.lpad-body101, 1
%134 = getelementptr inbounds { %tydesc*, i8* }* %prev, i64 0, i32 1
%135 = load i8** %134, align 8
%136 = icmp eq i8* %135, null
br i1 %136, label %"_ZN25_$UP$std..io..Writer.Send9glue_drop19h16e2cfb5e66048dbaPE.exit89", label %cond.i88
cond.i88: ; preds = %unwind_custom_66.body
%137 = getelementptr inbounds { %tydesc*, i8* }* %prev, i64 0, i32 0
%138 = load %tydesc** %137, align 8
%139 = bitcast %tydesc* %138 to %tydesc**
%140 = load %tydesc** %139, align 8
%141 = bitcast i8** %134 to i8*
%142 = getelementptr inbounds %tydesc* %140, i64 0, i32 3
%143 = load void ({}*, i8*)** %142, align 8
call void %143({}* null, i8* %141)
br label %"_ZN25_$UP$std..io..Writer.Send9glue_drop19h16e2cfb5e66048dbaPE.exit89"
"_ZN25_$UP$std..io..Writer.Send9glue_drop19h16e2cfb5e66048dbaPE.exit89": ; preds = %unwind_custom_66.body, %cond.i88
%144 = load i8* %src.i.sroa.0.0.idx149, align 8, !range !0
%cond.i84 = icmp eq i8 %144, 1
br i1 %cond.i84, label %enum-iter-variant-1.i85, label %clean_custom_43
enum-iter-variant-1.i85: ; preds = %"_ZN25_$UP$std..io..Writer.Send9glue_drop19h16e2cfb5e66048dbaPE.exit89"
%145 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %7, i64 0, i32 2, i64 1
%146 = bitcast i64* %145 to i8**
%147 = load i8** %146, align 8
%148 = icmp eq i8* %147, null
br i1 %148, label %clean_custom_43, label %cond.i.i86
cond.i.i86: ; preds = %enum-iter-variant-1.i85
%149 = bitcast [2 x i64]* %117 to %tydesc**
%150 = load %tydesc** %149, align 8
%151 = bitcast %tydesc* %150 to %tydesc**
%152 = load %tydesc** %151, align 8
%153 = bitcast i64* %145 to i8*
%154 = getelementptr inbounds %tydesc* %152, i64 0, i32 3
%155 = load void ({}*, i8*)** %154, align 8
call void %155({}* null, i8* %153)
br label %clean_custom_43
normal-return69: ; preds = %normal-return65, %cond.i.i92
call void @llvm.lifetime.end(i64 16, i8* %122)
%156 = invoke fastcc noalias %"struct.std::rt::task::Task[#1]"* @_ZN2rt9local_ptr8compiled4take19h8b0bb04cc5c11f7baV4v0.0E()
to label %normal-return70 unwind label %unwind_custom_66
normal-return70: ; preds = %normal-return69
%157 = getelementptr inbounds { %tydesc*, i8* }* %prev, i64 0, i32 1
%158 = load i8** %157, align 8
%159 = icmp eq i8* %158, null
br i1 %159, label %join71, label %cond.i69
cond.i69: ; preds = %normal-return70
%160 = getelementptr inbounds { %tydesc*, i8* }* %prev, i64 0, i32 0
%161 = load %tydesc** %160, align 8
%162 = bitcast %tydesc* %161 to %tydesc**
%163 = load %tydesc** %162, align 8
%164 = bitcast i8** %157 to i8*
%165 = getelementptr inbounds %tydesc* %163, i64 0, i32 3
%166 = load void ({}*, i8*)** %165, align 8
call void %166({}* null, i8* %164)
br label %join71
join71: ; preds = %cond.i69, %normal-return70
%.pr = load i8* %src.i.sroa.0.0.idx149, align 8
%cond.i65 = icmp eq i8 %.pr, 1
br i1 %cond.i65, label %enum-iter-variant-1.i66, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit68"
enum-iter-variant-1.i66: ; preds = %join71
%167 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %7, i64 0, i32 2, i64 1
%168 = bitcast i64* %167 to i8**
%169 = load i8** %168, align 8
%170 = icmp eq i8* %169, null
br i1 %170, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit68", label %cond.i.i67
cond.i.i67: ; preds = %enum-iter-variant-1.i66
%171 = bitcast [2 x i64]* %117 to %tydesc**
%172 = load %tydesc** %171, align 8
%173 = bitcast %tydesc* %172 to %tydesc**
%174 = load %tydesc** %173, align 8
%175 = bitcast i64* %167 to i8*
%176 = getelementptr inbounds %tydesc* %174, i64 0, i32 3
%177 = load void ({}*, i8*)** %176, align 8
call void %177({}* null, i8* %175)
br label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit68"
"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit68": ; preds = %normal-return59, %join71, %enum-iter-variant-1.i66, %cond.i.i67
%task.0.load170184 = phi %"struct.std::rt::task::Task[#1]"* [ %156, %join71 ], [ %156, %enum-iter-variant-1.i66 ], [ %156, %cond.i.i67 ], [ %115, %normal-return59 ]
%178 = load i8** %112, align 8
%179 = icmp eq i8* %178, null
br i1 %179, label %join86, label %cond.i63
cond.i63: ; preds = %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit68"
%180 = load %tydesc** %109, align 8
%181 = bitcast %tydesc* %180 to %tydesc**
%182 = load %tydesc** %181, align 8
%183 = bitcast i8** %112 to i8*
%184 = getelementptr inbounds %tydesc* %182, i64 0, i32 3
%185 = load void ({}*, i8*)** %184, align 8
call void %185({}* null, i8* %183)
br label %join86
unwind_ast_4695_: ; preds = %normal-return84
%186 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.fca.0.extract154 = extractvalue { i8*, i32 } %186, 0
%.fca.1.extract156 = extractvalue { i8*, i32 } %186, 1
br label %clean_ast_4695_
normal-return84: ; preds = %normal-return35
%187 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %8, i64 0, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %187, align 8
%188 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %8, i64 0, i64 0, i32 1
%189 = bitcast %str_slice* %n to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %189, %"enum.std::util::Void[#1]"** %188, align 8
%190 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %8, i64 0, i64 1, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %190, align 8
%191 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %8, i64 0, i64 1, i32 1
%192 = bitcast %str_slice* %msg_s to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %192, %"enum.std::util::Void[#1]"** %191, align 8
%193 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %8, i64 0, i64 2, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %193, align 8
%194 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %8, i64 0, i64 2, i32 1
%195 = bitcast %str_slice* %file to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %195, %"enum.std::util::Void[#1]"** %194, align 8
%196 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %8, i64 0, i64 3, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, i64*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt12Default$uint3fmt21h9d24c533d4c27d2edaaR9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %196, align 8
%197 = getelementptr inbounds [4 x %"struct.std::fmt::Argument[#1]"]* %8, i64 0, i64 3, i32 1
%198 = bitcast i64* %line to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %198, %"enum.std::util::Void[#1]"** %197, align 8
%__adjust82.sroa.0.0.idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args81, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] }, { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN2rt6unwind12begin_unwind15__STATIC_FMTSTR19h3cdf3b09c8333291aa9v0.10.preE to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust82.sroa.0.0.idx, align 8
%__adjust82.sroa.2.0.idx105 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args81, i64 0, i32 0, i32 1
store i64 8, i64* %__adjust82.sroa.2.0.idx105, align 8
%__adjust.sroa.0.0.idx.i61 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args81, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %.sub5, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i61, align 8
%__adjust.sroa.2.0.idx1.i62 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args81, i64 0, i32 1, i32 1
store i64 4, i64* %__adjust.sroa.2.0.idx1.i62, align 8
invoke void @_ZN2rt4util12dumb_println19hc795bb121ba5c6ecaQ9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args81)
to label %join86 unwind label %unwind_ast_4695_
join86: ; preds = %cond.i63, %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit68", %normal-return84
%task.0.load169 = phi %"struct.std::rt::task::Task[#1]"* [ %49, %normal-return84 ], [ %task.0.load170184, %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit68" ], [ %task.0.load170184, %cond.i63 ]
%199 = load i8* %src.i.sroa.0.0.idx4.i, align 8, !range !0
%cond.i45 = icmp eq i8 %199, 1
br i1 %cond.i45, label %enum-iter-variant-1.i46, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit"
enum-iter-variant-1.i46: ; preds = %join86
%200 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %5, i64 0, i32 2, i64 1
%201 = bitcast i64* %200 to i8**
%202 = load i8** %201, align 8
%203 = icmp eq i8* %202, null
br i1 %203, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit", label %cond.i.i47
cond.i.i47: ; preds = %enum-iter-variant-1.i46
%204 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %5, i64 0, i32 2
%205 = bitcast [2 x i64]* %204 to %tydesc**
%206 = load %tydesc** %205, align 8
%207 = bitcast %tydesc* %206 to %tydesc**
%208 = load %tydesc** %207, align 8
%209 = bitcast i64* %200 to i8*
%210 = getelementptr inbounds %tydesc* %208, i64 0, i32 3
%211 = load void ({}*, i8*)** %210, align 8
call void %211({}* null, i8* %209)
br label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit"
"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit": ; preds = %join86, %enum-iter-variant-1.i46, %cond.i.i47
%ExprAssign.sroa.2.1.idx202 = getelementptr inbounds [7 x i8]* %ExprAssign.sroa.2, i64 0, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %ExprAssign.sroa.2.1.idx202, i8* %name.sroa.5.1.idx191, i64 7, i32 1, i1 false)
%ExprAssign.sroa.4.9.idx203 = getelementptr inbounds [7 x i8]* %ExprAssign.sroa.4, i64 0, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %ExprAssign.sroa.4.9.idx203, i8* %name.sroa.10.9.idx195, i64 7, i32 1, i1 false)
call void @llvm.memset.p0i8.i64(i8* %name.sroa.5.1.idx191, i8 0, i64 7, i32 1, i1 false)
call void @llvm.memset.p0i8.i64(i8* %name.sroa.10.9.idx195, i8 0, i64 7, i32 1, i1 false)
%212 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %task.0.load169, i64 0, i32 6, i32 0
%213 = load i8* %212, align 1, !range !0
%cond.i37 = icmp eq i8 %213, 1
%214 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %task.0.load169, i64 0, i32 6, i32 2
%215 = bitcast [3 x i64]* %214 to i8*
br i1 %cond.i37, label %enum-iter-variant-1.i39, label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42"
enum-iter-variant-1.i39: ; preds = %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit"
%216 = load i8* %215, align 1, !range !0
%cond.i.i38 = icmp eq i8 %216, 1
br i1 %cond.i.i38, label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42", label %enum-iter-variant-0.i.i40
enum-iter-variant-0.i.i40: ; preds = %enum-iter-variant-1.i39
%217 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %task.0.load169, i64 0, i32 6, i32 2, i64 1
%218 = bitcast i64* %217 to { i64, i64, [0 x i8] }**
%219 = load { i64, i64, [0 x i8] }** %218, align 8
%220 = icmp eq { i64, i64, [0 x i8] }* %219, null
br i1 %220, label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42", label %cond.i.i.i41
cond.i.i.i41: ; preds = %enum-iter-variant-0.i.i40
%221 = bitcast { i64, i64, [0 x i8] }* %219 to i8*
call void @free(i8* %221) #0
br label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42"
"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42": ; preds = %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit", %enum-iter-variant-1.i39, %enum-iter-variant-0.i.i40, %cond.i.i.i41
store i8 %tmp.sroa.0.0.copyload2.i.i.i, i8* %212, align 8
%ExprAssign.sroa.2.0.idx = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %task.0.load169, i64 0, i32 6, i32 1, i64 0
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %ExprAssign.sroa.2.0.idx, i8* %ExprAssign.sroa.2.1.idx202, i64 7, i32 1, i1 false)
store i8 %tmp.sroa.511.0.copyload14.i.i.i, i8* %215, align 8
%ExprAssign.sroa.4.0.raw_cast = bitcast %"struct.std::rt::task::Task[#1]"* %task.0.load169 to i8*
%ExprAssign.sroa.4.0.raw_idx = getelementptr inbounds i8* %ExprAssign.sroa.4.0.raw_cast, i64 137
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %ExprAssign.sroa.4.0.raw_idx, i8* %ExprAssign.sroa.4.9.idx203, i64 7, i32 1, i1 false)
%ExprAssign.sroa.5.0.idx = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %task.0.load169, i64 0, i32 6, i32 2, i64 1
store i64 %tmp.sroa.625.0.copyload28.c.i.i.i, i64* %ExprAssign.sroa.5.0.idx, align 8
%ExprAssign.sroa.6.0.idx = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %task.0.load169, i64 0, i32 6, i32 2, i64 2
store i64 %tmp.sroa.7.0.copyload33.i.i.i, i64* %ExprAssign.sroa.6.0.idx, align 8
%222 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %task.0.load169, i64 0, i32 3, i32 0
%223 = load i8* %222, align 1, !range !0
%224 = icmp eq i8 %223, 0
br i1 %224, label %"_ZN50std..option..Option$LT$$UP$std..rt..task..Task$GT$9glue_drop19h4e2857b662727630aPE.exit29", label %normal-return91
normal-return91: ; preds = %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42"
%__adjust89.sroa.0.0.idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args88, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] } }* @_ZN2rt6unwind12begin_unwind15__STATIC_FMTSTR19hdd896b8b7372fd49au9v0.10.preE to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust89.sroa.0.0.idx, align 8
%__adjust89.sroa.2.0.idx104 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args88, i64 0, i32 0, i32 1
store i64 1, i64* %__adjust89.sroa.2.0.idx104, align 8
%__adjust.sroa.0.0.idx.i35 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args88, i64 0, i32 1, i32 0
%225 = bitcast %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i35 to i8*
call void @llvm.memset.p0i8.i64(i8* %225, i8 0, i64 16, i32 8, i1 false)
invoke void @_ZN2rt4util12dumb_println19hc795bb121ba5c6ecaQ9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args88)
to label %normal-return97 unwind label %clean_ast_4782_32.thread
normal-return97: ; preds = %normal-return91
%__adjust95.sroa.0.0.idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args94, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] } }* @_ZN2rt6unwind12begin_unwind15__STATIC_FMTSTR19hdd896b8b7372fd49a49v0.10.preE to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust95.sroa.0.0.idx, align 8
%__adjust95.sroa.2.0.idx103 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args94, i64 0, i32 0, i32 1
store i64 1, i64* %__adjust95.sroa.2.0.idx103, align 8
%__adjust.sroa.0.0.idx.i33 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args94, i64 0, i32 1, i32 0
%226 = bitcast %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i33 to i8*
call void @llvm.memset.p0i8.i64(i8* %226, i8 0, i64 16, i32 8, i1 false)
invoke void @_ZN2rt4util12dumb_println19hc795bb121ba5c6ecaQ9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args94)
to label %normal-return98 unwind label %clean_ast_4782_32.thread
normal-return98: ; preds = %normal-return97
call void @llvm.trap() #0
unreachable
"_ZN50std..option..Option$LT$$UP$std..rt..task..Task$GT$9glue_drop19h4e2857b662727630aPE.exit29": ; preds = %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42"
invoke fastcc void @_ZN2rt9local_ptr8compiled3put19h48db95f7430a5b1baI4v0.0E(%"struct.std::rt::task::Task[#1]"* %task.0.load169)
to label %normal-return100 unwind label %.noexc27
.noexc27: ; preds = %"_ZN50std..option..Option$LT$$UP$std..rt..task..Task$GT$9glue_drop19h4e2857b662727630aPE.exit29"
%227 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
br label %unwind_ast_4808_.body
normal-return100: ; preds = %"_ZN50std..option..Option$LT$$UP$std..rt..task..Task$GT$9glue_drop19h4e2857b662727630aPE.exit29"
%228 = invoke fastcc %"struct.std::rt::task::Task[#1]"* @_ZN2rt9local_ptr8compiled13unsafe_borrow19h50a768aa9b50244da44v0.0E()
to label %normal-return102 unwind label %unwind_ast_4808_
normal-return102: ; preds = %normal-return100
%229 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %228, i64 0, i32 3
%230 = bitcast { %tydesc*, i8* }* %msg1 to i8*
%231 = bitcast { %tydesc*, i8* }* %arg103 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %231, i8* %230, i64 16, i32 8, i1 false)
call void @llvm.memset.p0i8.i64(i8* %230, i8 0, i64 16, i32 8, i1 false)
%232 = bitcast %"struct.std::rt::unwind::Unwinder[#1]"* %229 to { i64, %tydesc*, i8*, i8*, i8 }*
invoke void @_ZN2rt6unwind8Unwinder12begin_unwind21h3b1cb9a3eb8d991bZIaD9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* %232, { %tydesc*, i8* }* %arg103)
to label %normal-return104 unwind label %unwind_ast_4808_
normal-return104: ; preds = %normal-return102
unreachable
}
; Function Attrs: nounwind
declare noalias i8* @malloc(i64) unnamed_addr #0
declare i32 @rust_eh_personality(i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*) unnamed_addr
; Function Attrs: nounwind
define internal void @"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE"({}* nocapture readnone, { i64, i64, [0 x i8] }** nocapture readonly) unnamed_addr #0 {
entry-block:
%2 = load { i64, i64, [0 x i8] }** %1, align 8
%3 = icmp eq { i64, i64, [0 x i8] }* %2, null
br i1 %3, label %next, label %cond
next: ; preds = %entry-block, %cond
ret void
cond: ; preds = %entry-block
%4 = bitcast { i64, i64, [0 x i8] }* %2 to i8*
tail call void @free(i8* %4) #0
br label %next
}
; Function Attrs: nounwind
declare void @free(i8* nocapture) unnamed_addr #0
; Function Attrs: nounwind readnone uwtable
define internal %"struct.std::unstable::intrinsics::TypeId[#1]" @"_ZN3any5Any$T11get_type_id21h161d4df8a2bc39a09Was4v0.0E"({ i64, i64, [0 x i8] }** nocapture readnone) unnamed_addr #5 {
entry-block:
ret %"struct.std::unstable::intrinsics::TypeId[#1]" { i64 5777515549890468306 }
}
; Function Attrs: nounwind readnone uwtable
define internal %"enum.std::util::Void[#1]"* @"_ZN3any5Any$T11as_void_ptr21h91cfce8f8bc934be9Wax4v0.0E"({ i64, i64, [0 x i8] }** readnone) unnamed_addr #5 {
entry-block:
%1 = bitcast { i64, i64, [0 x i8] }** %0 to %"enum.std::util::Void[#1]"*
ret %"enum.std::util::Void[#1]"* %1
}
; Function Attrs: nounwind readnone uwtable
define internal %"enum.std::util::Void[#1]"* @"_ZN3any5Any$T15as_mut_void_ptr21h05b1b923880fb5d09Way4v0.0E"({ i64, i64, [0 x i8] }** readnone) unnamed_addr #5 {
entry-block:
%1 = bitcast { i64, i64, [0 x i8] }** %0 to %"enum.std::util::Void[#1]"*
ret %"enum.std::util::Void[#1]"* %1
}
; Function Attrs: nounwind readnone
define internal void @"_ZN9_$LP$$RP$9glue_take19h0d906dfad616c965aFE"({}* nocapture, {}* nocapture) unnamed_addr #2 {
entry-block:
ret void
}
; Function Attrs: nounwind
define internal void @"_ZN12_$UP$$UP$str9glue_drop19h4be2f769bb7f364caGE"({}* nocapture readnone, { i64, i64, [0 x i8] }*** nocapture readonly) unnamed_addr #0 {
entry-block:
%2 = load { i64, i64, [0 x i8] }*** %1, align 8
%3 = icmp eq { i64, i64, [0 x i8] }** %2, null
br i1 %3, label %next, label %cond
next: ; preds = %entry-block, %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit"
ret void
cond: ; preds = %entry-block
%4 = load { i64, i64, [0 x i8] }** %2, align 8
%5 = icmp eq { i64, i64, [0 x i8] }* %4, null
br i1 %5, label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit", label %cond.i
cond.i: ; preds = %cond
%6 = bitcast { i64, i64, [0 x i8] }* %4 to i8*
tail call void @free(i8* %6) #0
br label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit"
"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit": ; preds = %cond, %cond.i
%7 = bitcast { i64, i64, [0 x i8] }** %2 to i8*
tail call void @free(i8* %7) #0
br label %next
}
define internal void @"_ZN12_$UP$$UP$str10glue_visit19h4be2f769bb7f364caHE"({}* nocapture readnone, { i64, i64, [0 x i8] }*** nocapture readonly) unnamed_addr {
entry-block:
%2 = getelementptr inbounds { i64, i64, [0 x i8] }*** %1, i64 1
%3 = load { i64, i64, [0 x i8] }*** %2, align 8
%4 = bitcast { i64, i64, [0 x i8] }** %3 to { i64, %tydesc*, i8*, i8*, i8 }*
%5 = load { i64, i64, [0 x i8] }*** %1, align 8
%6 = getelementptr inbounds { i64, i64, [0 x i8] }** %5, i64 22
%7 = load { i64, i64, [0 x i8] }** %6, align 8
%8 = bitcast { i64, i64, [0 x i8] }* %7 to i8 ({ i64, %tydesc*, i8*, i8*, i8 }*, i64, %"struct.std::unstable::intrinsics::TyDesc[#1]"*)*
%9 = tail call i8 %8({ i64, %tydesc*, i8*, i8*, i8 }* %4, i64 1, %"struct.std::unstable::intrinsics::TyDesc[#1]"* bitcast (%tydesc* @"_ZN8_$UP$str6tydesc19hf486c988072d7d43aiE" to %"struct.std::unstable::intrinsics::TyDesc[#1]"*))
ret void
}
define internal void @"_ZN8_$UP$str10glue_visit19hf486c988072d7d43aEE"({}* nocapture readnone, { i64, i64, [0 x i8] }** nocapture readonly) unnamed_addr {
entry-block:
%2 = getelementptr inbounds { i64, i64, [0 x i8] }** %1, i64 1
%3 = load { i64, i64, [0 x i8] }** %2, align 8
%4 = bitcast { i64, i64, [0 x i8] }* %3 to { i64, %tydesc*, i8*, i8*, i8 }*
%5 = load { i64, i64, [0 x i8] }** %1, align 8
%6 = getelementptr inbounds { i64, i64, [0 x i8] }* %5, i64 9
%7 = bitcast { i64, i64, [0 x i8] }* %6 to i8**
%8 = load i8** %7, align 8
%9 = bitcast i8* %8 to i8 ({ i64, %tydesc*, i8*, i8*, i8 }*)*
%10 = tail call i8 %9({ i64, %tydesc*, i8*, i8*, i8 }* %4)
ret void
}
define internal fastcc void @"_ZN24_$UP$std..rt..task..Task9glue_drop19h1061f94893119fc6auE"(%"struct.std::rt::task::Task[#1]"* %.val) unnamed_addr {
entry-block:
%0 = icmp eq %"struct.std::rt::task::Task[#1]"* %.val, null
br i1 %0, label %next, label %cond
next: ; preds = %entry-block, %_ZN19std..rt..task..Task9glue_drop19h8052bf0fe6a870dbayE.exit
ret void
cond: ; preds = %entry-block
%1 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 11
%2 = load i8* %1, align 1
%3 = icmp eq i8 %2, 0
br i1 %3, label %_ZN19std..rt..task..Task9glue_drop19h8052bf0fe6a870dbayE.exit, label %cond.i
cond.i: ; preds = %cond
%4 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 0
%5 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 2
%6 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 4
%7 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 6
%8 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 7
%9 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 8
%10 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 9
%11 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 10
invoke void @"_ZN2rt4task9Drop$Task4drop21hadc0eb3d0769e07bdYaD9v0.10.preE"(%"struct.std::rt::task::Task[#1]"* %.val)
to label %normal-return.i unwind label %unwind_custom_.i
normal-return.i: ; preds = %cond.i
%12 = getelementptr inbounds %"enum.std::option::Option<~std::rt::Runtime:Send>[#1]"* %11, i64 0, i32 0
%13 = load i8* %12, align 1, !range !0
%cond.i.i = icmp eq i8 %13, 1
br i1 %cond.i.i, label %enum-iter-variant-1.i.i, label %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit.i"
enum-iter-variant-1.i.i: ; preds = %normal-return.i
%14 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 10, i32 2, i64 1
%15 = bitcast i64* %14 to i8**
%16 = load i8** %15, align 8
%17 = icmp eq i8* %16, null
br i1 %17, label %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit.i", label %cond.i.i.i
cond.i.i.i: ; preds = %enum-iter-variant-1.i.i
%18 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 10, i32 2
%19 = bitcast [2 x i64]* %18 to %tydesc**
%20 = load %tydesc** %19, align 8
%21 = bitcast %tydesc* %20 to %tydesc**
%22 = load %tydesc** %21, align 8
%23 = bitcast i64* %14 to i8*
%24 = getelementptr inbounds %tydesc* %22, i64 0, i32 3
%25 = load void ({}*, i8*)** %24, align 8
tail call void %25({}* null, i8* %23)
br label %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit.i"
"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit.i": ; preds = %cond.i.i.i, %enum-iter-variant-1.i.i, %normal-return.i
%26 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %10, i64 0, i32 0
%27 = load i8* %26, align 1, !range !0
%cond.i1.i = icmp eq i8 %27, 1
br i1 %cond.i1.i, label %enum-iter-variant-1.i2.i, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit.i"
enum-iter-variant-1.i2.i: ; preds = %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit.i"
%28 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 9, i32 2, i64 1
%29 = bitcast i64* %28 to i8**
%30 = load i8** %29, align 8
%31 = icmp eq i8* %30, null
br i1 %31, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit.i", label %cond.i.i3.i
cond.i.i3.i: ; preds = %enum-iter-variant-1.i2.i
%32 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 9, i32 2
%33 = bitcast [2 x i64]* %32 to %tydesc**
%34 = load %tydesc** %33, align 8
%35 = bitcast %tydesc* %34 to %tydesc**
%36 = load %tydesc** %35, align 8
%37 = bitcast i64* %28 to i8*
%38 = getelementptr inbounds %tydesc* %36, i64 0, i32 3
%39 = load void ({}*, i8*)** %38, align 8
tail call void %39({}* null, i8* %37)
br label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit.i"
"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit.i": ; preds = %cond.i.i3.i, %enum-iter-variant-1.i2.i, %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit.i"
%40 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %9, i64 0, i32 0
%41 = load i8* %40, align 1, !range !0
%cond.i4.i = icmp eq i8 %41, 1
br i1 %cond.i4.i, label %enum-iter-variant-1.i5.i, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit7.i"
enum-iter-variant-1.i5.i: ; preds = %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit.i"
%42 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 8, i32 2, i64 1
%43 = bitcast i64* %42 to i8**
%44 = load i8** %43, align 8
%45 = icmp eq i8* %44, null
br i1 %45, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit7.i", label %cond.i.i6.i
cond.i.i6.i: ; preds = %enum-iter-variant-1.i5.i
%46 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 8, i32 2
%47 = bitcast [2 x i64]* %46 to %tydesc**
%48 = load %tydesc** %47, align 8
%49 = bitcast %tydesc* %48 to %tydesc**
%50 = load %tydesc** %49, align 8
%51 = bitcast i64* %42 to i8*
%52 = getelementptr inbounds %tydesc* %50, i64 0, i32 3
%53 = load void ({}*, i8*)** %52, align 8
tail call void %53({}* null, i8* %51)
br label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit7.i"
"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit7.i": ; preds = %cond.i.i6.i, %enum-iter-variant-1.i5.i, %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit.i"
%54 = getelementptr inbounds %"enum.std::option::Option<~std::logging::Logger:Send>[#1]"* %8, i64 0, i32 0
%55 = load i8* %54, align 1, !range !0
%cond.i8.i = icmp eq i8 %55, 1
br i1 %cond.i8.i, label %enum-iter-variant-1.i9.i, label %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit.i"
enum-iter-variant-1.i9.i: ; preds = %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit7.i"
%56 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 7, i32 2, i64 1
%57 = bitcast i64* %56 to i8**
%58 = load i8** %57, align 8
%59 = icmp eq i8* %58, null
br i1 %59, label %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit.i", label %cond.i.i10.i
cond.i.i10.i: ; preds = %enum-iter-variant-1.i9.i
%60 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 7, i32 2
%61 = bitcast [2 x i64]* %60 to %tydesc**
%62 = load %tydesc** %61, align 8
%63 = bitcast %tydesc* %62 to %tydesc**
%64 = load %tydesc** %63, align 8
%65 = bitcast i64* %56 to i8*
%66 = getelementptr inbounds %tydesc* %64, i64 0, i32 3
%67 = load void ({}*, i8*)** %66, align 8
tail call void %67({}* null, i8* %65)
br label %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit.i"
"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit.i": ; preds = %cond.i.i10.i, %enum-iter-variant-1.i9.i, %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit7.i"
%68 = getelementptr inbounds %"enum.std::option::Option<std::send_str::SendStr>[#1]"* %7, i64 0, i32 0
%69 = load i8* %68, align 1, !range !0
%cond.i11.i = icmp eq i8 %69, 1
br i1 %cond.i11.i, label %enum-iter-variant-1.i13.i, label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit.i"
enum-iter-variant-1.i13.i: ; preds = %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit.i"
%70 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 6, i32 2
%71 = bitcast [3 x i64]* %70 to i8*
%72 = load i8* %71, align 1, !range !0
%cond.i.i12.i = icmp eq i8 %72, 1
br i1 %cond.i.i12.i, label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit.i", label %enum-iter-variant-0.i.i.i
enum-iter-variant-0.i.i.i: ; preds = %enum-iter-variant-1.i13.i
%73 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 6, i32 2, i64 1
%74 = bitcast i64* %73 to { i64, i64, [0 x i8] }**
%75 = load { i64, i64, [0 x i8] }** %74, align 8
%76 = icmp eq { i64, i64, [0 x i8] }* %75, null
br i1 %76, label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit.i", label %cond.i.i.i.i
cond.i.i.i.i: ; preds = %enum-iter-variant-0.i.i.i
%77 = bitcast { i64, i64, [0 x i8] }* %75 to i8*
tail call void @free(i8* %77) #0
br label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit.i"
"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit.i": ; preds = %cond.i.i.i.i, %enum-iter-variant-0.i.i.i, %enum-iter-variant-1.i13.i, %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit.i"
%78 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 4, i32 1
%79 = load i8* %78, align 1
%80 = icmp eq i8 %79, 0
br i1 %80, label %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit.i, label %cond.i14.i
cond.i14.i: ; preds = %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit.i"
invoke void @"_ZN2rt4task10Drop$Death4drop21h41e8adbb8b92428bE1ae9v0.10.preE"(%"struct.std::rt::task::Death[#1]"* %6)
to label %normal-return.i.i unwind label %unwind_custom_.i.i
normal-return.i.i: ; preds = %cond.i14.i
%81 = getelementptr inbounds %"struct.std::rt::task::Death[#1]"* %6, i64 0, i32 0, i32 0
%82 = load i8* %81, align 1, !range !0
%cond.i.i15.i = icmp eq i8 %82, 1
br i1 %cond.i.i15.i, label %enum-iter-variant-1.i.i.i, label %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit.i
enum-iter-variant-1.i.i.i: ; preds = %normal-return.i.i
%.idx.i.i.i = getelementptr %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 4, i32 0, i32 2, i64 1
%83 = bitcast i64* %.idx.i.i.i to { i64, %tydesc*, i8*, i8*, i8 }**
%.idx.val.i.i.i = load { i64, %tydesc*, i8*, i8*, i8 }** %83, align 8
%84 = icmp eq { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i.i.i, null
br i1 %84, label %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit.i, label %cond.i.i.i16.i
cond.i.i.i16.i: ; preds = %enum-iter-variant-1.i.i.i
%85 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i.i.i, i64 0, i32 1
%86 = load %tydesc** %85, align 8
%87 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i.i.i, i64 0, i32 4
%88 = getelementptr inbounds %tydesc* %86, i64 0, i32 3
%89 = load void ({}*, i8*)** %88, align 8
tail call void %89({}* null, i8* %87)
%90 = bitcast { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i.i.i to i8*
tail call void @free(i8* %90) #0
br label %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit.i
unwind_custom_.i.i: ; preds = %cond.i14.i
%91 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%92 = getelementptr inbounds %"struct.std::rt::task::Death[#1]"* %6, i64 0, i32 0, i32 0
%93 = load i8* %92, align 1, !range !0
%cond.i1.i.i = icmp eq i8 %93, 1
br i1 %cond.i1.i.i, label %enum-iter-variant-1.i4.i.i, label %"_ZN104std..option..Option$LT$proc.Send$LP$std..result..Result$LT$$LP$$RP$$C$$UP$std..any..Any.Send$GT$$RP$$GT$9glue_drop19h37c883194f90ef3baeE.exit6.i.i"
enum-iter-variant-1.i4.i.i: ; preds = %unwind_custom_.i.i
%.idx.i2.i.i = getelementptr %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 4, i32 0, i32 2, i64 1
%94 = bitcast i64* %.idx.i2.i.i to { i64, %tydesc*, i8*, i8*, i8 }**
%.idx.val.i3.i.i = load { i64, %tydesc*, i8*, i8*, i8 }** %94, align 8
%95 = icmp eq { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i3.i.i, null
br i1 %95, label %"_ZN104std..option..Option$LT$proc.Send$LP$std..result..Result$LT$$LP$$RP$$C$$UP$std..any..Any.Send$GT$$RP$$GT$9glue_drop19h37c883194f90ef3baeE.exit6.i.i", label %cond.i.i5.i.i
cond.i.i5.i.i: ; preds = %enum-iter-variant-1.i4.i.i
%96 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i3.i.i, i64 0, i32 1
%97 = load %tydesc** %96, align 8
%98 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i3.i.i, i64 0, i32 4
%99 = getelementptr inbounds %tydesc* %97, i64 0, i32 3
%100 = load void ({}*, i8*)** %99, align 8
tail call void %100({}* null, i8* %98)
%101 = bitcast { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i3.i.i to i8*
tail call void @free(i8* %101) #0
br label %"_ZN104std..option..Option$LT$proc.Send$LP$std..result..Result$LT$$LP$$RP$$C$$UP$std..any..Any.Send$GT$$RP$$GT$9glue_drop19h37c883194f90ef3baeE.exit6.i.i"
"_ZN104std..option..Option$LT$proc.Send$LP$std..result..Result$LT$$LP$$RP$$C$$UP$std..any..Any.Send$GT$$RP$$GT$9glue_drop19h37c883194f90ef3baeE.exit6.i.i": ; preds = %cond.i.i5.i.i, %enum-iter-variant-1.i4.i.i, %unwind_custom_.i.i
resume { i8*, i32 } %91
_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit.i: ; preds = %cond.i.i.i16.i, %enum-iter-variant-1.i.i.i, %normal-return.i.i, %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit.i"
%102 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 3, i32 1, i32 0
%103 = load i8* %102, align 1, !range !0
%cond.i.i17.i = icmp eq i8 %103, 1
br i1 %cond.i.i17.i, label %enum-iter-variant-1.i.i18.i, label %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit.i
enum-iter-variant-1.i.i18.i: ; preds = %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit.i
%104 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 3, i32 1, i32 2, i64 1
%105 = bitcast i64* %104 to i8**
%106 = load i8** %105, align 8
%107 = icmp eq i8* %106, null
br i1 %107, label %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit.i, label %cond.i.i.i19.i
cond.i.i.i19.i: ; preds = %enum-iter-variant-1.i.i18.i
%108 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 3, i32 1, i32 2
%109 = bitcast [2 x i64]* %108 to %tydesc**
%110 = load %tydesc** %109, align 8
%111 = bitcast %tydesc* %110 to %tydesc**
%112 = load %tydesc** %111, align 8
%113 = bitcast i64* %104 to i8*
%114 = getelementptr inbounds %tydesc* %112, i64 0, i32 3
%115 = load void ({}*, i8*)** %114, align 8
tail call void %115({}* null, i8* %113)
br label %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit.i
_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit.i: ; preds = %cond.i.i.i19.i, %enum-iter-variant-1.i.i18.i, %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit.i
%.idx.i.i = getelementptr %"struct.std::rt::task::LocalStorage[#1]"* %5, i64 0, i32 0, i32 0
%.idx.val.i.i = load { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }** %.idx.i.i, align 8
%116 = icmp eq { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }* %.idx.val.i.i, null
br i1 %116, label %_ZN27std..rt..task..LocalStorage9glue_drop19h84a169208c1606e0aCE.exit.i, label %cond.i.i.i20.i
cond.i.i.i20.i: ; preds = %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit.i
%117 = getelementptr inbounds { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }* %.idx.val.i.i, i64 0, i32 0
%118 = load i64* %117, align 8
%119 = getelementptr inbounds { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }* %.idx.val.i.i, i64 0, i32 2, i64 0
%120 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %119, i64 0, i32 0
%121 = getelementptr inbounds i8* %120, i64 %118
%122 = bitcast i8* %121 to %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"*
%123 = icmp ult %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %119, %122
br i1 %123, label %iter_vec_loop_body.i.i.i.i.i, label %"_ZN121_$UP$$x5bstd..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$$x5d9glue_drop19h5ee6f272902c8829aKE.exit.i.i.i"
iter_vec_loop_body.i.i.i.i.i: ; preds = %cond.i.i.i20.i, %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i.i"
%124 = phi %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* [ %139, %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i.i" ], [ %119, %cond.i.i.i20.i ]
%125 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %124, i64 0, i32 0
%126 = load i8* %125, align 1, !range !0
%cond.i.i.i.i.i.i = icmp eq i8 %126, 1
br i1 %cond.i.i.i.i.i.i, label %enum-iter-variant-1.i.i.i.i.i.i, label %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i.i"
enum-iter-variant-1.i.i.i.i.i.i: ; preds = %iter_vec_loop_body.i.i.i.i.i
%127 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %124, i64 0, i32 2, i64 2
%128 = bitcast i64* %127 to i8**
%129 = load i8** %128, align 8
%130 = icmp eq i8* %129, null
br i1 %130, label %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i.i", label %cond.i.i.i.i.i.i.i.i
cond.i.i.i.i.i.i.i.i: ; preds = %enum-iter-variant-1.i.i.i.i.i.i
%131 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %124, i64 0, i32 2, i64 1
%132 = bitcast i64* %131 to %tydesc**
%133 = load %tydesc** %132, align 8
%134 = bitcast %tydesc* %133 to %tydesc**
%135 = load %tydesc** %134, align 8
%136 = bitcast i64* %127 to i8*
%137 = getelementptr inbounds %tydesc* %135, i64 0, i32 3
%138 = load void ({}*, i8*)** %137, align 8
tail call void %138({}* null, i8* %136)
br label %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i.i"
"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i.i": ; preds = %cond.i.i.i.i.i.i.i.i, %enum-iter-variant-1.i.i.i.i.i.i, %iter_vec_loop_body.i.i.i.i.i
%139 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %124, i64 1
%140 = icmp ult %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %139, %122
br i1 %140, label %iter_vec_loop_body.i.i.i.i.i, label %"_ZN121_$UP$$x5bstd..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$$x5d9glue_drop19h5ee6f272902c8829aKE.exit.i.i.i"
"_ZN121_$UP$$x5bstd..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$$x5d9glue_drop19h5ee6f272902c8829aKE.exit.i.i.i": ; preds = %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i.i", %cond.i.i.i20.i
%141 = bitcast { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }* %.idx.val.i.i to i8*
tail call void @free(i8* %141) #0
br label %_ZN27std..rt..task..LocalStorage9glue_drop19h84a169208c1606e0aCE.exit.i
_ZN27std..rt..task..LocalStorage9glue_drop19h84a169208c1606e0aCE.exit.i: ; preds = %"_ZN121_$UP$$x5bstd..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$$x5d9glue_drop19h5ee6f272902c8829aKE.exit.i.i.i", %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit.i
tail call fastcc void @_ZN30std..rt..local_heap..LocalHeap9glue_drop19h3333a0e411bc2a6ea4E(%"struct.std::rt::local_heap::LocalHeap[#1]"* %4)
br label %_ZN19std..rt..task..Task9glue_drop19h8052bf0fe6a870dbayE.exit
unwind_custom_.i: ; preds = %cond.i
%142 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%143 = getelementptr inbounds %"enum.std::option::Option<~std::rt::Runtime:Send>[#1]"* %11, i64 0, i32 0
%144 = load i8* %143, align 1, !range !0
%cond.i21.i = icmp eq i8 %144, 1
br i1 %cond.i21.i, label %enum-iter-variant-1.i22.i, label %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit24.i"
enum-iter-variant-1.i22.i: ; preds = %unwind_custom_.i
%145 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 10, i32 2, i64 1
%146 = bitcast i64* %145 to i8**
%147 = load i8** %146, align 8
%148 = icmp eq i8* %147, null
br i1 %148, label %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit24.i", label %cond.i.i23.i
cond.i.i23.i: ; preds = %enum-iter-variant-1.i22.i
%149 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 10, i32 2
%150 = bitcast [2 x i64]* %149 to %tydesc**
%151 = load %tydesc** %150, align 8
%152 = bitcast %tydesc* %151 to %tydesc**
%153 = load %tydesc** %152, align 8
%154 = bitcast i64* %145 to i8*
%155 = getelementptr inbounds %tydesc* %153, i64 0, i32 3
%156 = load void ({}*, i8*)** %155, align 8
tail call void %156({}* null, i8* %154)
br label %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit24.i"
"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit24.i": ; preds = %cond.i.i23.i, %enum-iter-variant-1.i22.i, %unwind_custom_.i
%157 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %10, i64 0, i32 0
%158 = load i8* %157, align 1, !range !0
%cond.i25.i = icmp eq i8 %158, 1
br i1 %cond.i25.i, label %enum-iter-variant-1.i26.i, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit28.i"
enum-iter-variant-1.i26.i: ; preds = %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit24.i"
%159 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 9, i32 2, i64 1
%160 = bitcast i64* %159 to i8**
%161 = load i8** %160, align 8
%162 = icmp eq i8* %161, null
br i1 %162, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit28.i", label %cond.i.i27.i
cond.i.i27.i: ; preds = %enum-iter-variant-1.i26.i
%163 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 9, i32 2
%164 = bitcast [2 x i64]* %163 to %tydesc**
%165 = load %tydesc** %164, align 8
%166 = bitcast %tydesc* %165 to %tydesc**
%167 = load %tydesc** %166, align 8
%168 = bitcast i64* %159 to i8*
%169 = getelementptr inbounds %tydesc* %167, i64 0, i32 3
%170 = load void ({}*, i8*)** %169, align 8
tail call void %170({}* null, i8* %168)
br label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit28.i"
"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit28.i": ; preds = %cond.i.i27.i, %enum-iter-variant-1.i26.i, %"_ZN52std..option..Option$LT$$UP$std..rt..Runtime.Send$GT$9glue_drop19h1cab3ca5091bd5d8aDE.exit24.i"
%171 = getelementptr inbounds %"enum.std::option::Option<~std::io::Writer:Send>[#1]"* %9, i64 0, i32 0
%172 = load i8* %171, align 1, !range !0
%cond.i29.i = icmp eq i8 %172, 1
br i1 %cond.i29.i, label %enum-iter-variant-1.i30.i, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit32.i"
enum-iter-variant-1.i30.i: ; preds = %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit28.i"
%173 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 8, i32 2, i64 1
%174 = bitcast i64* %173 to i8**
%175 = load i8** %174, align 8
%176 = icmp eq i8* %175, null
br i1 %176, label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit32.i", label %cond.i.i31.i
cond.i.i31.i: ; preds = %enum-iter-variant-1.i30.i
%177 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 8, i32 2
%178 = bitcast [2 x i64]* %177 to %tydesc**
%179 = load %tydesc** %178, align 8
%180 = bitcast %tydesc* %179 to %tydesc**
%181 = load %tydesc** %180, align 8
%182 = bitcast i64* %173 to i8*
%183 = getelementptr inbounds %tydesc* %181, i64 0, i32 3
%184 = load void ({}*, i8*)** %183, align 8
tail call void %184({}* null, i8* %182)
br label %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit32.i"
"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit32.i": ; preds = %cond.i.i31.i, %enum-iter-variant-1.i30.i, %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit28.i"
%185 = getelementptr inbounds %"enum.std::option::Option<~std::logging::Logger:Send>[#1]"* %8, i64 0, i32 0
%186 = load i8* %185, align 1, !range !0
%cond.i33.i = icmp eq i8 %186, 1
br i1 %cond.i33.i, label %enum-iter-variant-1.i34.i, label %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit36.i"
enum-iter-variant-1.i34.i: ; preds = %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit32.i"
%187 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 7, i32 2, i64 1
%188 = bitcast i64* %187 to i8**
%189 = load i8** %188, align 8
%190 = icmp eq i8* %189, null
br i1 %190, label %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit36.i", label %cond.i.i35.i
cond.i.i35.i: ; preds = %enum-iter-variant-1.i34.i
%191 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 7, i32 2
%192 = bitcast [2 x i64]* %191 to %tydesc**
%193 = load %tydesc** %192, align 8
%194 = bitcast %tydesc* %193 to %tydesc**
%195 = load %tydesc** %194, align 8
%196 = bitcast i64* %187 to i8*
%197 = getelementptr inbounds %tydesc* %195, i64 0, i32 3
%198 = load void ({}*, i8*)** %197, align 8
tail call void %198({}* null, i8* %196)
br label %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit36.i"
"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit36.i": ; preds = %cond.i.i35.i, %enum-iter-variant-1.i34.i, %"_ZN51std..option..Option$LT$$UP$std..io..Writer.Send$GT$9glue_drop19hab69fd0595fa2757aLE.exit32.i"
%199 = getelementptr inbounds %"enum.std::option::Option<std::send_str::SendStr>[#1]"* %7, i64 0, i32 0
%200 = load i8* %199, align 1, !range !0
%cond.i37.i = icmp eq i8 %200, 1
br i1 %cond.i37.i, label %enum-iter-variant-1.i39.i, label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42.i"
enum-iter-variant-1.i39.i: ; preds = %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit36.i"
%201 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 6, i32 2
%202 = bitcast [3 x i64]* %201 to i8*
%203 = load i8* %202, align 1, !range !0
%cond.i.i38.i = icmp eq i8 %203, 1
br i1 %cond.i.i38.i, label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42.i", label %enum-iter-variant-0.i.i40.i
enum-iter-variant-0.i.i40.i: ; preds = %enum-iter-variant-1.i39.i
%204 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 6, i32 2, i64 1
%205 = bitcast i64* %204 to { i64, i64, [0 x i8] }**
%206 = load { i64, i64, [0 x i8] }** %205, align 8
%207 = icmp eq { i64, i64, [0 x i8] }* %206, null
br i1 %207, label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42.i", label %cond.i.i.i41.i
cond.i.i.i41.i: ; preds = %enum-iter-variant-0.i.i40.i
%208 = bitcast { i64, i64, [0 x i8] }* %206 to i8*
tail call void @free(i8* %208) #0
br label %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42.i"
"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42.i": ; preds = %cond.i.i.i41.i, %enum-iter-variant-0.i.i40.i, %enum-iter-variant-1.i39.i, %"_ZN56std..option..Option$LT$$UP$std..logging..Logger.Send$GT$9glue_drop19hee0d26f16b722fa5aTE.exit36.i"
%209 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 4, i32 1
%210 = load i8* %209, align 1
%211 = icmp eq i8 %210, 0
br i1 %211, label %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit57.i, label %cond.i43.i
cond.i43.i: ; preds = %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42.i"
invoke void @"_ZN2rt4task10Drop$Death4drop21h41e8adbb8b92428bE1ae9v0.10.preE"(%"struct.std::rt::task::Death[#1]"* %6)
to label %normal-return.i45.i unwind label %unwind_custom_.i51.i
normal-return.i45.i: ; preds = %cond.i43.i
%212 = getelementptr inbounds %"struct.std::rt::task::Death[#1]"* %6, i64 0, i32 0, i32 0
%213 = load i8* %212, align 1, !range !0
%cond.i.i44.i = icmp eq i8 %213, 1
br i1 %cond.i.i44.i, label %enum-iter-variant-1.i.i48.i, label %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit57.i
enum-iter-variant-1.i.i48.i: ; preds = %normal-return.i45.i
%.idx.i.i46.i = getelementptr %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 4, i32 0, i32 2, i64 1
%214 = bitcast i64* %.idx.i.i46.i to { i64, %tydesc*, i8*, i8*, i8 }**
%.idx.val.i.i47.i = load { i64, %tydesc*, i8*, i8*, i8 }** %214, align 8
%215 = icmp eq { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i.i47.i, null
br i1 %215, label %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit57.i, label %cond.i.i.i49.i
cond.i.i.i49.i: ; preds = %enum-iter-variant-1.i.i48.i
%216 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i.i47.i, i64 0, i32 1
%217 = load %tydesc** %216, align 8
%218 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i.i47.i, i64 0, i32 4
%219 = getelementptr inbounds %tydesc* %217, i64 0, i32 3
%220 = load void ({}*, i8*)** %219, align 8
tail call void %220({}* null, i8* %218)
%221 = bitcast { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i.i47.i to i8*
tail call void @free(i8* %221) #0
br label %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit57.i
unwind_custom_.i51.i: ; preds = %cond.i43.i
%222 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%223 = getelementptr inbounds %"struct.std::rt::task::Death[#1]"* %6, i64 0, i32 0, i32 0
%224 = load i8* %223, align 1, !range !0
%cond.i1.i50.i = icmp eq i8 %224, 1
br i1 %cond.i1.i50.i, label %enum-iter-variant-1.i4.i54.i, label %"_ZN104std..option..Option$LT$proc.Send$LP$std..result..Result$LT$$LP$$RP$$C$$UP$std..any..Any.Send$GT$$RP$$GT$9glue_drop19h37c883194f90ef3baeE.exit6.i56.i"
enum-iter-variant-1.i4.i54.i: ; preds = %unwind_custom_.i51.i
%.idx.i2.i52.i = getelementptr %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 4, i32 0, i32 2, i64 1
%225 = bitcast i64* %.idx.i2.i52.i to { i64, %tydesc*, i8*, i8*, i8 }**
%.idx.val.i3.i53.i = load { i64, %tydesc*, i8*, i8*, i8 }** %225, align 8
%226 = icmp eq { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i3.i53.i, null
br i1 %226, label %"_ZN104std..option..Option$LT$proc.Send$LP$std..result..Result$LT$$LP$$RP$$C$$UP$std..any..Any.Send$GT$$RP$$GT$9glue_drop19h37c883194f90ef3baeE.exit6.i56.i", label %cond.i.i5.i55.i
cond.i.i5.i55.i: ; preds = %enum-iter-variant-1.i4.i54.i
%227 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i3.i53.i, i64 0, i32 1
%228 = load %tydesc** %227, align 8
%229 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i3.i53.i, i64 0, i32 4
%230 = getelementptr inbounds %tydesc* %228, i64 0, i32 3
%231 = load void ({}*, i8*)** %230, align 8
tail call void %231({}* null, i8* %229)
%232 = bitcast { i64, %tydesc*, i8*, i8*, i8 }* %.idx.val.i3.i53.i to i8*
tail call void @free(i8* %232) #0
br label %"_ZN104std..option..Option$LT$proc.Send$LP$std..result..Result$LT$$LP$$RP$$C$$UP$std..any..Any.Send$GT$$RP$$GT$9glue_drop19h37c883194f90ef3baeE.exit6.i56.i"
"_ZN104std..option..Option$LT$proc.Send$LP$std..result..Result$LT$$LP$$RP$$C$$UP$std..any..Any.Send$GT$$RP$$GT$9glue_drop19h37c883194f90ef3baeE.exit6.i56.i": ; preds = %cond.i.i5.i55.i, %enum-iter-variant-1.i4.i54.i, %unwind_custom_.i51.i
resume { i8*, i32 } %222
_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit57.i: ; preds = %cond.i.i.i49.i, %enum-iter-variant-1.i.i48.i, %normal-return.i45.i, %"_ZN49std..option..Option$LT$std..send_str..SendStr$GT$9glue_drop19hf8327488533a734da1E.exit42.i"
%233 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 3, i32 1, i32 0
%234 = load i8* %233, align 1, !range !0
%cond.i.i58.i = icmp eq i8 %234, 1
br i1 %cond.i.i58.i, label %enum-iter-variant-1.i.i59.i, label %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit61.i
enum-iter-variant-1.i.i59.i: ; preds = %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit57.i
%235 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 3, i32 1, i32 2, i64 1
%236 = bitcast i64* %235 to i8**
%237 = load i8** %236, align 8
%238 = icmp eq i8* %237, null
br i1 %238, label %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit61.i, label %cond.i.i.i60.i
cond.i.i.i60.i: ; preds = %enum-iter-variant-1.i.i59.i
%239 = getelementptr inbounds %"struct.std::rt::task::Task[#1]"* %.val, i64 0, i32 3, i32 1, i32 2
%240 = bitcast [2 x i64]* %239 to %tydesc**
%241 = load %tydesc** %240, align 8
%242 = bitcast %tydesc* %241 to %tydesc**
%243 = load %tydesc** %242, align 8
%244 = bitcast i64* %235 to i8*
%245 = getelementptr inbounds %tydesc* %243, i64 0, i32 3
%246 = load void ({}*, i8*)** %245, align 8
tail call void %246({}* null, i8* %244)
br label %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit61.i
_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit61.i: ; preds = %cond.i.i.i60.i, %enum-iter-variant-1.i.i59.i, %_ZN20std..rt..task..Death9glue_drop19h4c4fc97058572e77a9E.exit57.i
%.idx.i62.i = getelementptr %"struct.std::rt::task::LocalStorage[#1]"* %5, i64 0, i32 0, i32 0
%.idx.val.i63.i = load { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }** %.idx.i62.i, align 8
%247 = icmp eq { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }* %.idx.val.i63.i, null
br i1 %247, label %_ZN27std..rt..task..LocalStorage9glue_drop19h84a169208c1606e0aCE.exit71.i, label %cond.i.i.i64.i
cond.i.i.i64.i: ; preds = %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit61.i
%248 = getelementptr inbounds { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }* %.idx.val.i63.i, i64 0, i32 0
%249 = load i64* %248, align 8
%250 = getelementptr inbounds { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }* %.idx.val.i63.i, i64 0, i32 2, i64 0
%251 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %250, i64 0, i32 0
%252 = getelementptr inbounds i8* %251, i64 %249
%253 = bitcast i8* %252 to %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"*
%254 = icmp ult %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %250, %253
br i1 %254, label %iter_vec_loop_body.i.i.i.i66.i, label %"_ZN121_$UP$$x5bstd..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$$x5d9glue_drop19h5ee6f272902c8829aKE.exit.i.i70.i"
iter_vec_loop_body.i.i.i.i66.i: ; preds = %cond.i.i.i64.i, %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i69.i"
%255 = phi %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* [ %270, %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i69.i" ], [ %250, %cond.i.i.i64.i ]
%256 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %255, i64 0, i32 0
%257 = load i8* %256, align 1, !range !0
%cond.i.i.i.i.i65.i = icmp eq i8 %257, 1
br i1 %cond.i.i.i.i.i65.i, label %enum-iter-variant-1.i.i.i.i.i67.i, label %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i69.i"
enum-iter-variant-1.i.i.i.i.i67.i: ; preds = %iter_vec_loop_body.i.i.i.i66.i
%258 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %255, i64 0, i32 2, i64 2
%259 = bitcast i64* %258 to i8**
%260 = load i8** %259, align 8
%261 = icmp eq i8* %260, null
br i1 %261, label %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i69.i", label %cond.i.i.i.i.i.i.i68.i
cond.i.i.i.i.i.i.i68.i: ; preds = %enum-iter-variant-1.i.i.i.i.i67.i
%262 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %255, i64 0, i32 2, i64 1
%263 = bitcast i64* %262 to %tydesc**
%264 = load %tydesc** %263, align 8
%265 = bitcast %tydesc* %264 to %tydesc**
%266 = load %tydesc** %265, align 8
%267 = bitcast i64* %258 to i8*
%268 = getelementptr inbounds %tydesc* %266, i64 0, i32 3
%269 = load void ({}*, i8*)** %268, align 8
tail call void %269({}* null, i8* %267)
br label %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i69.i"
"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i69.i": ; preds = %cond.i.i.i.i.i.i.i68.i, %enum-iter-variant-1.i.i.i.i.i67.i, %iter_vec_loop_body.i.i.i.i66.i
%270 = getelementptr inbounds %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %255, i64 1
%271 = icmp ult %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"* %270, %253
br i1 %271, label %iter_vec_loop_body.i.i.i.i66.i, label %"_ZN121_$UP$$x5bstd..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$$x5d9glue_drop19h5ee6f272902c8829aKE.exit.i.i70.i"
"_ZN121_$UP$$x5bstd..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$$x5d9glue_drop19h5ee6f272902c8829aKE.exit.i.i70.i": ; preds = %"_ZN108std..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$9glue_drop19hae992f395a5f7ef5aSE.exit.i.i.i.i69.i", %cond.i.i.i64.i
%272 = bitcast { i64, i64, [0 x %"enum.std::option::Option<(*u8,~std::local_data::LocalData:Send,std::local_data::LoanState)>[#1]"] }* %.idx.val.i63.i to i8*
tail call void @free(i8* %272) #0
br label %_ZN27std..rt..task..LocalStorage9glue_drop19h84a169208c1606e0aCE.exit71.i
_ZN27std..rt..task..LocalStorage9glue_drop19h84a169208c1606e0aCE.exit71.i: ; preds = %"_ZN121_$UP$$x5bstd..option..Option$LT$$LP$$RP$u8$C$$UP$std..local_data..LocalData.Send$C$std..local_data..LoanState$RP$$GT$$x5d9glue_drop19h5ee6f272902c8829aKE.exit.i.i70.i", %_ZN25std..rt..unwind..Unwinder9glue_drop19h5e90654557b73f1eaqE.exit61.i
tail call fastcc void @_ZN30std..rt..local_heap..LocalHeap9glue_drop19h3333a0e411bc2a6ea4E(%"struct.std::rt::local_heap::LocalHeap[#1]"* %4)
resume { i8*, i32 } %142
_ZN19std..rt..task..Task9glue_drop19h8052bf0fe6a870dbayE.exit: ; preds = %cond, %_ZN27std..rt..task..LocalStorage9glue_drop19h84a169208c1606e0aCE.exit.i
%273 = bitcast %"struct.std::rt::task::Task[#1]"* %.val to i8*
tail call void @free(i8* %273) #0
br label %next
}
declare void @"_ZN2rt4task9Drop$Task4drop21hadc0eb3d0769e07bdYaD9v0.10.preE"(%"struct.std::rt::task::Task[#1]"*) unnamed_addr
declare void @"_ZN2rt4task10Drop$Death4drop21h41e8adbb8b92428bE1ae9v0.10.preE"(%"struct.std::rt::task::Death[#1]"*) unnamed_addr
define internal fastcc void @_ZN30std..rt..local_heap..LocalHeap9glue_drop19h3333a0e411bc2a6ea4E(%"struct.std::rt::local_heap::LocalHeap[#1]"*) unnamed_addr {
entry-block:
%1 = getelementptr inbounds %"struct.std::rt::local_heap::LocalHeap[#1]"* %0, i64 0, i32 3
%2 = load i8* %1, align 1
%3 = icmp eq i8 %2, 0
br i1 %3, label %next, label %cond
next: ; preds = %cond.i.i, %normal-return.i, %normal-return, %entry-block
ret void
cond: ; preds = %entry-block
%4 = getelementptr inbounds %"struct.std::rt::local_heap::LocalHeap[#1]"* %0, i64 0, i32 0
invoke void @"_ZN2rt10local_heap14Drop$LocalHeap4drop21hbe0295984675a0f1Aca99v0.10.preE"(%"struct.std::rt::local_heap::LocalHeap[#1]"* %0)
to label %normal-return unwind label %unwind_custom_
normal-return: ; preds = %cond
%5 = getelementptr inbounds %"struct.std::rt::local_heap::LocalHeap[#1]"* %0, i64 0, i32 0, i32 2
%6 = load i8* %5, align 1
%7 = icmp eq i8 %6, 0
br i1 %7, label %next, label %cond.i
cond.i: ; preds = %normal-return
invoke void @"_ZN2rt10local_heap17Drop$MemoryRegion4drop21h808c8f7694d6de485Kae9v0.10.preE"(%"struct.std::rt::local_heap::MemoryRegion[#1]"* %4)
to label %normal-return.i unwind label %unwind_custom_.i
normal-return.i: ; preds = %cond.i
%8 = bitcast %"struct.std::rt::local_heap::LocalHeap[#1]"* %0 to {}**
%9 = load {}** %8, align 8
%10 = icmp eq {}* %9, null
br i1 %10, label %next, label %cond.i.i
cond.i.i: ; preds = %normal-return.i
%11 = bitcast {}* %9 to i8*
tail call void @free(i8* %11) #0
br label %next
unwind_custom_.i: ; preds = %cond.i
%12 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%13 = bitcast %"struct.std::rt::local_heap::LocalHeap[#1]"* %0 to {}**
%14 = load {}** %13, align 8
%15 = icmp eq {}* %14, null
br i1 %15, label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit2.i", label %cond.i1.i
cond.i1.i: ; preds = %unwind_custom_.i
%16 = bitcast {}* %14 to i8*
tail call void @free(i8* %16) #0
br label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit2.i"
"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit2.i": ; preds = %cond.i1.i, %unwind_custom_.i
resume { i8*, i32 } %12
unwind_custom_: ; preds = %cond
%17 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%18 = getelementptr inbounds %"struct.std::rt::local_heap::LocalHeap[#1]"* %0, i64 0, i32 0, i32 2
%19 = load i8* %18, align 1
%20 = icmp eq i8 %19, 0
br i1 %20, label %_ZN33std..rt..local_heap..MemoryRegion9glue_drop19hb907ab3166dd5d45a9E.exit7, label %cond.i1
cond.i1: ; preds = %unwind_custom_
invoke void @"_ZN2rt10local_heap17Drop$MemoryRegion4drop21h808c8f7694d6de485Kae9v0.10.preE"(%"struct.std::rt::local_heap::MemoryRegion[#1]"* %4)
to label %normal-return.i2 unwind label %unwind_custom_.i4
normal-return.i2: ; preds = %cond.i1
%21 = bitcast %"struct.std::rt::local_heap::LocalHeap[#1]"* %0 to {}**
%22 = load {}** %21, align 8
%23 = icmp eq {}* %22, null
br i1 %23, label %_ZN33std..rt..local_heap..MemoryRegion9glue_drop19hb907ab3166dd5d45a9E.exit7, label %cond.i.i3
cond.i.i3: ; preds = %normal-return.i2
%24 = bitcast {}* %22 to i8*
tail call void @free(i8* %24) #0
br label %_ZN33std..rt..local_heap..MemoryRegion9glue_drop19hb907ab3166dd5d45a9E.exit7
unwind_custom_.i4: ; preds = %cond.i1
%25 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%26 = bitcast %"struct.std::rt::local_heap::LocalHeap[#1]"* %0 to {}**
%27 = load {}** %26, align 8
%28 = icmp eq {}* %27, null
br i1 %28, label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit2.i6", label %cond.i1.i5
cond.i1.i5: ; preds = %unwind_custom_.i4
%29 = bitcast {}* %27 to i8*
tail call void @free(i8* %29) #0
br label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit2.i6"
"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit2.i6": ; preds = %cond.i1.i5, %unwind_custom_.i4
resume { i8*, i32 } %25
_ZN33std..rt..local_heap..MemoryRegion9glue_drop19hb907ab3166dd5d45a9E.exit7: ; preds = %unwind_custom_, %normal-return.i2, %cond.i.i3
resume { i8*, i32 } %17
}
declare void @"_ZN2rt10local_heap14Drop$LocalHeap4drop21hbe0295984675a0f1Aca99v0.10.preE"(%"struct.std::rt::local_heap::LocalHeap[#1]"*) unnamed_addr
declare void @"_ZN2rt10local_heap17Drop$MemoryRegion4drop21h808c8f7694d6de485Kae9v0.10.preE"(%"struct.std::rt::local_heap::MemoryRegion[#1]"*) unnamed_addr
; Function Attrs: noinline uwtable
define internal fastcc %"struct.std::rt::task::Task[#1]"* @_ZN2rt9local_ptr8compiled8try_take19h021887ac426c42f5ay4v0.0E() unnamed_addr #6 {
entry-block:
%0 = load i8** @_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE, align 8
%1 = icmp eq i8* %0, null
br i1 %1, label %join, label %normal-return2
normal-return2: ; preds = %entry-block
%2 = bitcast i8* %0 to %"struct.std::rt::task::Task[#1]"*
store i8* null, i8** @_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE, align 8
tail call fastcc void @"_ZN24_$UP$std..rt..task..Task9glue_drop19h1061f94893119fc6auE"(%"struct.std::rt::task::Task[#1]"* null)
br label %join
join: ; preds = %entry-block, %normal-return2
%__make_return_pointer.sroa.0.0 = phi %"struct.std::rt::task::Task[#1]"* [ %2, %normal-return2 ], [ null, %entry-block ]
ret %"struct.std::rt::task::Task[#1]"* %__make_return_pointer.sroa.0.0
}
declare void @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE"({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*) unnamed_addr
declare void @"_ZN3fmt12Default$uint3fmt21h9d24c533d4c27d2edaaR9v0.10.preE"({ i64, %tydesc*, i8*, i8*, i8 }*, i64*, %"struct.std::fmt::Formatter[#1]"*) unnamed_addr
declare void @_ZN2rt4util12dumb_println19hc795bb121ba5c6ecaQ9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.std::fmt::Arguments[#1]"*) unnamed_addr
; Function Attrs: noinline uwtable
define internal fastcc void @_ZN2rt9local_ptr8compiled3put19h48db95f7430a5b1baI4v0.0E(%"struct.std::rt::task::Task[#1]"* noalias) unnamed_addr #6 {
normal-return:
%1 = bitcast %"struct.std::rt::task::Task[#1]"* %0 to i8*
store i8* %1, i8** @_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE, align 8
tail call fastcc void @"_ZN24_$UP$std..rt..task..Task9glue_drop19h1061f94893119fc6auE"(%"struct.std::rt::task::Task[#1]"* null)
ret void
}
declare void @_ZN3fmt7writeln19h322c2b586bbb2c1eaX9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*, { %tydesc*, i8* }*, %"struct.std::fmt::Arguments[#1]"*) unnamed_addr
; Function Attrs: noinline uwtable
define internal fastcc noalias %"struct.std::rt::task::Task[#1]"* @_ZN2rt9local_ptr8compiled4take19h8b0bb04cc5c11f7baV4v0.0E() unnamed_addr #6 {
entry-block:
%0 = alloca %str_slice, align 8
%1 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args = alloca %"struct.std::fmt::Arguments[#1]", align 8
%__adjust2 = alloca { i8*, i64 }, align 8
%2 = load i8** @_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE, align 8
%3 = icmp eq i8* %2, null
br i1 %3, label %then-block-5685-, label %normal-return5
then-block-5685-: ; preds = %entry-block
%4 = getelementptr inbounds %str_slice* %0, i64 0, i32 0
store i8* getelementptr inbounds ([15 x i8]* @str2280, i64 0, i64 0), i8** %4, align 8
%5 = getelementptr inbounds %str_slice* %0, i64 0, i32 1
store i64 14, i64* %5, align 8
%6 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %1, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt15Default$$BP$str3fmt21hc4a66d5ebdc55a07LIaC9v0.10.preE" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %6, align 8
%7 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %1, i64 0, i32 1
%8 = bitcast %str_slice* %0 to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %8, %"enum.std::util::Void[#1]"** %7, align 8
%__adjust.sroa.0.0.idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN2rt9local_ptr8compiled4take15__STATIC_FMTSTR19hcf722141b2fbba44aS9v0.10.preE to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.sroa.0.0.idx, align 8
%__adjust.sroa.2.0.idx4 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 1
store i64 2, i64* %__adjust.sroa.2.0.idx4, align 8
%__adjust.sroa.0.0.idx.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %1, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i, align 8
%__adjust.sroa.2.0.idx1.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0.idx1.i, align 8
%9 = call { i64, i64, [0 x i8] }* @_ZN3fmt6format19h356fa857e88c8c5bat9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args)
%10 = getelementptr inbounds { i64, i64, [0 x i8] }* %9, i64 0, i32 2, i64 0
%11 = getelementptr inbounds { i64, i64, [0 x i8] }* %9, i64 0, i32 0
%12 = load i64* %11, align 8
%13 = getelementptr inbounds { i8*, i64 }* %__adjust2, i64 0, i32 0
store i8* %10, i8** %13, align 8
%14 = getelementptr inbounds { i8*, i64 }* %__adjust2, i64 0, i32 1
store i64 %12, i64* %14, align 8
%15 = bitcast { i8*, i64 }* %__adjust2 to %str_slice*
invoke void @_ZN2rt4util5abort19hf012523982ca3e78aP9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %str_slice* %15)
to label %normal-return unwind label %unwind_ast_5681_
normal-return: ; preds = %then-block-5685-
unreachable
unwind_ast_5681_: ; preds = %then-block-5685-
%16 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%17 = icmp eq { i64, i64, [0 x i8] }* %9, null
br i1 %17, label %resume, label %cond.i
cond.i: ; preds = %unwind_ast_5681_
%18 = bitcast { i64, i64, [0 x i8] }* %9 to i8*
call void @free(i8* %18) #0
br label %resume
resume: ; preds = %cond.i, %unwind_ast_5681_
resume { i8*, i32 } %16
normal-return5: ; preds = %entry-block
%19 = bitcast i8* %2 to %"struct.std::rt::task::Task[#1]"*
store i8* null, i8** @_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE, align 8
call fastcc void @"_ZN24_$UP$std..rt..task..Task9glue_drop19h1061f94893119fc6auE"(%"struct.std::rt::task::Task[#1]"* null)
ret %"struct.std::rt::task::Task[#1]"* %19
}
; Function Attrs: noreturn
declare void @_ZN2rt4util5abort19hf012523982ca3e78aP9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*) unnamed_addr #7
declare noalias { i64, i64, [0 x i8] }* @_ZN3fmt6format19h356fa857e88c8c5bat9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.std::fmt::Arguments[#1]"*) unnamed_addr
; Function Attrs: noinline uwtable
define internal fastcc %"struct.std::rt::task::Task[#1]"* @_ZN2rt9local_ptr8compiled13unsafe_borrow19h50a768aa9b50244da44v0.0E() unnamed_addr #6 {
entry-block:
%__args = alloca %"struct.std::fmt::Arguments[#1]", align 8
%__adjust2 = alloca { i8*, i64 }, align 8
%_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE.val = load i8** @_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE, align 8
%0 = icmp eq i8* %_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE.val, null
br i1 %0, label %then-block-5891-, label %next-block
then-block-5891-: ; preds = %entry-block
%__adjust.sroa.0.0.idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] } }* @_ZN2rt9local_ptr8compiled13unsafe_borrow15__STATIC_FMTSTR19hdd896b8b7372fd49ah9v0.10.preE to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.sroa.0.0.idx, align 8
%__adjust.sroa.2.0.idx2 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 1
store i64 1, i64* %__adjust.sroa.2.0.idx2, align 8
%__adjust.sroa.0.0.idx.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 0
%1 = bitcast %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i to i8*
call void @llvm.memset.p0i8.i64(i8* %1, i8 0, i64 16, i32 8, i1 false)
%2 = call { i64, i64, [0 x i8] }* @_ZN3fmt6format19h356fa857e88c8c5bat9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args)
%3 = getelementptr inbounds { i64, i64, [0 x i8] }* %2, i64 0, i32 2, i64 0
%4 = getelementptr inbounds { i64, i64, [0 x i8] }* %2, i64 0, i32 0
%5 = load i64* %4, align 8
%6 = getelementptr inbounds { i8*, i64 }* %__adjust2, i64 0, i32 0
store i8* %3, i8** %6, align 8
%7 = getelementptr inbounds { i8*, i64 }* %__adjust2, i64 0, i32 1
store i64 %5, i64* %7, align 8
%8 = bitcast { i8*, i64 }* %__adjust2 to %str_slice*
invoke void @_ZN2rt4util5abort19hf012523982ca3e78aP9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %str_slice* %8)
to label %normal-return unwind label %unwind_ast_5887_
normal-return: ; preds = %then-block-5891-
unreachable
unwind_ast_5887_: ; preds = %then-block-5891-
%9 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%10 = icmp eq { i64, i64, [0 x i8] }* %2, null
br i1 %10, label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit", label %cond.i
cond.i: ; preds = %unwind_ast_5887_
%11 = bitcast { i64, i64, [0 x i8] }* %2 to i8*
call void @free(i8* %11) #0
br label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit"
"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit": ; preds = %unwind_ast_5887_, %cond.i
resume { i8*, i32 } %9
next-block: ; preds = %entry-block
%12 = bitcast i8* %_ZN2rt9local_ptr8compiled10RT_TLS_PTR19hdc9a58880b8e9059a69v0.10.preE.val to %"struct.std::rt::task::Task[#1]"*
ret %"struct.std::rt::task::Task[#1]"* %12
}
; Function Attrs: noreturn
declare void @_ZN2rt6unwind8Unwinder12begin_unwind21h3b1cb9a3eb8d991bZIaD9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*, { %tydesc*, i8* }*) unnamed_addr #7
; Function Attrs: nounwind
declare noalias i8* @realloc(i8* nocapture, i64) unnamed_addr #0
; Function Attrs: uwtable
define internal void @_ZN4test13vec_speed_vec19h7704b567022d3c1fai4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone, %"struct.extra::test::BenchHarness[#4]"*) unnamed_addr #3 {
entry-block:
%rng = alloca %"struct.std::rand::XorShiftRng[#1]", align 8
%a = alloca %struct.Vector, align 8
%2 = alloca { void ({ i64, %tydesc*, i8*, i8*, i8 }*)*, { i64, %tydesc*, i8*, i8*, i8 }* }, align 8
%__closure = alloca { i64, %tydesc*, i8*, i8*, { %struct.Vector* } }, align 8
call void @_ZN4rand8weak_rng19h2a6482ec662ffcedaD9v0.10.preE(%"struct.std::rand::XorShiftRng[#1]"* sret %rng, { i64, %tydesc*, i8*, i8*, i8 }* undef)
%3 = call fastcc noalias { i64, i64, [0 x float] }* @_ZN4rand3Rng7gen_vec19hdef3ac19495d16e6aS4v0.0E(%"struct.std::rand::XorShiftRng[#1]"* %rng)
%4 = getelementptr inbounds { i64, i64, [0 x float] }* %3, i64 0, i32 2, i64 0
%5 = getelementptr inbounds { i64, i64, [0 x float] }* %3, i64 0, i32 0
%6 = load i64* %5, align 8
%7 = lshr i64 %6, 2
%8 = invoke fastcc { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* @_ZN6Vector3new21h231b9303ce4bdf8bnfa24v0.0E(float* %4, i64 %7)
to label %normal-return unwind label %unwind_ast_2944_
normal-return: ; preds = %entry-block
%.fca.0.gep = getelementptr inbounds %struct.Vector* %a, i64 0, i32 0
store { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %8, { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }** %.fca.0.gep, align 8
%9 = icmp eq { i64, i64, [0 x float] }* %3, null
br i1 %9, label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit", label %cond.i
cond.i: ; preds = %normal-return
%10 = bitcast { i64, i64, [0 x float] }* %3 to i8*
call void @free(i8* %10) #0
br label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit"
"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit": ; preds = %normal-return, %cond.i
%11 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, { %struct.Vector* } }* %__closure, i64 0, i32 4, i32 0
store %struct.Vector* %a, %struct.Vector** %11, align 8
%12 = getelementptr inbounds { void ({ i64, %tydesc*, i8*, i8*, i8 }*)*, { i64, %tydesc*, i8*, i8*, i8 }* }* %2, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*)* @_ZN4test13vec_speed_vec4anon7expr_fn2awE, void ({ i64, %tydesc*, i8*, i8*, i8 }*)** %12, align 8
%13 = getelementptr inbounds { void ({ i64, %tydesc*, i8*, i8*, i8 }*)*, { i64, %tydesc*, i8*, i8*, i8 }* }* %2, i64 0, i32 1
%14 = bitcast { i64, %tydesc*, i8*, i8*, { %struct.Vector* } }* %__closure to { i64, %tydesc*, i8*, i8*, i8 }*
store { i64, %tydesc*, i8*, i8*, i8 }* %14, { i64, %tydesc*, i8*, i8*, i8 }** %13, align 8
%15 = bitcast %"struct.extra::test::BenchHarness[#4]"* %1 to { i64, %tydesc*, i8*, i8*, i8 }*
invoke void @_ZN4test12BenchHarness4iter21h397831f0876fe9aefSa19v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* %15, { void ({ i64, %tydesc*, i8*, i8*, i8 }*)*, { i64, %tydesc*, i8*, i8*, i8 }* }* %2)
to label %normal-return1 unwind label %unwind_ast_3096_
unwind_ast_2944_: ; preds = %entry-block
%16 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.fca.0.extract = extractvalue { i8*, i32 } %16, 0
%.fca.1.extract = extractvalue { i8*, i32 } %16, 1
%17 = icmp eq { i64, i64, [0 x float] }* %3, null
br i1 %17, label %resume, label %cond.i10
cond.i10: ; preds = %unwind_ast_2944_
%18 = bitcast { i64, i64, [0 x float] }* %3 to i8*
call void @free(i8* %18) #0
br label %resume
resume: ; preds = %cond.i.i12, %unwind_ast_3096_, %cond.i10, %unwind_ast_2944_
%.sroa.3.0 = phi i32 [ %.fca.1.extract, %unwind_ast_2944_ ], [ %.fca.1.extract, %cond.i10 ], [ %.fca.1.extract7, %unwind_ast_3096_ ], [ %.fca.1.extract7, %cond.i.i12 ]
%.sroa.0.0 = phi i8* [ %.fca.0.extract, %unwind_ast_2944_ ], [ %.fca.0.extract, %cond.i10 ], [ %.fca.0.extract5, %unwind_ast_3096_ ], [ %.fca.0.extract5, %cond.i.i12 ]
%.fca.0.insert = insertvalue { i8*, i32 } undef, i8* %.sroa.0.0, 0
%.fca.1.insert = insertvalue { i8*, i32 } %.fca.0.insert, i32 %.sroa.3.0, 1
resume { i8*, i32 } %.fca.1.insert
normal-return1: ; preds = %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit"
%19 = bitcast %struct.Vector* %a to {}**
%20 = load {}** %19, align 8
%21 = icmp eq {}* %20, null
br i1 %21, label %_ZN6Vector9glue_drop19h332a669c2d14e00dapE.exit, label %cond.i.i
cond.i.i: ; preds = %normal-return1
%22 = bitcast {}* %20 to i8*
call void @free(i8* %22) #0
br label %_ZN6Vector9glue_drop19h332a669c2d14e00dapE.exit
_ZN6Vector9glue_drop19h332a669c2d14e00dapE.exit: ; preds = %normal-return1, %cond.i.i
ret void
unwind_ast_3096_: ; preds = %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit"
%23 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.fca.0.extract5 = extractvalue { i8*, i32 } %23, 0
%.fca.1.extract7 = extractvalue { i8*, i32 } %23, 1
%24 = bitcast %struct.Vector* %a to {}**
%25 = load {}** %24, align 8
%26 = icmp eq {}* %25, null
br i1 %26, label %resume, label %cond.i.i12
cond.i.i12: ; preds = %unwind_ast_3096_
%27 = bitcast {}* %25 to i8*
call void @free(i8* %27) #0
br label %resume
}
declare void @_ZN4rand8weak_rng19h2a6482ec662ffcedaD9v0.10.preE(%"struct.std::rand::XorShiftRng[#1]"* noalias sret, { i64, %tydesc*, i8*, i8*, i8 }*) unnamed_addr
; Function Attrs: uwtable
define internal fastcc noalias { i64, i64, [0 x float] }* @_ZN4rand3Rng7gen_vec19hdef3ac19495d16e6aS4v0.0E(%"struct.std::rand::XorShiftRng[#1]"*) unnamed_addr #3 {
entry-block:
%1 = tail call i8* @malloc(i64 56) #0
%2 = icmp eq i8* %1, null
br i1 %2, label %then-block-4856-.i.i.i, label %normal-return.i
then-block-4856-.i.i.i: ; preds = %entry-block
tail call void @llvm.trap() #0
unreachable
normal-return.i: ; preds = %entry-block
%3 = getelementptr inbounds i8* %1, i64 8
%4 = bitcast i8* %3 to i64*
store i64 40, i64* %4, align 8
%5 = bitcast i8* %1 to i64*
store i64 0, i64* %5, align 8
%6 = getelementptr inbounds i8* %1, i64 16
%7 = bitcast i8* %6 to float*
%8 = getelementptr inbounds %"struct.std::rand::XorShiftRng[#1]"* %0, i64 0, i32 0
%9 = getelementptr inbounds %"struct.std::rand::XorShiftRng[#1]"* %0, i64 0, i32 1
%10 = getelementptr inbounds %"struct.std::rand::XorShiftRng[#1]"* %0, i64 0, i32 2
%11 = getelementptr inbounds %"struct.std::rand::XorShiftRng[#1]"* %0, i64 0, i32 3
%.promoted = load i32* %8, align 4
%.promoted1 = load i32* %9, align 4
%.promoted2 = load i32* %10, align 4
%.promoted3 = load i32* %11, align 4
%12 = shl i32 %.promoted, 11
%13 = xor i32 %12, %.promoted
%14 = lshr i32 %.promoted3, 19
%15 = lshr i32 %13, 8
%16 = xor i32 %15, %13
%17 = xor i32 %16, %.promoted3
%18 = xor i32 %17, %14
%19 = lshr i32 %18, 8
%20 = uitofp i32 %19 to float
%21 = fmul float %20, 0x3E70000000000000
store float %21, float* %7, align 4
%22 = shl i32 %.promoted1, 11
%23 = xor i32 %22, %.promoted1
%24 = lshr i32 %17, 19
%25 = lshr i32 %23, 8
%26 = xor i32 %25, %23
%27 = xor i32 %26, %18
%28 = xor i32 %27, %24
%29 = lshr i32 %28, 8
%30 = uitofp i32 %29 to float
%31 = fmul float %30, 0x3E70000000000000
%32 = getelementptr inbounds i8* %1, i64 20
%33 = bitcast i8* %32 to float*
store float %31, float* %33, align 4
%34 = shl i32 %.promoted2, 11
%35 = xor i32 %34, %.promoted2
%36 = lshr i32 %27, 19
%37 = lshr i32 %35, 8
%38 = xor i32 %37, %35
%39 = xor i32 %38, %28
%40 = xor i32 %39, %36
%41 = lshr i32 %40, 8
%42 = uitofp i32 %41 to float
%43 = fmul float %42, 0x3E70000000000000
%44 = getelementptr inbounds i8* %1, i64 24
%45 = bitcast i8* %44 to float*
store float %43, float* %45, align 4
%46 = shl i32 %.promoted3, 11
%47 = xor i32 %46, %.promoted3
%48 = lshr i32 %39, 19
%49 = lshr i32 %47, 8
%50 = xor i32 %49, %47
%51 = xor i32 %50, %40
%52 = xor i32 %51, %48
%53 = lshr i32 %52, 8
%54 = uitofp i32 %53 to float
%55 = fmul float %54, 0x3E70000000000000
%56 = getelementptr inbounds i8* %1, i64 28
%57 = bitcast i8* %56 to float*
store float %55, float* %57, align 4
%58 = shl i32 %18, 11
%59 = xor i32 %58, %18
%60 = lshr i32 %51, 19
%61 = lshr i32 %59, 8
%62 = xor i32 %61, %59
%63 = xor i32 %62, %52
%64 = xor i32 %63, %60
%65 = lshr i32 %64, 8
%66 = uitofp i32 %65 to float
%67 = fmul float %66, 0x3E70000000000000
%68 = getelementptr inbounds i8* %1, i64 32
%69 = bitcast i8* %68 to float*
store float %67, float* %69, align 4
%70 = shl i32 %28, 11
%71 = xor i32 %70, %28
%72 = lshr i32 %63, 19
%73 = lshr i32 %71, 8
%74 = xor i32 %73, %71
%75 = xor i32 %74, %64
%76 = xor i32 %75, %72
%77 = lshr i32 %76, 8
%78 = uitofp i32 %77 to float
%79 = fmul float %78, 0x3E70000000000000
%80 = getelementptr inbounds i8* %1, i64 36
%81 = bitcast i8* %80 to float*
store float %79, float* %81, align 4
%82 = shl i32 %40, 11
%83 = xor i32 %82, %40
%84 = lshr i32 %75, 19
%85 = lshr i32 %83, 8
%86 = xor i32 %85, %83
%87 = xor i32 %86, %76
%88 = xor i32 %87, %84
%89 = lshr i32 %88, 8
%90 = uitofp i32 %89 to float
%91 = fmul float %90, 0x3E70000000000000
%92 = getelementptr inbounds i8* %1, i64 40
%93 = bitcast i8* %92 to float*
store float %91, float* %93, align 4
%94 = shl i32 %52, 11
%95 = xor i32 %94, %52
%96 = lshr i32 %87, 19
%97 = lshr i32 %95, 8
%98 = xor i32 %97, %95
%99 = xor i32 %98, %88
%100 = xor i32 %99, %96
%101 = lshr i32 %100, 8
%102 = uitofp i32 %101 to float
%103 = fmul float %102, 0x3E70000000000000
%104 = getelementptr inbounds i8* %1, i64 44
%105 = bitcast i8* %104 to float*
store float %103, float* %105, align 4
%106 = shl i32 %64, 11
%107 = xor i32 %106, %64
%108 = lshr i32 %99, 19
%109 = lshr i32 %107, 8
%110 = xor i32 %109, %107
%111 = xor i32 %110, %100
%112 = xor i32 %111, %108
%113 = lshr i32 %112, 8
%114 = uitofp i32 %113 to float
%115 = fmul float %114, 0x3E70000000000000
%116 = getelementptr inbounds i8* %1, i64 48
%117 = bitcast i8* %116 to float*
store float %115, float* %117, align 4
%118 = shl i32 %76, 11
%119 = xor i32 %118, %76
%120 = lshr i32 %111, 19
%121 = lshr i32 %119, 8
%122 = xor i32 %121, %119
%123 = xor i32 %122, %112
%124 = xor i32 %123, %120
%125 = lshr i32 %124, 8
%126 = uitofp i32 %125 to float
%127 = fmul float %126, 0x3E70000000000000
%128 = getelementptr inbounds i8* %1, i64 52
%129 = bitcast i8* %128 to float*
store float %127, float* %129, align 4
store i32 %88, i32* %8, align 4
store i32 %100, i32* %9, align 4
store i32 %112, i32* %10, align 4
store i32 %124, i32* %11, align 4
store i64 40, i64* %5, align 8
%130 = bitcast i8* %1 to { i64, i64, [0 x float] }*
ret { i64, i64, [0 x float] }* %130
}
declare void @_ZN4test12BenchHarness4iter21h397831f0876fe9aefSa19v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*, { void ({ i64, %tydesc*, i8*, i8*, i8 }*)*, { i64, %tydesc*, i8*, i8*, i8 }* }*) unnamed_addr
; Function Attrs: inlinehint uwtable
define internal void @_ZN4test13vec_speed_vec4anon7expr_fn2awE({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readonly) unnamed_addr #8 {
entry-block:
%1 = alloca %str_slice, align 8
%2 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args = alloca %"struct.std::fmt::Arguments[#1]", align 8
%3 = alloca %str_slice, align 8
%4 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %0, i64 0, i32 4
%5 = bitcast i8* %4 to %struct.Vector**
%6 = load %struct.Vector** %5, align 8
%a.idx.val.idx.i.i = getelementptr %struct.Vector* %6, i64 0, i32 0
br label %loop_body.preheader.i
loop_body11.preheader: ; preds = %loop_body.backedge
%.val.idx.val.i = load { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }** %a.idx.val.idx.i.i, align 8
%.val.idx.val.idx.i = getelementptr { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %.val.idx.val.i, i64 0, i32 0
%.val.idx.val.idx.val.i = load i64* %.val.idx.val.idx.i, align 8
%7 = lshr i64 %.val.idx.val.idx.val.i, 2
br label %loop_body11
loop_body.preheader.i: ; preds = %loop_body.backedge, %entry-block
%8 = phi i64 [ 0, %entry-block ], [ %9, %loop_body.backedge ]
%9 = add i64 %8, 1
%.idx.val.i = load { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }** %a.idx.val.idx.i.i, align 8
%.idx.val.idx.i = getelementptr { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %.idx.val.i, i64 0, i32 0
%.idx.val.idx.val.i = load i64* %.idx.val.idx.i, align 8
%10 = lshr i64 %.idx.val.idx.val.i, 2
%11 = icmp eq i64 %10, 0
br i1 %11, label %loop_body.backedge, label %match_else.lr.ph.i
loop_body.backedge: ; preds = %match_else.match_else_crit_edge.i, %match_else.lr.ph.i, %loop_body.preheader.i
%12 = icmp slt i64 %9, 100
br i1 %12, label %loop_body.preheader.i, label %loop_body11.preheader
match_else.lr.ph.i: ; preds = %loop_body.preheader.i
%.idx.i.i.i.i80 = getelementptr { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %.idx.val.i, i64 0, i32 2, i64 0, i32 0
%.idx.val.i.i.i.i81 = load float* %.idx.i.i.i.i80, align 4
%13 = fmul float %.idx.val.i.i.i.i81, %.idx.val.i.i.i.i81
%14 = fadd float %.idx.val.i.i.i.i81, %13
%15 = fdiv float %14, %.idx.val.i.i.i.i81
store float %15, float* %.idx.i.i.i.i80, align 4
%16 = icmp ugt i64 %.idx.val.idx.val.i, 7
br i1 %16, label %match_else.match_else_crit_edge.i, label %loop_body.backedge
match_else.match_else_crit_edge.i: ; preds = %match_else.lr.ph.i, %match_else.match_else_crit_edge.i
%17 = phi i64 [ %18, %match_else.match_else_crit_edge.i ], [ 1, %match_else.lr.ph.i ]
%.val.idx.val.i.i.pre.i = load { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }** %a.idx.val.idx.i.i, align 8
%18 = add i64 %17, 1
%.idx.i.i.i.i = getelementptr { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %.val.idx.val.i.i.pre.i, i64 0, i32 2, i64 %17, i32 0
%.idx.val.i.i.i.i = load float* %.idx.i.i.i.i, align 4
%19 = fmul float %.idx.val.i.i.i.i, %.idx.val.i.i.i.i
%20 = fadd float %.idx.val.i.i.i.i, %19
%21 = fdiv float %20, %.idx.val.i.i.i.i
store float %21, float* %.idx.i.i.i.i, align 4
%22 = icmp ult i64 %18, %10
br i1 %22, label %match_else.match_else_crit_edge.i, label %loop_body.backedge
loop_body11: ; preds = %loop_body11.preheader, %match_else16
%.sroa.2.8.load76 = phi i64 [ %24, %match_else16 ], [ 0, %loop_body11.preheader ]
%sum.0 = phi float [ %25, %match_else16 ], [ 0.000000e+00, %loop_body11.preheader ]
%23 = icmp ult i64 %.sroa.2.8.load76, %7
br i1 %23, label %match_else16, label %join19
match_else16: ; preds = %loop_body11
%.idx.i.i = getelementptr { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %.val.idx.val.i, i64 0, i32 2, i64 %.sroa.2.8.load76, i32 0
%.idx.val.i.i = load float* %.idx.i.i, align 4
%24 = add i64 %.sroa.2.8.load76, 1
%25 = fadd float %sum.0, %.idx.val.i.i
br label %loop_body11
join19: ; preds = %loop_body11
%26 = fcmp une float %sum.0, 9.600000e+01
br i1 %26, label %next-block, label %then-block-3088-
then-block-3088-: ; preds = %join19
%27 = getelementptr inbounds %str_slice* %1, i64 0, i32 0
store i8* getelementptr inbounds ([12 x i8]* @str2492, i64 0, i64 0), i8** %27, align 8
%28 = getelementptr inbounds %str_slice* %1, i64 0, i32 1
store i64 11, i64* %28, align 8
%29 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %2, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt8String$T3fmt21h787465c43299bcd1YOaQ4v0.0E" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %29, align 8
%30 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %2, i64 0, i32 1
%31 = bitcast %str_slice* %1 to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %31, %"enum.std::util::Void[#1]"** %30, align 8
%__adjust.sroa.0.0.idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN4test14vec_speed_loop15__STATIC_FMTSTR19hee3bcecd8c266311am4v0.0E to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.sroa.0.0.idx, align 8
%__adjust.sroa.2.0.idx65 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 1
store i64 2, i64* %__adjust.sroa.2.0.idx65, align 8
%__adjust.sroa.0.0.idx.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %2, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i, align 8
%__adjust.sroa.2.0.idx1.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0.idx1.i, align 8
%32 = call { i64, i64, [0 x i8] }* @_ZN3fmt6format19h356fa857e88c8c5bat9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args)
%33 = getelementptr inbounds %str_slice* %3, i64 0, i32 0
store i8* getelementptr inbounds ([11 x i8]* @str1855, i64 0, i64 0), i8** %33, align 8
%34 = getelementptr inbounds %str_slice* %3, i64 0, i32 1
store i64 10, i64* %34, align 8
call fastcc void @_ZN2rt6unwind12begin_unwind19h9443711abab5072daA4v0.0E({ i64, i64, [0 x i8] }* %32, %str_slice* %3, i64 355)
unreachable
next-block: ; preds = %join19
ret void
}
; Function Attrs: uwtable
define internal void @"_ZN3fmt8String$T3fmt21h787465c43299bcd1YOaQ4v0.0E"({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone, %str_slice* nocapture readonly, %"struct.std::fmt::Formatter[#1]"*) unnamed_addr #3 {
entry-block:
%3 = alloca %str_slice, align 8
%4 = bitcast %str_slice* %1 to i8*
%5 = bitcast %str_slice* %3 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %4, i64 16, i32 8, i1 false) #0
%6 = bitcast %"struct.std::fmt::Formatter[#1]"* %2 to { i64, %tydesc*, i8*, i8*, i8 }*
call void @_ZN3fmt9Formatter3pad21h61c2065a9cc2568bc3aq9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* %6, %str_slice* %3)
ret void
}
declare void @_ZN3fmt9Formatter3pad21h61c2065a9cc2568bc3aq9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*) unnamed_addr
; Function Attrs: uwtable
define internal void @_ZN4test14vec_speed_loop19h3dbb0822dfa8143ea74v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone, %"struct.extra::test::BenchHarness[#4]"*) unnamed_addr #3 {
entry-block:
%rng = alloca %"struct.std::rand::XorShiftRng[#1]", align 8
%a = alloca %struct.Vector, align 8
%2 = alloca { void ({ i64, %tydesc*, i8*, i8*, i8 }*)*, { i64, %tydesc*, i8*, i8*, i8 }* }, align 8
%__closure = alloca { i64, %tydesc*, i8*, i8*, { %struct.Vector* } }, align 8
call void @_ZN4rand8weak_rng19h2a6482ec662ffcedaD9v0.10.preE(%"struct.std::rand::XorShiftRng[#1]"* sret %rng, { i64, %tydesc*, i8*, i8*, i8 }* undef)
%3 = call fastcc noalias { i64, i64, [0 x float] }* @_ZN4rand3Rng7gen_vec19hdef3ac19495d16e6aS4v0.0E(%"struct.std::rand::XorShiftRng[#1]"* %rng)
%4 = getelementptr inbounds { i64, i64, [0 x float] }* %3, i64 0, i32 2, i64 0
%5 = getelementptr inbounds { i64, i64, [0 x float] }* %3, i64 0, i32 0
%6 = load i64* %5, align 8
%7 = lshr i64 %6, 2
%8 = invoke fastcc { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* @_ZN6Vector3new21h231b9303ce4bdf8bnfa24v0.0E(float* %4, i64 %7)
to label %normal-return unwind label %unwind_ast_3119_
normal-return: ; preds = %entry-block
%.fca.0.gep = getelementptr inbounds %struct.Vector* %a, i64 0, i32 0
store { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %8, { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }** %.fca.0.gep, align 8
%9 = icmp eq { i64, i64, [0 x float] }* %3, null
br i1 %9, label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit", label %cond.i
cond.i: ; preds = %normal-return
%10 = bitcast { i64, i64, [0 x float] }* %3 to i8*
call void @free(i8* %10) #0
br label %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit"
"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit": ; preds = %normal-return, %cond.i
%11 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, { %struct.Vector* } }* %__closure, i64 0, i32 4, i32 0
store %struct.Vector* %a, %struct.Vector** %11, align 8
%12 = getelementptr inbounds { void ({ i64, %tydesc*, i8*, i8*, i8 }*)*, { i64, %tydesc*, i8*, i8*, i8 }* }* %2, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*)* @_ZN4test14vec_speed_loop4anon7expr_fn2aqE, void ({ i64, %tydesc*, i8*, i8*, i8 }*)** %12, align 8
%13 = getelementptr inbounds { void ({ i64, %tydesc*, i8*, i8*, i8 }*)*, { i64, %tydesc*, i8*, i8*, i8 }* }* %2, i64 0, i32 1
%14 = bitcast { i64, %tydesc*, i8*, i8*, { %struct.Vector* } }* %__closure to { i64, %tydesc*, i8*, i8*, i8 }*
store { i64, %tydesc*, i8*, i8*, i8 }* %14, { i64, %tydesc*, i8*, i8*, i8 }** %13, align 8
%15 = bitcast %"struct.extra::test::BenchHarness[#4]"* %1 to { i64, %tydesc*, i8*, i8*, i8 }*
invoke void @_ZN4test12BenchHarness4iter21h397831f0876fe9aefSa19v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* %15, { void ({ i64, %tydesc*, i8*, i8*, i8 }*)*, { i64, %tydesc*, i8*, i8*, i8 }* }* %2)
to label %normal-return1 unwind label %unwind_ast_3301_
unwind_ast_3119_: ; preds = %entry-block
%16 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.fca.0.extract = extractvalue { i8*, i32 } %16, 0
%.fca.1.extract = extractvalue { i8*, i32 } %16, 1
%17 = icmp eq { i64, i64, [0 x float] }* %3, null
br i1 %17, label %resume, label %cond.i10
cond.i10: ; preds = %unwind_ast_3119_
%18 = bitcast { i64, i64, [0 x float] }* %3 to i8*
call void @free(i8* %18) #0
br label %resume
resume: ; preds = %cond.i.i12, %unwind_ast_3301_, %cond.i10, %unwind_ast_3119_
%.sroa.3.0 = phi i32 [ %.fca.1.extract, %unwind_ast_3119_ ], [ %.fca.1.extract, %cond.i10 ], [ %.fca.1.extract7, %unwind_ast_3301_ ], [ %.fca.1.extract7, %cond.i.i12 ]
%.sroa.0.0 = phi i8* [ %.fca.0.extract, %unwind_ast_3119_ ], [ %.fca.0.extract, %cond.i10 ], [ %.fca.0.extract5, %unwind_ast_3301_ ], [ %.fca.0.extract5, %cond.i.i12 ]
%.fca.0.insert = insertvalue { i8*, i32 } undef, i8* %.sroa.0.0, 0
%.fca.1.insert = insertvalue { i8*, i32 } %.fca.0.insert, i32 %.sroa.3.0, 1
resume { i8*, i32 } %.fca.1.insert
normal-return1: ; preds = %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit"
%19 = bitcast %struct.Vector* %a to {}**
%20 = load {}** %19, align 8
%21 = icmp eq {}* %20, null
br i1 %21, label %_ZN6Vector9glue_drop19h332a669c2d14e00dapE.exit, label %cond.i.i
cond.i.i: ; preds = %normal-return1
%22 = bitcast {}* %20 to i8*
call void @free(i8* %22) #0
br label %_ZN6Vector9glue_drop19h332a669c2d14e00dapE.exit
_ZN6Vector9glue_drop19h332a669c2d14e00dapE.exit: ; preds = %normal-return1, %cond.i.i
ret void
unwind_ast_3301_: ; preds = %"_ZN13_$UP$$LP$$RP$9glue_drop19h008e5fc303747c8bahE.exit"
%23 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%.fca.0.extract5 = extractvalue { i8*, i32 } %23, 0
%.fca.1.extract7 = extractvalue { i8*, i32 } %23, 1
%24 = bitcast %struct.Vector* %a to {}**
%25 = load {}** %24, align 8
%26 = icmp eq {}* %25, null
br i1 %26, label %resume, label %cond.i.i12
cond.i.i12: ; preds = %unwind_ast_3301_
%27 = bitcast {}* %25 to i8*
call void @free(i8* %27) #0
br label %resume
}
; Function Attrs: inlinehint uwtable
define internal void @_ZN4test14vec_speed_loop4anon7expr_fn2aqE({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readonly) unnamed_addr #8 {
entry-block:
%1 = alloca %str_slice, align 8
%2 = alloca %"struct.std::fmt::Argument[#1]", align 8
%__args = alloca %"struct.std::fmt::Arguments[#1]", align 8
%3 = alloca %str_slice, align 8
%4 = getelementptr inbounds { i64, %tydesc*, i8*, i8*, i8 }* %0, i64 0, i32 4
%5 = bitcast i8* %4 to %struct.Vector**
%6 = load %struct.Vector** %5, align 8
%.idx = getelementptr %struct.Vector* %6, i64 0, i32 0
br label %match_else
loop_body.loopexit: ; preds = %match_else13, %match_else
%exitcond = icmp eq i64 %9, 100
br i1 %exitcond, label %loop_body23.preheader, label %match_else
loop_body23.preheader: ; preds = %loop_body.loopexit
%.val.idx.val.i = load { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }** %.idx, align 8
%.val.idx.val.idx.i = getelementptr { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %.val.idx.val.i, i64 0, i32 0
%.val.idx.val.idx.val.i = load i64* %.val.idx.val.idx.i, align 8
%7 = lshr i64 %.val.idx.val.idx.val.i, 2
br label %loop_body23
match_else: ; preds = %loop_body.loopexit, %entry-block
%8 = phi i64 [ 0, %entry-block ], [ %9, %loop_body.loopexit ]
%9 = add i64 %8, 1
%.idx.val = load { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }** %.idx, align 8
%.idx.val.idx = getelementptr { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %.idx.val, i64 0, i32 0
%.idx.val.idx.val = load i64* %.idx.val.idx, align 8
%10 = lshr i64 %.idx.val.idx.val, 2
%11 = icmp eq i64 %10, 0
br i1 %11, label %loop_body.loopexit, label %match_else13
match_else13: ; preds = %match_else, %match_else13.match_else13_crit_edge
%.idx61.val = phi { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* [ %.idx61.val.pre, %match_else13.match_else13_crit_edge ], [ %.idx.val, %match_else ]
%.sroa.070.0.load8387 = phi i64 [ %12, %match_else13.match_else13_crit_edge ], [ 0, %match_else ]
%12 = add i64 %.sroa.070.0.load8387, 1
%.idx.i = getelementptr { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %.idx61.val, i64 0, i32 2, i64 %.sroa.070.0.load8387, i32 0
%.idx.val.i = load float* %.idx.i, align 4
%13 = fmul float %.idx.val.i, %.idx.val.i
%14 = fadd float %.idx.val.i, %13
%15 = fdiv float %14, %.idx.val.i
store float %15, float* %.idx.i, align 4
%16 = icmp ult i64 %12, %10
br i1 %16, label %match_else13.match_else13_crit_edge, label %loop_body.loopexit
match_else13.match_else13_crit_edge: ; preds = %match_else13
%.idx61.val.pre = load { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }** %.idx, align 8
br label %match_else13
loop_body23: ; preds = %loop_body23.preheader, %match_else29
%.sroa.2.8.load77 = phi i64 [ %18, %match_else29 ], [ 0, %loop_body23.preheader ]
%sum.0 = phi float [ %19, %match_else29 ], [ 0.000000e+00, %loop_body23.preheader ]
%17 = icmp ult i64 %.sroa.2.8.load77, %7
br i1 %17, label %match_else29, label %join32
match_else29: ; preds = %loop_body23
%.idx.i.i = getelementptr { i64, i64, [0 x %"struct.std::cell::Cell<f32>[#1]"] }* %.val.idx.val.i, i64 0, i32 2, i64 %.sroa.2.8.load77, i32 0
%.idx.val.i.i = load float* %.idx.i.i, align 4
%18 = add i64 %.sroa.2.8.load77, 1
%19 = fadd float %sum.0, %.idx.val.i.i
br label %loop_body23
join32: ; preds = %loop_body23
%20 = fcmp une float %sum.0, 9.600000e+01
br i1 %20, label %next-block, label %then-block-3293-
then-block-3293-: ; preds = %join32
%21 = getelementptr inbounds %str_slice* %1, i64 0, i32 0
store i8* getelementptr inbounds ([12 x i8]* @str2492, i64 0, i64 0), i8** %21, align 8
%22 = getelementptr inbounds %str_slice* %1, i64 0, i32 1
store i64 11, i64* %22, align 8
%23 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %2, i64 0, i32 0
store void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*, %str_slice*, %"struct.std::fmt::Formatter[#1]"*)* @"_ZN3fmt8String$T3fmt21h787465c43299bcd1YOaQ4v0.0E" to void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)*), void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"enum.std::util::Void[#1]"*, %"struct.std::fmt::Formatter[#1]"*)** %23, align 8
%24 = getelementptr inbounds %"struct.std::fmt::Argument[#1]"* %2, i64 0, i32 1
%25 = bitcast %str_slice* %1 to %"enum.std::util::Void[#1]"*
store %"enum.std::util::Void[#1]"* %25, %"enum.std::util::Void[#1]"** %24, align 8
%__adjust.sroa.0.0.idx = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 0
store %"enum.std::fmt::rt::Piece[#1]"* bitcast ({ { i8, { i8*, i64 }, [56 x i8] }, { i8, { { i8, [15 x i8] }, { i32, i8, i64, { i8, [15 x i8] }, { i8, [15 x i8] } }, { i8* } }, [0 x i8] } }* @_ZN4test14vec_speed_loop15__STATIC_FMTSTR19hee3bcecd8c266311am4v0.0E to %"enum.std::fmt::rt::Piece[#1]"*), %"enum.std::fmt::rt::Piece[#1]"** %__adjust.sroa.0.0.idx, align 8
%__adjust.sroa.2.0.idx68 = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 0, i32 1
store i64 2, i64* %__adjust.sroa.2.0.idx68, align 8
%__adjust.sroa.0.0.idx.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 0
store %"struct.std::fmt::Argument[#1]"* %2, %"struct.std::fmt::Argument[#1]"** %__adjust.sroa.0.0.idx.i, align 8
%__adjust.sroa.2.0.idx1.i = getelementptr inbounds %"struct.std::fmt::Arguments[#1]"* %__args, i64 0, i32 1, i32 1
store i64 1, i64* %__adjust.sroa.2.0.idx1.i, align 8
%26 = call { i64, i64, [0 x i8] }* @_ZN3fmt6format19h356fa857e88c8c5bat9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, %"struct.std::fmt::Arguments[#1]"* %__args)
%27 = getelementptr inbounds %str_slice* %3, i64 0, i32 0
store i8* getelementptr inbounds ([11 x i8]* @str1855, i64 0, i64 0), i8** %27, align 8
%28 = getelementptr inbounds %str_slice* %3, i64 0, i32 1
store i64 10, i64* %28, align 8
call fastcc void @_ZN2rt6unwind12begin_unwind19h9443711abab5072daA4v0.0E({ i64, i64, [0 x i8] }* %26, %str_slice* %3, i64 383)
unreachable
next-block: ; preds = %join32
ret void
}
; Function Attrs: uwtable
define internal void @_ZN6__test4main19ha53045dbc606aac2at4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) unnamed_addr #3 {
entry-block:
%__adjust = alloca { { i64, i64, [0 x i8] }**, i64 }, align 8
%__adjust1 = alloca { %"struct.extra::test::TestDescAndFn[#4]"*, i64 }, align 8
%1 = call noalias { i64, i64, [0 x { i64, i64, [0 x i8] }*] }* @_ZN2os4args19h75a1b2ab49ecd3b3aJ9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef)
%2 = getelementptr inbounds { i64, i64, [0 x { i64, i64, [0 x i8] }*] }* %1, i64 0, i32 2, i64 0
%3 = getelementptr inbounds { i64, i64, [0 x { i64, i64, [0 x i8] }*] }* %1, i64 0, i32 0
%4 = load i64* %3, align 8
%5 = lshr i64 %4, 3
%6 = getelementptr inbounds { { i64, i64, [0 x i8] }**, i64 }* %__adjust, i64 0, i32 0
store { i64, i64, [0 x i8] }** %2, { i64, i64, [0 x i8] }*** %6, align 8
%7 = getelementptr inbounds { { i64, i64, [0 x i8] }**, i64 }* %__adjust, i64 0, i32 1
store i64 %5, i64* %7, align 8
%8 = getelementptr inbounds { %"struct.extra::test::TestDescAndFn[#4]"*, i64 }* %__adjust1, i64 0, i32 0
store %"struct.extra::test::TestDescAndFn[#4]"* bitcast ({ { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8 }, { i8, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)*, [8 x i8] } }, { { { i8, { i8*, i64 }, [0 x i8] }, i8, i8 }, { i8, void ({ i64, %tydesc*, i8*, i8*, i8 }*, %"struct.extra::test::BenchHarness[#4]"*)*, [8 x i8] } } }* @const to %"struct.extra::test::TestDescAndFn[#4]"*), %"struct.extra::test::TestDescAndFn[#4]"** %8, align 8
%9 = getelementptr inbounds { %"struct.extra::test::TestDescAndFn[#4]"*, i64 }* %__adjust1, i64 0, i32 1
store i64 2, i64* %9, align 8
invoke void @_ZN4test16test_main_static19hd7f7b175edcf1677aV9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* undef, { { i64, i64, [0 x i8] }**, i64 }* %__adjust, { %"struct.extra::test::TestDescAndFn[#4]"*, i64 }* %__adjust1)
to label %normal-return unwind label %unwind_ast_3312_
normal-return: ; preds = %entry-block
%10 = icmp eq { i64, i64, [0 x { i64, i64, [0 x i8] }*] }* %1, null
br i1 %10, label %"_ZN20_$UP$$x5b$UP$str$x5d9glue_drop19h9635eefedf52490aazE.exit", label %cond.i
cond.i: ; preds = %normal-return
%11 = load i64* %3, align 8
%12 = bitcast { i64, i64, [0 x i8] }** %2 to i8*
%13 = getelementptr inbounds i8* %12, i64 %11
%14 = bitcast i8* %13 to { i64, i64, [0 x i8] }**
%15 = icmp ult { i64, i64, [0 x i8] }** %2, %14
br i1 %15, label %iter_vec_loop_body.i.i, label %"_ZN26unboxed_vec$LT$$UP$str$GT$9glue_drop19h8d958a1272ef4e65aDE.exit.i"
iter_vec_loop_body.i.i: ; preds = %cond.i, %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i"
%16 = phi { i64, i64, [0 x i8] }** [ %20, %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i" ], [ %2, %cond.i ]
%17 = load { i64, i64, [0 x i8] }** %16, align 8
%18 = icmp eq { i64, i64, [0 x i8] }* %17, null
br i1 %18, label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i", label %cond.i.i.i
cond.i.i.i: ; preds = %iter_vec_loop_body.i.i
%19 = bitcast { i64, i64, [0 x i8] }* %17 to i8*
call void @free(i8* %19) #0
br label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i"
"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i": ; preds = %cond.i.i.i, %iter_vec_loop_body.i.i
%20 = getelementptr inbounds { i64, i64, [0 x i8] }** %16, i64 1
%21 = icmp ult { i64, i64, [0 x i8] }** %20, %14
br i1 %21, label %iter_vec_loop_body.i.i, label %"_ZN26unboxed_vec$LT$$UP$str$GT$9glue_drop19h8d958a1272ef4e65aDE.exit.i"
"_ZN26unboxed_vec$LT$$UP$str$GT$9glue_drop19h8d958a1272ef4e65aDE.exit.i": ; preds = %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i", %cond.i
%22 = bitcast { i64, i64, [0 x { i64, i64, [0 x i8] }*] }* %1 to i8*
call void @free(i8* %22) #0
br label %"_ZN20_$UP$$x5b$UP$str$x5d9glue_drop19h9635eefedf52490aazE.exit"
"_ZN20_$UP$$x5b$UP$str$x5d9glue_drop19h9635eefedf52490aazE.exit": ; preds = %normal-return, %"_ZN26unboxed_vec$LT$$UP$str$GT$9glue_drop19h8d958a1272ef4e65aDE.exit.i"
ret void
unwind_ast_3312_: ; preds = %entry-block
%23 = landingpad { i8*, i32 } personality i32 (i32, i32, i64, %"struct.std::rt::unwind::libunwind::_Unwind_Exception[#1]"*, %"enum.std::rt::unwind::libunwind::_Unwind_Context[#1]"*)* @rust_eh_personality
cleanup
%24 = icmp eq { i64, i64, [0 x { i64, i64, [0 x i8] }*] }* %1, null
br i1 %24, label %"_ZN20_$UP$$x5b$UP$str$x5d9glue_drop19h9635eefedf52490aazE.exit10", label %cond.i5
cond.i5: ; preds = %unwind_ast_3312_
%25 = load i64* %3, align 8
%26 = bitcast { i64, i64, [0 x i8] }** %2 to i8*
%27 = getelementptr inbounds i8* %26, i64 %25
%28 = bitcast i8* %27 to { i64, i64, [0 x i8] }**
%29 = icmp ult { i64, i64, [0 x i8] }** %2, %28
br i1 %29, label %iter_vec_loop_body.i.i6, label %"_ZN26unboxed_vec$LT$$UP$str$GT$9glue_drop19h8d958a1272ef4e65aDE.exit.i9"
iter_vec_loop_body.i.i6: ; preds = %cond.i5, %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i8"
%30 = phi { i64, i64, [0 x i8] }** [ %34, %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i8" ], [ %2, %cond.i5 ]
%31 = load { i64, i64, [0 x i8] }** %30, align 8
%32 = icmp eq { i64, i64, [0 x i8] }* %31, null
br i1 %32, label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i8", label %cond.i.i.i7
cond.i.i.i7: ; preds = %iter_vec_loop_body.i.i6
%33 = bitcast { i64, i64, [0 x i8] }* %31 to i8*
call void @free(i8* %33) #0
br label %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i8"
"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i8": ; preds = %cond.i.i.i7, %iter_vec_loop_body.i.i6
%34 = getelementptr inbounds { i64, i64, [0 x i8] }** %30, i64 1
%35 = icmp ult { i64, i64, [0 x i8] }** %34, %28
br i1 %35, label %iter_vec_loop_body.i.i6, label %"_ZN26unboxed_vec$LT$$UP$str$GT$9glue_drop19h8d958a1272ef4e65aDE.exit.i9"
"_ZN26unboxed_vec$LT$$UP$str$GT$9glue_drop19h8d958a1272ef4e65aDE.exit.i9": ; preds = %"_ZN8_$UP$str9glue_drop19hf486c988072d7d43alE.exit.i.i8", %cond.i5
%36 = bitcast { i64, i64, [0 x { i64, i64, [0 x i8] }*] }* %1 to i8*
call void @free(i8* %36) #0
br label %"_ZN20_$UP$$x5b$UP$str$x5d9glue_drop19h9635eefedf52490aazE.exit10"
"_ZN20_$UP$$x5b$UP$str$x5d9glue_drop19h9635eefedf52490aazE.exit10": ; preds = %unwind_ast_3312_, %"_ZN26unboxed_vec$LT$$UP$str$GT$9glue_drop19h8d958a1272ef4e65aDE.exit.i9"
resume { i8*, i32 } %23
}
define i64 @main(i64, i8**) unnamed_addr {
top:
%2 = tail call i64 @_ZN10lang_start19h4ff14d35a1ae64b2a79v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }* null, i8* bitcast (void ({ i64, %tydesc*, i8*, i8*, i8 }*)* @_ZN6__test4main19ha53045dbc606aac2at4v0.0E to i8*), i64 %0, i8** %1)
ret i64 %2
}
declare i64 @_ZN10lang_start19h4ff14d35a1ae64b2a79v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*, i8*, i64, i8**) unnamed_addr
declare void @_ZN4test16test_main_static19hd7f7b175edcf1677aV9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*, { { i64, i64, [0 x i8] }**, i64 }*, { %"struct.extra::test::TestDescAndFn[#4]"*, i64 }*) unnamed_addr
declare noalias { i64, i64, [0 x { i64, i64, [0 x i8] }*] }* @_ZN2os4args19h75a1b2ab49ecd3b3aJ9v0.10.preE({ i64, %tydesc*, i8*, i8*, i8 }*) unnamed_addr
; Function Attrs: nounwind
declare void @llvm.lifetime.start(i64, i8* nocapture) #0
; Function Attrs: nounwind
declare void @llvm.lifetime.end(i64, i8* nocapture) #0
attributes #0 = { nounwind }
attributes #1 = { noreturn nounwind }
attributes #2 = { nounwind readnone }
attributes #3 = { uwtable }
attributes #4 = { cold noinline noreturn uwtable }
attributes #5 = { nounwind readnone uwtable }
attributes #6 = { noinline uwtable }
attributes #7 = { noreturn }
attributes #8 = { inlinehint uwtable }
!0 = metadata !{i8 0, i8 2}
#[feature(globs, macro_rules)];
#[crate_type="lib"];
#[crate_id="algebloat"];
use std::cell::Cell;
pub trait VectorGet
{
unsafe fn unsafe_get(&self, idx: uint) -> f32;
fn get(&self, idx: uint) -> f32;
}
pub trait VectorSet
{
unsafe fn unsafe_set(&self, idx: uint, val: f32);
fn set(&self, idx: uint, val: f32);
}
pub trait VectorAssign<T>
{
fn assign(&self, v: T);
}
pub trait VectorIter
{
fn iter(self) -> VectorIterator<Self>;
}
impl<LHS: VectorSet + Container,
RHS: VectorGet + Container>
VectorAssign<RHS> for
LHS
{
fn assign(&self, v: RHS)
{
assert!(self.len() == v.len());
for i in range(0, v.len())
{
unsafe
{
self.unsafe_set(i, v.unsafe_get(i));
}
}
}
}
impl<T: VectorGet + Container>
VectorIter for
T
{
fn iter(self) -> VectorIterator<T>
{
VectorIterator::new(self)
}
}
pub struct Vector
{
priv data: ~[Cell<f32>]
}
impl Vector
{
pub fn new(data: &[f32]) -> Vector
{
Vector{ data: data.map(|&v| Cell::new(v)) }
}
}
impl
FromIterator<f32> for
Vector
{
fn from_iterator<T: Iterator<f32>>(it: &mut T) -> Vector
{
Vector{ data: it.by_ref().map(|v| Cell::new(v)).collect() }
}
}
impl<'l>
VectorGet for
&'l Vector
{
unsafe fn unsafe_get(&self, idx: uint) -> f32
{
(*self.data.unsafe_ref(idx)).get()
}
fn get(&self, idx: uint) -> f32
{
self.data[idx].get()
}
}
impl<'l>
VectorSet for
&'l Vector
{
unsafe fn unsafe_set(&self, idx: uint, val: f32)
{
self.data.unsafe_ref(idx).set(val);
}
fn set(&self, idx: uint, val: f32)
{
self.data[idx].set(val);
}
}
impl<'l>
Container for
&'l Vector
{
fn len(&self) -> uint
{
self.data.len()
}
}
impl<'l>
VectorGet for
Vector
{
unsafe fn unsafe_get(&self, idx: uint) -> f32
{
(*self.data.unsafe_ref(idx)).get()
}
fn get(&self, idx: uint) -> f32
{
self.data[idx].get()
}
}
impl<'l>
VectorSet for
Vector
{
unsafe fn unsafe_set(&self, idx: uint, val: f32)
{
self.data.unsafe_ref(idx).set(val);
}
fn set(&self, idx: uint, val: f32)
{
self.data[idx].set(val);
}
}
impl<'l>
Container for
Vector
{
fn len(&self) -> uint
{
self.data.len()
}
}
pub struct VectorIterator<T>
{
priv base: T,
priv idx: uint
}
impl<T: VectorGet + Container>
VectorIterator<T>
{
fn new(base: T) -> VectorIterator<T>
{
VectorIterator{ base: base, idx: 0 }
}
}
impl<T: VectorGet + Container>
Iterator<f32> for
VectorIterator<T>
{
fn next(&mut self) -> Option<f32>
{
let ret = if self.idx < self.base.len()
{
unsafe
{
Some(self.base.unsafe_get(self.idx))
}
}
else
{
None
};
self.idx += 1;
ret
}
}
macro_rules! expr
{
($e: expr) => { $e }
}
macro_rules! bin_op
{
($op_name: ident, $op_method: ident, $op_struct_name: ident, $op: tt) =>
{
pub struct $op_struct_name<TA, TB>
{
a: TA,
b: TB,
}
impl<TA: Container,
TB: Container>
$op_struct_name<TA, TB>
{
pub unsafe fn unsafe_new(a: TA, b: TB) -> $op_struct_name<TA, TB>
{
$op_struct_name{ a: a, b: b }
}
pub fn new(a: TA, b: TB) -> $op_struct_name<TA, TB>
{
assert!(a.len() == b.len());
$op_struct_name{ a: a, b: b }
}
}
impl<TA: Clone,
TB: Clone>
Clone for
$op_struct_name<TA, TB>
{
fn clone(&self) -> $op_struct_name<TA, TB>
{
$op_struct_name{ a: self.a.clone(), b: self.b.clone() }
}
}
impl<'l,
TA: VectorGet + Container,
TB: VectorGet + Container>
VectorGet for
$op_struct_name<TA, TB>
{
unsafe fn unsafe_get(&self, idx: uint) -> f32
{
expr!(self.a.unsafe_get(idx) $op self.b.unsafe_get(idx))
}
fn get(&self, idx: uint) -> f32
{
assert!(idx < self.len());
unsafe
{
expr!(self.a.unsafe_get(idx) $op self.b.unsafe_get(idx))
}
}
}
impl<'l,
TA: Container,
TB: Container>
Container for $op_struct_name<TA, TB>
{
fn len(&self) -> uint
{
self.a.len()
}
}
impl<'l,
RHS: VectorGet + Clone + Container>
$op_name<RHS, $op_struct_name<&'l Vector, RHS>> for
&'l Vector
{
fn $op_method(&self, rhs: &RHS) -> $op_struct_name<&'l Vector, RHS>
{
$op_struct_name::new(self.clone(), rhs.clone())
}
}
}
}
macro_rules! connect_op
{
($op_struct_lhs: ident : $($op_name: ident, $op_method: ident, $op_struct_name: ident);+) =>
{
$(
impl<RHS: VectorGet + Clone + Container,
TA: VectorGet + Clone + Container,
TB: VectorGet + Clone + Container>
$op_name<RHS, $op_struct_name<$op_struct_lhs<TA, TB>, RHS>> for
$op_struct_lhs<TA, TB>
{
fn $op_method(&self, rhs: &RHS) -> $op_struct_name<$op_struct_lhs<TA, TB>, RHS>
{
$op_struct_name::new(self.clone(), rhs.clone())
}
}
)+
}
}
macro_rules! connect_ops
{
($($op_struct: ident),+) =>
{
$(
connect_op!($op_struct:
Add, add, Adder;
Sub, sub, Subtracter;
Mul, mul, Multiplier;
Div, div, Divider)
)+
}
}
bin_op!(Add, add, Adder, +)
bin_op!(Sub, sub, Subtracter, -)
bin_op!(Mul, mul, Multiplier, *)
bin_op!(Div, div, Divider, /)
connect_ops!(Adder,
Subtracter,
Multiplier,
Divider)
#[cfg(test)]
mod test
{
extern mod extra;
use super::*;
use self::extra::test::BenchHarness;
use std::rand::{weak_rng, Rng};
#[bench]
fn vec_speed_vec(bh: &mut BenchHarness) {
let mut rng = weak_rng();
let a = Vector::new(rng.gen_vec(10));
bh.iter(|| {
for _ in range(0, 100)
{
a.assign((&a + &a * &a) / &a);
}
let mut sum = 0f32;
for v in (&a).iter()
{
sum += v;
}
assert!(sum != 96.0);
})
}
#[bench]
fn vec_speed_loop(bh: &mut BenchHarness) {
let mut rng = weak_rng();
let a = Vector::new(rng.gen_vec(10));
bh.iter(|| {
for _ in range(0, 100)
{
for i in range(0, a.len())
{
unsafe
{
let v = a.unsafe_get(i);
a.unsafe_set(i, (v + v * v) / v)
}
}
}
let mut sum = 0f32;
for v in (&a).iter()
{
sum += v;
}
assert!(sum != 96.0);
})
}
}
running 2 tests
test test::vec_speed_loop ... bench: 2284 ns/iter (+/- 16)
test test::vec_speed_vec ... bench: 2286 ns/iter (+/- 20)
test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment