Skip to content

Instantly share code, notes, and snippets.

@bluss
Last active April 21, 2016 21:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bluss/5a088d3f420d12406689439e2940d731 to your computer and use it in GitHub Desktop.
Save bluss/5a088d3f420d12406689439e2940d731 to your computer and use it in GitHub Desktop.
rustc -C opt-level=3 -C "llvm-args=-x86-asm-syntax=intel" --emit=asm zipfail.rs
#![crate_type="lib"]
// bad
#[no_mangle]
pub fn copy_zip_vec(xs: &Vec<u8>, ys: &mut Vec<u8>) {
for (a, b) in ys.iter_mut().zip(xs.iter()) {
*a = *b;
}
}
// memcpy
#[no_mangle]
pub fn copy_zip_slice(xs: &[u8], ys: &mut [u8]) {
for (a, b) in ys.iter_mut().zip(xs.iter()) {
*a = *b;
}
}
/* memcpy
#[no_mangle]
pub fn copy_zip_vec2(xs: &Vec<u8>, ys: &mut Vec<u8>) {
copy_zip_slice(xs, ys)
}
*/
.text
.intel_syntax noprefix
.file "zipfail.0.rs"
.section .text.copy_zip_vec,"ax",@progbits
.globl copy_zip_vec
.align 16, 0x90
.type copy_zip_vec,@function
copy_zip_vec:
.cfi_startproc
mov rcx, qword ptr [rsi + 16]
mov rax, qword ptr [rdi + 16]
cmp rcx, rax
cmovbe rax, rcx
xor ecx, ecx
test rax, rax
je .LBB0_4
mov rsi, qword ptr [rsi]
mov r8, qword ptr [rdi]
.align 16, 0x90
.LBB0_2:
mov rdi, rsi
add rdi, rcx
je .LBB0_4
mov dl, byte ptr [r8 + rcx]
inc rcx
mov byte ptr [rdi], dl
cmp rcx, rax
jb .LBB0_2
.LBB0_4:
ret
.Lfunc_end0:
.size copy_zip_vec, .Lfunc_end0-copy_zip_vec
.cfi_endproc
.section .text.copy_zip_slice,"ax",@progbits
.globl copy_zip_slice
.align 16, 0x90
.type copy_zip_slice,@function
copy_zip_slice:
.cfi_startproc
push rax
.Ltmp0:
.cfi_def_cfa_offset 16
mov rax, rsi
mov rsi, rdi
cmp rcx, rax
mov rdi, rax
cmovbe rdi, rcx
test rdi, rdi
je .LBB1_2
cmp rcx, rax
cmovb rax, rcx
mov rdi, rdx
mov rdx, rax
call memcpy@PLT
.LBB1_2:
pop rax
ret
.Lfunc_end1:
.size copy_zip_slice, .Lfunc_end1-copy_zip_slice
.cfi_endproc
.section ".note.GNU-stack","",@progbits
; ModuleID = 'zipfail.0.rs'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%str_slice = type { i8*, i64 }
%"2.std::fmt::Formatter" = type { i32, i32, i8, %"2.std::option::Option<usize>", %"2.std::option::Option<usize>", { i8*, void (i8*)** }, %"2.std::slice::Iter<std::fmt::ArgumentV1<'static>>", { %"2.std::fmt::ArgumentV1"*, i64 } }
%"2.std::option::Option<usize>" = type { i64, [0 x i64], [1 x i64] }
%"2.std::slice::Iter<std::fmt::ArgumentV1<'static>>" = type { %"2.std::fmt::ArgumentV1"*, %"2.std::fmt::ArgumentV1"*, %"2.std::marker::PhantomData<&'static std::fmt::ArgumentV1<'static>>" }
%"2.std::fmt::ArgumentV1" = type { %"2.core::fmt::Void"*, i8 (%"2.core::fmt::Void"*, %"2.std::fmt::Formatter"*)* }
%"2.core::fmt::Void" = type {}
%"2.std::marker::PhantomData<&'static std::fmt::ArgumentV1<'static>>" = type {}
%"2.std::marker::PhantomData<&'static mut u8>" = type {}
%"2.std::marker::PhantomData<&'static u8>" = type {}
%"3.std::vec::Vec<u8>" = type { %"5.alloc::raw_vec::RawVec<u8>", i64 }
%"5.alloc::raw_vec::RawVec<u8>" = type { %"2.std::ptr::Unique<u8>", i64 }
%"2.std::ptr::Unique<u8>" = type { %"2.core::nonzero::NonZero<*const u8>", %"2.std::marker::PhantomData<u8>" }
%"2.core::nonzero::NonZero<*const u8>" = type { i8* }
%"2.std::marker::PhantomData<u8>" = type {}
%"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>" = type { %"2.std::slice::IterMut<u8>", %"2.std::slice::Iter<u8>", i64, i64 }
%"2.std::slice::IterMut<u8>" = type { i8*, i8*, %"2.std::marker::PhantomData<&'static mut u8>" }
%"2.std::slice::Iter<u8>" = type { i8*, i8*, %"2.std::marker::PhantomData<&'static u8>" }
%"2.std::option::Option<(&'static mut u8, &'static u8)>" = type { { i8*, i8* } }
%"2.std::fmt::Arguments" = type { { %str_slice*, i64 }, %"2.std::option::Option<&'static [std::fmt::rt::v1::Argument]>", { %"2.std::fmt::ArgumentV1"*, i64 } }
%"2.std::option::Option<&'static [std::fmt::rt::v1::Argument]>" = type { { %"2.std::fmt::rt::v1::Argument"*, i64 } }
%"2.std::fmt::rt::v1::Argument" = type { %"2.std::fmt::rt::v1::Position", %"2.std::fmt::rt::v1::FormatSpec" }
%"2.std::fmt::rt::v1::Position" = type { i64, [0 x i64], [1 x i64] }
%"2.std::fmt::rt::v1::FormatSpec" = type { i32, i8, i32, %"2.std::fmt::rt::v1::Count", %"2.std::fmt::rt::v1::Count" }
%"2.std::fmt::rt::v1::Count" = type { i64, [0 x i64], [1 x i64] }
%"2.std::result::Result<(), std::fmt::Error>" = type { i8, [0 x i8], [0 x i8] }
%"2.std::fmt::DebugTuple" = type { %"2.std::fmt::Formatter"*, %"2.std::result::Result<(), std::fmt::Error>", i64, i8 }
%"2.core::slice::Repr<u8>" = type { i8*, i64 }
@const4780 = internal unnamed_addr constant {} zeroinitializer, align 1
@const4852 = internal unnamed_addr constant i64 0, align 8
@const4853 = internal unnamed_addr constant i64 1, align 8
@str4854 = internal constant [27 x i8] c"attempted to divide by zero"
@str4856 = internal constant [20 x i8] c"src/libcore/slice.rs"
@panic_loc4857 = internal unnamed_addr constant { %str_slice, %str_slice, i32 } { %str_slice { i8* getelementptr inbounds ([27 x i8], [27 x i8]* @str4854, i32 0, i32 0), i64 27 }, %str_slice { i8* getelementptr inbounds ([20 x i8], [20 x i8]* @str4856, i32 0, i32 0), i64 20 }, i32 822 }, align 8
@const4866 = internal unnamed_addr constant i8 1, align 1
@const4870 = internal unnamed_addr constant i8 0, align 1
@const4874 = internal unnamed_addr constant { { i8*, i64 } } zeroinitializer, align 8
@_ZN4core4iter6traits17ExactSizeIterator3len15__STATIC_FMTSTR17h92b05c668903f4b6E = external global { %str_slice*, i64 }
@str4897 = internal constant [4 x i8] c"None"
@const4898 = internal unnamed_addr constant %str_slice { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @str4897, i32 0, i32 0), i64 4 }, align 8
@str4900 = internal constant [4 x i8] c"Some"
@const4901 = internal unnamed_addr constant %str_slice { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @str4900, i32 0, i32 0), i64 4 }, align 8
@vtable4905 = internal unnamed_addr constant { void (i8*)*, i64, i64, i8 (i64**, %"2.std::fmt::Formatter"*)* } { void (i8*)* @_ZN2i89drop.490317h1bd6851fa727600fE, i64 8, i64 8, i8 (i64**, %"2.std::fmt::Formatter"*)* @"_ZN52_$LT$$RF$$u27$a$u20$T$u20$as$u20$std..fmt..Debug$GT$3fmt17hcfa0e851a80be0d7E" }, align 8
@const4906 = internal unnamed_addr constant i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)* @"_ZN52_$LT$$RF$$u27$a$u20$T$u20$as$u20$std..fmt..Debug$GT$3fmt17he738c792455edf0eE", align 1
@_ZN4core4iter6traits17ExactSizeIterator3len10_FILE_LINE17h66b4a01274af7b41E = external global { %str_slice, i32 }
@const4918 = internal unnamed_addr constant i8* inttoptr (i64 1 to i8*), align 8
@const4935 = internal unnamed_addr constant i8* null, align 8
@const4957 = internal unnamed_addr constant %"2.std::marker::PhantomData<&'static mut u8>" zeroinitializer, align 1
@const4981 = internal unnamed_addr constant %"2.std::marker::PhantomData<&'static u8>" zeroinitializer, align 1
@const5005 = internal unnamed_addr constant { { i8*, i8* } } zeroinitializer, align 8
; Function Attrs: uwtable
define void @copy_zip_vec(%"3.std::vec::Vec<u8>"* noalias readonly dereferenceable(24), %"3.std::vec::Vec<u8>"* dereferenceable(24)) unnamed_addr #0 {
entry-block:
%xs = alloca %"3.std::vec::Vec<u8>"*
%ys = alloca %"3.std::vec::Vec<u8>"*
%_result = alloca {}
%2 = alloca %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"
%3 = alloca %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"
%4 = alloca %"2.std::slice::IterMut<u8>"
%overloaded_deref = alloca { i8*, i64 }
%5 = alloca %"2.std::slice::Iter<u8>"
%overloaded_deref1 = alloca { i8*, i64 }
%iter = alloca %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*
%6 = alloca %"2.std::option::Option<(&'static mut u8, &'static u8)>"
%a = alloca i8**
%__llmatch = alloca i8**
%b = alloca i8*
store %"3.std::vec::Vec<u8>"* %0, %"3.std::vec::Vec<u8>"** %xs
store %"3.std::vec::Vec<u8>"* %1, %"3.std::vec::Vec<u8>"** %ys
%7 = load %"3.std::vec::Vec<u8>"*, %"3.std::vec::Vec<u8>"** %ys, !nonnull !0
%8 = call { i8*, i64 } @"_ZN61_$LT$std..vec..Vec$LT$T$GT$$u20$as$u20$std..ops..DerefMut$GT$9deref_mut17h158bf9fa235dbf90E"(%"3.std::vec::Vec<u8>"* dereferenceable(24) %7)
%9 = extractvalue { i8*, i64 } %8, 0
%10 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %overloaded_deref, i32 0, i32 0
store i8* %9, i8** %10
%11 = extractvalue { i8*, i64 } %8, 1
%12 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %overloaded_deref, i32 0, i32 1
store i64 %11, i64* %12
%13 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %overloaded_deref, i32 0, i32 0
%14 = load i8*, i8** %13
%15 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %overloaded_deref, i32 0, i32 1
%16 = load i64, i64* %15
call void @"_ZN11collections5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$8iter_mut17h02bd744c9b4c44d8E"(%"2.std::slice::IterMut<u8>"* noalias nocapture sret dereferenceable(16) %4, i8* nonnull %14, i64 %16)
%17 = load %"3.std::vec::Vec<u8>"*, %"3.std::vec::Vec<u8>"** %xs, !nonnull !0
%18 = call { i8*, i64 } @"_ZN58_$LT$std..vec..Vec$LT$T$GT$$u20$as$u20$std..ops..Deref$GT$5deref17hcd00f98934b049a9E"(%"3.std::vec::Vec<u8>"* noalias readonly dereferenceable(24) %17)
%19 = extractvalue { i8*, i64 } %18, 0
%20 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %overloaded_deref1, i32 0, i32 0
store i8* %19, i8** %20
%21 = extractvalue { i8*, i64 } %18, 1
%22 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %overloaded_deref1, i32 0, i32 1
store i64 %21, i64* %22
%23 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %overloaded_deref1, i32 0, i32 0
%24 = load i8*, i8** %23
%25 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %overloaded_deref1, i32 0, i32 1
%26 = load i64, i64* %25
call void @"_ZN11collections5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hd1e50f2dd7c2c858E"(%"2.std::slice::Iter<u8>"* noalias nocapture sret dereferenceable(16) %5, i8* noalias nonnull readonly %24, i64 %26)
call void @_ZN4core4iter8iterator8Iterator3zip17ha960a5cd1f865c36E(%"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture sret dereferenceable(48) %3, %"2.std::slice::IterMut<u8>"* noalias nocapture dereferenceable(16) %4, %"2.std::slice::Iter<u8>"* noalias nocapture dereferenceable(16) %5)
call void @"_ZN45_$LT$I$u20$as$u20$std..iter..IntoIterator$GT$9into_iter17hf8283d2b0eaaffb0E"(%"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture sret dereferenceable(48) %2, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture dereferenceable(48) %3)
store %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %2, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %iter
br label %case_body
case_body: ; preds = %entry-block
%27 = load %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %iter
br label %loop_body
loop_exit: ; preds = %clean_ast_71_
br label %join5
loop_body: ; preds = %join, %case_body
call void @"_ZN72_$LT$std..iter..Zip$LT$A$C$$u20$B$GT$$u20$as$u20$std..iter..Iterator$GT$4next17ha336ece82193c22cE"(%"2.std::option::Option<(&'static mut u8, &'static u8)>"* noalias nocapture sret dereferenceable(16) %6, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* dereferenceable(48) %27)
%28 = getelementptr inbounds %"2.std::option::Option<(&'static mut u8, &'static u8)>", %"2.std::option::Option<(&'static mut u8, &'static u8)>"* %6, i32 0, i32 0, i32 0
%29 = load i8*, i8** %28
%30 = icmp ne i8* %29, null
switch i1 %30, label %match_else [
i1 true, label %match_case
i1 false, label %match_case4
]
case_body2: ; preds = %match_case
%31 = load i8**, i8*** %a
%32 = load i8**, i8*** %__llmatch
%33 = load i8*, i8** %32, !nonnull !0
store i8* %33, i8** %b
%34 = load i8*, i8** %b, !nonnull !0
%35 = load i8*, i8** %31, !nonnull !0
%36 = load i8, i8* %34
store i8 %36, i8* %35
br label %join
case_body3: ; preds = %match_case4
br label %clean_ast_71_
match_else: ; preds = %loop_body
unreachable
match_case: ; preds = %loop_body
%37 = getelementptr inbounds %"2.std::option::Option<(&'static mut u8, &'static u8)>", %"2.std::option::Option<(&'static mut u8, &'static u8)>"* %6, i32 0, i32 0
%38 = getelementptr inbounds { i8*, i8* }, { i8*, i8* }* %37, i32 0, i32 0
%39 = getelementptr inbounds { i8*, i8* }, { i8*, i8* }* %37, i32 0, i32 1
store i8** %39, i8*** %__llmatch
store i8** %38, i8*** %a
br label %case_body2
match_case4: ; preds = %loop_body
br label %case_body3
clean_ast_71_: ; preds = %case_body3
br label %loop_exit
join: ; preds = %case_body2
br label %loop_body
join5: ; preds = %loop_exit
ret void
}
; Function Attrs: uwtable
define internal void @"_ZN45_$LT$I$u20$as$u20$std..iter..IntoIterator$GT$9into_iter17hf8283d2b0eaaffb0E"(%"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture sret dereferenceable(48), %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture dereferenceable(48) %self) unnamed_addr #0 {
entry-block:
%1 = bitcast %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %self to i8*
%2 = bitcast %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %0 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %1, i64 48, i32 8, i1 false)
ret void
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #1
; Function Attrs: inlinehint uwtable
define internal void @_ZN4core4iter8iterator8Iterator3zip17ha960a5cd1f865c36E(%"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture sret dereferenceable(48), %"2.std::slice::IterMut<u8>"* noalias nocapture dereferenceable(16) %self, %"2.std::slice::Iter<u8>"* noalias nocapture dereferenceable(16) %other) unnamed_addr #2 {
entry-block:
%arg = alloca %"2.std::slice::IterMut<u8>"
%1 = alloca %"2.std::slice::Iter<u8>"
%arg1 = alloca %"2.std::slice::Iter<u8>"
%2 = bitcast %"2.std::slice::IterMut<u8>"* %self to i8*
%3 = bitcast %"2.std::slice::IterMut<u8>"* %arg to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 16, i32 8, i1 false)
%4 = bitcast %"2.std::slice::Iter<u8>"* %other to i8*
%5 = bitcast %"2.std::slice::Iter<u8>"* %arg1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %4, i64 16, i32 8, i1 false)
call void @"_ZN45_$LT$I$u20$as$u20$std..iter..IntoIterator$GT$9into_iter17h38365c190be6e182E"(%"2.std::slice::Iter<u8>"* noalias nocapture sret dereferenceable(16) %1, %"2.std::slice::Iter<u8>"* noalias nocapture dereferenceable(16) %arg1)
call void @"_ZN89_$LT$std..iter..Zip$LT$A$C$$u20$B$GT$$u20$as$u20$std..iter..ZipImpl$LT$A$C$$u20$B$GT$$GT$3new17hb84306215d4572dcE"(%"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture sret dereferenceable(48) %0, %"2.std::slice::IterMut<u8>"* noalias nocapture dereferenceable(16) %arg, %"2.std::slice::Iter<u8>"* noalias nocapture dereferenceable(16) %1)
ret void
}
; Function Attrs: uwtable
define internal void @"_ZN89_$LT$std..iter..Zip$LT$A$C$$u20$B$GT$$u20$as$u20$std..iter..ZipImpl$LT$A$C$$u20$B$GT$$GT$3new17hb84306215d4572dcE"(%"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture sret dereferenceable(48), %"2.std::slice::IterMut<u8>"* noalias nocapture dereferenceable(16) %a, %"2.std::slice::Iter<u8>"* noalias nocapture dereferenceable(16) %b) unnamed_addr #0 {
entry-block:
%len = alloca i64
%1 = alloca i64
%2 = alloca i64
%3 = call i64 @_ZN4core4iter6traits17ExactSizeIterator3len17h7b28c727ce00c443E(%"2.std::slice::IterMut<u8>"* noalias readonly dereferenceable(16) %a)
store i64 %3, i64* %1
%4 = load i64, i64* %1
%5 = call i64 @_ZN4core4iter6traits17ExactSizeIterator3len17h989359d72205a3afE(%"2.std::slice::Iter<u8>"* noalias readonly dereferenceable(16) %b)
store i64 %5, i64* %2
%6 = load i64, i64* %2
%7 = call i64 @_ZN4core3cmp3min17hbf15c14fe8d39a28E(i64 %4, i64 %6)
store i64 %7, i64* %len
%8 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %0, i32 0, i32 0
%9 = bitcast %"2.std::slice::IterMut<u8>"* %a to i8*
%10 = bitcast %"2.std::slice::IterMut<u8>"* %8 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %9, i64 16, i32 8, i1 false)
%11 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %0, i32 0, i32 1
%12 = bitcast %"2.std::slice::Iter<u8>"* %b to i8*
%13 = bitcast %"2.std::slice::Iter<u8>"* %11 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %12, i64 16, i32 8, i1 false)
%14 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %0, i32 0, i32 2
store i64 0, i64* %14
%15 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %0, i32 0, i32 3
%16 = load i64, i64* %len
store i64 %16, i64* %15
ret void
}
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core3cmp3min17hbf15c14fe8d39a28E(i64, i64) unnamed_addr #2 {
entry-block:
%sret_slot = alloca i64
%v1 = alloca i64
%v2 = alloca i64
%2 = alloca i8
store i64 %0, i64* %v1
store i64 %1, i64* %v2
%3 = call zeroext i1 @"_ZN4core3cmp5impls51_$LT$impl$u20$cmp..PartialOrd$u20$for$u20$usize$GT$2le17h6bc89970b952951cE"(i64* noalias readonly dereferenceable(8) %v1, i64* noalias readonly dereferenceable(8) %v2)
%4 = zext i1 %3 to i8
store i8 %4, i8* %2
%5 = load i8, i8* %2, !range !1
%6 = trunc i8 %5 to i1
br i1 %6, label %then-block-177-, label %else-block
then-block-177-: ; preds = %entry-block
%7 = load i64, i64* %v1
store i64 %7, i64* %sret_slot
br label %join
else-block: ; preds = %entry-block
%8 = load i64, i64* %v2
store i64 %8, i64* %sret_slot
br label %join
join: ; preds = %else-block, %then-block-177-
%9 = load i64, i64* %sret_slot
ret i64 %9
}
; Function Attrs: inlinehint uwtable
define internal zeroext i1 @"_ZN4core3cmp5impls51_$LT$impl$u20$cmp..PartialOrd$u20$for$u20$usize$GT$2le17h6bc89970b952951cE"(i64* noalias readonly dereferenceable(8), i64* noalias readonly dereferenceable(8)) unnamed_addr #2 {
entry-block:
%self = alloca i64*
%other = alloca i64*
store i64* %0, i64** %self
store i64* %1, i64** %other
%2 = load i64*, i64** %self, !nonnull !0
%3 = load i64, i64* %2
%4 = load i64*, i64** %other, !nonnull !0
%5 = load i64, i64* %4
%6 = icmp ule i64 %3, %5
%7 = zext i1 %6 to i8
%8 = trunc i8 %7 to i1
ret i1 %8
}
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core4iter6traits17ExactSizeIterator3len17h7b28c727ce00c443E(%"2.std::slice::IterMut<u8>"* noalias readonly dereferenceable(16)) unnamed_addr #2 {
entry-block:
%self = alloca %"2.std::slice::IterMut<u8>"*
%1 = alloca { i64, %"2.std::option::Option<usize>" }
%lower = alloca i64
%upper = alloca %"2.std::option::Option<usize>"
%2 = alloca { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }
%3 = alloca %"2.std::option::Option<usize>"
%__llmatch = alloca %"2.std::option::Option<usize>"**
%left_val = alloca %"2.std::option::Option<usize>"*
%__llmatch1 = alloca %"2.std::option::Option<usize>"**
%right_val = alloca %"2.std::option::Option<usize>"*
%4 = alloca i8
%5 = alloca %"2.std::fmt::Arguments"
%6 = alloca { %str_slice*, i64 }
%7 = alloca [2 x %"2.std::fmt::ArgumentV1"]
%8 = alloca { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }
%__llmatch3 = alloca %"2.std::option::Option<usize>"***
%__arg0 = alloca %"2.std::option::Option<usize>"**
%__llmatch4 = alloca %"2.std::option::Option<usize>"***
%__arg1 = alloca %"2.std::option::Option<usize>"**
%__coerce_target = alloca { %"2.std::fmt::ArgumentV1"*, i64 }
store %"2.std::slice::IterMut<u8>"* %0, %"2.std::slice::IterMut<u8>"** %self
%9 = load %"2.std::slice::IterMut<u8>"*, %"2.std::slice::IterMut<u8>"** %self, !nonnull !0
call void @"_ZN82_$LT$std..slice..IterMut$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$std..iter..Iterator$GT$9size_hint17hce6ebb34366b1cd9E"({ i64, %"2.std::option::Option<usize>" }* noalias nocapture sret dereferenceable(24) %1, %"2.std::slice::IterMut<u8>"* noalias readonly dereferenceable(16) %9)
%10 = getelementptr inbounds { i64, %"2.std::option::Option<usize>" }, { i64, %"2.std::option::Option<usize>" }* %1, i32 0, i32 0
%11 = load i64, i64* %10
store i64 %11, i64* %lower
%12 = getelementptr inbounds { i64, %"2.std::option::Option<usize>" }, { i64, %"2.std::option::Option<usize>" }* %1, i32 0, i32 1
%13 = bitcast %"2.std::option::Option<usize>"* %12 to i8*
%14 = bitcast %"2.std::option::Option<usize>"* %upper to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %13, i64 16, i32 8, i1 false)
%15 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %2, i32 0, i32 0
store %"2.std::option::Option<usize>"* %upper, %"2.std::option::Option<usize>"** %15
%16 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %2, i32 0, i32 1
%17 = bitcast %"2.std::option::Option<usize>"* %3 to { i64, i64 }*
%18 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %17, i32 0, i32 1
%19 = load i64, i64* %lower
store i64 %19, i64* %18
%20 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %3, i32 0, i32 0
store i64 1, i64* %20
store %"2.std::option::Option<usize>"* %3, %"2.std::option::Option<usize>"** %16
%21 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %2, i32 0, i32 0
%22 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %2, i32 0, i32 1
store %"2.std::option::Option<usize>"** %22, %"2.std::option::Option<usize>"*** %__llmatch1
store %"2.std::option::Option<usize>"** %21, %"2.std::option::Option<usize>"*** %__llmatch
br label %case_body
case_body: ; preds = %entry-block
%23 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %__llmatch
%24 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %23, !nonnull !0
store %"2.std::option::Option<usize>"* %24, %"2.std::option::Option<usize>"** %left_val
%25 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %__llmatch1
%26 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %25, !nonnull !0
store %"2.std::option::Option<usize>"* %26, %"2.std::option::Option<usize>"** %right_val
%27 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %left_val, !nonnull !0
%28 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %right_val, !nonnull !0
%29 = call zeroext i1 @"_ZN68_$LT$std..option..Option$LT$T$GT$$u20$as$u20$std..cmp..PartialEq$GT$2eq17h10fb982382b547caE"(%"2.std::option::Option<usize>"* noalias readonly dereferenceable(16) %27, %"2.std::option::Option<usize>"* noalias readonly dereferenceable(16) %28)
%30 = zext i1 %29 to i8
store i8 %30, i8* %4
%31 = load i8, i8* %4, !range !1
%32 = trunc i8 %31 to i1
%33 = xor i1 %32, true
br i1 %33, label %then-block-242-, label %next-block
then-block-242-: ; preds = %case_body
%34 = bitcast { %str_slice*, i64 }* %6 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %34, i8* bitcast ({ %str_slice*, i64 }* @_ZN4core4iter6traits17ExactSizeIterator3len15__STATIC_FMTSTR17h92b05c668903f4b6E to i8*), i64 16, i32 8, i1 false)
%35 = getelementptr inbounds { %str_slice*, i64 }, { %str_slice*, i64 }* %6, i32 0, i32 0
%36 = load %str_slice*, %str_slice** %35
%37 = getelementptr inbounds { %str_slice*, i64 }, { %str_slice*, i64 }* %6, i32 0, i32 1
%38 = load i64, i64* %37
%39 = getelementptr inbounds { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }, { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }* %8, i32 0, i32 0
store %"2.std::option::Option<usize>"** %left_val, %"2.std::option::Option<usize>"*** %39
%40 = getelementptr inbounds { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }, { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }* %8, i32 0, i32 1
store %"2.std::option::Option<usize>"** %right_val, %"2.std::option::Option<usize>"*** %40
%41 = getelementptr inbounds { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }, { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }* %8, i32 0, i32 0
%42 = getelementptr inbounds { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }, { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }* %8, i32 0, i32 1
store %"2.std::option::Option<usize>"*** %42, %"2.std::option::Option<usize>"**** %__llmatch4
store %"2.std::option::Option<usize>"*** %41, %"2.std::option::Option<usize>"**** %__llmatch3
br label %case_body2
case_body2: ; preds = %then-block-242-
%43 = load %"2.std::option::Option<usize>"***, %"2.std::option::Option<usize>"**** %__llmatch3
%44 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %43, !nonnull !0
store %"2.std::option::Option<usize>"** %44, %"2.std::option::Option<usize>"*** %__arg0
%45 = load %"2.std::option::Option<usize>"***, %"2.std::option::Option<usize>"**** %__llmatch4
%46 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %45, !nonnull !0
store %"2.std::option::Option<usize>"** %46, %"2.std::option::Option<usize>"*** %__arg1
%47 = getelementptr inbounds [2 x %"2.std::fmt::ArgumentV1"], [2 x %"2.std::fmt::ArgumentV1"]* %7, i32 0, i32 0
%48 = getelementptr inbounds %"2.std::fmt::ArgumentV1", %"2.std::fmt::ArgumentV1"* %47, i32 0
%49 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %__arg0, !nonnull !0
call void @_ZN4core3fmt10ArgumentV13new17habfe3dae14a29324E(%"2.std::fmt::ArgumentV1"* noalias nocapture sret dereferenceable(16) %48, %"2.std::option::Option<usize>"** noalias readonly dereferenceable(8) %49, i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)* @"_ZN52_$LT$$RF$$u27$a$u20$T$u20$as$u20$std..fmt..Debug$GT$3fmt17he738c792455edf0eE")
%50 = getelementptr inbounds %"2.std::fmt::ArgumentV1", %"2.std::fmt::ArgumentV1"* %47, i32 1
%51 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %__arg1, !nonnull !0
call void @_ZN4core3fmt10ArgumentV13new17habfe3dae14a29324E(%"2.std::fmt::ArgumentV1"* noalias nocapture sret dereferenceable(16) %50, %"2.std::option::Option<usize>"** noalias readonly dereferenceable(8) %51, i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)* @"_ZN52_$LT$$RF$$u27$a$u20$T$u20$as$u20$std..fmt..Debug$GT$3fmt17he738c792455edf0eE")
br label %join
join: ; preds = %case_body2
%52 = bitcast [2 x %"2.std::fmt::ArgumentV1"]* %7 to %"2.std::fmt::ArgumentV1"*
%53 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %__coerce_target, i32 0, i32 0
store %"2.std::fmt::ArgumentV1"* %52, %"2.std::fmt::ArgumentV1"** %53
%54 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %__coerce_target, i32 0, i32 1
store i64 2, i64* %54
%55 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %__coerce_target, i32 0, i32 0
%56 = load %"2.std::fmt::ArgumentV1"*, %"2.std::fmt::ArgumentV1"** %55
%57 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %__coerce_target, i32 0, i32 1
%58 = load i64, i64* %57
call void @_ZN4core3fmt9Arguments6new_v117h00bc5e947a058f1aE(%"2.std::fmt::Arguments"* noalias nocapture sret dereferenceable(48) %5, %str_slice* noalias nonnull readonly %36, i64 %38, %"2.std::fmt::ArgumentV1"* noalias nonnull readonly %56, i64 %58)
call void @_ZN4core9panicking9panic_fmt17h5f695b461e45588fE(%"2.std::fmt::Arguments"* noalias nocapture dereferenceable(48) %5, { %str_slice, i32 }* noalias readonly dereferenceable(24) @_ZN4core4iter6traits17ExactSizeIterator3len10_FILE_LINE17h66b4a01274af7b41E)
unreachable
next-block: ; preds = %case_body
br label %join5
join5: ; preds = %next-block
%59 = load i64, i64* %lower
ret i64 %59
}
; Function Attrs: inlinehint uwtable
define internal void @"_ZN82_$LT$std..slice..IterMut$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$std..iter..Iterator$GT$9size_hint17hce6ebb34366b1cd9E"({ i64, %"2.std::option::Option<usize>" }* noalias nocapture sret dereferenceable(24), %"2.std::slice::IterMut<u8>"* noalias readonly dereferenceable(16)) unnamed_addr #2 {
entry-block:
%self = alloca %"2.std::slice::IterMut<u8>"*
%diff = alloca i64
%size = alloca i64
%exact = alloca i64
%2 = alloca i64
store %"2.std::slice::IterMut<u8>"* %1, %"2.std::slice::IterMut<u8>"** %self
%3 = load %"2.std::slice::IterMut<u8>"*, %"2.std::slice::IterMut<u8>"** %self, !nonnull !0
%4 = getelementptr inbounds %"2.std::slice::IterMut<u8>", %"2.std::slice::IterMut<u8>"* %3, i32 0, i32 1
%5 = load i8*, i8** %4
%6 = ptrtoint i8* %5 to i64
%7 = load %"2.std::slice::IterMut<u8>"*, %"2.std::slice::IterMut<u8>"** %self, !nonnull !0
%8 = getelementptr inbounds %"2.std::slice::IterMut<u8>", %"2.std::slice::IterMut<u8>"* %7, i32 0, i32 0
%9 = load i8*, i8** %8
%10 = ptrtoint i8* %9 to i64
%11 = call i64 @"_ZN4core3num23_$LT$impl$u20$usize$GT$12wrapping_sub17h1aeb0291ec00c74aE"(i64 %6, i64 %10)
store i64 %11, i64* %diff
%12 = call i64 @_ZN4core3mem7size_of17h98f1b4d42f5d5e99E()
store i64 %12, i64* %size
%13 = load i64, i64* %diff
%14 = load i64, i64* %size
%15 = icmp eq i64 %14, 0
br i1 %15, label %then-block-337-, label %else-block
then-block-337-: ; preds = %entry-block
store i64 1, i64* %2
br label %join
else-block: ; preds = %entry-block
%16 = load i64, i64* %size
store i64 %16, i64* %2
br label %join
join: ; preds = %else-block, %then-block-337-
%17 = load i64, i64* %2
%18 = icmp eq i64 %17, 0
br i1 %18, label %cond, label %next
next: ; preds = %join
%19 = udiv i64 %13, %17
store i64 %19, i64* %exact
%20 = getelementptr inbounds { i64, %"2.std::option::Option<usize>" }, { i64, %"2.std::option::Option<usize>" }* %0, i32 0, i32 0
%21 = load i64, i64* %exact
store i64 %21, i64* %20
%22 = getelementptr inbounds { i64, %"2.std::option::Option<usize>" }, { i64, %"2.std::option::Option<usize>" }* %0, i32 0, i32 1
%23 = bitcast %"2.std::option::Option<usize>"* %22 to { i64, i64 }*
%24 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %23, i32 0, i32 1
%25 = load i64, i64* %exact
store i64 %25, i64* %24
%26 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %22, i32 0, i32 0
store i64 1, i64* %26
ret void
cond: ; preds = %join
call void @_ZN4core9panicking5panic17h56bef5a458dfccc8E({ %str_slice, %str_slice, i32 }* noalias readonly dereferenceable(40) @panic_loc4857)
unreachable
}
; Function Attrs: inlinehint uwtable
define internal i64 @"_ZN4core3num23_$LT$impl$u20$usize$GT$12wrapping_sub17h1aeb0291ec00c74aE"(i64, i64) unnamed_addr #2 {
entry-block:
%self = alloca i64
%rhs = alloca i64
store i64 %0, i64* %self
store i64 %1, i64* %rhs
%2 = load i64, i64* %self
%3 = load i64, i64* %rhs
%4 = sub i64 %2, %3
ret i64 %4
}
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core3mem7size_of17h98f1b4d42f5d5e99E() unnamed_addr #2 {
entry-block:
ret i64 1
}
; Function Attrs: cold noinline noreturn
declare void @_ZN4core9panicking5panic17h56bef5a458dfccc8E({ %str_slice, %str_slice, i32 }* noalias readonly dereferenceable(40)) unnamed_addr #3
; Function Attrs: inlinehint uwtable
define internal zeroext i1 @"_ZN68_$LT$std..option..Option$LT$T$GT$$u20$as$u20$std..cmp..PartialEq$GT$2eq17h10fb982382b547caE"(%"2.std::option::Option<usize>"* noalias readonly dereferenceable(16), %"2.std::option::Option<usize>"* noalias readonly dereferenceable(16)) unnamed_addr #2 {
entry-block:
%sret_slot = alloca i8
%self = alloca %"2.std::option::Option<usize>"*
%__arg_0 = alloca %"2.std::option::Option<usize>"*
%__self_vi = alloca i64
%2 = alloca i64
%__arg_1_vi = alloca i64
%3 = alloca i64
%4 = alloca { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }
%__self_0 = alloca i64*
%__arg_1_0 = alloca i64*
%5 = alloca i8
store %"2.std::option::Option<usize>"* %0, %"2.std::option::Option<usize>"** %self
store %"2.std::option::Option<usize>"* %1, %"2.std::option::Option<usize>"** %__arg_0
%6 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %self, !nonnull !0
%7 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %6, i32 0, i32 0
%8 = load i64, i64* %7, !range !2
store i64 %8, i64* %2
%9 = load i64, i64* %2
store i64 %9, i64* %__self_vi
%10 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %__arg_0, !nonnull !0
%11 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %10, i32 0, i32 0
%12 = load i64, i64* %11, !range !2
store i64 %12, i64* %3
%13 = load i64, i64* %3
store i64 %13, i64* %__arg_1_vi
br i1 true, label %before_rhs, label %join
join: ; preds = %before_rhs, %entry-block
%14 = phi i1 [ true, %entry-block ], [ %17, %before_rhs ]
br i1 %14, label %then-block-441-, label %else-block
before_rhs: ; preds = %entry-block
%15 = load i64, i64* %__self_vi
%16 = load i64, i64* %__arg_1_vi
%17 = icmp eq i64 %15, %16
br label %join
then-block-441-: ; preds = %join
%18 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %4, i32 0, i32 0
%19 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %self, !nonnull !0
store %"2.std::option::Option<usize>"* %19, %"2.std::option::Option<usize>"** %18
%20 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %4, i32 0, i32 1
%21 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %__arg_0, !nonnull !0
store %"2.std::option::Option<usize>"* %21, %"2.std::option::Option<usize>"** %20
%22 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %4, i32 0, i32 0
%23 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %4, i32 0, i32 1
%24 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %23
%25 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %22
%26 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %24, i32 0, i32 0
%27 = load i64, i64* %26, !range !2
switch i64 %27, label %match_else [
i64 0, label %match_case
i64 1, label %match_case5
]
case_body: ; preds = %match_case4
store i8 1, i8* %sret_slot
br label %join10
case_body1: ; preds = %match_case7
br i1 true, label %before_rhs9, label %join8
case_body2: ; preds = %match_else, %match_else6, %match_else3
unreachable
match_else: ; preds = %then-block-441-
br label %case_body2
match_case: ; preds = %then-block-441-
%28 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %25, i32 0, i32 0
%29 = load i64, i64* %28, !range !2
switch i64 %29, label %match_else3 [
i64 0, label %match_case4
]
match_else3: ; preds = %match_case
br label %case_body2
match_case4: ; preds = %match_case
br label %case_body
match_case5: ; preds = %then-block-441-
%30 = bitcast %"2.std::option::Option<usize>"* %24 to { i64, i64 }*
%31 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %30, i32 0, i32 1
%32 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %25, i32 0, i32 0
%33 = load i64, i64* %32, !range !2
switch i64 %33, label %match_else6 [
i64 1, label %match_case7
]
match_else6: ; preds = %match_case5
br label %case_body2
match_case7: ; preds = %match_case5
%34 = bitcast %"2.std::option::Option<usize>"* %25 to { i64, i64 }*
%35 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %34, i32 0, i32 1
store i64* %31, i64** %__arg_1_0
store i64* %35, i64** %__self_0
br label %case_body1
join8: ; preds = %before_rhs9, %case_body1
%36 = phi i1 [ true, %case_body1 ], [ %43, %before_rhs9 ]
%37 = zext i1 %36 to i8
store i8 %37, i8* %sret_slot
br label %join10
before_rhs9: ; preds = %case_body1
%38 = load i64*, i64** %__self_0, !nonnull !0
%39 = load i64*, i64** %__arg_1_0, !nonnull !0
%40 = call zeroext i1 @"_ZN4core3cmp5impls50_$LT$impl$u20$cmp..PartialEq$u20$for$u20$usize$GT$2eq17h44633dc9560f9711E"(i64* noalias readonly dereferenceable(8) %38, i64* noalias readonly dereferenceable(8) %39)
%41 = zext i1 %40 to i8
store i8 %41, i8* %5
%42 = load i8, i8* %5, !range !1
%43 = trunc i8 %42 to i1
br label %join8
join10: ; preds = %join8, %case_body
br label %join11
else-block: ; preds = %join
store i8 0, i8* %sret_slot
br label %join11
join11: ; preds = %else-block, %join10
%44 = load i8, i8* %sret_slot, !range !1
%45 = trunc i8 %44 to i1
ret i1 %45
}
; Function Attrs: inlinehint uwtable
define internal zeroext i1 @"_ZN4core3cmp5impls50_$LT$impl$u20$cmp..PartialEq$u20$for$u20$usize$GT$2eq17h44633dc9560f9711E"(i64* noalias readonly dereferenceable(8), i64* noalias readonly dereferenceable(8)) unnamed_addr #2 {
entry-block:
%self = alloca i64*
%other = alloca i64*
store i64* %0, i64** %self
store i64* %1, i64** %other
%2 = load i64*, i64** %self, !nonnull !0
%3 = load i64, i64* %2
%4 = load i64*, i64** %other, !nonnull !0
%5 = load i64, i64* %4
%6 = icmp eq i64 %3, %5
%7 = zext i1 %6 to i8
%8 = trunc i8 %7 to i1
ret i1 %8
}
; Function Attrs: cold noinline noreturn
declare void @_ZN4core9panicking9panic_fmt17h5f695b461e45588fE(%"2.std::fmt::Arguments"* noalias nocapture dereferenceable(48), { %str_slice, i32 }* noalias readonly dereferenceable(24)) unnamed_addr #3
; Function Attrs: inlinehint uwtable
define internal void @_ZN4core3fmt9Arguments6new_v117h00bc5e947a058f1aE(%"2.std::fmt::Arguments"* noalias nocapture sret dereferenceable(48), %str_slice* noalias nonnull readonly, i64, %"2.std::fmt::ArgumentV1"* noalias nonnull readonly, i64) unnamed_addr #2 {
entry-block:
%pieces = alloca { %str_slice*, i64 }
%args = alloca { %"2.std::fmt::ArgumentV1"*, i64 }
%5 = getelementptr inbounds { %str_slice*, i64 }, { %str_slice*, i64 }* %pieces, i32 0, i32 0
store %str_slice* %1, %str_slice** %5
%6 = getelementptr inbounds { %str_slice*, i64 }, { %str_slice*, i64 }* %pieces, i32 0, i32 1
store i64 %2, i64* %6
%7 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %args, i32 0, i32 0
store %"2.std::fmt::ArgumentV1"* %3, %"2.std::fmt::ArgumentV1"** %7
%8 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %args, i32 0, i32 1
store i64 %4, i64* %8
%9 = getelementptr inbounds %"2.std::fmt::Arguments", %"2.std::fmt::Arguments"* %0, i32 0, i32 0
%10 = bitcast { %str_slice*, i64 }* %pieces to i8*
%11 = bitcast { %str_slice*, i64 }* %9 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %10, i64 16, i32 8, i1 false)
%12 = getelementptr inbounds %"2.std::fmt::Arguments", %"2.std::fmt::Arguments"* %0, i32 0, i32 1
%13 = bitcast %"2.std::option::Option<&'static [std::fmt::rt::v1::Argument]>"* %12 to { { i8*, i64 } }*
%14 = bitcast { { i8*, i64 } }* %13 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* bitcast ({ { i8*, i64 } }* @const4874 to i8*), i64 16, i32 8, i1 false)
%15 = getelementptr inbounds %"2.std::fmt::Arguments", %"2.std::fmt::Arguments"* %0, i32 0, i32 2
%16 = bitcast { %"2.std::fmt::ArgumentV1"*, i64 }* %args to i8*
%17 = bitcast { %"2.std::fmt::ArgumentV1"*, i64 }* %15 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %17, i8* %16, i64 16, i32 8, i1 false)
ret void
}
; Function Attrs: uwtable
define internal void @_ZN4core3fmt10ArgumentV13new17habfe3dae14a29324E(%"2.std::fmt::ArgumentV1"* noalias nocapture sret dereferenceable(16), %"2.std::option::Option<usize>"** noalias readonly dereferenceable(8), i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)*) unnamed_addr #0 {
entry-block:
%x = alloca %"2.std::option::Option<usize>"**
%f = alloca i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)*
store %"2.std::option::Option<usize>"** %1, %"2.std::option::Option<usize>"*** %x
store i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)* %2, i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)** %f
%3 = getelementptr inbounds %"2.std::fmt::ArgumentV1", %"2.std::fmt::ArgumentV1"* %0, i32 0, i32 1
%4 = load i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)*, i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)** %f
%5 = bitcast i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)* %4 to i8 (%"2.core::fmt::Void"*, %"2.std::fmt::Formatter"*)*
store i8 (%"2.core::fmt::Void"*, %"2.std::fmt::Formatter"*)* %5, i8 (%"2.core::fmt::Void"*, %"2.std::fmt::Formatter"*)** %3
%6 = getelementptr inbounds %"2.std::fmt::ArgumentV1", %"2.std::fmt::ArgumentV1"* %0, i32 0, i32 0
%7 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %x, !nonnull !0
%8 = bitcast %"2.std::option::Option<usize>"** %7 to %"2.core::fmt::Void"*
store %"2.core::fmt::Void"* %8, %"2.core::fmt::Void"** %6
ret void
}
; Function Attrs: uwtable
define internal i8 @"_ZN52_$LT$$RF$$u27$a$u20$T$u20$as$u20$std..fmt..Debug$GT$3fmt17he738c792455edf0eE"(%"2.std::option::Option<usize>"** noalias readonly dereferenceable(8), %"2.std::fmt::Formatter"* dereferenceable(96)) unnamed_addr #0 {
entry-block:
%sret_slot = alloca %"2.std::result::Result<(), std::fmt::Error>"
%self = alloca %"2.std::option::Option<usize>"**
%f = alloca %"2.std::fmt::Formatter"*
%__cast = alloca i8
store %"2.std::option::Option<usize>"** %0, %"2.std::option::Option<usize>"*** %self
store %"2.std::fmt::Formatter"* %1, %"2.std::fmt::Formatter"** %f
%2 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %self, !nonnull !0
%3 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %2, !nonnull !0
%4 = load %"2.std::fmt::Formatter"*, %"2.std::fmt::Formatter"** %f, !nonnull !0
%5 = call i8 @"_ZN64_$LT$std..option..Option$LT$T$GT$$u20$as$u20$std..fmt..Debug$GT$3fmt17ha9544945d0648024E"(%"2.std::option::Option<usize>"* noalias readonly dereferenceable(16) %3, %"2.std::fmt::Formatter"* dereferenceable(96) %4)
store i8 %5, i8* %__cast
%6 = bitcast %"2.std::result::Result<(), std::fmt::Error>"* %sret_slot to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %__cast, i64 1, i32 1, i1 false)
%7 = bitcast %"2.std::result::Result<(), std::fmt::Error>"* %sret_slot to i8*
%8 = load i8, i8* %7, align 1
ret i8 %8
}
; Function Attrs: uwtable
define internal i8 @"_ZN64_$LT$std..option..Option$LT$T$GT$$u20$as$u20$std..fmt..Debug$GT$3fmt17ha9544945d0648024E"(%"2.std::option::Option<usize>"* noalias readonly dereferenceable(16), %"2.std::fmt::Formatter"* dereferenceable(96)) unnamed_addr #0 {
entry-block:
%sret_slot = alloca %"2.std::result::Result<(), std::fmt::Error>"
%self = alloca %"2.std::option::Option<usize>"*
%__arg_0 = alloca %"2.std::fmt::Formatter"*
%2 = alloca { %"2.std::option::Option<usize>"* }
%match = alloca { %"2.std::option::Option<usize>"* }
%3 = bitcast { %"2.std::option::Option<usize>"* }* %match to i8*
call void @llvm.memset.p0i8.i64(i8* %3, i8 29, i64 8, i32 8, i1 false)
%__self_0 = alloca i64*
%builder = alloca %"2.std::fmt::DebugTuple"
%__cast = alloca i8
%builder3 = alloca %"2.std::fmt::DebugTuple"
%4 = alloca %"2.std::fmt::DebugTuple"*
%addr_of = alloca i64*
%5 = bitcast i64** %addr_of to i8*
call void @llvm.memset.p0i8.i64(i8* %5, i8 29, i64 8, i32 8, i1 false)
%__coerce_target = alloca { i8*, void (i8*)** }
%let = alloca %"2.std::fmt::DebugTuple"*
%6 = bitcast %"2.std::fmt::DebugTuple"** %let to i8*
call void @llvm.memset.p0i8.i64(i8* %6, i8 29, i64 8, i32 8, i1 false)
%__cast4 = alloca i8
store %"2.std::option::Option<usize>"* %0, %"2.std::option::Option<usize>"** %self
store %"2.std::fmt::Formatter"* %1, %"2.std::fmt::Formatter"** %__arg_0
%7 = getelementptr inbounds { %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"* }* %2, i32 0, i32 0
%8 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %self, !nonnull !0
store %"2.std::option::Option<usize>"* %8, %"2.std::option::Option<usize>"** %7
%9 = load { %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"* }* %2
store { %"2.std::option::Option<usize>"* } %9, { %"2.std::option::Option<usize>"* }* %match
%10 = getelementptr inbounds { %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"* }* %match, i32 0, i32 0
%11 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %10
%12 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %11, i32 0, i32 0
%13 = load i64, i64* %12, !range !2
switch i64 %13, label %match_else [
i64 0, label %match_case
i64 1, label %match_case2
]
case_body: ; preds = %match_case
%14 = load %"2.std::fmt::Formatter"*, %"2.std::fmt::Formatter"** %__arg_0, !nonnull !0
%15 = load i8*, i8** getelementptr inbounds (%str_slice, %str_slice* @const4898, i32 0, i32 0)
%16 = load i64, i64* getelementptr inbounds (%str_slice, %str_slice* @const4898, i32 0, i32 1)
call void @_ZN4core3fmt9Formatter11debug_tuple17hb62eed453151e0c8E(%"2.std::fmt::DebugTuple"* noalias nocapture sret dereferenceable(32) %builder, %"2.std::fmt::Formatter"* dereferenceable(96) %14, i8* noalias nonnull readonly %15, i64 %16)
%17 = call i8 @_ZN4core3fmt8builders10DebugTuple6finish17hd4922b5aabc81bc4E(%"2.std::fmt::DebugTuple"* dereferenceable(32) %builder)
store i8 %17, i8* %__cast
%18 = bitcast %"2.std::result::Result<(), std::fmt::Error>"* %sret_slot to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %18, i8* %__cast, i64 1, i32 1, i1 false)
br label %join
case_body1: ; preds = %match_case2
%19 = load %"2.std::fmt::Formatter"*, %"2.std::fmt::Formatter"** %__arg_0, !nonnull !0
%20 = load i8*, i8** getelementptr inbounds (%str_slice, %str_slice* @const4901, i32 0, i32 0)
%21 = load i64, i64* getelementptr inbounds (%str_slice, %str_slice* @const4901, i32 0, i32 1)
call void @_ZN4core3fmt9Formatter11debug_tuple17hb62eed453151e0c8E(%"2.std::fmt::DebugTuple"* noalias nocapture sret dereferenceable(32) %builder3, %"2.std::fmt::Formatter"* dereferenceable(96) %19, i8* noalias nonnull readonly %20, i64 %21)
%22 = load i64*, i64** %__self_0, !nonnull !0
store i64* %22, i64** %addr_of
%23 = bitcast i64** %addr_of to i8*
%24 = getelementptr inbounds { i8*, void (i8*)** }, { i8*, void (i8*)** }* %__coerce_target, i32 0, i32 0
store i8* %23, i8** %24
%25 = getelementptr inbounds { i8*, void (i8*)** }, { i8*, void (i8*)** }* %__coerce_target, i32 0, i32 1
store void (i8*)** getelementptr inbounds ({ void (i8*)*, i64, i64, i8 (i64**, %"2.std::fmt::Formatter"*)* }, { void (i8*)*, i64, i64, i8 (i64**, %"2.std::fmt::Formatter"*)* }* @vtable4905, i32 0, i32 0), void (i8*)*** %25
%26 = getelementptr inbounds { i8*, void (i8*)** }, { i8*, void (i8*)** }* %__coerce_target, i32 0, i32 0
%27 = load i8*, i8** %26
%28 = getelementptr inbounds { i8*, void (i8*)** }, { i8*, void (i8*)** }* %__coerce_target, i32 0, i32 1
%29 = load void (i8*)**, void (i8*)*** %28
%30 = call dereferenceable(32) %"2.std::fmt::DebugTuple"* @_ZN4core3fmt8builders10DebugTuple5field17hb6866f40ec84b4f0E(%"2.std::fmt::DebugTuple"* dereferenceable(32) %builder3, i8* nonnull %27, void (i8*)** nonnull %29)
store %"2.std::fmt::DebugTuple"* %30, %"2.std::fmt::DebugTuple"** %4
%31 = load %"2.std::fmt::DebugTuple"*, %"2.std::fmt::DebugTuple"** %4, !nonnull !0
store %"2.std::fmt::DebugTuple"* %31, %"2.std::fmt::DebugTuple"** %let
%32 = call i8 @_ZN4core3fmt8builders10DebugTuple6finish17hd4922b5aabc81bc4E(%"2.std::fmt::DebugTuple"* dereferenceable(32) %builder3)
store i8 %32, i8* %__cast4
%33 = bitcast %"2.std::result::Result<(), std::fmt::Error>"* %sret_slot to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %__cast4, i64 1, i32 1, i1 false)
br label %join
match_else: ; preds = %entry-block
unreachable
match_case: ; preds = %entry-block
br label %case_body
match_case2: ; preds = %entry-block
%34 = bitcast %"2.std::option::Option<usize>"* %11 to { i64, i64 }*
%35 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %34, i32 0, i32 1
store i64* %35, i64** %__self_0
br label %case_body1
join: ; preds = %case_body1, %case_body
%36 = bitcast %"2.std::result::Result<(), std::fmt::Error>"* %sret_slot to i8*
%37 = load i8, i8* %36, align 1
ret i8 %37
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #1
; Function Attrs: inlinehint uwtable
define internal void @_ZN4core3fmt9Formatter11debug_tuple17hb62eed453151e0c8E(%"2.std::fmt::DebugTuple"* noalias nocapture sret dereferenceable(32), %"2.std::fmt::Formatter"* dereferenceable(96), i8* noalias nonnull readonly, i64) unnamed_addr #2 {
entry-block:
%self = alloca %"2.std::fmt::Formatter"*
%name = alloca %str_slice
store %"2.std::fmt::Formatter"* %1, %"2.std::fmt::Formatter"** %self
%4 = getelementptr inbounds %str_slice, %str_slice* %name, i32 0, i32 0
store i8* %2, i8** %4
%5 = getelementptr inbounds %str_slice, %str_slice* %name, i32 0, i32 1
store i64 %3, i64* %5
%6 = load %"2.std::fmt::Formatter"*, %"2.std::fmt::Formatter"** %self, !nonnull !0
%7 = getelementptr inbounds %str_slice, %str_slice* %name, i32 0, i32 0
%8 = load i8*, i8** %7
%9 = getelementptr inbounds %str_slice, %str_slice* %name, i32 0, i32 1
%10 = load i64, i64* %9
call void @_ZN4core3fmt8builders15debug_tuple_new17ha8cdf8b361a258baE(%"2.std::fmt::DebugTuple"* noalias nocapture sret dereferenceable(32) %0, %"2.std::fmt::Formatter"* dereferenceable(96) %6, i8* noalias nonnull readonly %8, i64 %10)
ret void
}
declare void @_ZN4core3fmt8builders15debug_tuple_new17ha8cdf8b361a258baE(%"2.std::fmt::DebugTuple"* noalias nocapture sret dereferenceable(32), %"2.std::fmt::Formatter"* dereferenceable(96), i8* noalias nonnull readonly, i64) unnamed_addr
declare i8 @_ZN4core3fmt8builders10DebugTuple6finish17hd4922b5aabc81bc4E(%"2.std::fmt::DebugTuple"* dereferenceable(32)) unnamed_addr
declare dereferenceable(32) %"2.std::fmt::DebugTuple"* @_ZN4core3fmt8builders10DebugTuple5field17hb6866f40ec84b4f0E(%"2.std::fmt::DebugTuple"* dereferenceable(32), i8* nonnull, void (i8*)** nonnull) unnamed_addr
define internal void @_ZN2i89drop.490317h1bd6851fa727600fE(i8*) unnamed_addr {
entry-block:
ret void
}
; Function Attrs: uwtable
define internal i8 @"_ZN52_$LT$$RF$$u27$a$u20$T$u20$as$u20$std..fmt..Debug$GT$3fmt17hcfa0e851a80be0d7E"(i64** noalias readonly dereferenceable(8), %"2.std::fmt::Formatter"* dereferenceable(96)) unnamed_addr #0 {
entry-block:
%sret_slot = alloca %"2.std::result::Result<(), std::fmt::Error>"
%self = alloca i64**
%f = alloca %"2.std::fmt::Formatter"*
%__cast = alloca i8
store i64** %0, i64*** %self
store %"2.std::fmt::Formatter"* %1, %"2.std::fmt::Formatter"** %f
%2 = load i64**, i64*** %self, !nonnull !0
%3 = load i64*, i64** %2, !nonnull !0
%4 = load %"2.std::fmt::Formatter"*, %"2.std::fmt::Formatter"** %f, !nonnull !0
%5 = call i8 @"_ZN4core3fmt3num46_$LT$impl$u20$fmt..Debug$u20$for$u20$usize$GT$3fmt17h4d9e138d77bab9c1E"(i64* noalias readonly dereferenceable(8) %3, %"2.std::fmt::Formatter"* dereferenceable(96) %4)
store i8 %5, i8* %__cast
%6 = bitcast %"2.std::result::Result<(), std::fmt::Error>"* %sret_slot to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %__cast, i64 1, i32 1, i1 false)
%7 = bitcast %"2.std::result::Result<(), std::fmt::Error>"* %sret_slot to i8*
%8 = load i8, i8* %7, align 1
ret i8 %8
}
declare i8 @"_ZN4core3fmt3num46_$LT$impl$u20$fmt..Debug$u20$for$u20$usize$GT$3fmt17h4d9e138d77bab9c1E"(i64* noalias readonly dereferenceable(8), %"2.std::fmt::Formatter"* dereferenceable(96)) unnamed_addr
; Function Attrs: inlinehint uwtable
define internal i64 @_ZN4core4iter6traits17ExactSizeIterator3len17h989359d72205a3afE(%"2.std::slice::Iter<u8>"* noalias readonly dereferenceable(16)) unnamed_addr #2 {
entry-block:
%self = alloca %"2.std::slice::Iter<u8>"*
%1 = alloca { i64, %"2.std::option::Option<usize>" }
%lower = alloca i64
%upper = alloca %"2.std::option::Option<usize>"
%2 = alloca { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }
%3 = alloca %"2.std::option::Option<usize>"
%__llmatch = alloca %"2.std::option::Option<usize>"**
%left_val = alloca %"2.std::option::Option<usize>"*
%__llmatch1 = alloca %"2.std::option::Option<usize>"**
%right_val = alloca %"2.std::option::Option<usize>"*
%4 = alloca i8
%5 = alloca %"2.std::fmt::Arguments"
%6 = alloca { %str_slice*, i64 }
%7 = alloca [2 x %"2.std::fmt::ArgumentV1"]
%8 = alloca { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }
%__llmatch3 = alloca %"2.std::option::Option<usize>"***
%__arg0 = alloca %"2.std::option::Option<usize>"**
%__llmatch4 = alloca %"2.std::option::Option<usize>"***
%__arg1 = alloca %"2.std::option::Option<usize>"**
%__coerce_target = alloca { %"2.std::fmt::ArgumentV1"*, i64 }
store %"2.std::slice::Iter<u8>"* %0, %"2.std::slice::Iter<u8>"** %self
%9 = load %"2.std::slice::Iter<u8>"*, %"2.std::slice::Iter<u8>"** %self, !nonnull !0
call void @"_ZN79_$LT$std..slice..Iter$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$std..iter..Iterator$GT$9size_hint17h3bff44f205ea1643E"({ i64, %"2.std::option::Option<usize>" }* noalias nocapture sret dereferenceable(24) %1, %"2.std::slice::Iter<u8>"* noalias readonly dereferenceable(16) %9)
%10 = getelementptr inbounds { i64, %"2.std::option::Option<usize>" }, { i64, %"2.std::option::Option<usize>" }* %1, i32 0, i32 0
%11 = load i64, i64* %10
store i64 %11, i64* %lower
%12 = getelementptr inbounds { i64, %"2.std::option::Option<usize>" }, { i64, %"2.std::option::Option<usize>" }* %1, i32 0, i32 1
%13 = bitcast %"2.std::option::Option<usize>"* %12 to i8*
%14 = bitcast %"2.std::option::Option<usize>"* %upper to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %13, i64 16, i32 8, i1 false)
%15 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %2, i32 0, i32 0
store %"2.std::option::Option<usize>"* %upper, %"2.std::option::Option<usize>"** %15
%16 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %2, i32 0, i32 1
%17 = bitcast %"2.std::option::Option<usize>"* %3 to { i64, i64 }*
%18 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %17, i32 0, i32 1
%19 = load i64, i64* %lower
store i64 %19, i64* %18
%20 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %3, i32 0, i32 0
store i64 1, i64* %20
store %"2.std::option::Option<usize>"* %3, %"2.std::option::Option<usize>"** %16
%21 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %2, i32 0, i32 0
%22 = getelementptr inbounds { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }, { %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"* }* %2, i32 0, i32 1
store %"2.std::option::Option<usize>"** %22, %"2.std::option::Option<usize>"*** %__llmatch1
store %"2.std::option::Option<usize>"** %21, %"2.std::option::Option<usize>"*** %__llmatch
br label %case_body
case_body: ; preds = %entry-block
%23 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %__llmatch
%24 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %23, !nonnull !0
store %"2.std::option::Option<usize>"* %24, %"2.std::option::Option<usize>"** %left_val
%25 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %__llmatch1
%26 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %25, !nonnull !0
store %"2.std::option::Option<usize>"* %26, %"2.std::option::Option<usize>"** %right_val
%27 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %left_val, !nonnull !0
%28 = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %right_val, !nonnull !0
%29 = call zeroext i1 @"_ZN68_$LT$std..option..Option$LT$T$GT$$u20$as$u20$std..cmp..PartialEq$GT$2eq17h10fb982382b547caE"(%"2.std::option::Option<usize>"* noalias readonly dereferenceable(16) %27, %"2.std::option::Option<usize>"* noalias readonly dereferenceable(16) %28)
%30 = zext i1 %29 to i8
store i8 %30, i8* %4
%31 = load i8, i8* %4, !range !1
%32 = trunc i8 %31 to i1
%33 = xor i1 %32, true
br i1 %33, label %then-block-242-, label %next-block
then-block-242-: ; preds = %case_body
%34 = bitcast { %str_slice*, i64 }* %6 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %34, i8* bitcast ({ %str_slice*, i64 }* @_ZN4core4iter6traits17ExactSizeIterator3len15__STATIC_FMTSTR17h92b05c668903f4b6E to i8*), i64 16, i32 8, i1 false)
%35 = getelementptr inbounds { %str_slice*, i64 }, { %str_slice*, i64 }* %6, i32 0, i32 0
%36 = load %str_slice*, %str_slice** %35
%37 = getelementptr inbounds { %str_slice*, i64 }, { %str_slice*, i64 }* %6, i32 0, i32 1
%38 = load i64, i64* %37
%39 = getelementptr inbounds { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }, { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }* %8, i32 0, i32 0
store %"2.std::option::Option<usize>"** %left_val, %"2.std::option::Option<usize>"*** %39
%40 = getelementptr inbounds { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }, { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }* %8, i32 0, i32 1
store %"2.std::option::Option<usize>"** %right_val, %"2.std::option::Option<usize>"*** %40
%41 = getelementptr inbounds { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }, { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }* %8, i32 0, i32 0
%42 = getelementptr inbounds { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }, { %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"** }* %8, i32 0, i32 1
store %"2.std::option::Option<usize>"*** %42, %"2.std::option::Option<usize>"**** %__llmatch4
store %"2.std::option::Option<usize>"*** %41, %"2.std::option::Option<usize>"**** %__llmatch3
br label %case_body2
case_body2: ; preds = %then-block-242-
%43 = load %"2.std::option::Option<usize>"***, %"2.std::option::Option<usize>"**** %__llmatch3
%44 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %43, !nonnull !0
store %"2.std::option::Option<usize>"** %44, %"2.std::option::Option<usize>"*** %__arg0
%45 = load %"2.std::option::Option<usize>"***, %"2.std::option::Option<usize>"**** %__llmatch4
%46 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %45, !nonnull !0
store %"2.std::option::Option<usize>"** %46, %"2.std::option::Option<usize>"*** %__arg1
%47 = getelementptr inbounds [2 x %"2.std::fmt::ArgumentV1"], [2 x %"2.std::fmt::ArgumentV1"]* %7, i32 0, i32 0
%48 = getelementptr inbounds %"2.std::fmt::ArgumentV1", %"2.std::fmt::ArgumentV1"* %47, i32 0
%49 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %__arg0, !nonnull !0
call void @_ZN4core3fmt10ArgumentV13new17habfe3dae14a29324E(%"2.std::fmt::ArgumentV1"* noalias nocapture sret dereferenceable(16) %48, %"2.std::option::Option<usize>"** noalias readonly dereferenceable(8) %49, i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)* @"_ZN52_$LT$$RF$$u27$a$u20$T$u20$as$u20$std..fmt..Debug$GT$3fmt17he738c792455edf0eE")
%50 = getelementptr inbounds %"2.std::fmt::ArgumentV1", %"2.std::fmt::ArgumentV1"* %47, i32 1
%51 = load %"2.std::option::Option<usize>"**, %"2.std::option::Option<usize>"*** %__arg1, !nonnull !0
call void @_ZN4core3fmt10ArgumentV13new17habfe3dae14a29324E(%"2.std::fmt::ArgumentV1"* noalias nocapture sret dereferenceable(16) %50, %"2.std::option::Option<usize>"** noalias readonly dereferenceable(8) %51, i8 (%"2.std::option::Option<usize>"**, %"2.std::fmt::Formatter"*)* @"_ZN52_$LT$$RF$$u27$a$u20$T$u20$as$u20$std..fmt..Debug$GT$3fmt17he738c792455edf0eE")
br label %join
join: ; preds = %case_body2
%52 = bitcast [2 x %"2.std::fmt::ArgumentV1"]* %7 to %"2.std::fmt::ArgumentV1"*
%53 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %__coerce_target, i32 0, i32 0
store %"2.std::fmt::ArgumentV1"* %52, %"2.std::fmt::ArgumentV1"** %53
%54 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %__coerce_target, i32 0, i32 1
store i64 2, i64* %54
%55 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %__coerce_target, i32 0, i32 0
%56 = load %"2.std::fmt::ArgumentV1"*, %"2.std::fmt::ArgumentV1"** %55
%57 = getelementptr inbounds { %"2.std::fmt::ArgumentV1"*, i64 }, { %"2.std::fmt::ArgumentV1"*, i64 }* %__coerce_target, i32 0, i32 1
%58 = load i64, i64* %57
call void @_ZN4core3fmt9Arguments6new_v117h00bc5e947a058f1aE(%"2.std::fmt::Arguments"* noalias nocapture sret dereferenceable(48) %5, %str_slice* noalias nonnull readonly %36, i64 %38, %"2.std::fmt::ArgumentV1"* noalias nonnull readonly %56, i64 %58)
call void @_ZN4core9panicking9panic_fmt17h5f695b461e45588fE(%"2.std::fmt::Arguments"* noalias nocapture dereferenceable(48) %5, { %str_slice, i32 }* noalias readonly dereferenceable(24) @_ZN4core4iter6traits17ExactSizeIterator3len10_FILE_LINE17h66b4a01274af7b41E)
unreachable
next-block: ; preds = %case_body
br label %join5
join5: ; preds = %next-block
%59 = load i64, i64* %lower
ret i64 %59
}
; Function Attrs: inlinehint uwtable
define internal void @"_ZN79_$LT$std..slice..Iter$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$std..iter..Iterator$GT$9size_hint17h3bff44f205ea1643E"({ i64, %"2.std::option::Option<usize>" }* noalias nocapture sret dereferenceable(24), %"2.std::slice::Iter<u8>"* noalias readonly dereferenceable(16)) unnamed_addr #2 {
entry-block:
%self = alloca %"2.std::slice::Iter<u8>"*
%diff = alloca i64
%size = alloca i64
%exact = alloca i64
%2 = alloca i64
store %"2.std::slice::Iter<u8>"* %1, %"2.std::slice::Iter<u8>"** %self
%3 = load %"2.std::slice::Iter<u8>"*, %"2.std::slice::Iter<u8>"** %self, !nonnull !0
%4 = getelementptr inbounds %"2.std::slice::Iter<u8>", %"2.std::slice::Iter<u8>"* %3, i32 0, i32 1
%5 = load i8*, i8** %4
%6 = ptrtoint i8* %5 to i64
%7 = load %"2.std::slice::Iter<u8>"*, %"2.std::slice::Iter<u8>"** %self, !nonnull !0
%8 = getelementptr inbounds %"2.std::slice::Iter<u8>", %"2.std::slice::Iter<u8>"* %7, i32 0, i32 0
%9 = load i8*, i8** %8
%10 = ptrtoint i8* %9 to i64
%11 = call i64 @"_ZN4core3num23_$LT$impl$u20$usize$GT$12wrapping_sub17h1aeb0291ec00c74aE"(i64 %6, i64 %10)
store i64 %11, i64* %diff
%12 = call i64 @_ZN4core3mem7size_of17h98f1b4d42f5d5e99E()
store i64 %12, i64* %size
%13 = load i64, i64* %diff
%14 = load i64, i64* %size
%15 = icmp eq i64 %14, 0
br i1 %15, label %then-block-709-, label %else-block
then-block-709-: ; preds = %entry-block
store i64 1, i64* %2
br label %join
else-block: ; preds = %entry-block
%16 = load i64, i64* %size
store i64 %16, i64* %2
br label %join
join: ; preds = %else-block, %then-block-709-
%17 = load i64, i64* %2
%18 = icmp eq i64 %17, 0
br i1 %18, label %cond, label %next
next: ; preds = %join
%19 = udiv i64 %13, %17
store i64 %19, i64* %exact
%20 = getelementptr inbounds { i64, %"2.std::option::Option<usize>" }, { i64, %"2.std::option::Option<usize>" }* %0, i32 0, i32 0
%21 = load i64, i64* %exact
store i64 %21, i64* %20
%22 = getelementptr inbounds { i64, %"2.std::option::Option<usize>" }, { i64, %"2.std::option::Option<usize>" }* %0, i32 0, i32 1
%23 = bitcast %"2.std::option::Option<usize>"* %22 to { i64, i64 }*
%24 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %23, i32 0, i32 1
%25 = load i64, i64* %exact
store i64 %25, i64* %24
%26 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %22, i32 0, i32 0
store i64 1, i64* %26
ret void
cond: ; preds = %join
call void @_ZN4core9panicking5panic17h56bef5a458dfccc8E({ %str_slice, %str_slice, i32 }* noalias readonly dereferenceable(40) @panic_loc4857)
unreachable
}
; Function Attrs: uwtable
define internal void @"_ZN45_$LT$I$u20$as$u20$std..iter..IntoIterator$GT$9into_iter17h38365c190be6e182E"(%"2.std::slice::Iter<u8>"* noalias nocapture sret dereferenceable(16), %"2.std::slice::Iter<u8>"* noalias nocapture dereferenceable(16) %self) unnamed_addr #0 {
entry-block:
%1 = bitcast %"2.std::slice::Iter<u8>"* %self to i8*
%2 = bitcast %"2.std::slice::Iter<u8>"* %0 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %1, i64 16, i32 8, i1 false)
ret void
}
; Function Attrs: inlinehint uwtable
define internal void @"_ZN11collections5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$8iter_mut17h02bd744c9b4c44d8E"(%"2.std::slice::IterMut<u8>"* noalias nocapture sret dereferenceable(16), i8* nonnull, i64) unnamed_addr #2 {
entry-block:
%self = alloca { i8*, i64 }
%3 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
store i8* %1, i8** %3
%4 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
store i64 %2, i64* %4
%5 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%6 = load i8*, i8** %5
%7 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
%8 = load i64, i64* %7
call void @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$8iter_mut17hca4c554c3e7332c8E"(%"2.std::slice::IterMut<u8>"* noalias nocapture sret dereferenceable(16) %0, i8* nonnull %6, i64 %8)
ret void
}
; Function Attrs: inlinehint uwtable
define internal void @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$8iter_mut17hca4c554c3e7332c8E"(%"2.std::slice::IterMut<u8>"* noalias nocapture sret dereferenceable(16), i8* nonnull, i64) unnamed_addr #2 {
entry-block:
%3 = alloca i8*
%self = alloca { i8*, i64 }
%p = alloca i8*
%4 = alloca i64
%p1 = alloca i8*
%5 = alloca i8
%ptr = alloca i8*
%6 = alloca i64
%7 = alloca i8*
%8 = alloca i64
%9 = alloca i64
%10 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
store i8* %1, i8** %10
%11 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
store i64 %2, i64* %11
%12 = call i64 @_ZN4core3mem7size_of17h98f1b4d42f5d5e99E()
store i64 %12, i64* %4
%13 = load i64, i64* %4
%14 = icmp eq i64 %13, 0
br i1 %14, label %then-block-751-, label %else-block
then-block-751-: ; preds = %entry-block
store i8* inttoptr (i64 1 to i8*), i8** %p
br label %join
else-block: ; preds = %entry-block
%15 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%16 = load i8*, i8** %15
%17 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
%18 = load i64, i64* %17
%19 = call i8* @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$10as_mut_ptr17had4c8d27875afe7fE"(i8* nonnull %16, i64 %18)
store i8* %19, i8** %p1
%20 = load i8*, i8** %p1
%21 = call zeroext i1 @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$7is_null17h3b3b59e4d41af7f2E"(i8* %20)
%22 = zext i1 %21 to i8
store i8 %22, i8* %5
%23 = load i8, i8* %5, !range !1
%24 = trunc i8 %23 to i1
%25 = xor i1 %24, true
call void @llvm.assume(i1 %25)
%26 = load i8*, i8** %p1
store i8* %26, i8** %p
br label %join
join: ; preds = %else-block, %then-block-751-
%27 = getelementptr inbounds %"2.std::slice::IterMut<u8>", %"2.std::slice::IterMut<u8>"* %0, i32 0, i32 0
%28 = load i8*, i8** %p
store i8* %28, i8** %27
%29 = getelementptr inbounds %"2.std::slice::IterMut<u8>", %"2.std::slice::IterMut<u8>"* %0, i32 0, i32 1
%30 = load i8*, i8** %p
store i8* %30, i8** %ptr
%31 = load i8*, i8** %ptr
store i8* %31, i8** %3
%32 = call i64 @_ZN4core3mem7size_of17h98f1b4d42f5d5e99E()
store i64 %32, i64* %6
%33 = load i64, i64* %6
%34 = icmp eq i64 %33, 0
br i1 %34, label %then-block-784-, label %else-block2
then-block-784-: ; preds = %join
%35 = load i8*, i8** %ptr
%36 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%37 = load i8*, i8** %36
%38 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
%39 = load i64, i64* %38
%40 = call i64 @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$3len17hf304b37e94b6b651E"(i8* noalias nonnull readonly %37, i64 %39)
store i64 %40, i64* %8
%41 = load i64, i64* %8
%42 = getelementptr i8, i8* %35, i64 %41
store i8* %42, i8** %7
%43 = load i8*, i8** %7
store i8* %43, i8** %29
br label %join3
else-block2: ; preds = %join
%44 = load i8*, i8** %ptr
%45 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%46 = load i8*, i8** %45
%47 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
%48 = load i64, i64* %47
%49 = call i64 @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$3len17hf304b37e94b6b651E"(i8* noalias nonnull readonly %46, i64 %48)
store i64 %49, i64* %9
%50 = load i64, i64* %9
%51 = call i8* @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$6offset17h27b37bbf011e13b1E"(i8* %44, i64 %50)
store i8* %51, i8** %29
br label %join3
join3: ; preds = %else-block2, %then-block-784-
%52 = getelementptr inbounds %"2.std::slice::IterMut<u8>", %"2.std::slice::IterMut<u8>"* %0, i32 0, i32 2
ret void
}
; Function Attrs: inlinehint uwtable
define internal i8* @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$10as_mut_ptr17had4c8d27875afe7fE"(i8* nonnull, i64) unnamed_addr #2 {
entry-block:
%self = alloca { i8*, i64 }
%2 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
store i8* %0, i8** %2
%3 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
store i64 %1, i64* %3
%4 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%5 = load i8*, i8** %4
ret i8* %5
}
; Function Attrs: inlinehint uwtable
define internal zeroext i1 @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$7is_null17h3b3b59e4d41af7f2E"(i8*) unnamed_addr #2 {
entry-block:
%self = alloca i8*
store i8* %0, i8** %self
%1 = load i8*, i8** %self
%2 = icmp eq i8* %1, null
%3 = zext i1 %2 to i8
%4 = trunc i8 %3 to i1
ret i1 %4
}
; Function Attrs: nounwind
declare void @llvm.assume(i1) #4
; Function Attrs: inlinehint uwtable
define internal i64 @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$3len17hf304b37e94b6b651E"(i8* noalias nonnull readonly, i64) unnamed_addr #2 {
entry-block:
%self = alloca { i8*, i64 }
%2 = alloca %"2.core::slice::Repr<u8>"
%3 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
store i8* %0, i8** %3
%4 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
store i64 %1, i64* %4
%5 = bitcast %"2.core::slice::Repr<u8>"* %2 to { i8*, i64 }*
%6 = bitcast { i8*, i64 }* %self to i8*
%7 = bitcast { i8*, i64 }* %5 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %6, i64 16, i32 8, i1 false)
%8 = getelementptr inbounds %"2.core::slice::Repr<u8>", %"2.core::slice::Repr<u8>"* %2, i32 0, i32 1
%9 = load i64, i64* %8
ret i64 %9
}
; Function Attrs: inlinehint uwtable
define internal i8* @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$6offset17h27b37bbf011e13b1E"(i8*, i64) unnamed_addr #2 {
entry-block:
%self = alloca i8*
%count = alloca i64
%2 = alloca i8*
store i8* %0, i8** %self
store i64 %1, i64* %count
%3 = load i8*, i8** %self
%4 = load i64, i64* %count
%5 = getelementptr inbounds i8, i8* %3, i64 %4
store i8* %5, i8** %2
%6 = load i8*, i8** %2
ret i8* %6
}
; Function Attrs: uwtable
define internal { i8*, i64 } @"_ZN61_$LT$std..vec..Vec$LT$T$GT$$u20$as$u20$std..ops..DerefMut$GT$9deref_mut17h158bf9fa235dbf90E"(%"3.std::vec::Vec<u8>"* dereferenceable(24)) unnamed_addr #0 {
entry-block:
%sret_slot = alloca { i8*, i64 }
%self = alloca %"3.std::vec::Vec<u8>"*
%ptr = alloca i8*
%1 = alloca i8
store %"3.std::vec::Vec<u8>"* %0, %"3.std::vec::Vec<u8>"** %self
%2 = load %"3.std::vec::Vec<u8>"*, %"3.std::vec::Vec<u8>"** %self, !nonnull !0
%3 = getelementptr inbounds %"3.std::vec::Vec<u8>", %"3.std::vec::Vec<u8>"* %2, i32 0, i32 0
%4 = call i8* @"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17had406f7dc16cfa98E"(%"5.alloc::raw_vec::RawVec<u8>"* noalias readonly dereferenceable(16) %3)
store i8* %4, i8** %ptr
%5 = load i8*, i8** %ptr
%6 = call zeroext i1 @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$7is_null17h3b3b59e4d41af7f2E"(i8* %5)
%7 = zext i1 %6 to i8
store i8 %7, i8* %1
%8 = load i8, i8* %1, !range !1
%9 = trunc i8 %8 to i1
%10 = xor i1 %9, true
call void @llvm.assume(i1 %10)
%11 = load i8*, i8** %ptr
%12 = load %"3.std::vec::Vec<u8>"*, %"3.std::vec::Vec<u8>"** %self, !nonnull !0
%13 = getelementptr inbounds %"3.std::vec::Vec<u8>", %"3.std::vec::Vec<u8>"* %12, i32 0, i32 1
%14 = load i64, i64* %13
%15 = call { i8*, i64 } @_ZN4core5slice18from_raw_parts_mut17hd185eee97b145649E(i8* %11, i64 %14)
%16 = extractvalue { i8*, i64 } %15, 0
%17 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %sret_slot, i32 0, i32 0
store i8* %16, i8** %17
%18 = extractvalue { i8*, i64 } %15, 1
%19 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %sret_slot, i32 0, i32 1
store i64 %18, i64* %19
%20 = load { i8*, i64 }, { i8*, i64 }* %sret_slot
ret { i8*, i64 } %20
}
; Function Attrs: uwtable
define internal i8* @"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17had406f7dc16cfa98E"(%"5.alloc::raw_vec::RawVec<u8>"* noalias readonly dereferenceable(16)) unnamed_addr #0 {
entry-block:
%self = alloca %"5.alloc::raw_vec::RawVec<u8>"*
%overloaded_deref = alloca i8**
store %"5.alloc::raw_vec::RawVec<u8>"* %0, %"5.alloc::raw_vec::RawVec<u8>"** %self
%1 = load %"5.alloc::raw_vec::RawVec<u8>"*, %"5.alloc::raw_vec::RawVec<u8>"** %self, !nonnull !0
%2 = getelementptr inbounds %"5.alloc::raw_vec::RawVec<u8>", %"5.alloc::raw_vec::RawVec<u8>"* %1, i32 0, i32 0
%3 = call dereferenceable(8) i8** @"_ZN61_$LT$std..ptr..Unique$LT$T$GT$$u20$as$u20$std..ops..Deref$GT$5deref17hd683d8d3bbb3bf18E"(%"2.std::ptr::Unique<u8>"* noalias readonly dereferenceable(8) %2)
store i8** %3, i8*** %overloaded_deref
%4 = load i8**, i8*** %overloaded_deref, !nonnull !0
%5 = load i8*, i8** %4
ret i8* %5
}
; Function Attrs: inlinehint uwtable
define internal dereferenceable(8) i8** @"_ZN61_$LT$std..ptr..Unique$LT$T$GT$$u20$as$u20$std..ops..Deref$GT$5deref17hd683d8d3bbb3bf18E"(%"2.std::ptr::Unique<u8>"* noalias readonly dereferenceable(8)) unnamed_addr #2 {
entry-block:
%self = alloca %"2.std::ptr::Unique<u8>"*
%overloaded_deref = alloca i8**
store %"2.std::ptr::Unique<u8>"* %0, %"2.std::ptr::Unique<u8>"** %self
%1 = load %"2.std::ptr::Unique<u8>"*, %"2.std::ptr::Unique<u8>"** %self, !nonnull !0
%2 = getelementptr inbounds %"2.std::ptr::Unique<u8>", %"2.std::ptr::Unique<u8>"* %1, i32 0, i32 0
%3 = call dereferenceable(8) i8** @"_ZN67_$LT$core..nonzero..NonZero$LT$T$GT$$u20$as$u20$std..ops..Deref$GT$5deref17h38ea146556dd0602E"(%"2.core::nonzero::NonZero<*const u8>"* noalias readonly dereferenceable(8) %2)
store i8** %3, i8*** %overloaded_deref
%4 = load i8**, i8*** %overloaded_deref, !nonnull !0
ret i8** %4
}
; Function Attrs: inlinehint uwtable
define internal dereferenceable(8) i8** @"_ZN67_$LT$core..nonzero..NonZero$LT$T$GT$$u20$as$u20$std..ops..Deref$GT$5deref17h38ea146556dd0602E"(%"2.core::nonzero::NonZero<*const u8>"* noalias readonly dereferenceable(8)) unnamed_addr #2 {
entry-block:
%self = alloca %"2.core::nonzero::NonZero<*const u8>"*
%inner = alloca i8**
store %"2.core::nonzero::NonZero<*const u8>"* %0, %"2.core::nonzero::NonZero<*const u8>"** %self
%1 = load %"2.core::nonzero::NonZero<*const u8>"*, %"2.core::nonzero::NonZero<*const u8>"** %self, !nonnull !0
%2 = getelementptr inbounds %"2.core::nonzero::NonZero<*const u8>", %"2.core::nonzero::NonZero<*const u8>"* %1, i32 0, i32 0
store i8** %2, i8*** %inner
%3 = load i8**, i8*** %inner, !nonnull !0
ret i8** %3
}
; Function Attrs: inlinehint uwtable
define internal { i8*, i64 } @_ZN4core5slice18from_raw_parts_mut17hd185eee97b145649E(i8*, i64) unnamed_addr #2 {
entry-block:
%sret_slot = alloca { i8*, i64 }
%p = alloca i8*
%len = alloca i64
store i8* %0, i8** %p
store i64 %1, i64* %len
%2 = bitcast { i8*, i64 }* %sret_slot to %"2.core::slice::Repr<u8>"*
%3 = getelementptr inbounds %"2.core::slice::Repr<u8>", %"2.core::slice::Repr<u8>"* %2, i32 0, i32 0
%4 = load i8*, i8** %p
store i8* %4, i8** %3
%5 = getelementptr inbounds %"2.core::slice::Repr<u8>", %"2.core::slice::Repr<u8>"* %2, i32 0, i32 1
%6 = load i64, i64* %len
store i64 %6, i64* %5
%7 = load { i8*, i64 }, { i8*, i64 }* %sret_slot
ret { i8*, i64 } %7
}
; Function Attrs: inlinehint uwtable
define internal void @"_ZN11collections5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hd1e50f2dd7c2c858E"(%"2.std::slice::Iter<u8>"* noalias nocapture sret dereferenceable(16), i8* noalias nonnull readonly, i64) unnamed_addr #2 {
entry-block:
%self = alloca { i8*, i64 }
%3 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
store i8* %1, i8** %3
%4 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
store i64 %2, i64* %4
%5 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%6 = load i8*, i8** %5
%7 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
%8 = load i64, i64* %7
call void @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$4iter17hb898590cad2a741aE"(%"2.std::slice::Iter<u8>"* noalias nocapture sret dereferenceable(16) %0, i8* noalias nonnull readonly %6, i64 %8)
ret void
}
; Function Attrs: inlinehint uwtable
define internal void @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$4iter17hb898590cad2a741aE"(%"2.std::slice::Iter<u8>"* noalias nocapture sret dereferenceable(16), i8* noalias nonnull readonly, i64) unnamed_addr #2 {
entry-block:
%3 = alloca i8*
%self = alloca { i8*, i64 }
%p = alloca i8*
%4 = alloca i64
%p1 = alloca i8*
%5 = alloca i8
%ptr = alloca i8*
%6 = alloca i64
%7 = alloca i8*
%8 = alloca i64
%9 = alloca i64
%10 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
store i8* %1, i8** %10
%11 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
store i64 %2, i64* %11
%12 = call i64 @_ZN4core3mem7size_of17h98f1b4d42f5d5e99E()
store i64 %12, i64* %4
%13 = load i64, i64* %4
%14 = icmp eq i64 %13, 0
br i1 %14, label %then-block-1060-, label %else-block
then-block-1060-: ; preds = %entry-block
store i8* inttoptr (i64 1 to i8*), i8** %p
br label %join
else-block: ; preds = %entry-block
%15 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%16 = load i8*, i8** %15
%17 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
%18 = load i64, i64* %17
%19 = call i8* @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$6as_ptr17hf89fce61050c5b9cE"(i8* noalias nonnull readonly %16, i64 %18)
store i8* %19, i8** %p1
%20 = load i8*, i8** %p1
%21 = call zeroext i1 @"_ZN4core3ptr33_$LT$impl$u20$$BP$const$u20$T$GT$7is_null17hfa3c257abee43a46E"(i8* %20)
%22 = zext i1 %21 to i8
store i8 %22, i8* %5
%23 = load i8, i8* %5, !range !1
%24 = trunc i8 %23 to i1
%25 = xor i1 %24, true
call void @llvm.assume(i1 %25)
%26 = load i8*, i8** %p1
store i8* %26, i8** %p
br label %join
join: ; preds = %else-block, %then-block-1060-
%27 = getelementptr inbounds %"2.std::slice::Iter<u8>", %"2.std::slice::Iter<u8>"* %0, i32 0, i32 0
%28 = load i8*, i8** %p
store i8* %28, i8** %27
%29 = getelementptr inbounds %"2.std::slice::Iter<u8>", %"2.std::slice::Iter<u8>"* %0, i32 0, i32 1
%30 = load i8*, i8** %p
store i8* %30, i8** %ptr
%31 = load i8*, i8** %ptr
store i8* %31, i8** %3
%32 = call i64 @_ZN4core3mem7size_of17h98f1b4d42f5d5e99E()
store i64 %32, i64* %6
%33 = load i64, i64* %6
%34 = icmp eq i64 %33, 0
br i1 %34, label %then-block-1093-, label %else-block2
then-block-1093-: ; preds = %join
%35 = load i8*, i8** %ptr
%36 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%37 = load i8*, i8** %36
%38 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
%39 = load i64, i64* %38
%40 = call i64 @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$3len17hf304b37e94b6b651E"(i8* noalias nonnull readonly %37, i64 %39)
store i64 %40, i64* %8
%41 = load i64, i64* %8
%42 = getelementptr i8, i8* %35, i64 %41
store i8* %42, i8** %7
%43 = load i8*, i8** %7
store i8* %43, i8** %29
br label %join3
else-block2: ; preds = %join
%44 = load i8*, i8** %ptr
%45 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%46 = load i8*, i8** %45
%47 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
%48 = load i64, i64* %47
%49 = call i64 @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$3len17hf304b37e94b6b651E"(i8* noalias nonnull readonly %46, i64 %48)
store i64 %49, i64* %9
%50 = load i64, i64* %9
%51 = call i8* @"_ZN4core3ptr33_$LT$impl$u20$$BP$const$u20$T$GT$6offset17hbacec41875a284daE"(i8* %44, i64 %50)
store i8* %51, i8** %29
br label %join3
join3: ; preds = %else-block2, %then-block-1093-
%52 = getelementptr inbounds %"2.std::slice::Iter<u8>", %"2.std::slice::Iter<u8>"* %0, i32 0, i32 2
ret void
}
; Function Attrs: inlinehint uwtable
define internal i8* @"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$6as_ptr17hf89fce61050c5b9cE"(i8* noalias nonnull readonly, i64) unnamed_addr #2 {
entry-block:
%self = alloca { i8*, i64 }
%2 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
store i8* %0, i8** %2
%3 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 1
store i64 %1, i64* %3
%4 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %self, i32 0, i32 0
%5 = load i8*, i8** %4
ret i8* %5
}
; Function Attrs: inlinehint uwtable
define internal zeroext i1 @"_ZN4core3ptr33_$LT$impl$u20$$BP$const$u20$T$GT$7is_null17hfa3c257abee43a46E"(i8*) unnamed_addr #2 {
entry-block:
%self = alloca i8*
store i8* %0, i8** %self
%1 = load i8*, i8** %self
%2 = icmp eq i8* %1, null
%3 = zext i1 %2 to i8
%4 = trunc i8 %3 to i1
ret i1 %4
}
; Function Attrs: inlinehint uwtable
define internal i8* @"_ZN4core3ptr33_$LT$impl$u20$$BP$const$u20$T$GT$6offset17hbacec41875a284daE"(i8*, i64) unnamed_addr #2 {
entry-block:
%self = alloca i8*
%count = alloca i64
store i8* %0, i8** %self
store i64 %1, i64* %count
%2 = load i8*, i8** %self
%3 = load i64, i64* %count
%4 = getelementptr inbounds i8, i8* %2, i64 %3
ret i8* %4
}
; Function Attrs: uwtable
define internal { i8*, i64 } @"_ZN58_$LT$std..vec..Vec$LT$T$GT$$u20$as$u20$std..ops..Deref$GT$5deref17hcd00f98934b049a9E"(%"3.std::vec::Vec<u8>"* noalias readonly dereferenceable(24)) unnamed_addr #0 {
entry-block:
%sret_slot = alloca { i8*, i64 }
%self = alloca %"3.std::vec::Vec<u8>"*
%p = alloca i8*
%1 = alloca i8
store %"3.std::vec::Vec<u8>"* %0, %"3.std::vec::Vec<u8>"** %self
%2 = load %"3.std::vec::Vec<u8>"*, %"3.std::vec::Vec<u8>"** %self, !nonnull !0
%3 = getelementptr inbounds %"3.std::vec::Vec<u8>", %"3.std::vec::Vec<u8>"* %2, i32 0, i32 0
%4 = call i8* @"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17had406f7dc16cfa98E"(%"5.alloc::raw_vec::RawVec<u8>"* noalias readonly dereferenceable(16) %3)
store i8* %4, i8** %p
%5 = load i8*, i8** %p
%6 = call zeroext i1 @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$7is_null17h3b3b59e4d41af7f2E"(i8* %5)
%7 = zext i1 %6 to i8
store i8 %7, i8* %1
%8 = load i8, i8* %1, !range !1
%9 = trunc i8 %8 to i1
%10 = xor i1 %9, true
call void @llvm.assume(i1 %10)
%11 = load i8*, i8** %p
%12 = load %"3.std::vec::Vec<u8>"*, %"3.std::vec::Vec<u8>"** %self, !nonnull !0
%13 = getelementptr inbounds %"3.std::vec::Vec<u8>", %"3.std::vec::Vec<u8>"* %12, i32 0, i32 1
%14 = load i64, i64* %13
%15 = call { i8*, i64 } @_ZN4core5slice14from_raw_parts17h066d71452cd003c8E(i8* %11, i64 %14)
%16 = extractvalue { i8*, i64 } %15, 0
%17 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %sret_slot, i32 0, i32 0
store i8* %16, i8** %17
%18 = extractvalue { i8*, i64 } %15, 1
%19 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %sret_slot, i32 0, i32 1
store i64 %18, i64* %19
%20 = load { i8*, i64 }, { i8*, i64 }* %sret_slot
ret { i8*, i64 } %20
}
; Function Attrs: inlinehint uwtable
define internal { i8*, i64 } @_ZN4core5slice14from_raw_parts17h066d71452cd003c8E(i8*, i64) unnamed_addr #2 {
entry-block:
%sret_slot = alloca { i8*, i64 }
%p = alloca i8*
%len = alloca i64
store i8* %0, i8** %p
store i64 %1, i64* %len
%2 = bitcast { i8*, i64 }* %sret_slot to %"2.core::slice::Repr<u8>"*
%3 = getelementptr inbounds %"2.core::slice::Repr<u8>", %"2.core::slice::Repr<u8>"* %2, i32 0, i32 0
%4 = load i8*, i8** %p
store i8* %4, i8** %3
%5 = getelementptr inbounds %"2.core::slice::Repr<u8>", %"2.core::slice::Repr<u8>"* %2, i32 0, i32 1
%6 = load i64, i64* %len
store i64 %6, i64* %5
%7 = load { i8*, i64 }, { i8*, i64 }* %sret_slot
ret { i8*, i64 } %7
}
; Function Attrs: inlinehint uwtable
define internal void @"_ZN72_$LT$std..iter..Zip$LT$A$C$$u20$B$GT$$u20$as$u20$std..iter..Iterator$GT$4next17ha336ece82193c22cE"(%"2.std::option::Option<(&'static mut u8, &'static u8)>"* noalias nocapture sret dereferenceable(16), %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* dereferenceable(48)) unnamed_addr #2 {
entry-block:
%self = alloca %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*
store %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %1, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %self
%2 = load %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %self, !nonnull !0
call void @"_ZN89_$LT$std..iter..Zip$LT$A$C$$u20$B$GT$$u20$as$u20$std..iter..ZipImpl$LT$A$C$$u20$B$GT$$GT$4next17h096e31f32d5cb201E"(%"2.std::option::Option<(&'static mut u8, &'static u8)>"* noalias nocapture sret dereferenceable(16) %0, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* dereferenceable(48) %2)
ret void
}
; Function Attrs: inlinehint uwtable
define internal void @"_ZN89_$LT$std..iter..Zip$LT$A$C$$u20$B$GT$$u20$as$u20$std..iter..ZipImpl$LT$A$C$$u20$B$GT$$GT$4next17h096e31f32d5cb201E"(%"2.std::option::Option<(&'static mut u8, &'static u8)>"* noalias nocapture sret dereferenceable(16), %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* dereferenceable(48)) unnamed_addr #2 {
entry-block:
%self = alloca %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*
%i = alloca i64
store %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %1, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %self
%2 = load %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %self, !nonnull !0
%3 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %2, i32 0, i32 2
%4 = load i64, i64* %3
%5 = load %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %self, !nonnull !0
%6 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %5, i32 0, i32 3
%7 = load i64, i64* %6
%8 = icmp ult i64 %4, %7
br i1 %8, label %then-block-1256-, label %else-block
then-block-1256-: ; preds = %entry-block
%9 = load %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %self, !nonnull !0
%10 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %9, i32 0, i32 2
%11 = load i64, i64* %10
store i64 %11, i64* %i
%12 = load %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %self, !nonnull !0
%13 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %12, i32 0, i32 2
%14 = load i64, i64* %13
%15 = add i64 %14, 1
store i64 %15, i64* %13
%16 = getelementptr inbounds %"2.std::option::Option<(&'static mut u8, &'static u8)>", %"2.std::option::Option<(&'static mut u8, &'static u8)>"* %0, i32 0, i32 0
%17 = getelementptr inbounds { i8*, i8* }, { i8*, i8* }* %16, i32 0, i32 0
%18 = load %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %self, !nonnull !0
%19 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %18, i32 0, i32 0
%20 = load i64, i64* %i
%21 = call dereferenceable(1) i8* @"_ZN102_$LT$std..slice..IterMut$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$core..iter_private..TrustedRandomAccess$GT$13get_unchecked17h89f9009b23bad1b9E"(%"2.std::slice::IterMut<u8>"* dereferenceable(16) %19, i64 %20)
store i8* %21, i8** %17
%22 = getelementptr inbounds { i8*, i8* }, { i8*, i8* }* %16, i32 0, i32 1
%23 = load %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %self, !nonnull !0
%24 = getelementptr inbounds %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>", %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %23, i32 0, i32 1
%25 = load i64, i64* %i
%26 = call dereferenceable(1) i8* @"_ZN99_$LT$std..slice..Iter$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$core..iter_private..TrustedRandomAccess$GT$13get_unchecked17he2e43d9a5ab330f2E"(%"2.std::slice::Iter<u8>"* dereferenceable(16) %24, i64 %25)
store i8* %26, i8** %22
br label %join
else-block: ; preds = %entry-block
%27 = bitcast %"2.std::option::Option<(&'static mut u8, &'static u8)>"* %0 to { { i8*, i8* } }*
%28 = bitcast { { i8*, i8* } }* %27 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* bitcast ({ { i8*, i8* } }* @const5005 to i8*), i64 16, i32 8, i1 false)
br label %join
join: ; preds = %else-block, %then-block-1256-
ret void
}
; Function Attrs: uwtable
define internal dereferenceable(1) i8* @"_ZN102_$LT$std..slice..IterMut$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$core..iter_private..TrustedRandomAccess$GT$13get_unchecked17h89f9009b23bad1b9E"(%"2.std::slice::IterMut<u8>"* dereferenceable(16), i64) unnamed_addr #0 {
entry-block:
%self = alloca %"2.std::slice::IterMut<u8>"*
%i = alloca i64
%2 = alloca i8*
store %"2.std::slice::IterMut<u8>"* %0, %"2.std::slice::IterMut<u8>"** %self
store i64 %1, i64* %i
%3 = load %"2.std::slice::IterMut<u8>"*, %"2.std::slice::IterMut<u8>"** %self, !nonnull !0
%4 = getelementptr inbounds %"2.std::slice::IterMut<u8>", %"2.std::slice::IterMut<u8>"* %3, i32 0, i32 0
%5 = load i8*, i8** %4
%6 = load i64, i64* %i
%7 = call i8* @"_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$6offset17h27b37bbf011e13b1E"(i8* %5, i64 %6)
store i8* %7, i8** %2
%8 = load i8*, i8** %2
ret i8* %8
}
; Function Attrs: uwtable
define internal dereferenceable(1) i8* @"_ZN99_$LT$std..slice..Iter$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$core..iter_private..TrustedRandomAccess$GT$13get_unchecked17he2e43d9a5ab330f2E"(%"2.std::slice::Iter<u8>"* dereferenceable(16), i64) unnamed_addr #0 {
entry-block:
%self = alloca %"2.std::slice::Iter<u8>"*
%i = alloca i64
%2 = alloca i8*
store %"2.std::slice::Iter<u8>"* %0, %"2.std::slice::Iter<u8>"** %self
store i64 %1, i64* %i
%3 = load %"2.std::slice::Iter<u8>"*, %"2.std::slice::Iter<u8>"** %self, !nonnull !0
%4 = getelementptr inbounds %"2.std::slice::Iter<u8>", %"2.std::slice::Iter<u8>"* %3, i32 0, i32 0
%5 = load i8*, i8** %4
%6 = load i64, i64* %i
%7 = call i8* @"_ZN4core3ptr33_$LT$impl$u20$$BP$const$u20$T$GT$6offset17hbacec41875a284daE"(i8* %5, i64 %6)
store i8* %7, i8** %2
%8 = load i8*, i8** %2
ret i8* %8
}
; Function Attrs: uwtable
define void @copy_zip_slice(i8* noalias nonnull readonly, i64, i8* nonnull, i64) unnamed_addr #0 {
entry-block:
%xs = alloca { i8*, i64 }
%ys = alloca { i8*, i64 }
%_result = alloca {}
%4 = alloca %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"
%5 = alloca %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"
%6 = alloca %"2.std::slice::IterMut<u8>"
%7 = alloca %"2.std::slice::Iter<u8>"
%iter = alloca %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*
%8 = alloca %"2.std::option::Option<(&'static mut u8, &'static u8)>"
%a = alloca i8**
%__llmatch = alloca i8**
%b = alloca i8*
%9 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %xs, i32 0, i32 0
store i8* %0, i8** %9
%10 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %xs, i32 0, i32 1
store i64 %1, i64* %10
%11 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %ys, i32 0, i32 0
store i8* %2, i8** %11
%12 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %ys, i32 0, i32 1
store i64 %3, i64* %12
%13 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %ys, i32 0, i32 0
%14 = load i8*, i8** %13
%15 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %ys, i32 0, i32 1
%16 = load i64, i64* %15
call void @"_ZN11collections5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$8iter_mut17h02bd744c9b4c44d8E"(%"2.std::slice::IterMut<u8>"* noalias nocapture sret dereferenceable(16) %6, i8* nonnull %14, i64 %16)
%17 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %xs, i32 0, i32 0
%18 = load i8*, i8** %17
%19 = getelementptr inbounds { i8*, i64 }, { i8*, i64 }* %xs, i32 0, i32 1
%20 = load i64, i64* %19
call void @"_ZN11collections5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hd1e50f2dd7c2c858E"(%"2.std::slice::Iter<u8>"* noalias nocapture sret dereferenceable(16) %7, i8* noalias nonnull readonly %18, i64 %20)
call void @_ZN4core4iter8iterator8Iterator3zip17ha960a5cd1f865c36E(%"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture sret dereferenceable(48) %5, %"2.std::slice::IterMut<u8>"* noalias nocapture dereferenceable(16) %6, %"2.std::slice::Iter<u8>"* noalias nocapture dereferenceable(16) %7)
call void @"_ZN45_$LT$I$u20$as$u20$std..iter..IntoIterator$GT$9into_iter17hf8283d2b0eaaffb0E"(%"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture sret dereferenceable(48) %4, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* noalias nocapture dereferenceable(48) %5)
store %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* %4, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %iter
br label %case_body
case_body: ; preds = %entry-block
%21 = load %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"*, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"** %iter
br label %loop_body
loop_exit: ; preds = %clean_ast_92_
br label %join4
loop_body: ; preds = %join, %case_body
call void @"_ZN72_$LT$std..iter..Zip$LT$A$C$$u20$B$GT$$u20$as$u20$std..iter..Iterator$GT$4next17ha336ece82193c22cE"(%"2.std::option::Option<(&'static mut u8, &'static u8)>"* noalias nocapture sret dereferenceable(16) %8, %"2.std::iter::Zip<std::slice::IterMut<'static, u8>, std::slice::Iter<'static, u8>>"* dereferenceable(48) %21)
%22 = getelementptr inbounds %"2.std::option::Option<(&'static mut u8, &'static u8)>", %"2.std::option::Option<(&'static mut u8, &'static u8)>"* %8, i32 0, i32 0, i32 0
%23 = load i8*, i8** %22
%24 = icmp ne i8* %23, null
switch i1 %24, label %match_else [
i1 true, label %match_case
i1 false, label %match_case3
]
case_body1: ; preds = %match_case
%25 = load i8**, i8*** %__llmatch
%26 = load i8*, i8** %25, !nonnull !0
store i8* %26, i8** %b
%27 = load i8**, i8*** %a
%28 = load i8*, i8** %b, !nonnull !0
%29 = load i8*, i8** %27, !nonnull !0
%30 = load i8, i8* %28
store i8 %30, i8* %29
br label %join
case_body2: ; preds = %match_case3
br label %clean_ast_92_
match_else: ; preds = %loop_body
unreachable
match_case: ; preds = %loop_body
%31 = getelementptr inbounds %"2.std::option::Option<(&'static mut u8, &'static u8)>", %"2.std::option::Option<(&'static mut u8, &'static u8)>"* %8, i32 0, i32 0
%32 = getelementptr inbounds { i8*, i8* }, { i8*, i8* }* %31, i32 0, i32 0
%33 = getelementptr inbounds { i8*, i8* }, { i8*, i8* }* %31, i32 0, i32 1
store i8** %33, i8*** %__llmatch
store i8** %32, i8*** %a
br label %case_body1
match_case3: ; preds = %loop_body
br label %case_body2
clean_ast_92_: ; preds = %case_body2
br label %loop_exit
join: ; preds = %case_body1
br label %loop_body
join4: ; preds = %loop_exit
ret void
}
attributes #0 = { uwtable }
attributes #1 = { argmemonly nounwind }
attributes #2 = { inlinehint uwtable }
attributes #3 = { cold noinline noreturn }
attributes #4 = { nounwind }
!0 = !{}
!1 = !{i8 0, i8 2}
!2 = !{i64 0, i64 2}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment