Skip to content

Instantly share code, notes, and snippets.

@stepancheg
Last active June 29, 2017 23:00
Show Gist options
  • Save stepancheg/33edd364f23826a948023d57954e2f4e to your computer and use it in GitHub Desktop.
Save stepancheg/33edd364f23826a948023d57954e2f4e to your computer and use it in GitHub Desktop.
--emit=llvm-ir
; ModuleID = 'xx.cgu-0.rs'
source_filename = "xx.cgu-0.rs"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-darwin"
%str_slice = type { i8*, i64 }
%"alloc::vec::Vec<u8>" = type { %"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>", [0 x i8], i64, [0 x i8] }
%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>" = type { %"core::ptr::Unique<u8>", [0 x i8], i64, [0 x i8], %"alloc::heap::HeapAlloc", [0 x i8] }
%"core::ptr::Unique<u8>" = type { %"core::nonzero::NonZero<*const u8>", [0 x i8], %"core::marker::PhantomData<u8>", [0 x i8] }
%"core::nonzero::NonZero<*const u8>" = type { i8*, [0 x i8] }
%"core::marker::PhantomData<u8>" = type {}
%"alloc::heap::HeapAlloc" = type {}
%"core::nonzero::NonZero<*const usize>" = type { i64*, [0 x i8] }
%"core::ptr::Unique<usize>" = type { %"core::nonzero::NonZero<*const usize>", [0 x i8], %"core::marker::PhantomData<usize>", [0 x i8] }
%"core::marker::PhantomData<usize>" = type {}
%"core::any::TypeId" = type { i64, [0 x i8] }
%"alloc::allocator::Layout" = type { i64, [0 x i8], i64, [0 x i8] }
%"core::option::Option<alloc::allocator::Layout>" = type { i64, [0 x i64], [2 x i64] }
%"core::option::Option<(alloc::allocator::Layout, usize)>" = type { i64, [0 x i64], [3 x i64] }
%"std::collections::hash::table::TaggedHashUintPtr" = type { %"core::ptr::Unique<usize>", [0 x i8] }
%"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>" = type { %"std::collections::hash::map::RandomState", [0 x i8], %"std::collections::hash::table::RawTable<alloc::string::String, u32>", [0 x i8], %"std::collections::hash::map::DefaultResizePolicy", [0 x i8] }
%"std::collections::hash::map::RandomState" = type { i64, [0 x i8], i64, [0 x i8] }
%"std::collections::hash::table::RawTable<alloc::string::String, u32>" = type { i64, [0 x i8], i64, [0 x i8], %"std::collections::hash::table::TaggedHashUintPtr", [0 x i8], %"core::marker::PhantomData<(alloc::string::String, u32)>", [0 x i8] }
%"core::marker::PhantomData<(alloc::string::String, u32)>" = type {}
%"std::collections::hash::map::DefaultResizePolicy" = type {}
%"alloc::string::String" = type { %"alloc::vec::Vec<u8>", [0 x i8] }
%"core::slice::Repr<u8>" = type { i8*, [0 x i8], i64, [0 x i8] }
%"std::collections::hash::table::RawBucket<alloc::string::String, u32>" = type { i64*, [0 x i8], { %"alloc::string::String", [0 x i8], i32, [4 x i8] }*, [0 x i8], i64, [0 x i8], %"core::marker::PhantomData<(alloc::string::String, u32)>", [0 x i8] }
%"unwind::libunwind::_Unwind_Exception" = type { i64, [0 x i8], void (i32, %"unwind::libunwind::_Unwind_Exception"*)*, [0 x i8], [6 x i64], [0 x i8] }
%"unwind::libunwind::_Unwind_Context" = type {}
@"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap14_MSG_FILE_LINE17he3b833ed519cd8e3E" = external global { %str_slice, [0 x i8], %str_slice, [0 x i8], i32, [4 x i8] }
@_ZN3std11collections4hash5table16round_up_to_next10_FILE_LINE17h8dae69255338c1d7E = external global { %str_slice, [0 x i8], i32, [4 x i8] }
@str.0 = internal constant [52 x i8] c"assertion failed: target_alignment.is_power_of_two()"
@vtable.1 = internal unnamed_addr constant { void (%str_slice*)*, i64, i64, i64 (%str_slice*)* } { void (%str_slice*)* @_ZN4core3ptr13drop_in_place17hbb4500343f000e3cE, i64 16, i64 8, i64 (%str_slice*)* @"_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$11get_type_id17h29dac26175a89af9E" }, align 8
; <alloc::vec::Vec<T> as core::ops::index::IndexMut<core::ops::range::RangeFull>>::index_mut
; Function Attrs: inlinehint uwtable
define internal { i8*, i64 } @"_ZN106_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..index..IndexMut$LT$core..ops..range..RangeFull$GT$$GT$9index_mut17hc7794058ffa41e1dE"(%"alloc::vec::Vec<u8>"* dereferenceable(24)) unnamed_addr #0 {
start:
; call <alloc::vec::Vec<T> as core::ops::deref::DerefMut>::deref_mut
%1 = call { i8*, i64 } @"_ZN71_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..deref..DerefMut$GT$9deref_mut17h68d01c2d9708665bE"(%"alloc::vec::Vec<u8>"* dereferenceable(24) %0)
%2 = extractvalue { i8*, i64 } %1, 0
%3 = extractvalue { i8*, i64 } %1, 1
br label %bb1
bb1: ; preds = %start
%4 = insertvalue { i8*, i64 } undef, i8* %2, 0
%5 = insertvalue { i8*, i64 } %4, i64 %3, 1
ret { i8*, i64 } %5
}
; <core::ptr::Unique<T>>::as_ptr
; Function Attrs: uwtable
define internal i64* @"_ZN35_$LT$core..ptr..Unique$LT$T$GT$$GT$6as_ptr17h4876fd451644dac4E"(i64) unnamed_addr #1 {
start:
%_4 = alloca %"core::nonzero::NonZero<*const usize>"
%self = alloca %"core::ptr::Unique<usize>"
%abi_cast = alloca i64
%arg0 = alloca %"core::ptr::Unique<usize>"
store i64 %0, i64* %abi_cast
%1 = bitcast %"core::ptr::Unique<usize>"* %arg0 to i8*
%2 = bitcast i64* %abi_cast to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
%3 = bitcast %"core::ptr::Unique<usize>"* %arg0 to i8*
%4 = bitcast %"core::ptr::Unique<usize>"* %self to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %3, i64 8, i32 8, i1 false)
%5 = getelementptr inbounds %"core::ptr::Unique<usize>", %"core::ptr::Unique<usize>"* %self, i32 0, i32 0
%6 = bitcast %"core::nonzero::NonZero<*const usize>"* %5 to i8*
%7 = bitcast %"core::nonzero::NonZero<*const usize>"* %_4 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %6, i64 8, i32 8, i1 false)
%8 = bitcast %"core::nonzero::NonZero<*const usize>"* %_4 to i64*
%9 = load i64, i64* %8, align 8
; call <core::nonzero::NonZero<T>>::get
%10 = call i64* @"_ZN40_$LT$core..nonzero..NonZero$LT$T$GT$$GT$3get17hef06e9318b3edc4bE"(i64 %9)
br label %bb1
bb1: ; preds = %start
ret i64* %10
}
; <core::ptr::Unique<T>>::as_ptr
; Function Attrs: uwtable
define internal i8* @"_ZN35_$LT$core..ptr..Unique$LT$T$GT$$GT$6as_ptr17hc3cb398e2eaf841bE"(i64) unnamed_addr #1 {
start:
%_4 = alloca %"core::nonzero::NonZero<*const u8>"
%self = alloca %"core::ptr::Unique<u8>"
%abi_cast = alloca i64
%arg0 = alloca %"core::ptr::Unique<u8>"
store i64 %0, i64* %abi_cast
%1 = bitcast %"core::ptr::Unique<u8>"* %arg0 to i8*
%2 = bitcast i64* %abi_cast to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
%3 = bitcast %"core::ptr::Unique<u8>"* %arg0 to i8*
%4 = bitcast %"core::ptr::Unique<u8>"* %self to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %3, i64 8, i32 8, i1 false)
%5 = getelementptr inbounds %"core::ptr::Unique<u8>", %"core::ptr::Unique<u8>"* %self, i32 0, i32 0
%6 = bitcast %"core::nonzero::NonZero<*const u8>"* %5 to i8*
%7 = bitcast %"core::nonzero::NonZero<*const u8>"* %_4 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %6, i64 8, i32 8, i1 false)
%8 = bitcast %"core::nonzero::NonZero<*const u8>"* %_4 to i64*
%9 = load i64, i64* %8, align 8
; call <core::nonzero::NonZero<T>>::get
%10 = call i8* @"_ZN40_$LT$core..nonzero..NonZero$LT$T$GT$$GT$3get17h8737c76b24169810E"(i64 %9)
br label %bb1
bb1: ; preds = %start
ret i8* %10
}
; <T as core::any::Any>::get_type_id
; Function Attrs: uwtable
define internal i64 @"_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$11get_type_id17h29dac26175a89af9E"(%str_slice* noalias readonly dereferenceable(16)) unnamed_addr #1 {
start:
%abi_cast = alloca i64
%_0 = alloca %"core::any::TypeId"
; call core::any::TypeId::of
%1 = call i64 @_ZN4core3any6TypeId2of17h40de0ccb53d6c042E()
store i64 %1, i64* %abi_cast
%2 = bitcast %"core::any::TypeId"* %_0 to i8*
%3 = bitcast i64* %abi_cast to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
br label %bb1
bb1: ; preds = %start
%4 = bitcast %"core::any::TypeId"* %_0 to i64*
%5 = load i64, i64* %4, align 8
ret i64 %5
}
; <core::option::Option<T>>::unwrap
; Function Attrs: inlinehint uwtable
define internal void @"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h4c2fde4ea85cdcd6E"(%"alloc::allocator::Layout"* noalias nocapture sret dereferenceable(16), %"core::option::Option<alloc::allocator::Layout>"* noalias nocapture dereferenceable(24)) unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
start:
%personalityslot = alloca { i8*, i32 }
%self = alloca %"core::option::Option<alloc::allocator::Layout>"
%2 = bitcast %"core::option::Option<alloc::allocator::Layout>"* %1 to i8*
%3 = bitcast %"core::option::Option<alloc::allocator::Layout>"* %self to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 24, i32 8, i1 false)
%4 = getelementptr inbounds %"core::option::Option<alloc::allocator::Layout>", %"core::option::Option<alloc::allocator::Layout>"* %self, i32 0, i32 0
%5 = load i64, i64* %4, !range !0
switch i64 %5, label %bb3 [
i64 0, label %bb2
]
bb1: ; preds = %bb4
%6 = load { i8*, i32 }, { i8*, i32 }* %personalityslot
resume { i8*, i32 } %6
bb2: ; preds = %start
; invoke core::panicking::panic
invoke void @_ZN4core9panicking5panic17h62639c90155483f2E({ %str_slice, [0 x i8], %str_slice, [0 x i8], i32, [4 x i8] }* noalias readonly dereferenceable(40) @"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap14_MSG_FILE_LINE17he3b833ed519cd8e3E")
to label %unreachable unwind label %cleanup
bb3: ; preds = %start
%7 = bitcast %"core::option::Option<alloc::allocator::Layout>"* %self to { i64, [0 x i8], %"alloc::allocator::Layout", [0 x i8] }*
%8 = getelementptr inbounds { i64, [0 x i8], %"alloc::allocator::Layout", [0 x i8] }, { i64, [0 x i8], %"alloc::allocator::Layout", [0 x i8] }* %7, i32 0, i32 2
%9 = getelementptr inbounds %"alloc::allocator::Layout", %"alloc::allocator::Layout"* %8, i32 0, i32 0
%10 = getelementptr inbounds %"alloc::allocator::Layout", %"alloc::allocator::Layout"* %8, i32 0, i32 2
%11 = load i64, i64* %9
%12 = load i64, i64* %10
%13 = getelementptr inbounds %"alloc::allocator::Layout", %"alloc::allocator::Layout"* %0, i32 0, i32 0
store i64 %11, i64* %13
%14 = getelementptr inbounds %"alloc::allocator::Layout", %"alloc::allocator::Layout"* %0, i32 0, i32 2
store i64 %12, i64* %14
%15 = getelementptr inbounds %"core::option::Option<alloc::allocator::Layout>", %"core::option::Option<alloc::allocator::Layout>"* %self, i32 0, i32 0
%16 = load i64, i64* %15, !range !0
switch i64 %16, label %bb6 [
i64 1, label %bb5
]
bb4: ; preds = %cleanup
br label %bb1
bb5: ; preds = %bb6, %bb3
ret void
bb6: ; preds = %bb3
br label %bb5
unreachable: ; preds = %bb2
unreachable
cleanup: ; preds = %bb2
%17 = landingpad { i8*, i32 }
cleanup
store { i8*, i32 } %17, { i8*, i32 }* %personalityslot
br label %bb4
}
; <core::option::Option<T>>::unwrap
; Function Attrs: inlinehint uwtable
define internal void @"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17hae032cea98037bf3E"({ %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }* noalias nocapture sret dereferenceable(24), %"core::option::Option<(alloc::allocator::Layout, usize)>"* noalias nocapture dereferenceable(32)) unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
start:
%personalityslot = alloca { i8*, i32 }
%_5 = alloca { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }
%val = alloca { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }
%self = alloca %"core::option::Option<(alloc::allocator::Layout, usize)>"
%2 = bitcast %"core::option::Option<(alloc::allocator::Layout, usize)>"* %1 to i8*
%3 = bitcast %"core::option::Option<(alloc::allocator::Layout, usize)>"* %self to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 32, i32 8, i1 false)
%4 = getelementptr inbounds %"core::option::Option<(alloc::allocator::Layout, usize)>", %"core::option::Option<(alloc::allocator::Layout, usize)>"* %self, i32 0, i32 0
%5 = load i64, i64* %4, !range !0
switch i64 %5, label %bb3 [
i64 0, label %bb2
]
bb1: ; preds = %bb4
%6 = load { i8*, i32 }, { i8*, i32 }* %personalityslot
resume { i8*, i32 } %6
bb2: ; preds = %start
; invoke core::panicking::panic
invoke void @_ZN4core9panicking5panic17h62639c90155483f2E({ %str_slice, [0 x i8], %str_slice, [0 x i8], i32, [4 x i8] }* noalias readonly dereferenceable(40) @"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap14_MSG_FILE_LINE17he3b833ed519cd8e3E")
to label %unreachable unwind label %cleanup
bb3: ; preds = %start
%7 = bitcast %"core::option::Option<(alloc::allocator::Layout, usize)>"* %self to { i64, [0 x i8], { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }, [0 x i8] }*
%8 = getelementptr inbounds { i64, [0 x i8], { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }, [0 x i8] }, { i64, [0 x i8], { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }, [0 x i8] }* %7, i32 0, i32 2
%9 = bitcast { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }* %8 to i8*
%10 = bitcast { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }* %val to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %9, i64 24, i32 8, i1 false)
%11 = bitcast { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }* %val to i8*
%12 = bitcast { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }* %_5 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %11, i64 24, i32 8, i1 false)
%13 = bitcast { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }* %_5 to i8*
%14 = bitcast { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }* %0 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %13, i64 24, i32 8, i1 false)
%15 = getelementptr inbounds %"core::option::Option<(alloc::allocator::Layout, usize)>", %"core::option::Option<(alloc::allocator::Layout, usize)>"* %self, i32 0, i32 0
%16 = load i64, i64* %15, !range !0
switch i64 %16, label %bb6 [
i64 1, label %bb5
]
bb4: ; preds = %cleanup
br label %bb1
bb5: ; preds = %bb6, %bb3
ret void
bb6: ; preds = %bb3
br label %bb5
unreachable: ; preds = %bb2
unreachable
cleanup: ; preds = %bb2
%17 = landingpad { i8*, i32 }
cleanup
store { i8*, i32 } %17, { i8*, i32 }* %personalityslot
br label %bb4
}
; std::collections::hash::table::round_up_to_next
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN3std11collections4hash5table16round_up_to_next17h500c4c94a01de337E(i64, i64) unnamed_addr #0 {
start:
; call core::num::<impl usize>::is_power_of_two
%2 = call zeroext i1 @"_ZN4core3num23_$LT$impl$u20$usize$GT$15is_power_of_two17h1f3a4b793df2b279E"(i64 %1)
br label %bb1
bb1: ; preds = %start
%3 = xor i1 %2, true
br i1 %3, label %bb2, label %bb3
bb2: ; preds = %bb1
; call std::panicking::begin_panic
call void @_ZN3std9panicking11begin_panic17h9140120de4b013a3E(i8* noalias nonnull readonly getelementptr inbounds ([52 x i8], [52 x i8]* @str.0, i32 0, i32 0), i64 52, { %str_slice, [0 x i8], i32, [4 x i8] }* noalias readonly dereferenceable(24) @_ZN3std11collections4hash5table16round_up_to_next10_FILE_LINE17h8dae69255338c1d7E)
unreachable
bb3: ; preds = %bb1
%4 = add i64 %0, %1
%5 = sub i64 %4, 1
%6 = sub i64 %1, 1
%7 = xor i64 %6, -1
%8 = and i64 %5, %7
ret i64 %8
}
; std::collections::hash::table::TaggedHashUintPtr::ptr
; Function Attrs: inlinehint uwtable
define internal i64* @_ZN3std11collections4hash5table17TaggedHashUintPtr3ptr17hceb3703b2b95ec3cE(%"std::collections::hash::table::TaggedHashUintPtr"* noalias readonly dereferenceable(8)) unnamed_addr #0 {
start:
%_6 = alloca %"core::ptr::Unique<usize>"
%1 = getelementptr inbounds %"std::collections::hash::table::TaggedHashUintPtr", %"std::collections::hash::table::TaggedHashUintPtr"* %0, i32 0, i32 0
%2 = bitcast %"core::ptr::Unique<usize>"* %1 to i8*
%3 = bitcast %"core::ptr::Unique<usize>"* %_6 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 8, i32 8, i1 false)
%4 = bitcast %"core::ptr::Unique<usize>"* %_6 to i64*
%5 = load i64, i64* %4, align 8
; call <core::ptr::Unique<T>>::as_ptr
%6 = call i64* @"_ZN35_$LT$core..ptr..Unique$LT$T$GT$$GT$6as_ptr17h4876fd451644dac4E"(i64 %5)
br label %bb1
bb1: ; preds = %start
%7 = ptrtoint i64* %6 to i64
%8 = and i64 %7, -2
%9 = inttoptr i64 %8 to i64*
ret i64* %9
}
; std::collections::hash::table::calculate_offsets
; Function Attrs: inlinehint uwtable
define internal void @_ZN3std11collections4hash5table17calculate_offsets17hd311671f7f37c2daE({ i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* noalias nocapture sret dereferenceable(24), i64, i64, i64) unnamed_addr #0 {
start:
%tmp_ret = alloca { i64, [0 x i8], i8, [7 x i8] }
; call std::collections::hash::table::round_up_to_next
%4 = call i64 @_ZN3std11collections4hash5table16round_up_to_next17h500c4c94a01de337E(i64 %1, i64 %3)
br label %bb1
bb1: ; preds = %start
; call core::num::<impl usize>::overflowing_add
call void @"_ZN4core3num23_$LT$impl$u20$usize$GT$15overflowing_add17h55cac7765ed38900E"({ i64, [0 x i8], i8, [7 x i8] }* noalias nocapture sret dereferenceable(16) %tmp_ret, i64 %4, i64 %2)
%5 = getelementptr inbounds { i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i8, [7 x i8] }* %tmp_ret, i32 0, i32 0
%6 = getelementptr inbounds { i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i8, [7 x i8] }* %tmp_ret, i32 0, i32 2
%7 = load i64, i64* %5
%8 = load i8, i8* %6, !range !1
%9 = trunc i8 %8 to i1
br label %bb2
bb2: ; preds = %bb1
%10 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* %0, i32 0, i32 0
store i64 %4, i64* %10
%11 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* %0, i32 0, i32 2
store i64 %7, i64* %11
%12 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* %0, i32 0, i32 4
%13 = zext i1 %9 to i8
store i8 %13, i8* %12
ret void
}
; std::panicking::begin_panic
; Function Attrs: cold noinline noreturn uwtable
define internal void @_ZN3std9panicking11begin_panic17h9140120de4b013a3E(i8* noalias nonnull readonly, i64, { %str_slice, [0 x i8], i32, [4 x i8] }* noalias readonly dereferenceable(24)) unnamed_addr #2 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
start:
%personalityslot = alloca { i8*, i32 }
; invoke alloc::heap::exchange_malloc
%3 = invoke i8* @_ZN5alloc4heap15exchange_malloc17h14d65bf0926286feE(i64 16, i64 8)
to label %"_ZN35_$LT$alloc..boxed..Box$LT$T$GT$$GT$3new17h5ad0927f81583286E.exit" unwind label %cleanup
"_ZN35_$LT$alloc..boxed..Box$LT$T$GT$$GT$3new17h5ad0927f81583286E.exit": ; preds = %start
%4 = bitcast i8* %3 to %str_slice*
%5 = getelementptr inbounds %str_slice, %str_slice* %4, i32 0, i32 0
store i8* %0, i8** %5, !noalias !2
%6 = getelementptr inbounds %str_slice, %str_slice* %4, i32 0, i32 1
store i64 %1, i64* %6
br label %bb3
bb1: ; preds = %bb4, %bb2
%7 = load { i8*, i32 }, { i8*, i32 }* %personalityslot
resume { i8*, i32 } %7
bb2: ; preds = %cleanup
br label %bb1
bb3: ; preds = %"_ZN35_$LT$alloc..boxed..Box$LT$T$GT$$GT$3new17h5ad0927f81583286E.exit"
%8 = bitcast %str_slice* %4 to i8*
%9 = bitcast i8* %8 to {}*
; invoke std::panicking::rust_panic_with_hook
invoke void @_ZN3std9panicking20rust_panic_with_hook17h070dbedc97871d0aE({}* noalias nonnull %9, {}* noalias nonnull readonly bitcast ({ void (%str_slice*)*, i64, i64, i64 (%str_slice*)* }* @vtable.1 to {}*), { %str_slice, [0 x i8], i32, [4 x i8] }* noalias readonly dereferenceable(24) %2)
to label %unreachable unwind label %cleanup1
bb4: ; preds = %cleanup1
br label %bb1
cleanup: ; preds = %start
%10 = landingpad { i8*, i32 }
cleanup
store { i8*, i32 } %10, { i8*, i32 }* %personalityslot
br label %bb2
unreachable: ; preds = %bb3
unreachable
cleanup1: ; preds = %bb3
%11 = landingpad { i8*, i32 }
cleanup
store { i8*, i32 } %11, { i8*, i32 }* %personalityslot
br label %bb4
}
; <core::nonzero::NonZero<T>>::get
; Function Attrs: uwtable
define internal i8* @"_ZN40_$LT$core..nonzero..NonZero$LT$T$GT$$GT$3get17h8737c76b24169810E"(i64) unnamed_addr #1 {
start:
%self = alloca %"core::nonzero::NonZero<*const u8>"
%abi_cast = alloca i64
%arg0 = alloca %"core::nonzero::NonZero<*const u8>"
store i64 %0, i64* %abi_cast
%1 = bitcast %"core::nonzero::NonZero<*const u8>"* %arg0 to i8*
%2 = bitcast i64* %abi_cast to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
%3 = bitcast %"core::nonzero::NonZero<*const u8>"* %arg0 to i8*
%4 = bitcast %"core::nonzero::NonZero<*const u8>"* %self to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %3, i64 8, i32 8, i1 false)
%5 = getelementptr inbounds %"core::nonzero::NonZero<*const u8>", %"core::nonzero::NonZero<*const u8>"* %self, i32 0, i32 0
%6 = load i8*, i8** %5
ret i8* %6
}
; <core::nonzero::NonZero<T>>::get
; Function Attrs: uwtable
define internal i64* @"_ZN40_$LT$core..nonzero..NonZero$LT$T$GT$$GT$3get17hef06e9318b3edc4bE"(i64) unnamed_addr #1 {
start:
%self = alloca %"core::nonzero::NonZero<*const usize>"
%abi_cast = alloca i64
%arg0 = alloca %"core::nonzero::NonZero<*const usize>"
store i64 %0, i64* %abi_cast
%1 = bitcast %"core::nonzero::NonZero<*const usize>"* %arg0 to i8*
%2 = bitcast i64* %abi_cast to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
%3 = bitcast %"core::nonzero::NonZero<*const usize>"* %arg0 to i8*
%4 = bitcast %"core::nonzero::NonZero<*const usize>"* %self to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %3, i64 8, i32 8, i1 false)
%5 = getelementptr inbounds %"core::nonzero::NonZero<*const usize>", %"core::nonzero::NonZero<*const usize>"* %self, i32 0, i32 0
%6 = load i64*, i64** %5
ret i64* %6
}
; <alloc::raw_vec::RawVec<T, A>>::dealloc_buffer
; Function Attrs: uwtable
define internal void @"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14dealloc_buffer17h9c6f91926ee3e0a6E"(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* dereferenceable(16)) unnamed_addr #1 {
start:
%arg = alloca %"alloc::allocator::Layout"
%_17 = alloca %"alloc::allocator::Layout"
%_15 = alloca %"core::option::Option<(alloc::allocator::Layout, usize)>"
%_14 = alloca { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }
%_4 = alloca i8
%_0 = alloca {}
; call core::mem::size_of
%1 = call i64 @_ZN4core3mem7size_of17hf23eed341ba9caafE()
br label %bb1
bb1: ; preds = %start
%2 = icmp ne i64 %1, 0
br i1 %2, label %bb4, label %bb3
bb2: ; preds = %bb4
store i8 1, i8* %_4
br label %bb5
bb3: ; preds = %bb4, %bb1
store i8 0, i8* %_4
br label %bb5
bb4: ; preds = %bb1
%3 = getelementptr inbounds %"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>", %"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* %0, i32 0, i32 2
%4 = load i64, i64* %3
%5 = icmp ne i64 %4, 0
br i1 %5, label %bb2, label %bb3
bb5: ; preds = %bb3, %bb2
%6 = load i8, i8* %_4, !range !1
%7 = trunc i8 %6 to i1
br i1 %7, label %bb6, label %bb7
bb6: ; preds = %bb5
; call <alloc::raw_vec::RawVec<T, A>>::ptr
%8 = call i8* @"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$3ptr17hfade4d736973f114E"(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* noalias readonly dereferenceable(16) %0)
br label %bb8
bb7: ; preds = %bb5
br label %bb13
bb8: ; preds = %bb6
; call alloc::allocator::Layout::new
call void @_ZN5alloc9allocator6Layout3new17he027ae8e9b401019E(%"alloc::allocator::Layout"* noalias nocapture sret dereferenceable(16) %_17)
br label %bb9
bb9: ; preds = %bb8
%9 = getelementptr inbounds %"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>", %"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* %0, i32 0, i32 2
%10 = load i64, i64* %9
; call alloc::allocator::Layout::repeat
call void @_ZN5alloc9allocator6Layout6repeat17h552f5096c4e7899dE(%"core::option::Option<(alloc::allocator::Layout, usize)>"* noalias nocapture sret dereferenceable(32) %_15, %"alloc::allocator::Layout"* noalias readonly dereferenceable(16) %_17, i64 %10)
br label %bb10
bb10: ; preds = %bb9
; call <core::option::Option<T>>::unwrap
call void @"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17hae032cea98037bf3E"({ %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }* noalias nocapture sret dereferenceable(24) %_14, %"core::option::Option<(alloc::allocator::Layout, usize)>"* noalias nocapture dereferenceable(32) %_15)
br label %bb11
bb11: ; preds = %bb10
%11 = getelementptr inbounds { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }, { %"alloc::allocator::Layout", [0 x i8], i64, [0 x i8] }* %_14, i32 0, i32 0
%12 = getelementptr inbounds %"alloc::allocator::Layout", %"alloc::allocator::Layout"* %11, i32 0, i32 0
%13 = getelementptr inbounds %"alloc::allocator::Layout", %"alloc::allocator::Layout"* %11, i32 0, i32 2
%14 = load i64, i64* %12
%15 = load i64, i64* %13
%16 = getelementptr inbounds %"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>", %"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* %0, i32 0, i32 4
%17 = getelementptr inbounds %"alloc::allocator::Layout", %"alloc::allocator::Layout"* %arg, i32 0, i32 0
store i64 %14, i64* %17
%18 = getelementptr inbounds %"alloc::allocator::Layout", %"alloc::allocator::Layout"* %arg, i32 0, i32 2
store i64 %15, i64* %18
; call <alloc::heap::HeapAlloc as alloc::allocator::Alloc>::dealloc
call void @"_ZN66_$LT$alloc..heap..HeapAlloc$u20$as$u20$alloc..allocator..Alloc$GT$7dealloc17h867ab70d434fced2E"(%"alloc::heap::HeapAlloc"* %16, i8* %8, %"alloc::allocator::Layout"* noalias nocapture dereferenceable(16) %arg)
br label %bb12
bb12: ; preds = %bb11
br label %bb13
bb13: ; preds = %bb7, %bb12
ret void
}
; <alloc::raw_vec::RawVec<T, A>>::ptr
; Function Attrs: uwtable
define internal i8* @"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$3ptr17hfade4d736973f114E"(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* noalias readonly dereferenceable(16)) unnamed_addr #1 {
start:
%_3 = alloca %"core::ptr::Unique<u8>"
%1 = getelementptr inbounds %"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>", %"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* %0, i32 0, i32 0
%2 = bitcast %"core::ptr::Unique<u8>"* %1 to i8*
%3 = bitcast %"core::ptr::Unique<u8>"* %_3 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 8, i32 8, i1 false)
%4 = bitcast %"core::ptr::Unique<u8>"* %_3 to i64*
%5 = load i64, i64* %4, align 8
; call <core::ptr::Unique<T>>::as_ptr
%6 = call i8* @"_ZN35_$LT$core..ptr..Unique$LT$T$GT$$GT$6as_ptr17hc3cb398e2eaf841bE"(i64 %5)
br label %bb1
bb1: ; preds = %start
ret i8* %6
}
; core::any::TypeId::of
; Function Attrs: uwtable
define internal i64 @_ZN4core3any6TypeId2of17h40de0ccb53d6c042E() unnamed_addr #1 {
start:
%tmp_ret = alloca i64
%_0 = alloca %"core::any::TypeId"
store i64 -1272273853143013722, i64* %tmp_ret
%0 = load i64, i64* %tmp_ret
br label %bb1
bb1: ; preds = %start
%1 = getelementptr inbounds %"core::any::TypeId", %"core::any::TypeId"* %_0, i32 0, i32 0
store i64 %0, i64* %1
%2 = bitcast %"core::any::TypeId"* %_0 to i64*
%3 = load i64, i64* %2, align 8
ret i64 %3
}
; core::mem::needs_drop
; Function Attrs: inlinehint uwtable
define internal zeroext i1 @_ZN4core3mem10needs_drop17h582fdac1a5b9cba1E() unnamed_addr #0 {
start:
%tmp_ret = alloca i8
store i8 1, i8* %tmp_ret
%0 = load i8, i8* %tmp_ret, !range !1
%1 = trunc i8 %0 to i1
br label %bb1
bb1: ; preds = %start
ret i1 %1
}
; core::mem::size_of
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core3mem7size_of17h420c9d0a13642555E() unnamed_addr #0 {
start:
%tmp_ret = alloca i64
store i64 32, i64* %tmp_ret
%0 = load i64, i64* %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i64 %0
}
; core::mem::size_of
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core3mem7size_of17hf23eed341ba9caafE() unnamed_addr #0 {
start:
%tmp_ret = alloca i64
store i64 1, i64* %tmp_ret
%0 = load i64, i64* %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i64 %0
}
; core::mem::size_of
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core3mem7size_of17hf487c6f8f8065bdbE() unnamed_addr #0 {
start:
%tmp_ret = alloca i64
store i64 8, i64* %tmp_ret
%0 = load i64, i64* %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i64 %0
}
; core::mem::align_of
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core3mem8align_of17h7a7ea9d0cdbbfca9E() unnamed_addr #0 {
start:
%tmp_ret = alloca i64
store i64 8, i64* %tmp_ret
%0 = load i64, i64* %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i64 %0
}
; core::mem::align_of
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core3mem8align_of17hb1751fc426011276E() unnamed_addr #0 {
start:
%tmp_ret = alloca i64
store i64 8, i64* %tmp_ret
%0 = load i64, i64* %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i64 %0
}
; core::mem::align_of
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core3mem8align_of17heefba6edf2f0843dE() unnamed_addr #0 {
start:
%tmp_ret = alloca i64
store i64 1, i64* %tmp_ret
%0 = load i64, i64* %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i64 %0
}
; core::num::<impl usize>::wrapping_add
; Function Attrs: inlinehint uwtable
define internal i64 @"_ZN4core3num23_$LT$impl$u20$usize$GT$12wrapping_add17h60cc7bcd2228b7e8E"(i64, i64) unnamed_addr #0 {
start:
%tmp_ret = alloca i64
%2 = add i64 %0, %1
store i64 %2, i64* %tmp_ret
%3 = load i64, i64* %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i64 %3
}
; core::num::<impl usize>::wrapping_sub
; Function Attrs: inlinehint uwtable
define internal i64 @"_ZN4core3num23_$LT$impl$u20$usize$GT$12wrapping_sub17h269494f276467a57E"(i64, i64) unnamed_addr #0 {
start:
%tmp_ret = alloca i64
%2 = sub i64 %0, %1
store i64 %2, i64* %tmp_ret
%3 = load i64, i64* %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i64 %3
}
; core::num::<impl usize>::is_power_of_two
; Function Attrs: inlinehint uwtable
define internal zeroext i1 @"_ZN4core3num23_$LT$impl$u20$usize$GT$15is_power_of_two17h1f3a4b793df2b279E"(i64) unnamed_addr #0 {
start:
%_0 = alloca i8
; call core::num::<impl usize>::wrapping_sub
%1 = call i64 @"_ZN4core3num23_$LT$impl$u20$usize$GT$12wrapping_sub17h269494f276467a57E"(i64 %0, i64 1)
br label %bb5
bb1: ; preds = %bb3
store i8 1, i8* %_0
br label %bb4
bb2: ; preds = %bb3, %bb5
store i8 0, i8* %_0
br label %bb4
bb3: ; preds = %bb5
%2 = icmp eq i64 %0, 0
%3 = xor i1 %2, true
br i1 %3, label %bb1, label %bb2
bb4: ; preds = %bb2, %bb1
%4 = load i8, i8* %_0, !range !1
%5 = trunc i8 %4 to i1
ret i1 %5
bb5: ; preds = %start
%6 = and i64 %1, %0
%7 = icmp eq i64 %6, 0
br i1 %7, label %bb3, label %bb2
}
; core::num::<impl usize>::overflowing_add
; Function Attrs: inlinehint uwtable
define internal void @"_ZN4core3num23_$LT$impl$u20$usize$GT$15overflowing_add17h55cac7765ed38900E"({ i64, [0 x i8], i8, [7 x i8] }* noalias nocapture sret dereferenceable(16), i64, i64) unnamed_addr #0 {
start:
%tmp_ret = alloca { i64, [0 x i8], i8, [7 x i8] }
%3 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %1, i64 %2)
%4 = extractvalue { i64, i1 } %3, 0
%5 = extractvalue { i64, i1 } %3, 1
%6 = zext i1 %5 to i8
%7 = getelementptr inbounds { i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i8, [7 x i8] }* %tmp_ret, i32 0, i32 0
store i64 %4, i64* %7
%8 = getelementptr inbounds { i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i8, [7 x i8] }* %tmp_ret, i32 0, i32 1
%9 = bitcast [0 x i8]* %8 to i8*
store i8 %6, i8* %9
%10 = getelementptr inbounds { i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i8, [7 x i8] }* %tmp_ret, i32 0, i32 0
%11 = getelementptr inbounds { i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i8, [7 x i8] }* %tmp_ret, i32 0, i32 2
%12 = load i64, i64* %10
%13 = load i8, i8* %11, !range !1
%14 = trunc i8 %13 to i1
br label %bb1
bb1: ; preds = %start
%15 = getelementptr inbounds { i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i8, [7 x i8] }* %0, i32 0, i32 0
store i64 %12, i64* %15
%16 = getelementptr inbounds { i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i8, [7 x i8] }* %0, i32 0, i32 2
%17 = zext i1 %14 to i8
store i8 %17, i8* %16
ret void
}
; core::ptr::drop_in_place
; Function Attrs: uwtable
define internal void @_ZN4core3ptr13drop_in_place17h823bfb43d5cc5694E(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"*) unnamed_addr #1 {
start:
; call <alloc::raw_vec::RawVec<T, A> as core::ops::drop::Drop>::drop
call void @"_ZN82_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17hcdf2b0db6a195e21E"(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* dereferenceable(16) %0)
br label %bb1
bb1: ; preds = %start
ret void
}
; core::ptr::drop_in_place
; Function Attrs: uwtable
define internal void @_ZN4core3ptr13drop_in_place17hbb4500343f000e3cE(%str_slice*) unnamed_addr #1 {
start:
ret void
}
; core::ptr::drop_in_place
; Function Attrs: uwtable
define internal void @_ZN4core3ptr13drop_in_place17hc45b0ec2880cff63E(%"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"*) unnamed_addr #1 {
start:
%1 = getelementptr inbounds %"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>", %"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"* %0, i32 0, i32 2
; call core::ptr::drop_in_place
call void @_ZN4core3ptr13drop_in_place17hfa906e9d21f1a35bE(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* %1)
br label %bb1
bb1: ; preds = %start
ret void
}
; core::ptr::drop_in_place
; Function Attrs: uwtable
define internal void @_ZN4core3ptr13drop_in_place17hd7240e5eeb07333fE(%"alloc::vec::Vec<u8>"*) unnamed_addr #1 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
start:
%personalityslot = alloca { i8*, i32 }
; invoke <alloc::vec::Vec<T> as core::ops::drop::Drop>::drop
invoke void @"_ZN66_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17ha866afff06ba2767E"(%"alloc::vec::Vec<u8>"* dereferenceable(24) %0)
to label %bb4 unwind label %cleanup
bb1: ; preds = %bb4
ret void
bb2: ; preds = %bb3
%1 = load { i8*, i32 }, { i8*, i32 }* %personalityslot
resume { i8*, i32 } %1
bb3: ; preds = %cleanup
%2 = getelementptr inbounds %"alloc::vec::Vec<u8>", %"alloc::vec::Vec<u8>"* %0, i32 0, i32 0
; call core::ptr::drop_in_place
call void @_ZN4core3ptr13drop_in_place17h823bfb43d5cc5694E(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* %2) #9
br label %bb2
bb4: ; preds = %start
%3 = getelementptr inbounds %"alloc::vec::Vec<u8>", %"alloc::vec::Vec<u8>"* %0, i32 0, i32 0
; call core::ptr::drop_in_place
call void @_ZN4core3ptr13drop_in_place17h823bfb43d5cc5694E(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* %3)
br label %bb1
cleanup: ; preds = %start
%4 = landingpad { i8*, i32 }
cleanup
store { i8*, i32 } %4, { i8*, i32 }* %personalityslot
br label %bb3
}
; core::ptr::drop_in_place
; Function Attrs: uwtable
define internal void @_ZN4core3ptr13drop_in_place17hdd3f52cff5540d7aE({ %"alloc::string::String", [0 x i8], i32, [4 x i8] }*) unnamed_addr #1 {
start:
%1 = getelementptr inbounds { %"alloc::string::String", [0 x i8], i32, [4 x i8] }, { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* %0, i32 0, i32 0
; call core::ptr::drop_in_place
call void @_ZN4core3ptr13drop_in_place17heacac3ea7654a012E(%"alloc::string::String"* %1)
br label %bb1
bb1: ; preds = %start
ret void
}
; core::ptr::drop_in_place
; Function Attrs: uwtable
define internal void @_ZN4core3ptr13drop_in_place17heacac3ea7654a012E(%"alloc::string::String"*) unnamed_addr #1 {
start:
%1 = getelementptr inbounds %"alloc::string::String", %"alloc::string::String"* %0, i32 0, i32 0
; call core::ptr::drop_in_place
call void @_ZN4core3ptr13drop_in_place17hd7240e5eeb07333fE(%"alloc::vec::Vec<u8>"* %1)
br label %bb1
bb1: ; preds = %start
ret void
}
; core::ptr::drop_in_place
; Function Attrs: uwtable
define internal void @_ZN4core3ptr13drop_in_place17hfa906e9d21f1a35bE(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"*) unnamed_addr #1 {
start:
; call <std::collections::hash::table::RawTable<K, V> as core::ops::drop::Drop>::drop
call void @"_ZN99_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17hcc08b5b1fc136ef3E"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* dereferenceable(24) %0)
br label %bb1
bb1: ; preds = %start
ret void
}
; core::ptr::<impl *mut T>::offset
; Function Attrs: inlinehint uwtable
define internal i64* @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$6offset17h20799c0ba09c4a4fE"(i64*, i64) unnamed_addr #0 {
start:
%tmp_ret = alloca i64*
%2 = getelementptr inbounds i64, i64* %0, i64 %1
store i64* %2, i64** %tmp_ret
%3 = load i64*, i64** %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i64* %3
}
; core::ptr::<impl *mut T>::offset
; Function Attrs: inlinehint uwtable
define internal i8* @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$6offset17h506e4888fd6ad711E"(i8*, i64) unnamed_addr #0 {
start:
%tmp_ret = alloca i8*
%2 = getelementptr inbounds i8, i8* %0, i64 %1
store i8* %2, i8** %tmp_ret
%3 = load i8*, i8** %tmp_ret
br label %bb1
bb1: ; preds = %start
ret i8* %3
}
; core::ptr::<impl *mut T>::is_null
; Function Attrs: inlinehint uwtable
define internal zeroext i1 @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$7is_null17h57b63dfcc98eb1b4E"(i8*) unnamed_addr #0 {
start:
; call core::ptr::null_mut
%1 = call i8* @_ZN4core3ptr8null_mut17h93520ebd198118e1E()
br label %bb1
bb1: ; preds = %start
%2 = icmp eq i8* %0, %1
ret i1 %2
}
; core::ptr::<impl *const T>::offset
; Function Attrs: inlinehint uwtable
define internal { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* @"_ZN4core3ptr33_$LT$impl$u20$$BP$const$u20$T$GT$6offset17h7aa03b74dbcf1a40E"({ %"alloc::string::String", [0 x i8], i32, [4 x i8] }*, i64) unnamed_addr #0 {
start:
%tmp_ret = alloca { %"alloc::string::String", [0 x i8], i32, [4 x i8] }*
%2 = getelementptr inbounds { %"alloc::string::String", [0 x i8], i32, [4 x i8] }, { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* %0, i64 %1
store { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* %2, { %"alloc::string::String", [0 x i8], i32, [4 x i8] }** %tmp_ret
%3 = load { %"alloc::string::String", [0 x i8], i32, [4 x i8] }*, { %"alloc::string::String", [0 x i8], i32, [4 x i8] }** %tmp_ret
br label %bb1
bb1: ; preds = %start
ret { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* %3
}
; core::ptr::null_mut
; Function Attrs: inlinehint uwtable
define internal i8* @_ZN4core3ptr8null_mut17h93520ebd198118e1E() unnamed_addr #0 {
start:
ret i8* null
}
; core::slice::from_raw_parts_mut
; Function Attrs: inlinehint uwtable
define internal { i8*, i64 } @_ZN4core5slice18from_raw_parts_mut17h8443cc387c96e0feE(i8*, i64) unnamed_addr #0 {
start:
%transmute_temp = alloca { i8*, i64 }
%_6 = alloca %"core::slice::Repr<u8>"
%2 = getelementptr inbounds %"core::slice::Repr<u8>", %"core::slice::Repr<u8>"* %_6, i32 0, i32 0
store i8* %0, i8** %2
%3 = getelementptr inbounds %"core::slice::Repr<u8>", %"core::slice::Repr<u8>"* %_6, i32 0, i32 2
store i64 %1, i64* %3
%4 = getelementptr inbounds %"core::slice::Repr<u8>", %"core::slice::Repr<u8>"* %_6, i32 0, i32 0
%5 = getelementptr inbounds %"core::slice::Repr<u8>", %"core::slice::Repr<u8>"* %_6, i32 0, i32 2
%6 = load i8*, i8** %4
%7 = load i64, i64* %5
%8 = bitcast { i8*, i64 }* %transmute_temp to %"core::slice::Repr<u8>"*
%9 = getelementptr inbounds %"core::slice::Repr<u8>", %"core::slice::Repr<u8>"* %8, i32 0, i32 0
store i8* %6, i8** %9
%10 = getelementptr inbounds %"core::slice::Repr<u8>", %"core::slice::Repr<u8>"* %8, i32 0, i32 2
store i64 %7, i64* %10
%11 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %transmute_temp, i32 0, i32 0
%12 = load i8*, i8** %11, !nonnull !5
%13 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %transmute_temp, i32 0, i32 1
%14 = load i64, i64* %13
br label %bb1
bb1: ; preds = %start
%15 = insertvalue { i8*, i64 } undef, i8* %12, 0
%16 = insertvalue { i8*, i64 } %15, i64 %14, 1
ret { i8*, i64 } %16
}
; alloc::heap::deallocate
; Function Attrs: inlinehint uwtable
define internal void @_ZN5alloc4heap10deallocate17h0714573883fe8c03E(i8*, i64, i64) unnamed_addr #0 {
start:
call void @__rust_deallocate(i8* %0, i64 %1, i64 %2)
br label %bb1
bb1: ; preds = %start
ret void
}
; alloc::heap::exchange_malloc
; Function Attrs: inlinehint uwtable
define internal i8* @_ZN5alloc4heap15exchange_malloc17h14d65bf0926286feE(i64, i64) unnamed_addr #0 {
start:
%_0 = alloca i8*
%2 = icmp eq i64 %0, 0
br i1 %2, label %bb1, label %bb2
bb1: ; preds = %start
%3 = inttoptr i64 %1 to i8*
store i8* %3, i8** %_0
br label %bb7
bb2: ; preds = %start
; call alloc::heap::allocate
%4 = call i8* @_ZN5alloc4heap8allocate17h095d31ab3d0c194dE(i64 %0, i64 %1)
br label %bb3
bb3: ; preds = %bb2
; call core::ptr::<impl *mut T>::is_null
%5 = call zeroext i1 @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$7is_null17h57b63dfcc98eb1b4E"(i8* %4)
br label %bb4
bb4: ; preds = %bb3
br i1 %5, label %bb5, label %bb6
bb5: ; preds = %bb4
; call alloc::oom::oom
call void @_ZN5alloc3oom3oom17h187750829550d600E()
unreachable
bb6: ; preds = %bb4
store i8* %4, i8** %_0
br label %bb7
bb7: ; preds = %bb6, %bb1
%6 = load i8*, i8** %_0
ret i8* %6
}
; alloc::heap::allocate
; Function Attrs: inlinehint uwtable
define internal i8* @_ZN5alloc4heap8allocate17h095d31ab3d0c194dE(i64, i64) unnamed_addr #0 {
start:
br label %bb1
bb1: ; preds = %start
%2 = call i8* @__rust_allocate(i64 %0, i64 %1)
br label %bb2
bb2: ; preds = %bb1
ret i8* %2
}
; alloc::allocator::size_align
; Function Attrs: uwtable
define internal void @_ZN5alloc9allocator10size_align17h88870de5c06db9aaE({ i64, [0 x i8], i64, [0 x i8] }* noalias nocapture sret dereferenceable(16)) unnamed_addr #1 {
start:
; call core::mem::size_of
%1 = call i64 @_ZN4core3mem7size_of17hf23eed341ba9caafE()
br label %bb1
bb1: ; preds = %start
; call core::mem::align_of
%2 = call i64 @_ZN4core3mem8align_of17heefba6edf2f0843dE()
br label %bb2
bb2: ; preds = %bb1
%3 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8] }, { i64, [0 x i8], i64, [0 x i8] }* %0, i32 0, i32 0
store i64 %1, i64* %3
%4 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8] }, { i64, [0 x i8], i64, [0 x i8] }* %0, i32 0, i32 2
store i64 %2, i64* %4
ret void
}
; alloc::allocator::Layout::new
; Function Attrs: uwtable
define internal void @_ZN5alloc9allocator6Layout3new17he027ae8e9b401019E(%"alloc::allocator::Layout"* noalias nocapture sret dereferenceable(16)) unnamed_addr #1 {
start:
%tmp_ret = alloca { i64, [0 x i8], i64, [0 x i8] }
%_4 = alloca %"core::option::Option<alloc::allocator::Layout>"
; call alloc::allocator::size_align
call void @_ZN5alloc9allocator10size_align17h88870de5c06db9aaE({ i64, [0 x i8], i64, [0 x i8] }* noalias nocapture sret dereferenceable(16) %tmp_ret)
%1 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8] }, { i64, [0 x i8], i64, [0 x i8] }* %tmp_ret, i32 0, i32 0
%2 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8] }, { i64, [0 x i8], i64, [0 x i8] }* %tmp_ret, i32 0, i32 2
%3 = load i64, i64* %1
%4 = load i64, i64* %2
br label %bb1
bb1: ; preds = %start
; call alloc::allocator::Layout::from_size_align
call void @_ZN5alloc9allocator6Layout15from_size_align17h6fb8443c82986f36E(%"core::option::Option<alloc::allocator::Layout>"* noalias nocapture sret dereferenceable(24) %_4, i64 %3, i64 %4)
br label %bb2
bb2: ; preds = %bb1
; call <core::option::Option<T>>::unwrap
call void @"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h4c2fde4ea85cdcd6E"(%"alloc::allocator::Layout"* noalias nocapture sret dereferenceable(16) %0, %"core::option::Option<alloc::allocator::Layout>"* noalias nocapture dereferenceable(24) %_4)
br label %bb3
bb3: ; preds = %bb2
ret void
}
; <alloc::vec::Vec<T> as core::ops::drop::Drop>::drop
; Function Attrs: uwtable
define internal void @"_ZN66_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17ha866afff06ba2767E"(%"alloc::vec::Vec<u8>"* dereferenceable(24)) unnamed_addr #1 {
start:
; call <alloc::vec::Vec<T> as core::ops::index::IndexMut<core::ops::range::RangeFull>>::index_mut
%1 = call { i8*, i64 } @"_ZN106_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..index..IndexMut$LT$core..ops..range..RangeFull$GT$$GT$9index_mut17hc7794058ffa41e1dE"(%"alloc::vec::Vec<u8>"* dereferenceable(24) %0)
%2 = extractvalue { i8*, i64 } %1, 0
%3 = extractvalue { i8*, i64 } %1, 1
br label %bb1
bb1: ; preds = %start
br label %bb2
bb2: ; preds = %bb1
ret void
}
; <std::collections::hash::table::RawTable<K, V>>::raw_bucket_at
; Function Attrs: uwtable
define internal void @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$13raw_bucket_at17hb26e10a7c1cb90dfE"(%"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* noalias nocapture sret dereferenceable(24), %"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24), i64) unnamed_addr #1 {
start:
%_15 = alloca { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }
; call <std::collections::hash::table::RawTable<K, V>>::capacity
%3 = call i64 @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$8capacity17h8fbd4d9c4bcb2abeE"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %1)
br label %bb1
bb1: ; preds = %start
; call core::mem::size_of
%4 = call i64 @_ZN4core3mem7size_of17hf487c6f8f8065bdbE()
br label %bb2
bb2: ; preds = %bb1
%5 = mul i64 %3, %4
; call <std::collections::hash::table::RawTable<K, V>>::capacity
%6 = call i64 @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$8capacity17h8fbd4d9c4bcb2abeE"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %1)
br label %bb3
bb3: ; preds = %bb2
; call core::mem::size_of
%7 = call i64 @_ZN4core3mem7size_of17h420c9d0a13642555E()
br label %bb4
bb4: ; preds = %bb3
%8 = mul i64 %6, %7
; call core::mem::align_of
%9 = call i64 @_ZN4core3mem8align_of17hb1751fc426011276E()
br label %bb5
bb5: ; preds = %bb4
; call std::collections::hash::table::calculate_offsets
call void @_ZN3std11collections4hash5table17calculate_offsets17hd311671f7f37c2daE({ i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* noalias nocapture sret dereferenceable(24) %_15, i64 %5, i64 %8, i64 %9)
br label %bb6
bb6: ; preds = %bb5
%10 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* %_15, i32 0, i32 0
%11 = load i64, i64* %10
%12 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* %_15, i32 0, i32 4
%13 = load i8, i8* %12, !range !1
%14 = trunc i8 %13 to i1
%15 = getelementptr inbounds %"std::collections::hash::table::RawTable<alloc::string::String, u32>", %"std::collections::hash::table::RawTable<alloc::string::String, u32>"* %1, i32 0, i32 4
; call std::collections::hash::table::TaggedHashUintPtr::ptr
%16 = call i64* @_ZN3std11collections4hash5table17TaggedHashUintPtr3ptr17hceb3703b2b95ec3cE(%"std::collections::hash::table::TaggedHashUintPtr"* noalias readonly dereferenceable(8) %15)
br label %bb7
bb7: ; preds = %bb6
%17 = bitcast i64* %16 to i8*
%18 = bitcast i8* %17 to i64*
; call core::ptr::<impl *mut T>::offset
%19 = call i8* @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$6offset17h506e4888fd6ad711E"(i8* %17, i64 %11)
br label %bb8
bb8: ; preds = %bb7
%20 = bitcast i8* %19 to { %"alloc::string::String", [0 x i8], i32, [4 x i8] }*
%21 = getelementptr inbounds %"std::collections::hash::table::RawBucket<alloc::string::String, u32>", %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* %0, i32 0, i32 0
store i64* %18, i64** %21
%22 = getelementptr inbounds %"std::collections::hash::table::RawBucket<alloc::string::String, u32>", %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* %0, i32 0, i32 2
store { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* %20, { %"alloc::string::String", [0 x i8], i32, [4 x i8] }** %22
%23 = getelementptr inbounds %"std::collections::hash::table::RawBucket<alloc::string::String, u32>", %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* %0, i32 0, i32 4
store i64 %2, i64* %23
ret void
}
; <std::collections::hash::table::RawTable<K, V>>::rev_drop_buckets
; Function Attrs: uwtable
define internal void @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$16rev_drop_buckets17hfda5fa7549412ff8E"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* dereferenceable(24)) unnamed_addr #1 {
start:
%_11 = alloca {}
%elems_left = alloca i64
%raw = alloca %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"
; call <std::collections::hash::table::RawTable<K, V>>::capacity
%1 = call i64 @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$8capacity17h8fbd4d9c4bcb2abeE"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %0)
br label %bb1
bb1: ; preds = %start
; call <std::collections::hash::table::RawTable<K, V>>::raw_bucket_at
call void @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$13raw_bucket_at17hb26e10a7c1cb90dfE"(%"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* noalias nocapture sret dereferenceable(24) %raw, %"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %0, i64 %1)
br label %bb2
bb2: ; preds = %bb1
%2 = getelementptr inbounds %"std::collections::hash::table::RawTable<alloc::string::String, u32>", %"std::collections::hash::table::RawTable<alloc::string::String, u32>"* %0, i32 0, i32 2
%3 = load i64, i64* %2
store i64 %3, i64* %elems_left
br label %bb3
bb3: ; preds = %bb11, %bb2
%4 = load i64, i64* %elems_left
%5 = icmp ne i64 %4, 0
br i1 %5, label %bb5, label %bb4
bb4: ; preds = %bb3
ret void
bb5: ; preds = %bb3
%6 = getelementptr inbounds %"std::collections::hash::table::RawBucket<alloc::string::String, u32>", %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* %raw, i32 0, i32 4
%7 = getelementptr inbounds %"std::collections::hash::table::RawBucket<alloc::string::String, u32>", %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* %raw, i32 0, i32 4
%8 = load i64, i64* %7
%9 = sub i64 %8, 1
store i64 %9, i64* %6
; call <std::collections::hash::table::RawBucket<K, V>>::hash
%10 = call i64* @"_ZN67_$LT$std..collections..hash..table..RawBucket$LT$K$C$$u20$V$GT$$GT$4hash17h82bc43f6705767cfE"(%"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %raw)
br label %bb6
bb6: ; preds = %bb5
%11 = load i64, i64* %10
%12 = icmp ne i64 %11, 0
br i1 %12, label %bb7, label %bb8
bb7: ; preds = %bb6
%13 = load i64, i64* %elems_left
%14 = sub i64 %13, 1
store i64 %14, i64* %elems_left
; call <std::collections::hash::table::RawBucket<K, V>>::pair
%15 = call { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* @"_ZN67_$LT$std..collections..hash..table..RawBucket$LT$K$C$$u20$V$GT$$GT$4pair17hfeb33fed92bb1a57E"(%"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %raw)
br label %bb9
bb8: ; preds = %bb6
br label %bb11
bb9: ; preds = %bb7
; call core::ptr::drop_in_place
call void @_ZN4core3ptr13drop_in_place17hdd3f52cff5540d7aE({ %"alloc::string::String", [0 x i8], i32, [4 x i8] }* %15)
br label %bb10
bb10: ; preds = %bb9
br label %bb11
bb11: ; preds = %bb8, %bb10
br label %bb3
}
; <std::collections::hash::table::RawTable<K, V>>::size
; Function Attrs: uwtable
define internal i64 @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$4size17h2a2c7a1e8ad7d18bE"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24)) unnamed_addr #1 {
start:
%1 = getelementptr inbounds %"std::collections::hash::table::RawTable<alloc::string::String, u32>", %"std::collections::hash::table::RawTable<alloc::string::String, u32>"* %0, i32 0, i32 2
%2 = load i64, i64* %1
ret i64 %2
}
; <std::collections::hash::table::RawTable<K, V>>::capacity
; Function Attrs: uwtable
define internal i64 @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$8capacity17h8fbd4d9c4bcb2abeE"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24)) unnamed_addr #1 {
start:
%1 = getelementptr inbounds %"std::collections::hash::table::RawTable<alloc::string::String, u32>", %"std::collections::hash::table::RawTable<alloc::string::String, u32>"* %0, i32 0, i32 0
%2 = load i64, i64* %1
; call core::num::<impl usize>::wrapping_add
%3 = call i64 @"_ZN4core3num23_$LT$impl$u20$usize$GT$12wrapping_add17h60cc7bcd2228b7e8E"(i64 %2, i64 1)
br label %bb1
bb1: ; preds = %start
ret i64 %3
}
; <std::collections::hash::table::RawBucket<K, V>>::hash
; Function Attrs: uwtable
define internal i64* @"_ZN67_$LT$std..collections..hash..table..RawBucket$LT$K$C$$u20$V$GT$$GT$4hash17h82bc43f6705767cfE"(%"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* noalias readonly dereferenceable(24)) unnamed_addr #1 {
start:
%1 = getelementptr inbounds %"std::collections::hash::table::RawBucket<alloc::string::String, u32>", %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* %0, i32 0, i32 0
%2 = load i64*, i64** %1
%3 = getelementptr inbounds %"std::collections::hash::table::RawBucket<alloc::string::String, u32>", %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* %0, i32 0, i32 4
%4 = load i64, i64* %3
; call core::ptr::<impl *mut T>::offset
%5 = call i64* @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$6offset17h20799c0ba09c4a4fE"(i64* %2, i64 %4)
br label %bb1
bb1: ; preds = %start
ret i64* %5
}
; <std::collections::hash::table::RawBucket<K, V>>::pair
; Function Attrs: uwtable
define internal { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* @"_ZN67_$LT$std..collections..hash..table..RawBucket$LT$K$C$$u20$V$GT$$GT$4pair17hfeb33fed92bb1a57E"(%"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* noalias readonly dereferenceable(24)) unnamed_addr #1 {
start:
%1 = getelementptr inbounds %"std::collections::hash::table::RawBucket<alloc::string::String, u32>", %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* %0, i32 0, i32 2
%2 = load { %"alloc::string::String", [0 x i8], i32, [4 x i8] }*, { %"alloc::string::String", [0 x i8], i32, [4 x i8] }** %1
%3 = getelementptr inbounds %"std::collections::hash::table::RawBucket<alloc::string::String, u32>", %"std::collections::hash::table::RawBucket<alloc::string::String, u32>"* %0, i32 0, i32 4
%4 = load i64, i64* %3
; call core::ptr::<impl *const T>::offset
%5 = call { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* @"_ZN4core3ptr33_$LT$impl$u20$$BP$const$u20$T$GT$6offset17h7aa03b74dbcf1a40E"({ %"alloc::string::String", [0 x i8], i32, [4 x i8] }* %2, i64 %4)
br label %bb1
bb1: ; preds = %start
ret { %"alloc::string::String", [0 x i8], i32, [4 x i8] }* %5
}
; <alloc::vec::Vec<T> as core::ops::deref::DerefMut>::deref_mut
; Function Attrs: uwtable
define internal { i8*, i64 } @"_ZN71_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..deref..DerefMut$GT$9deref_mut17h68d01c2d9708665bE"(%"alloc::vec::Vec<u8>"* dereferenceable(24)) unnamed_addr #1 {
start:
%1 = getelementptr inbounds %"alloc::vec::Vec<u8>", %"alloc::vec::Vec<u8>"* %0, i32 0, i32 0
; call <alloc::raw_vec::RawVec<T, A>>::ptr
%2 = call i8* @"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$3ptr17hfade4d736973f114E"(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* noalias readonly dereferenceable(16) %1)
br label %bb1
bb1: ; preds = %start
; call core::ptr::<impl *mut T>::is_null
%3 = call zeroext i1 @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$7is_null17h57b63dfcc98eb1b4E"(i8* %2)
br label %bb2
bb2: ; preds = %bb1
%4 = xor i1 %3, true
call void @llvm.assume(i1 %4)
br label %bb3
bb3: ; preds = %bb2
%5 = getelementptr inbounds %"alloc::vec::Vec<u8>", %"alloc::vec::Vec<u8>"* %0, i32 0, i32 2
%6 = load i64, i64* %5
; call core::slice::from_raw_parts_mut
%7 = call { i8*, i64 } @_ZN4core5slice18from_raw_parts_mut17h8443cc387c96e0feE(i8* %2, i64 %6)
%8 = extractvalue { i8*, i64 } %7, 0
%9 = extractvalue { i8*, i64 } %7, 1
br label %bb4
bb4: ; preds = %bb3
%10 = insertvalue { i8*, i64 } undef, i8* %8, 0
%11 = insertvalue { i8*, i64 } %10, i64 %9, 1
ret { i8*, i64 } %11
}
; <std::collections::hash::map::HashMap<K, V, S>>::len
; Function Attrs: uwtable
define internal i64 @"_ZN72_$LT$std..collections..hash..map..HashMap$LT$K$C$$u20$V$C$$u20$S$GT$$GT$3len17h4c188084a0edf277E"(%"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"* noalias readonly dereferenceable(40)) unnamed_addr #1 {
start:
%1 = getelementptr inbounds %"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>", %"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"* %0, i32 0, i32 2
; call <std::collections::hash::table::RawTable<K, V>>::size
%2 = call i64 @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$4size17h2a2c7a1e8ad7d18bE"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %1)
br label %bb1
bb1: ; preds = %start
ret i64 %2
}
; <alloc::raw_vec::RawVec<T, A> as core::ops::drop::Drop>::drop
; Function Attrs: uwtable
define internal void @"_ZN82_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17hcdf2b0db6a195e21E"(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* dereferenceable(16)) unnamed_addr #1 {
start:
; call <alloc::raw_vec::RawVec<T, A>>::dealloc_buffer
call void @"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14dealloc_buffer17h9c6f91926ee3e0a6E"(%"alloc::raw_vec::RawVec<u8, alloc::heap::HeapAlloc>"* dereferenceable(16) %0)
br label %bb1
bb1: ; preds = %start
ret void
}
; <std::collections::hash::table::RawTable<K, V> as core::ops::drop::Drop>::drop
; Function Attrs: uwtable
define internal void @"_ZN99_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17hcc08b5b1fc136ef3E"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* dereferenceable(24)) unnamed_addr #1 {
start:
%_22 = alloca { i64, [0 x i8], i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }
%_7 = alloca {}
%_0 = alloca {}
; call <std::collections::hash::table::RawTable<K, V>>::capacity
%1 = call i64 @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$8capacity17h8fbd4d9c4bcb2abeE"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %0)
br label %bb1
bb1: ; preds = %start
%2 = icmp eq i64 %1, 0
br i1 %2, label %bb2, label %bb3
bb2: ; preds = %bb1
br label %bb4
bb3: ; preds = %bb1
; call core::mem::needs_drop
%3 = call zeroext i1 @_ZN4core3mem10needs_drop17h582fdac1a5b9cba1E()
br label %bb5
bb4: ; preds = %bb18, %bb2
ret void
bb5: ; preds = %bb3
br i1 %3, label %bb6, label %bb7
bb6: ; preds = %bb5
; call <std::collections::hash::table::RawTable<K, V>>::rev_drop_buckets
call void @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$16rev_drop_buckets17hfda5fa7549412ff8E"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* dereferenceable(24) %0)
br label %bb8
bb7: ; preds = %bb5
br label %bb9
bb8: ; preds = %bb6
br label %bb9
bb9: ; preds = %bb7, %bb8
; call <std::collections::hash::table::RawTable<K, V>>::capacity
%4 = call i64 @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$8capacity17h8fbd4d9c4bcb2abeE"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %0)
br label %bb10
bb10: ; preds = %bb9
; call core::mem::size_of
%5 = call i64 @_ZN4core3mem7size_of17hf487c6f8f8065bdbE()
br label %bb11
bb11: ; preds = %bb10
%6 = mul i64 %4, %5
; call <std::collections::hash::table::RawTable<K, V>>::capacity
%7 = call i64 @"_ZN66_$LT$std..collections..hash..table..RawTable$LT$K$C$$u20$V$GT$$GT$8capacity17h8fbd4d9c4bcb2abeE"(%"std::collections::hash::table::RawTable<alloc::string::String, u32>"* noalias readonly dereferenceable(24) %0)
br label %bb12
bb12: ; preds = %bb11
; call core::mem::size_of
%8 = call i64 @_ZN4core3mem7size_of17h420c9d0a13642555E()
br label %bb13
bb13: ; preds = %bb12
%9 = mul i64 %7, %8
; call core::mem::align_of
%10 = call i64 @_ZN4core3mem8align_of17h7a7ea9d0cdbbfca9E()
br label %bb14
bb14: ; preds = %bb13
; call core::mem::align_of
%11 = call i64 @_ZN4core3mem8align_of17hb1751fc426011276E()
br label %bb15
bb15: ; preds = %bb14
; call std::collections::hash::table::calculate_allocation
call void @_ZN3std11collections4hash5table20calculate_allocation17ha870f8b3cc580232E({ i64, [0 x i8], i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* noalias nocapture sret dereferenceable(32) %_22, i64 %6, i64 %10, i64 %9, i64 %11)
br label %bb16
bb16: ; preds = %bb15
%12 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* %_22, i32 0, i32 0
%13 = load i64, i64* %12
%14 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* %_22, i32 0, i32 4
%15 = load i64, i64* %14
%16 = getelementptr inbounds { i64, [0 x i8], i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }, { i64, [0 x i8], i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* %_22, i32 0, i32 6
%17 = load i8, i8* %16, !range !1
%18 = trunc i8 %17 to i1
%19 = getelementptr inbounds %"std::collections::hash::table::RawTable<alloc::string::String, u32>", %"std::collections::hash::table::RawTable<alloc::string::String, u32>"* %0, i32 0, i32 4
; call std::collections::hash::table::TaggedHashUintPtr::ptr
%20 = call i64* @_ZN3std11collections4hash5table17TaggedHashUintPtr3ptr17hceb3703b2b95ec3cE(%"std::collections::hash::table::TaggedHashUintPtr"* noalias readonly dereferenceable(8) %19)
br label %bb17
bb17: ; preds = %bb16
%21 = bitcast i64* %20 to i8*
; call alloc::heap::deallocate
call void @_ZN5alloc4heap10deallocate17h0714573883fe8c03E(i8* %21, i64 %15, i64 %13)
br label %bb18
bb18: ; preds = %bb17
br label %bb4
}
; xx::foo
; Function Attrs: uwtable
define i64 @_ZN2xx3foo17h5bb2af9e7f8f07d4E(%"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"* noalias nocapture dereferenceable(40)) unnamed_addr #1 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
start:
%personalityslot = alloca { i8*, i32 }
%h = alloca %"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"
%1 = bitcast %"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"* %0 to i8*
%2 = bitcast %"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"* %h to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %1, i64 40, i32 8, i1 false)
; invoke <std::collections::hash::map::HashMap<K, V, S>>::len
%3 = invoke i64 @"_ZN72_$LT$std..collections..hash..map..HashMap$LT$K$C$$u20$V$C$$u20$S$GT$$GT$3len17h4c188084a0edf277E"(%"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"* noalias readonly dereferenceable(40) %h)
to label %bb2 unwind label %cleanup
bb1: ; preds = %bb3
%4 = load { i8*, i32 }, { i8*, i32 }* %personalityslot
resume { i8*, i32 } %4
bb2: ; preds = %start
; call core::ptr::drop_in_place
call void @_ZN4core3ptr13drop_in_place17hc45b0ec2880cff63E(%"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"* %h)
br label %bb4
bb3: ; preds = %cleanup
; call core::ptr::drop_in_place
call void @_ZN4core3ptr13drop_in_place17hc45b0ec2880cff63E(%"std::collections::hash::map::HashMap<alloc::string::String, u32, std::collections::hash::map::RandomState>"* %h) #9
br label %bb1
bb4: ; preds = %bb2
ret i64 %3
cleanup: ; preds = %start
%5 = landingpad { i8*, i32 }
cleanup
store { i8*, i32 } %5, { i8*, i32 }* %personalityslot
br label %bb3
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #3
declare i32 @rust_eh_personality(i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*) unnamed_addr #4
; core::panicking::panic
; Function Attrs: cold noinline noreturn
declare void @_ZN4core9panicking5panic17h62639c90155483f2E({ %str_slice, [0 x i8], %str_slice, [0 x i8], i32, [4 x i8] }* noalias readonly dereferenceable(40)) unnamed_addr #5
; std::panicking::rust_panic_with_hook
; Function Attrs: cold noinline noreturn
declare void @_ZN3std9panicking20rust_panic_with_hook17h070dbedc97871d0aE({}* noalias nonnull, {}* noalias nonnull readonly, { %str_slice, [0 x i8], i32, [4 x i8] }* noalias readonly dereferenceable(24)) unnamed_addr #5
; alloc::allocator::Layout::repeat
declare void @_ZN5alloc9allocator6Layout6repeat17h552f5096c4e7899dE(%"core::option::Option<(alloc::allocator::Layout, usize)>"* noalias nocapture sret dereferenceable(32), %"alloc::allocator::Layout"* noalias readonly dereferenceable(16), i64) unnamed_addr #4
; <alloc::heap::HeapAlloc as alloc::allocator::Alloc>::dealloc
declare void @"_ZN66_$LT$alloc..heap..HeapAlloc$u20$as$u20$alloc..allocator..Alloc$GT$7dealloc17h867ab70d434fced2E"(%"alloc::heap::HeapAlloc"*, i8*, %"alloc::allocator::Layout"* noalias nocapture dereferenceable(16)) unnamed_addr #4
; Function Attrs: nounwind readnone
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #6
; Function Attrs: nounwind
declare void @__rust_deallocate(i8*, i64, i64) unnamed_addr #7
; alloc::oom::oom
; Function Attrs: cold noinline noreturn
declare void @_ZN5alloc3oom3oom17h187750829550d600E() unnamed_addr #5
; Function Attrs: nounwind
declare noalias i8* @__rust_allocate(i64, i64) unnamed_addr #7
; alloc::allocator::Layout::from_size_align
declare void @_ZN5alloc9allocator6Layout15from_size_align17h6fb8443c82986f36E(%"core::option::Option<alloc::allocator::Layout>"* noalias nocapture sret dereferenceable(24), i64, i64) unnamed_addr #4
; Function Attrs: nounwind
declare void @llvm.assume(i1) #8
; std::collections::hash::table::calculate_allocation
declare void @_ZN3std11collections4hash5table20calculate_allocation17ha870f8b3cc580232E({ i64, [0 x i8], i64, [0 x i8], i64, [0 x i8], i8, [7 x i8] }* noalias nocapture sret dereferenceable(32), i64, i64, i64, i64) unnamed_addr #4
attributes #0 = { inlinehint uwtable "no-frame-pointer-elim"="true" }
attributes #1 = { uwtable "no-frame-pointer-elim"="true" }
attributes #2 = { cold noinline noreturn uwtable "no-frame-pointer-elim"="true" }
attributes #3 = { argmemonly nounwind }
attributes #4 = { "no-frame-pointer-elim"="true" }
attributes #5 = { cold noinline noreturn "no-frame-pointer-elim"="true" }
attributes #6 = { nounwind readnone }
attributes #7 = { nounwind "no-frame-pointer-elim"="true" }
attributes #8 = { nounwind }
attributes #9 = { noinline }
!0 = !{i64 0, i64 2}
!1 = !{i8 0, i8 2}
!2 = !{!3}
!3 = distinct !{!3, !4, !"_ZN35_$LT$alloc..boxed..Box$LT$T$GT$$GT$3new17h5ad0927f81583286E: argument 0"}
!4 = distinct !{!4, !"_ZN35_$LT$alloc..boxed..Box$LT$T$GT$$GT$3new17h5ad0927f81583286E"}
!5 = !{}
use std::collections::HashMap;
pub fn foo(h: HashMap<String, u32>) -> usize {
h.len()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment