Last active
April 21, 2016 21:13
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#![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) | |
} | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; 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