-
-
Save nikic/4a714ea550bf2252543570585f642af2 to your computer and use it in GitHub Desktop.
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 = 'issue_45222.eca958bc11cb69c8-cgu.0' | |
source_filename = "issue_45222.eca958bc11cb69c8-cgu.0" | |
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" | |
target triple = "x86_64-unknown-linux-gnu" | |
%"core::ops::range::RangeInclusive<u64>" = type { i64, i64, i8, [7 x i8] } | |
%"core::iter::adapters::rev::Rev<core::ops::range::RangeInclusive<u64>>" = type { %"core::ops::range::RangeInclusive<u64>" } | |
; <core::ops::range::RangeInclusive<T> as core::iter::range::RangeInclusiveIteratorImpl>::spec_next_back | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal { i64, i64 } @"_ZN107_$LT$core..ops..range..RangeInclusive$LT$T$GT$$u20$as$u20$core..iter..range..RangeInclusiveIteratorImpl$GT$14spec_next_back17hd0c336dc96dd2902E"(ptr noalias noundef align 8 dereferenceable(24) %self) unnamed_addr #0 { | |
start: | |
%result = alloca i64, align 8 | |
%_2 = alloca i8, align 1 | |
%0 = alloca { i64, i64 }, align 8 | |
call void @llvm.lifetime.start.p0(i64 1, ptr %_2) | |
%1 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 2 | |
%2 = load i8, ptr %1, align 8, !range !2, !noundef !3 | |
%_15 = trunc i8 %2 to i1 | |
br i1 %_15, label %bb11, label %bb12 | |
bb12: ; preds = %start | |
%_19 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1 | |
; call core::cmp::impls::<impl core::cmp::PartialOrd for u64>::le | |
%_17 = call noundef zeroext i1 @"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$u64$GT$2le17hd267368cf0b481dbE"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %_19) | |
%_16 = xor i1 %_17, true | |
%3 = zext i1 %_16 to i8 | |
store i8 %3, ptr %_2, align 1 | |
br label %bb13 | |
bb11: ; preds = %start | |
store i8 1, ptr %_2, align 1 | |
br label %bb13 | |
bb13: ; preds = %bb12, %bb11 | |
%4 = load i8, ptr %_2, align 1, !range !2, !noundef !3 | |
%5 = trunc i8 %4 to i1 | |
br i1 %5, label %bb1, label %bb2 | |
bb2: ; preds = %bb13 | |
call void @llvm.lifetime.end.p0(i64 1, ptr %_2) | |
%_6 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1 | |
; call core::cmp::impls::<impl core::cmp::PartialOrd for u64>::lt | |
%is_iterating = call noundef zeroext i1 @"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$u64$GT$2lt17h07f1cc5cb07f103cE"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %_6) | |
call void @llvm.lifetime.start.p0(i64 8, ptr %result) | |
br i1 %is_iterating, label %bb4, label %bb7 | |
bb1: ; preds = %bb13 | |
store i64 0, ptr %0, align 8 | |
call void @llvm.lifetime.end.p0(i64 1, ptr %_2) | |
br label %bb10 | |
bb10: ; preds = %bb9, %bb1 | |
%6 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 0 | |
%7 = load i64, ptr %6, align 8, !range !4, !noundef !3 | |
%8 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 1 | |
%9 = load i64, ptr %8, align 8 | |
%10 = insertvalue { i64, i64 } poison, i64 %7, 0 | |
%11 = insertvalue { i64, i64 } %10, i64 %9, 1 | |
ret { i64, i64 } %11 | |
bb7: ; preds = %bb2 | |
%12 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 2 | |
store i8 1, ptr %12, align 8 | |
%_14 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1 | |
; call core::clone::impls::<impl core::clone::Clone for u64>::clone | |
%13 = call noundef i64 @"_ZN4core5clone5impls52_$LT$impl$u20$core..clone..Clone$u20$for$u20$u64$GT$5clone17hbba932430fab4e90E"(ptr noalias noundef readonly align 8 dereferenceable(8) %_14) | |
store i64 %13, ptr %result, align 8 | |
br label %bb9 | |
bb4: ; preds = %bb2 | |
%_11 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1 | |
; call core::clone::impls::<impl core::clone::Clone for u64>::clone | |
%_10 = call noundef i64 @"_ZN4core5clone5impls52_$LT$impl$u20$core..clone..Clone$u20$for$u20$u64$GT$5clone17hbba932430fab4e90E"(ptr noalias noundef readonly align 8 dereferenceable(8) %_11) | |
; call <u64 as core::iter::range::Step>::backward_unchecked | |
%n = call noundef i64 @"_ZN47_$LT$u64$u20$as$u20$core..iter..range..Step$GT$18backward_unchecked17h8b447dfa32396f63E"(i64 noundef %_10, i64 noundef 1) | |
%dest = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1 | |
%14 = load i64, ptr %dest, align 8, !noundef !3 | |
store i64 %14, ptr %result, align 8 | |
store i64 %n, ptr %dest, align 8 | |
br label %bb9 | |
bb9: ; preds = %bb7, %bb4 | |
%15 = load i64, ptr %result, align 8, !noundef !3 | |
%16 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %15, ptr %16, align 8 | |
store i64 1, ptr %0, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %result) | |
br label %bb10 | |
} | |
; <u64 as core::iter::range::Step>::forward_unchecked | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal noundef i64 @"_ZN47_$LT$u64$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17hd60ccd0bbd509e10E"(i64 noundef %start1, i64 noundef %n) unnamed_addr #0 { | |
start: | |
%0 = alloca i64, align 8 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %0) | |
%1 = add nuw i64 %start1, %n | |
store i64 %1, ptr %0, align 8 | |
%2 = load i64, ptr %0, align 8, !noundef !3 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %0) | |
ret i64 %2 | |
} | |
; <u64 as core::iter::range::Step>::backward_unchecked | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal noundef i64 @"_ZN47_$LT$u64$u20$as$u20$core..iter..range..Step$GT$18backward_unchecked17h8b447dfa32396f63E"(i64 noundef %start1, i64 noundef %n) unnamed_addr #0 { | |
start: | |
%0 = alloca i64, align 8 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %0) | |
%1 = sub nuw i64 %start1, %n | |
store i64 %1, ptr %0, align 8 | |
%2 = load i64, ptr %0, align 8, !noundef !3 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %0) | |
ret i64 %2 | |
} | |
; core::cmp::impls::<impl core::cmp::PartialOrd for u64>::le | |
; Function Attrs: alwaysinline nonlazybind uwtable | |
define internal noundef zeroext i1 @"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$u64$GT$2le17hd267368cf0b481dbE"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %other) unnamed_addr #1 { | |
start: | |
%_3 = load i64, ptr %self, align 8, !noundef !3 | |
%_4 = load i64, ptr %other, align 8, !noundef !3 | |
%0 = icmp ule i64 %_3, %_4 | |
ret i1 %0 | |
} | |
; core::cmp::impls::<impl core::cmp::PartialOrd for u64>::lt | |
; Function Attrs: alwaysinline nonlazybind uwtable | |
define internal noundef zeroext i1 @"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$u64$GT$2lt17h07f1cc5cb07f103cE"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %other) unnamed_addr #1 { | |
start: | |
%_3 = load i64, ptr %self, align 8, !noundef !3 | |
%_4 = load i64, ptr %other, align 8, !noundef !3 | |
%0 = icmp ult i64 %_3, %_4 | |
ret i1 %0 | |
} | |
; core::clone::impls::<impl core::clone::Clone for u64>::clone | |
; Function Attrs: alwaysinline nonlazybind uwtable | |
define internal noundef i64 @"_ZN4core5clone5impls52_$LT$impl$u20$core..clone..Clone$u20$for$u20$u64$GT$5clone17hbba932430fab4e90E"(ptr noalias noundef readonly align 8 dereferenceable(8) %self) unnamed_addr #1 { | |
start: | |
%0 = load i64, ptr %self, align 8, !noundef !3 | |
ret i64 %0 | |
} | |
; <core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal { i64, i64 } @"_ZN89_$LT$core..ops..range..Range$LT$T$GT$$u20$as$u20$core..iter..range..RangeIteratorImpl$GT$9spec_next17h87714902f3b25309E"(ptr noalias noundef align 8 dereferenceable(16) %self) unnamed_addr #0 { | |
start: | |
%0 = alloca { i64, i64 }, align 8 | |
%_4 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1 | |
; call core::cmp::impls::<impl core::cmp::PartialOrd for u64>::lt | |
%_2 = call noundef zeroext i1 @"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$u64$GT$2lt17h07f1cc5cb07f103cE"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %_4) | |
br i1 %_2, label %bb2, label %bb5 | |
bb5: ; preds = %start | |
store i64 0, ptr %0, align 8 | |
br label %bb6 | |
bb2: ; preds = %start | |
; call core::clone::impls::<impl core::clone::Clone for u64>::clone | |
%_6 = call noundef i64 @"_ZN4core5clone5impls52_$LT$impl$u20$core..clone..Clone$u20$for$u20$u64$GT$5clone17hbba932430fab4e90E"(ptr noalias noundef readonly align 8 dereferenceable(8) %self) | |
; call <u64 as core::iter::range::Step>::forward_unchecked | |
%n = call noundef i64 @"_ZN47_$LT$u64$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17hd60ccd0bbd509e10E"(i64 noundef %_6, i64 noundef 1) | |
%result = load i64, ptr %self, align 8, !noundef !3 | |
store i64 %n, ptr %self, align 8 | |
%1 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %result, ptr %1, align 8 | |
store i64 1, ptr %0, align 8 | |
br label %bb6 | |
bb6: ; preds = %bb5, %bb2 | |
%2 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 0 | |
%3 = load i64, ptr %2, align 8, !range !4, !noundef !3 | |
%4 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 1 | |
%5 = load i64, ptr %4, align 8 | |
%6 = insertvalue { i64, i64 } poison, i64 %3, 0 | |
%7 = insertvalue { i64, i64 } %6, i64 %5, 1 | |
ret { i64, i64 } %7 | |
} | |
; issue_45222::foo2 | |
; Function Attrs: nonlazybind uwtable | |
define internal noundef i64 @_ZN11issue_452224foo217hef337cd627f32653E(i64 noundef %n) unnamed_addr #2 { | |
start: | |
%_11 = alloca { i64, i64 }, align 8 | |
%iter3 = alloca %"core::iter::adapters::rev::Rev<core::ops::range::RangeInclusive<u64>>", align 8 | |
%self2 = alloca %"core::ops::range::RangeInclusive<u64>", align 8 | |
%self1 = alloca %"core::iter::adapters::rev::Rev<core::ops::range::RangeInclusive<u64>>", align 8 | |
%_5 = alloca { i64, i64 }, align 8 | |
%iter = alloca { i64, i64 }, align 8 | |
%self = alloca { i64, i64 }, align 8 | |
%count = alloca i64, align 8 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %count) | |
store i64 0, ptr %count, align 8 | |
store i64 0, ptr %self, align 8 | |
%0 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1 | |
store i64 %n, ptr %0, align 8 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %iter) | |
%1 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 0 | |
%2 = load i64, ptr %1, align 8, !noundef !3 | |
%3 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1 | |
%4 = load i64, ptr %3, align 8, !noundef !3 | |
%5 = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 0 | |
store i64 %2, ptr %5, align 8 | |
%6 = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 1 | |
store i64 %4, ptr %6, align 8 | |
br label %bb1 | |
bb1: ; preds = %bb7, %start | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_5) | |
; call <core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next | |
%7 = call { i64, i64 } @"_ZN89_$LT$core..ops..range..Range$LT$T$GT$$u20$as$u20$core..iter..range..RangeIteratorImpl$GT$9spec_next17h87714902f3b25309E"(ptr noalias noundef align 8 dereferenceable(16) %iter) | |
store { i64, i64 } %7, ptr %_5, align 8 | |
%_7 = load i64, ptr %_5, align 8, !range !4, !noundef !3 | |
switch i64 %_7, label %bb3 [ | |
i64 0, label %bb4 | |
i64 1, label %bb2 | |
] | |
bb3: ; preds = %bb5, %bb1 | |
unreachable | |
bb4: ; preds = %bb1 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_5) | |
call void @llvm.lifetime.end.p0(i64 16, ptr %iter) | |
%8 = load i64, ptr %count, align 8, !noundef !3 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %count) | |
ret i64 %8 | |
bb2: ; preds = %bb1 | |
call void @llvm.lifetime.start.p0(i64 24, ptr %self2) | |
store i64 0, ptr %self2, align 8 | |
%9 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self2, i32 0, i32 1 | |
store i64 %n, ptr %9, align 8 | |
%10 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self2, i32 0, i32 2 | |
store i8 0, ptr %10, align 8 | |
call void @llvm.memcpy.p0.p0.i64(ptr align 8 %self1, ptr align 8 %self2, i64 24, i1 false) | |
call void @llvm.lifetime.end.p0(i64 24, ptr %self2) | |
call void @llvm.lifetime.start.p0(i64 24, ptr %iter3) | |
call void @llvm.memcpy.p0.p0.i64(ptr align 8 %iter3, ptr align 8 %self1, i64 24, i1 false) | |
br label %bb5 | |
bb5: ; preds = %bb6, %bb2 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_11) | |
; call <core::ops::range::RangeInclusive<T> as core::iter::range::RangeInclusiveIteratorImpl>::spec_next_back | |
%11 = call { i64, i64 } @"_ZN107_$LT$core..ops..range..RangeInclusive$LT$T$GT$$u20$as$u20$core..iter..range..RangeInclusiveIteratorImpl$GT$14spec_next_back17hd0c336dc96dd2902E"(ptr noalias noundef align 8 dereferenceable(24) %iter3) | |
store { i64, i64 } %11, ptr %_11, align 8 | |
%_13 = load i64, ptr %_11, align 8, !range !4, !noundef !3 | |
switch i64 %_13, label %bb3 [ | |
i64 0, label %bb7 | |
i64 1, label %bb6 | |
] | |
bb7: ; preds = %bb5 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_11) | |
call void @llvm.lifetime.end.p0(i64 24, ptr %iter3) | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_5) | |
br label %bb1 | |
bb6: ; preds = %bb5 | |
%12 = getelementptr inbounds { i64, i64 }, ptr %_11, i32 0, i32 1 | |
%j = load i64, ptr %12, align 8, !noundef !3 | |
%13 = load i64, ptr %count, align 8, !noundef !3 | |
%14 = add i64 %13, %j | |
store i64 %14, ptr %count, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_11) | |
br label %bb5 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define noundef i64 @check_foo2() unnamed_addr #2 { | |
start: | |
; call issue_45222::foo2 | |
%0 = call noundef i64 @_ZN11issue_452224foo217hef337cd627f32653E(i64 noundef 100000) | |
ret i64 %0 | |
} | |
; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) | |
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3 | |
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) | |
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #4 | |
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) | |
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #4 | |
attributes #0 = { inlinehint nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #1 = { alwaysinline nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #2 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } | |
attributes #4 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } | |
!llvm.module.flags = !{!0, !1} | |
!0 = !{i32 8, !"PIC Level", i32 2} | |
!1 = !{i32 2, !"RtLibUseGOT", i32 1} | |
!2 = !{i8 0, i8 2} | |
!3 = !{} | |
!4 = !{i64 0, i64 2} |
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 = 'vec_optimizes_away.625b2bf96f3cc61a-cgu.0' | |
source_filename = "vec_optimizes_away.625b2bf96f3cc61a-cgu.0" | |
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" | |
target triple = "x86_64-unknown-linux-gnu" | |
%"[closure@<i32 as core::iter::traits::accum::Sum<&i32>>::sum<core::slice::iter::Iter<'_, i32>>::{closure#0}]" = type {} | |
%"core::ptr::metadata::PtrRepr<[u8]>" = type { [2 x i64] } | |
%"alloc::vec::Vec<i32>" = type { { ptr, i64 }, i64 } | |
%"core::option::Option<(core::ptr::non_null::NonNull<u8>, core::alloc::layout::Layout)>" = type { [1 x i64], i64, [1 x i64] } | |
%"core::ptr::metadata::PtrRepr<[i32]>" = type { [2 x i64] } | |
@alloc_38a9d1c1fccd92e612dd2762da060982 = private unnamed_addr constant <{}> zeroinitializer, align 1 | |
; core::ptr::drop_in_place<alloc::vec::Vec<i32>> | |
; Function Attrs: nonlazybind uwtable | |
define internal void @"_ZN4core3ptr47drop_in_place$LT$alloc..vec..Vec$LT$i32$GT$$GT$17hb3dc2281931ad485E"(ptr noundef %_1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%0 = alloca { ptr, i32 }, align 8 | |
; invoke <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop | |
invoke void @"_ZN70_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17hcb37074b703f7c18E"(ptr noalias noundef align 8 dereferenceable(24) %_1) | |
to label %bb4 unwind label %cleanup | |
bb3: ; preds = %cleanup | |
; invoke core::ptr::drop_in_place<alloc::raw_vec::RawVec<i32>> | |
invoke void @"_ZN4core3ptr54drop_in_place$LT$alloc..raw_vec..RawVec$LT$i32$GT$$GT$17h2678ce18bd16e013E"(ptr noundef %_1) #11 | |
to label %bb1 unwind label %terminate | |
cleanup: ; preds = %start | |
%1 = landingpad { ptr, i32 } | |
cleanup | |
%2 = extractvalue { ptr, i32 } %1, 0 | |
%3 = extractvalue { ptr, i32 } %1, 1 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %0) | |
%4 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0 | |
store ptr %2, ptr %4, align 8 | |
%5 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
store i32 %3, ptr %5, align 8 | |
br label %bb3 | |
bb4: ; preds = %start | |
; call core::ptr::drop_in_place<alloc::raw_vec::RawVec<i32>> | |
call void @"_ZN4core3ptr54drop_in_place$LT$alloc..raw_vec..RawVec$LT$i32$GT$$GT$17h2678ce18bd16e013E"(ptr noundef %_1) | |
ret void | |
terminate: ; preds = %bb3 | |
%6 = landingpad { ptr, i32 } | |
filter [0 x ptr] zeroinitializer | |
%7 = extractvalue { ptr, i32 } %6, 0 | |
%8 = extractvalue { ptr, i32 } %6, 1 | |
; call core::panicking::panic_cannot_unwind | |
call void @_ZN4core9panicking19panic_cannot_unwind17h8eba4a39a2c9f037E() #12 | |
unreachable | |
bb1: ; preds = %bb3 | |
%9 = load ptr, ptr %0, align 8, !noundef !2 | |
%10 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
%11 = load i32, ptr %10, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %0) | |
%12 = insertvalue { ptr, i32 } poison, ptr %9, 0 | |
%13 = insertvalue { ptr, i32 } %12, i32 %11, 1 | |
resume { ptr, i32 } %13 | |
} | |
; core::ptr::drop_in_place<alloc::raw_vec::RawVec<i32>> | |
; Function Attrs: nonlazybind uwtable | |
define internal void @"_ZN4core3ptr54drop_in_place$LT$alloc..raw_vec..RawVec$LT$i32$GT$$GT$17h2678ce18bd16e013E"(ptr noundef %_1) unnamed_addr #0 { | |
start: | |
; call <alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop | |
call void @"_ZN77_$LT$alloc..raw_vec..RawVec$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17h33ac50ee524c2d34E"(ptr noalias noundef align 8 dereferenceable(16) %_1) | |
ret void | |
} | |
; core::iter::traits::iterator::Iterator::fold | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal noundef i32 @_ZN4core4iter6traits8iterator8Iterator4fold17hcc8c3ff255738eeaE(ptr noundef nonnull %0, ptr noundef %1, i32 noundef %init) unnamed_addr #1 personality ptr @rust_eh_personality { | |
start: | |
%2 = alloca { ptr, i32 }, align 8 | |
%_13 = alloca i8, align 1 | |
%_11 = alloca { i32, ptr }, align 8 | |
%_5 = alloca ptr, align 8 | |
%accum = alloca i32, align 4 | |
%f = alloca %"[closure@<i32 as core::iter::traits::accum::Sum<&i32>>::sum<core::slice::iter::Iter<'_, i32>>::{closure#0}]", align 1 | |
%self = alloca { ptr, ptr }, align 8 | |
%3 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 0 | |
store ptr %0, ptr %3, align 8 | |
%4 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
store ptr %1, ptr %4, align 8 | |
call void @llvm.lifetime.start.p0(i64 4, ptr %accum) | |
store i8 1, ptr %_13, align 1 | |
store i32 %init, ptr %accum, align 4 | |
br label %bb1 | |
bb1: ; preds = %bb4, %start | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_5) | |
; invoke <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next | |
%5 = invoke noundef align 4 dereferenceable_or_null(4) ptr @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h431448b387004534E"(ptr noalias noundef align 8 dereferenceable(16) %self) | |
to label %bb2 unwind label %cleanup | |
bb13: ; preds = %cleanup | |
%6 = load i8, ptr %_13, align 1, !range !3, !noundef !2 | |
%7 = trunc i8 %6 to i1 | |
br i1 %7, label %bb12, label %bb9 | |
cleanup: ; preds = %bb3, %bb1 | |
%8 = landingpad { ptr, i32 } | |
cleanup | |
%9 = extractvalue { ptr, i32 } %8, 0 | |
%10 = extractvalue { ptr, i32 } %8, 1 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %2) | |
%11 = getelementptr inbounds { ptr, i32 }, ptr %2, i32 0, i32 0 | |
store ptr %9, ptr %11, align 8 | |
%12 = getelementptr inbounds { ptr, i32 }, ptr %2, i32 0, i32 1 | |
store i32 %10, ptr %12, align 8 | |
br label %bb13 | |
bb2: ; preds = %bb1 | |
store ptr %5, ptr %_5, align 8 | |
%13 = load ptr, ptr %_5, align 8, !noundef !2 | |
%14 = ptrtoint ptr %13 to i64 | |
%15 = icmp eq i64 %14, 0 | |
%_7 = select i1 %15, i64 0, i64 1 | |
%16 = icmp eq i64 %_7, 1 | |
br i1 %16, label %bb3, label %bb5 | |
bb3: ; preds = %bb2 | |
%x = load ptr, ptr %_5, align 8, !nonnull !2, !align !4, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_11) | |
store i8 0, ptr %_13, align 1 | |
%_12 = load i32, ptr %accum, align 4, !noundef !2 | |
store i32 %_12, ptr %_11, align 8 | |
%17 = getelementptr inbounds { i32, ptr }, ptr %_11, i32 0, i32 1 | |
store ptr %x, ptr %17, align 8 | |
%18 = getelementptr inbounds { i32, ptr }, ptr %_11, i32 0, i32 0 | |
%19 = load i32, ptr %18, align 8, !noundef !2 | |
%20 = getelementptr inbounds { i32, ptr }, ptr %_11, i32 0, i32 1 | |
%21 = load ptr, ptr %20, align 8, !nonnull !2, !align !4, !noundef !2 | |
; invoke <i32 as core::iter::traits::accum::Sum<&i32>>::sum::{{closure}} | |
%_9 = invoke noundef i32 @"_ZN69_$LT$i32$u20$as$u20$core..iter..traits..accum..Sum$LT$$RF$i32$GT$$GT$3sum28_$u7b$$u7b$closure$u7d$$u7d$17he891d17de479f51fE"(ptr noalias noundef nonnull align 1 %f, i32 noundef %19, ptr noalias noundef readonly align 4 dereferenceable(4) %21) | |
to label %bb4 unwind label %cleanup | |
bb5: ; preds = %bb2 | |
br label %bb6 | |
bb6: ; preds = %bb5 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_5) | |
%22 = load i32, ptr %accum, align 4, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 4, ptr %accum) | |
br label %bb7 | |
bb7: ; preds = %bb6 | |
ret i32 %22 | |
bb4: ; preds = %bb3 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_11) | |
store i8 1, ptr %_13, align 1 | |
store i32 %_9, ptr %accum, align 4 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_5) | |
br label %bb1 | |
bb9: ; preds = %bb12, %bb13 | |
br label %bb10 | |
bb12: ; preds = %bb13 | |
br label %bb9 | |
bb10: ; preds = %bb9 | |
%23 = load ptr, ptr %2, align 8, !noundef !2 | |
%24 = getelementptr inbounds { ptr, i32 }, ptr %2, i32 0, i32 1 | |
%25 = load i32, ptr %24, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %2) | |
%26 = insertvalue { ptr, i32 } poison, ptr %23, 0 | |
%27 = insertvalue { ptr, i32 } %26, i32 %25, 1 | |
resume { ptr, i32 } %27 | |
} | |
; alloc::alloc::exchange_malloc | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal noundef ptr @_ZN5alloc5alloc15exchange_malloc17h18108c7c57c79a64E(i64 noundef %size, i64 noundef %align) unnamed_addr #1 { | |
start: | |
%self = alloca ptr, align 8 | |
%_4 = alloca { ptr, i64 }, align 8 | |
%layout = alloca { i64, i64 }, align 8 | |
%0 = icmp uge i64 %align, 1 | |
call void @llvm.assume(i1 %0) | |
%1 = icmp ule i64 %align, -9223372036854775808 | |
call void @llvm.assume(i1 %1) | |
%2 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
store i64 %size, ptr %2, align 8 | |
store i64 %align, ptr %layout, align 8 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_4) | |
%3 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 0 | |
%4 = load i64, ptr %3, align 8, !range !5, !noundef !2 | |
%5 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
%6 = load i64, ptr %5, align 8, !noundef !2 | |
; call alloc::alloc::Global::alloc_impl | |
%7 = call { ptr, i64 } @_ZN5alloc5alloc6Global10alloc_impl17hc0ca34628f99e68bE(ptr noalias noundef nonnull readonly align 1 @alloc_38a9d1c1fccd92e612dd2762da060982, i64 noundef %4, i64 noundef %6, i1 noundef zeroext false) | |
store { ptr, i64 } %7, ptr %_4, align 8 | |
%8 = load ptr, ptr %_4, align 8, !noundef !2 | |
%9 = ptrtoint ptr %8 to i64 | |
%10 = icmp eq i64 %9, 0 | |
%_5 = select i1 %10, i64 1, i64 0 | |
switch i64 %_5, label %bb2 [ | |
i64 0, label %bb3 | |
i64 1, label %bb1 | |
] | |
bb2: ; preds = %start | |
unreachable | |
bb3: ; preds = %start | |
%11 = getelementptr inbounds { ptr, i64 }, ptr %_4, i32 0, i32 0 | |
%ptr.0 = load ptr, ptr %11, align 8, !nonnull !2, !noundef !2 | |
%12 = getelementptr inbounds { ptr, i64 }, ptr %_4, i32 0, i32 1 | |
%ptr.1 = load i64, ptr %12, align 8, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %self) | |
store ptr %ptr.0, ptr %self, align 8 | |
%_18 = load ptr, ptr %self, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %self) | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_4) | |
ret ptr %_18 | |
bb1: ; preds = %start | |
%13 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 0 | |
%14 = load i64, ptr %13, align 8, !range !5, !noundef !2 | |
%15 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
%16 = load i64, ptr %15, align 8, !noundef !2 | |
; call alloc::alloc::handle_alloc_error | |
call void @_ZN5alloc5alloc18handle_alloc_error17h26afacdae864884fE(i64 noundef %14, i64 noundef %16) #13 | |
unreachable | |
} | |
; alloc::alloc::Global::alloc_impl | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal { ptr, i64 } @_ZN5alloc5alloc6Global10alloc_impl17hc0ca34628f99e68bE(ptr noalias noundef nonnull readonly align 1 %self, i64 noundef %0, i64 noundef %1, i1 noundef zeroext %zeroed) unnamed_addr #1 { | |
start: | |
%_77 = alloca { ptr, i64 }, align 8 | |
%_76 = alloca %"core::ptr::metadata::PtrRepr<[u8]>", align 8 | |
%_61 = alloca ptr, align 8 | |
%_60 = alloca ptr, align 8 | |
%_54 = alloca i64, align 8 | |
%_45 = alloca i64, align 8 | |
%_35 = alloca { ptr, i64 }, align 8 | |
%_34 = alloca %"core::ptr::metadata::PtrRepr<[u8]>", align 8 | |
%_22 = alloca i64, align 8 | |
%_18 = alloca { ptr, i64 }, align 8 | |
%self4 = alloca ptr, align 8 | |
%self3 = alloca ptr, align 8 | |
%_12 = alloca ptr, align 8 | |
%layout2 = alloca { i64, i64 }, align 8 | |
%layout1 = alloca { i64, i64 }, align 8 | |
%raw_ptr = alloca ptr, align 8 | |
%data = alloca ptr, align 8 | |
%_6 = alloca { ptr, i64 }, align 8 | |
%2 = alloca { ptr, i64 }, align 8 | |
%layout = alloca { i64, i64 }, align 8 | |
%3 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 0 | |
store i64 %0, ptr %3, align 8 | |
%4 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
store i64 %1, ptr %4, align 8 | |
%5 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
%size = load i64, ptr %5, align 8, !noundef !2 | |
%6 = icmp eq i64 %size, 0 | |
br i1 %6, label %bb2, label %bb1 | |
bb2: ; preds = %start | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_6) | |
call void @llvm.lifetime.start.p0(i64 8, ptr %data) | |
%self10 = load i64, ptr %layout, align 8, !range !5, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_22) | |
store i64 %self10, ptr %_22, align 8 | |
%_23 = load i64, ptr %_22, align 8, !range !5, !noundef !2 | |
%_24 = icmp uge i64 -9223372036854775808, %_23 | |
call void @llvm.assume(i1 %_24) | |
%_25 = icmp ule i64 1, %_23 | |
call void @llvm.assume(i1 %_25) | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_22) | |
%ptr11 = inttoptr i64 %_23 to ptr | |
store ptr %ptr11, ptr %data, align 8 | |
%_32 = load ptr, ptr %data, align 8, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_34) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_35) | |
store ptr %_32, ptr %_35, align 8 | |
%7 = getelementptr inbounds { ptr, i64 }, ptr %_35, i32 0, i32 1 | |
store i64 0, ptr %7, align 8 | |
%8 = getelementptr inbounds { ptr, i64 }, ptr %_35, i32 0, i32 0 | |
%9 = load ptr, ptr %8, align 8, !noundef !2 | |
%10 = getelementptr inbounds { ptr, i64 }, ptr %_35, i32 0, i32 1 | |
%11 = load i64, ptr %10, align 8, !noundef !2 | |
%12 = getelementptr inbounds { ptr, i64 }, ptr %_34, i32 0, i32 0 | |
store ptr %9, ptr %12, align 8 | |
%13 = getelementptr inbounds { ptr, i64 }, ptr %_34, i32 0, i32 1 | |
store i64 %11, ptr %13, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_35) | |
%14 = getelementptr inbounds { ptr, i64 }, ptr %_34, i32 0, i32 0 | |
%ptr.012 = load ptr, ptr %14, align 8, !noundef !2 | |
%15 = getelementptr inbounds { ptr, i64 }, ptr %_34, i32 0, i32 1 | |
%ptr.113 = load i64, ptr %15, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_34) | |
%16 = getelementptr inbounds { ptr, i64 }, ptr %_6, i32 0, i32 0 | |
store ptr %ptr.012, ptr %16, align 8 | |
%17 = getelementptr inbounds { ptr, i64 }, ptr %_6, i32 0, i32 1 | |
store i64 %ptr.113, ptr %17, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %data) | |
%18 = getelementptr inbounds { ptr, i64 }, ptr %_6, i32 0, i32 0 | |
%19 = load ptr, ptr %18, align 8, !nonnull !2, !noundef !2 | |
%20 = getelementptr inbounds { ptr, i64 }, ptr %_6, i32 0, i32 1 | |
%21 = load i64, ptr %20, align 8, !noundef !2 | |
%22 = getelementptr inbounds { ptr, i64 }, ptr %2, i32 0, i32 0 | |
store ptr %19, ptr %22, align 8 | |
%23 = getelementptr inbounds { ptr, i64 }, ptr %2, i32 0, i32 1 | |
store i64 %21, ptr %23, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_6) | |
br label %bb10 | |
bb1: ; preds = %start | |
call void @llvm.lifetime.start.p0(i64 8, ptr %raw_ptr) | |
br i1 %zeroed, label %bb3, label %bb4 | |
bb4: ; preds = %bb1 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %layout2) | |
%24 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 0 | |
%25 = load i64, ptr %24, align 8, !range !5, !noundef !2 | |
%26 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
%27 = load i64, ptr %26, align 8, !noundef !2 | |
%28 = getelementptr inbounds { i64, i64 }, ptr %layout2, i32 0, i32 0 | |
store i64 %25, ptr %28, align 8 | |
%29 = getelementptr inbounds { i64, i64 }, ptr %layout2, i32 0, i32 1 | |
store i64 %27, ptr %29, align 8 | |
%30 = getelementptr inbounds { i64, i64 }, ptr %layout2, i32 0, i32 1 | |
%_49 = load i64, ptr %30, align 8, !noundef !2 | |
%self6 = load i64, ptr %layout2, align 8, !range !5, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_54) | |
store i64 %self6, ptr %_54, align 8 | |
%_55 = load i64, ptr %_54, align 8, !range !5, !noundef !2 | |
%_56 = icmp uge i64 -9223372036854775808, %_55 | |
call void @llvm.assume(i1 %_56) | |
%_57 = icmp ule i64 1, %_55 | |
call void @llvm.assume(i1 %_57) | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_54) | |
%31 = call noundef ptr @__rust_alloc(i64 noundef %_49, i64 noundef %_55) #14 | |
store ptr %31, ptr %raw_ptr, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %layout2) | |
br label %bb5 | |
bb3: ; preds = %bb1 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %layout1) | |
%32 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 0 | |
%33 = load i64, ptr %32, align 8, !range !5, !noundef !2 | |
%34 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
%35 = load i64, ptr %34, align 8, !noundef !2 | |
%36 = getelementptr inbounds { i64, i64 }, ptr %layout1, i32 0, i32 0 | |
store i64 %33, ptr %36, align 8 | |
%37 = getelementptr inbounds { i64, i64 }, ptr %layout1, i32 0, i32 1 | |
store i64 %35, ptr %37, align 8 | |
%38 = getelementptr inbounds { i64, i64 }, ptr %layout1, i32 0, i32 1 | |
%_40 = load i64, ptr %38, align 8, !noundef !2 | |
%self5 = load i64, ptr %layout1, align 8, !range !5, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_45) | |
store i64 %self5, ptr %_45, align 8 | |
%_46 = load i64, ptr %_45, align 8, !range !5, !noundef !2 | |
%_47 = icmp uge i64 -9223372036854775808, %_46 | |
call void @llvm.assume(i1 %_47) | |
%_48 = icmp ule i64 1, %_46 | |
call void @llvm.assume(i1 %_48) | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_45) | |
%39 = call noundef ptr @__rust_alloc_zeroed(i64 noundef %_40, i64 noundef %_46) #14 | |
store ptr %39, ptr %raw_ptr, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %layout1) | |
br label %bb5 | |
bb5: ; preds = %bb4, %bb3 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_12) | |
call void @llvm.lifetime.start.p0(i64 8, ptr %self3) | |
call void @llvm.lifetime.start.p0(i64 8, ptr %self4) | |
%ptr = load ptr, ptr %raw_ptr, align 8, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_61) | |
store ptr %ptr, ptr %_61, align 8 | |
%ptr7 = load ptr, ptr %_61, align 8, !noundef !2 | |
%_63 = ptrtoint ptr %ptr7 to i64 | |
%_59 = icmp eq i64 %_63, 0 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_61) | |
%_58 = xor i1 %_59, true | |
br i1 %_58, label %bb13, label %bb14 | |
bb14: ; preds = %bb5 | |
store ptr null, ptr %self4, align 8 | |
br label %bb15 | |
bb13: ; preds = %bb5 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_60) | |
store ptr %ptr, ptr %_60, align 8 | |
%40 = load ptr, ptr %_60, align 8, !nonnull !2, !noundef !2 | |
store ptr %40, ptr %self4, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_60) | |
br label %bb15 | |
bb15: ; preds = %bb14, %bb13 | |
%41 = load ptr, ptr %self4, align 8, !noundef !2 | |
%42 = ptrtoint ptr %41 to i64 | |
%43 = icmp eq i64 %42, 0 | |
%_68 = select i1 %43, i64 0, i64 1 | |
switch i64 %_68, label %bb8 [ | |
i64 0, label %bb16 | |
i64 1, label %bb17 | |
] | |
bb8: ; preds = %bb6, %bb18, %bb15 | |
unreachable | |
bb16: ; preds = %bb15 | |
store ptr null, ptr %self3, align 8 | |
br label %bb18 | |
bb17: ; preds = %bb15 | |
%v = load ptr, ptr %self4, align 8, !nonnull !2, !noundef !2 | |
store ptr %v, ptr %self3, align 8 | |
br label %bb18 | |
bb18: ; preds = %bb16, %bb17 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %self4) | |
%44 = load ptr, ptr %self3, align 8, !noundef !2 | |
%45 = ptrtoint ptr %44 to i64 | |
%46 = icmp eq i64 %45, 0 | |
%_70 = select i1 %46, i64 1, i64 0 | |
switch i64 %_70, label %bb8 [ | |
i64 0, label %bb20 | |
i64 1, label %bb19 | |
] | |
bb20: ; preds = %bb18 | |
%v8 = load ptr, ptr %self3, align 8, !nonnull !2, !noundef !2 | |
store ptr %v8, ptr %_12, align 8 | |
br label %bb6 | |
bb19: ; preds = %bb18 | |
store ptr null, ptr %_12, align 8 | |
br label %bb6 | |
bb6: ; preds = %bb20, %bb19 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %self3) | |
%47 = load ptr, ptr %_12, align 8, !noundef !2 | |
%48 = ptrtoint ptr %47 to i64 | |
%49 = icmp eq i64 %48, 0 | |
%_16 = select i1 %49, i64 1, i64 0 | |
switch i64 %_16, label %bb8 [ | |
i64 0, label %bb7 | |
i64 1, label %bb9 | |
] | |
bb7: ; preds = %bb6 | |
%ptr9 = load ptr, ptr %_12, align 8, !nonnull !2, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_12) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_18) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_76) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_77) | |
store ptr %ptr9, ptr %_77, align 8 | |
%50 = getelementptr inbounds { ptr, i64 }, ptr %_77, i32 0, i32 1 | |
store i64 %size, ptr %50, align 8 | |
%51 = getelementptr inbounds { ptr, i64 }, ptr %_77, i32 0, i32 0 | |
%52 = load ptr, ptr %51, align 8, !noundef !2 | |
%53 = getelementptr inbounds { ptr, i64 }, ptr %_77, i32 0, i32 1 | |
%54 = load i64, ptr %53, align 8, !noundef !2 | |
%55 = getelementptr inbounds { ptr, i64 }, ptr %_76, i32 0, i32 0 | |
store ptr %52, ptr %55, align 8 | |
%56 = getelementptr inbounds { ptr, i64 }, ptr %_76, i32 0, i32 1 | |
store i64 %54, ptr %56, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_77) | |
%57 = getelementptr inbounds { ptr, i64 }, ptr %_76, i32 0, i32 0 | |
%ptr.0 = load ptr, ptr %57, align 8, !noundef !2 | |
%58 = getelementptr inbounds { ptr, i64 }, ptr %_76, i32 0, i32 1 | |
%ptr.1 = load i64, ptr %58, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_76) | |
%59 = getelementptr inbounds { ptr, i64 }, ptr %_18, i32 0, i32 0 | |
store ptr %ptr.0, ptr %59, align 8 | |
%60 = getelementptr inbounds { ptr, i64 }, ptr %_18, i32 0, i32 1 | |
store i64 %ptr.1, ptr %60, align 8 | |
%61 = getelementptr inbounds { ptr, i64 }, ptr %_18, i32 0, i32 0 | |
%62 = load ptr, ptr %61, align 8, !nonnull !2, !noundef !2 | |
%63 = getelementptr inbounds { ptr, i64 }, ptr %_18, i32 0, i32 1 | |
%64 = load i64, ptr %63, align 8, !noundef !2 | |
%65 = getelementptr inbounds { ptr, i64 }, ptr %2, i32 0, i32 0 | |
store ptr %62, ptr %65, align 8 | |
%66 = getelementptr inbounds { ptr, i64 }, ptr %2, i32 0, i32 1 | |
store i64 %64, ptr %66, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_18) | |
call void @llvm.lifetime.end.p0(i64 8, ptr %raw_ptr) | |
br label %bb10 | |
bb9: ; preds = %bb6 | |
store ptr null, ptr %2, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_12) | |
call void @llvm.lifetime.end.p0(i64 8, ptr %raw_ptr) | |
br label %bb10 | |
bb10: ; preds = %bb2, %bb7, %bb9 | |
%67 = getelementptr inbounds { ptr, i64 }, ptr %2, i32 0, i32 0 | |
%68 = load ptr, ptr %67, align 8, !noundef !2 | |
%69 = getelementptr inbounds { ptr, i64 }, ptr %2, i32 0, i32 1 | |
%70 = load i64, ptr %69, align 8 | |
%71 = insertvalue { ptr, i64 } poison, ptr %68, 0 | |
%72 = insertvalue { ptr, i64 } %71, i64 %70, 1 | |
ret { ptr, i64 } %72 | |
} | |
; alloc::slice::hack::into_vec | |
; Function Attrs: nonlazybind uwtable | |
define internal void @_ZN5alloc5slice4hack8into_vec17h520c20a1d6db7743E(ptr noalias nocapture noundef sret(%"alloc::vec::Vec<i32>") dereferenceable(24) %0, ptr noalias noundef nonnull align 4 %b.0, i64 noundef %b.1) unnamed_addr #0 { | |
start: | |
%_35 = alloca ptr, align 8 | |
%_34 = alloca ptr, align 8 | |
%_33 = alloca { ptr, i64 }, align 8 | |
%pointer = alloca { ptr, i64 }, align 8 | |
%_25 = alloca { ptr, i64 }, align 8 | |
%_17 = alloca { ptr, i64 }, align 8 | |
%b = alloca { ptr, i64 }, align 8 | |
%_11 = alloca { ptr, i64 }, align 8 | |
%_6 = alloca { ptr, i64 }, align 8 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_6) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_11) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %b) | |
%1 = getelementptr inbounds { ptr, i64 }, ptr %b, i32 0, i32 0 | |
store ptr %b.0, ptr %1, align 8 | |
%2 = getelementptr inbounds { ptr, i64 }, ptr %b, i32 0, i32 1 | |
store i64 %b.1, ptr %2, align 8 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_17) | |
%3 = getelementptr inbounds { ptr, i64 }, ptr %b, i32 0, i32 0 | |
%b.01 = load ptr, ptr %3, align 8, !nonnull !2, !align !4, !noundef !2 | |
%4 = getelementptr inbounds { ptr, i64 }, ptr %b, i32 0, i32 1 | |
%b.12 = load i64, ptr %4, align 8, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_25) | |
%5 = getelementptr inbounds { ptr, i64 }, ptr %_25, i32 0, i32 0 | |
store ptr %b.01, ptr %5, align 8 | |
%6 = getelementptr inbounds { ptr, i64 }, ptr %_25, i32 0, i32 1 | |
store i64 %b.12, ptr %6, align 8 | |
%7 = getelementptr inbounds { ptr, i64 }, ptr %_25, i32 0, i32 0 | |
%self.0 = load ptr, ptr %7, align 8, !nonnull !2, !noundef !2 | |
%8 = getelementptr inbounds { ptr, i64 }, ptr %_25, i32 0, i32 1 | |
%self.1 = load i64, ptr %8, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_25) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %pointer) | |
%9 = getelementptr inbounds { ptr, i64 }, ptr %pointer, i32 0, i32 0 | |
store ptr %self.0, ptr %9, align 8 | |
%10 = getelementptr inbounds { ptr, i64 }, ptr %pointer, i32 0, i32 1 | |
store i64 %self.1, ptr %10, align 8 | |
%11 = getelementptr inbounds { ptr, i64 }, ptr %pointer, i32 0, i32 0 | |
%12 = load ptr, ptr %11, align 8, !nonnull !2, !noundef !2 | |
%13 = getelementptr inbounds { ptr, i64 }, ptr %pointer, i32 0, i32 1 | |
%14 = load i64, ptr %13, align 8, !noundef !2 | |
%15 = getelementptr inbounds { ptr, i64 }, ptr %_17, i32 0, i32 0 | |
store ptr %12, ptr %15, align 8 | |
%16 = getelementptr inbounds { ptr, i64 }, ptr %_17, i32 0, i32 1 | |
store i64 %14, ptr %16, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %pointer) | |
%17 = getelementptr inbounds { ptr, i64 }, ptr %_17, i32 0, i32 0 | |
%18 = load ptr, ptr %17, align 8, !nonnull !2, !noundef !2 | |
%19 = getelementptr inbounds { ptr, i64 }, ptr %_17, i32 0, i32 1 | |
%20 = load i64, ptr %19, align 8, !noundef !2 | |
%21 = getelementptr inbounds { ptr, i64 }, ptr %_11, i32 0, i32 0 | |
store ptr %18, ptr %21, align 8 | |
%22 = getelementptr inbounds { ptr, i64 }, ptr %_11, i32 0, i32 1 | |
store i64 %20, ptr %22, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_17) | |
call void @llvm.lifetime.end.p0(i64 16, ptr %b) | |
%23 = getelementptr inbounds { ptr, i64 }, ptr %_11, i32 0, i32 0 | |
%leaked.0 = load ptr, ptr %23, align 8, !nonnull !2, !noundef !2 | |
%24 = getelementptr inbounds { ptr, i64 }, ptr %_11, i32 0, i32 1 | |
%leaked.1 = load i64, ptr %24, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_11) | |
%25 = getelementptr inbounds { ptr, i64 }, ptr %_6, i32 0, i32 0 | |
store ptr %leaked.0, ptr %25, align 8 | |
%26 = getelementptr inbounds { ptr, i64 }, ptr %_6, i32 0, i32 1 | |
store i64 %leaked.1, ptr %26, align 8 | |
%27 = getelementptr inbounds { ptr, i64 }, ptr %_6, i32 0, i32 0 | |
%b.03 = load ptr, ptr %27, align 8, !noundef !2 | |
%28 = getelementptr inbounds { ptr, i64 }, ptr %_6, i32 0, i32 1 | |
%b.14 = load i64, ptr %28, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_6) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_33) | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_34) | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_35) | |
store ptr %b.03, ptr %_35, align 8 | |
%29 = load ptr, ptr %_35, align 8, !nonnull !2, !noundef !2 | |
store ptr %29, ptr %_34, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_35) | |
%30 = load ptr, ptr %_34, align 8, !nonnull !2, !noundef !2 | |
store ptr %30, ptr %_33, align 8 | |
%31 = getelementptr inbounds { ptr, i64 }, ptr %_33, i32 0, i32 1 | |
store i64 %b.1, ptr %31, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_34) | |
%32 = getelementptr inbounds { ptr, i64 }, ptr %_33, i32 0, i32 0 | |
%33 = load ptr, ptr %32, align 8, !nonnull !2, !noundef !2 | |
%34 = getelementptr inbounds { ptr, i64 }, ptr %_33, i32 0, i32 1 | |
%35 = load i64, ptr %34, align 8, !noundef !2 | |
%36 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
store ptr %33, ptr %36, align 8 | |
%37 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %35, ptr %37, align 8 | |
%38 = getelementptr inbounds %"alloc::vec::Vec<i32>", ptr %0, i32 0, i32 1 | |
store i64 %b.1, ptr %38, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_33) | |
ret void | |
} | |
; alloc::raw_vec::RawVec<T,A>::current_memory | |
; Function Attrs: nonlazybind uwtable | |
define internal void @"_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$14current_memory17h5a25eae40810b383E"(ptr noalias nocapture noundef sret(%"core::option::Option<(core::ptr::non_null::NonNull<u8>, core::alloc::layout::Layout)>") dereferenceable(24) %0, ptr noalias noundef readonly align 8 dereferenceable(16) %self) unnamed_addr #0 { | |
start: | |
%1 = alloca i64, align 8 | |
%_27 = alloca ptr, align 8 | |
%self2 = alloca ptr, align 8 | |
%self1 = alloca ptr, align 8 | |
%_12 = alloca ptr, align 8 | |
%_11 = alloca { ptr, { i64, i64 } }, align 8 | |
%layout = alloca { i64, i64 }, align 8 | |
%_2 = alloca i8, align 1 | |
call void @llvm.lifetime.start.p0(i64 1, ptr %_2) | |
br i1 false, label %bb1, label %bb2 | |
bb2: ; preds = %start | |
%2 = getelementptr inbounds { ptr, i64 }, ptr %self, i32 0, i32 1 | |
%_4 = load i64, ptr %2, align 8, !noundef !2 | |
%_3 = icmp eq i64 %_4, 0 | |
%3 = zext i1 %_3 to i8 | |
store i8 %3, ptr %_2, align 1 | |
br label %bb3 | |
bb1: ; preds = %start | |
store i8 1, ptr %_2, align 1 | |
br label %bb3 | |
bb3: ; preds = %bb2, %bb1 | |
%4 = load i8, ptr %_2, align 1, !range !3, !noundef !2 | |
%5 = trunc i8 %4 to i1 | |
br i1 %5, label %bb4, label %bb5 | |
bb5: ; preds = %bb3 | |
%6 = getelementptr inbounds { ptr, i64 }, ptr %self, i32 0, i32 1 | |
%rhs = load i64, ptr %6, align 8, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %1) | |
%7 = mul nuw i64 4, %rhs | |
store i64 %7, ptr %1, align 8 | |
%size = load i64, ptr %1, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %1) | |
call void @llvm.assume(i1 true) | |
call void @llvm.assume(i1 true) | |
%8 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
store i64 %size, ptr %8, align 8 | |
store i64 4, ptr %layout, align 8 | |
call void @llvm.lifetime.start.p0(i64 24, ptr %_11) | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_12) | |
call void @llvm.lifetime.start.p0(i64 8, ptr %self1) | |
%self3 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %self2) | |
store ptr %self3, ptr %self2, align 8 | |
%_26 = load ptr, ptr %self2, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %self2) | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_27) | |
store ptr %_26, ptr %_27, align 8 | |
%9 = load ptr, ptr %_27, align 8, !nonnull !2, !noundef !2 | |
store ptr %9, ptr %self1, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_27) | |
%self4 = load ptr, ptr %self1, align 8, !nonnull !2, !noundef !2 | |
store ptr %self4, ptr %_12, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %self1) | |
%10 = load ptr, ptr %_12, align 8, !nonnull !2, !noundef !2 | |
store ptr %10, ptr %_11, align 8 | |
%11 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 0 | |
%12 = load i64, ptr %11, align 8, !range !5, !noundef !2 | |
%13 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
%14 = load i64, ptr %13, align 8, !noundef !2 | |
%15 = getelementptr inbounds { ptr, { i64, i64 } }, ptr %_11, i32 0, i32 1 | |
%16 = getelementptr inbounds { i64, i64 }, ptr %15, i32 0, i32 0 | |
store i64 %12, ptr %16, align 8 | |
%17 = getelementptr inbounds { i64, i64 }, ptr %15, i32 0, i32 1 | |
store i64 %14, ptr %17, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_12) | |
call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %_11, i64 24, i1 false) | |
call void @llvm.lifetime.end.p0(i64 24, ptr %_11) | |
br label %bb6 | |
bb4: ; preds = %bb3 | |
%18 = getelementptr inbounds %"core::option::Option<(core::ptr::non_null::NonNull<u8>, core::alloc::layout::Layout)>", ptr %0, i32 0, i32 1 | |
store i64 0, ptr %18, align 8 | |
br label %bb6 | |
bb6: ; preds = %bb5, %bb4 | |
call void @llvm.lifetime.end.p0(i64 1, ptr %_2) | |
ret void | |
} | |
; <alloc::alloc::Global as core::alloc::Allocator>::deallocate | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal void @"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT$10deallocate17h4e26160bbb1566d6E"(ptr noalias noundef nonnull readonly align 1 %self, ptr noundef nonnull %ptr, i64 noundef %0, i64 noundef %1) unnamed_addr #1 { | |
start: | |
%_14 = alloca i64, align 8 | |
%layout1 = alloca { i64, i64 }, align 8 | |
%layout = alloca { i64, i64 }, align 8 | |
%2 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 0 | |
store i64 %0, ptr %2, align 8 | |
%3 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
store i64 %1, ptr %3, align 8 | |
%4 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
%_4 = load i64, ptr %4, align 8, !noundef !2 | |
%5 = icmp eq i64 %_4, 0 | |
br i1 %5, label %bb2, label %bb1 | |
bb2: ; preds = %start | |
br label %bb3 | |
bb1: ; preds = %start | |
call void @llvm.lifetime.start.p0(i64 16, ptr %layout1) | |
%6 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 0 | |
%7 = load i64, ptr %6, align 8, !range !5, !noundef !2 | |
%8 = getelementptr inbounds { i64, i64 }, ptr %layout, i32 0, i32 1 | |
%9 = load i64, ptr %8, align 8, !noundef !2 | |
%10 = getelementptr inbounds { i64, i64 }, ptr %layout1, i32 0, i32 0 | |
store i64 %7, ptr %10, align 8 | |
%11 = getelementptr inbounds { i64, i64 }, ptr %layout1, i32 0, i32 1 | |
store i64 %9, ptr %11, align 8 | |
%12 = getelementptr inbounds { i64, i64 }, ptr %layout1, i32 0, i32 1 | |
%_9 = load i64, ptr %12, align 8, !noundef !2 | |
%self2 = load i64, ptr %layout1, align 8, !range !5, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_14) | |
store i64 %self2, ptr %_14, align 8 | |
%_15 = load i64, ptr %_14, align 8, !range !5, !noundef !2 | |
%_16 = icmp uge i64 -9223372036854775808, %_15 | |
call void @llvm.assume(i1 %_16) | |
%_17 = icmp ule i64 1, %_15 | |
call void @llvm.assume(i1 %_17) | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_14) | |
call void @__rust_dealloc(ptr noundef %ptr, i64 noundef %_9, i64 noundef %_15) #14 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %layout1) | |
br label %bb3 | |
bb3: ; preds = %bb2, %bb1 | |
ret void | |
} | |
; <i32 as core::iter::traits::accum::Sum<&i32>>::sum::{{closure}} | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal noundef i32 @"_ZN69_$LT$i32$u20$as$u20$core..iter..traits..accum..Sum$LT$$RF$i32$GT$$GT$3sum28_$u7b$$u7b$closure$u7d$$u7d$17he891d17de479f51fE"(ptr noalias noundef nonnull align 1 %_1, i32 noundef %a, ptr noalias noundef readonly align 4 dereferenceable(4) %b) unnamed_addr #1 { | |
start: | |
%other = load i32, ptr %b, align 4, !noundef !2 | |
%0 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %a, i32 %other) | |
%_5.0 = extractvalue { i32, i1 } %0, 0 | |
%_5.1 = extractvalue { i32, i1 } %0, 1 | |
ret i32 %_5.0 | |
} | |
; <alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop | |
; Function Attrs: nonlazybind uwtable | |
define internal void @"_ZN70_$LT$alloc..vec..Vec$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17hcb37074b703f7c18E"(ptr noalias noundef align 8 dereferenceable(24) %self) unnamed_addr #0 { | |
start: | |
%_11 = alloca { ptr, i64 }, align 8 | |
%_10 = alloca %"core::ptr::metadata::PtrRepr<[i32]>", align 8 | |
%self1 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
%0 = getelementptr inbounds %"alloc::vec::Vec<i32>", ptr %self, i32 0, i32 1 | |
%len = load i64, ptr %0, align 8, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_10) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_11) | |
store ptr %self1, ptr %_11, align 8 | |
%1 = getelementptr inbounds { ptr, i64 }, ptr %_11, i32 0, i32 1 | |
store i64 %len, ptr %1, align 8 | |
%2 = getelementptr inbounds { ptr, i64 }, ptr %_11, i32 0, i32 0 | |
%3 = load ptr, ptr %2, align 8, !noundef !2 | |
%4 = getelementptr inbounds { ptr, i64 }, ptr %_11, i32 0, i32 1 | |
%5 = load i64, ptr %4, align 8, !noundef !2 | |
%6 = getelementptr inbounds { ptr, i64 }, ptr %_10, i32 0, i32 0 | |
store ptr %3, ptr %6, align 8 | |
%7 = getelementptr inbounds { ptr, i64 }, ptr %_10, i32 0, i32 1 | |
store i64 %5, ptr %7, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_11) | |
%8 = getelementptr inbounds { ptr, i64 }, ptr %_10, i32 0, i32 0 | |
%_2.0 = load ptr, ptr %8, align 8, !noundef !2 | |
%9 = getelementptr inbounds { ptr, i64 }, ptr %_10, i32 0, i32 1 | |
%_2.1 = load i64, ptr %9, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_10) | |
ret void | |
} | |
; <alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop | |
; Function Attrs: nonlazybind uwtable | |
define internal void @"_ZN77_$LT$alloc..raw_vec..RawVec$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17h33ac50ee524c2d34E"(ptr noalias noundef align 8 dereferenceable(16) %self) unnamed_addr #0 { | |
start: | |
%_2 = alloca %"core::option::Option<(core::ptr::non_null::NonNull<u8>, core::alloc::layout::Layout)>", align 8 | |
call void @llvm.lifetime.start.p0(i64 24, ptr %_2) | |
; call alloc::raw_vec::RawVec<T,A>::current_memory | |
call void @"_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$14current_memory17h5a25eae40810b383E"(ptr noalias nocapture noundef sret(%"core::option::Option<(core::ptr::non_null::NonNull<u8>, core::alloc::layout::Layout)>") dereferenceable(24) %_2, ptr noalias noundef readonly align 8 dereferenceable(16) %self) | |
%0 = getelementptr inbounds %"core::option::Option<(core::ptr::non_null::NonNull<u8>, core::alloc::layout::Layout)>", ptr %_2, i32 0, i32 1 | |
%1 = load i64, ptr %0, align 8, !range !6, !noundef !2 | |
%2 = icmp eq i64 %1, 0 | |
%_4 = select i1 %2, i64 0, i64 1 | |
%3 = icmp eq i64 %_4, 1 | |
br i1 %3, label %bb2, label %bb4 | |
bb2: ; preds = %start | |
%ptr = load ptr, ptr %_2, align 8, !nonnull !2, !noundef !2 | |
%4 = getelementptr inbounds { ptr, { i64, i64 } }, ptr %_2, i32 0, i32 1 | |
%5 = getelementptr inbounds { i64, i64 }, ptr %4, i32 0, i32 0 | |
%layout.0 = load i64, ptr %5, align 8, !range !5, !noundef !2 | |
%6 = getelementptr inbounds { i64, i64 }, ptr %4, i32 0, i32 1 | |
%layout.1 = load i64, ptr %6, align 8, !noundef !2 | |
; call <alloc::alloc::Global as core::alloc::Allocator>::deallocate | |
call void @"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT$10deallocate17h4e26160bbb1566d6E"(ptr noalias noundef nonnull readonly align 1 %self, ptr noundef nonnull %ptr, i64 noundef %layout.0, i64 noundef %layout.1) | |
br label %bb4 | |
bb4: ; preds = %bb2, %start | |
call void @llvm.lifetime.end.p0(i64 24, ptr %_2) | |
ret void | |
} | |
; <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal noundef align 4 dereferenceable_or_null(4) ptr @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17h431448b387004534E"(ptr noalias noundef align 8 dereferenceable(16) %self) unnamed_addr #1 { | |
start: | |
%_30 = alloca ptr, align 8 | |
%_16 = alloca ptr, align 8 | |
%_6 = alloca i8, align 1 | |
%0 = alloca ptr, align 8 | |
br i1 true, label %bb1, label %bb2 | |
bb2: ; preds = %bb1, %start | |
call void @llvm.lifetime.start.p0(i64 1, ptr %_6) | |
br i1 false, label %bb3, label %bb4 | |
bb1: ; preds = %start | |
%1 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1 = load ptr, ptr %1, align 8, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_16) | |
store ptr %self1, ptr %_16, align 8 | |
%ptr = load ptr, ptr %_16, align 8, !noundef !2 | |
%_19 = ptrtoint ptr %ptr to i64 | |
%_4 = icmp eq i64 %_19, 0 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_16) | |
%_3 = xor i1 %_4, true | |
call void @llvm.assume(i1 %_3) | |
br label %bb2 | |
bb4: ; preds = %bb2 | |
%self3 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
%2 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%_13 = load ptr, ptr %2, align 8, !noundef !2 | |
%3 = icmp eq ptr %self3, %_13 | |
%4 = zext i1 %3 to i8 | |
store i8 %4, ptr %_6, align 1 | |
br label %bb5 | |
bb3: ; preds = %bb2 | |
%5 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self2 = load ptr, ptr %5, align 8, !noundef !2 | |
%_8 = ptrtoint ptr %self2 to i64 | |
%6 = icmp eq i64 %_8, 0 | |
%7 = zext i1 %6 to i8 | |
store i8 %7, ptr %_6, align 1 | |
br label %bb5 | |
bb5: ; preds = %bb4, %bb3 | |
%8 = load i8, ptr %_6, align 1, !range !3, !noundef !2 | |
%9 = trunc i8 %8 to i1 | |
br i1 %9, label %bb6, label %bb7 | |
bb7: ; preds = %bb5 | |
%old = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
br i1 false, label %bb9, label %bb10 | |
bb6: ; preds = %bb5 | |
store ptr null, ptr %0, align 8 | |
br label %bb8 | |
bb8: ; preds = %bb11, %bb6 | |
call void @llvm.lifetime.end.p0(i64 1, ptr %_6) | |
%10 = load ptr, ptr %0, align 8, !align !4, !noundef !2 | |
ret ptr %10 | |
bb10: ; preds = %bb7 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_30) | |
%self5 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
%_34 = getelementptr inbounds i32, ptr %self5, i64 1 | |
store ptr %_34, ptr %_30, align 8 | |
%11 = load ptr, ptr %_30, align 8, !nonnull !2, !noundef !2 | |
store ptr %11, ptr %self, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_30) | |
br label %bb11 | |
bb9: ; preds = %bb7 | |
%12 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self4 = load ptr, ptr %12, align 8, !noundef !2 | |
%_27 = ptrtoint ptr %self4 to i64 | |
%new_len = sub i64 %_27, 1 | |
%_29 = inttoptr i64 %new_len to ptr | |
%13 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
store ptr %_29, ptr %13, align 8 | |
br label %bb11 | |
bb11: ; preds = %bb10, %bb9 | |
store ptr %old, ptr %0, align 8 | |
br label %bb8 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define noundef i32 @sum_me() unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%0 = alloca { ptr, i32 }, align 8 | |
%_28 = alloca ptr, align 8 | |
%_23 = alloca { ptr, i64 }, align 8 | |
%_22 = alloca %"core::ptr::metadata::PtrRepr<[i32]>", align 8 | |
%_4 = alloca %"alloc::vec::Vec<i32>", align 8 | |
%self = alloca { ptr, ptr }, align 8 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %self) | |
call void @llvm.lifetime.start.p0(i64 24, ptr %_4) | |
; call alloc::alloc::exchange_malloc | |
%_8 = call noundef ptr @_ZN5alloc5alloc15exchange_malloc17h18108c7c57c79a64E(i64 noundef 12, i64 noundef 4) | |
%1 = getelementptr inbounds [3 x i32], ptr %_8, i64 0, i64 0 | |
store i32 1, ptr %1, align 4 | |
%2 = getelementptr inbounds [3 x i32], ptr %_8, i64 0, i64 1 | |
store i32 2, ptr %2, align 4 | |
%3 = getelementptr inbounds [3 x i32], ptr %_8, i64 0, i64 2 | |
store i32 3, ptr %3, align 4 | |
; call alloc::slice::hack::into_vec | |
call void @_ZN5alloc5slice4hack8into_vec17h520c20a1d6db7743E(ptr noalias nocapture noundef sret(%"alloc::vec::Vec<i32>") dereferenceable(24) %_4, ptr noalias noundef nonnull align 4 %_8, i64 noundef 3) | |
%self1 = load ptr, ptr %_4, align 8, !nonnull !2, !noundef !2 | |
%4 = getelementptr inbounds %"alloc::vec::Vec<i32>", ptr %_4, i32 0, i32 1 | |
%len = load i64, ptr %4, align 8, !noundef !2 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_22) | |
call void @llvm.lifetime.start.p0(i64 16, ptr %_23) | |
store ptr %self1, ptr %_23, align 8 | |
%5 = getelementptr inbounds { ptr, i64 }, ptr %_23, i32 0, i32 1 | |
store i64 %len, ptr %5, align 8 | |
%6 = getelementptr inbounds { ptr, i64 }, ptr %_23, i32 0, i32 0 | |
%7 = load ptr, ptr %6, align 8, !noundef !2 | |
%8 = getelementptr inbounds { ptr, i64 }, ptr %_23, i32 0, i32 1 | |
%9 = load i64, ptr %8, align 8, !noundef !2 | |
%10 = getelementptr inbounds { ptr, i64 }, ptr %_22, i32 0, i32 0 | |
store ptr %7, ptr %10, align 8 | |
%11 = getelementptr inbounds { ptr, i64 }, ptr %_22, i32 0, i32 1 | |
store i64 %9, ptr %11, align 8 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_23) | |
%12 = getelementptr inbounds { ptr, i64 }, ptr %_22, i32 0, i32 0 | |
%_18.0 = load ptr, ptr %12, align 8, !noundef !2 | |
%13 = getelementptr inbounds { ptr, i64 }, ptr %_22, i32 0, i32 1 | |
%_18.1 = load i64, ptr %13, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %_22) | |
%end = getelementptr inbounds i32, ptr %_18.0, i64 %_18.1 | |
call void @llvm.lifetime.start.p0(i64 8, ptr %_28) | |
store ptr %_18.0, ptr %_28, align 8 | |
%14 = load ptr, ptr %_28, align 8, !nonnull !2, !noundef !2 | |
store ptr %14, ptr %self, align 8 | |
%15 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
store ptr %end, ptr %15, align 8 | |
call void @llvm.lifetime.end.p0(i64 8, ptr %_28) | |
%16 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 0 | |
%17 = load ptr, ptr %16, align 8, !nonnull !2, !noundef !2 | |
%18 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%19 = load ptr, ptr %18, align 8, !noundef !2 | |
; invoke core::iter::traits::iterator::Iterator::fold | |
%20 = invoke noundef i32 @_ZN4core4iter6traits8iterator8Iterator4fold17hcc8c3ff255738eeaE(ptr noundef nonnull %17, ptr noundef %19, i32 noundef 0) | |
to label %bb6 unwind label %cleanup | |
bb3: ; preds = %cleanup | |
; invoke core::ptr::drop_in_place<alloc::vec::Vec<i32>> | |
invoke void @"_ZN4core3ptr47drop_in_place$LT$alloc..vec..Vec$LT$i32$GT$$GT$17hb3dc2281931ad485E"(ptr noundef %_4) #11 | |
to label %bb4 unwind label %terminate | |
cleanup: ; preds = %start | |
%21 = landingpad { ptr, i32 } | |
cleanup | |
%22 = extractvalue { ptr, i32 } %21, 0 | |
%23 = extractvalue { ptr, i32 } %21, 1 | |
call void @llvm.lifetime.start.p0(i64 16, ptr %0) | |
%24 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0 | |
store ptr %22, ptr %24, align 8 | |
%25 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
store i32 %23, ptr %25, align 8 | |
br label %bb3 | |
bb6: ; preds = %start | |
call void @llvm.lifetime.end.p0(i64 16, ptr %self) | |
; call core::ptr::drop_in_place<alloc::vec::Vec<i32>> | |
call void @"_ZN4core3ptr47drop_in_place$LT$alloc..vec..Vec$LT$i32$GT$$GT$17hb3dc2281931ad485E"(ptr noundef %_4) | |
call void @llvm.lifetime.end.p0(i64 24, ptr %_4) | |
ret i32 %20 | |
terminate: ; preds = %bb3 | |
%26 = landingpad { ptr, i32 } | |
filter [0 x ptr] zeroinitializer | |
%27 = extractvalue { ptr, i32 } %26, 0 | |
%28 = extractvalue { ptr, i32 } %26, 1 | |
; call core::panicking::panic_cannot_unwind | |
call void @_ZN4core9panicking19panic_cannot_unwind17h8eba4a39a2c9f037E() #12 | |
unreachable | |
bb4: ; preds = %bb3 | |
%29 = load ptr, ptr %0, align 8, !noundef !2 | |
%30 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
%31 = load i32, ptr %30, align 8, !noundef !2 | |
call void @llvm.lifetime.end.p0(i64 16, ptr %0) | |
%32 = insertvalue { ptr, i32 } poison, ptr %29, 0 | |
%33 = insertvalue { ptr, i32 } %32, i32 %31, 1 | |
resume { ptr, i32 } %33 | |
} | |
; Function Attrs: nonlazybind uwtable | |
declare noundef i32 @rust_eh_personality(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) unnamed_addr #0 | |
; core::panicking::panic_cannot_unwind | |
; Function Attrs: cold noinline noreturn nounwind nonlazybind uwtable | |
declare void @_ZN4core9panicking19panic_cannot_unwind17h8eba4a39a2c9f037E() unnamed_addr #2 | |
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) | |
declare void @llvm.assume(i1 noundef) #3 | |
; alloc::alloc::handle_alloc_error | |
; Function Attrs: cold noreturn nonlazybind uwtable | |
declare void @_ZN5alloc5alloc18handle_alloc_error17h26afacdae864884fE(i64 noundef, i64 noundef) unnamed_addr #4 | |
; Function Attrs: nounwind nonlazybind allockind("alloc,zeroed,aligned") allocsize(0) uwtable | |
declare noalias noundef ptr @__rust_alloc_zeroed(i64 noundef, i64 allocalign noundef) unnamed_addr #5 | |
; Function Attrs: nounwind nonlazybind allockind("alloc,uninitialized,aligned") allocsize(0) uwtable | |
declare noalias noundef ptr @__rust_alloc(i64 noundef, i64 allocalign noundef) unnamed_addr #6 | |
; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) | |
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7 | |
; Function Attrs: nounwind nonlazybind allockind("free") uwtable | |
declare void @__rust_dealloc(ptr allocptr noundef, i64 noundef, i64 noundef) unnamed_addr #8 | |
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) | |
declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32) #9 | |
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) | |
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #10 | |
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) | |
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #10 | |
attributes #0 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #1 = { inlinehint nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #2 = { cold noinline noreturn nounwind nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #3 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) } | |
attributes #4 = { cold noreturn nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #5 = { nounwind nonlazybind allockind("alloc,zeroed,aligned") allocsize(0) uwtable "alloc-family"="__rust_alloc" "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #6 = { nounwind nonlazybind allockind("alloc,uninitialized,aligned") allocsize(0) uwtable "alloc-family"="__rust_alloc" "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } | |
attributes #8 = { nounwind nonlazybind allockind("free") uwtable "alloc-family"="__rust_alloc" "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } | |
attributes #10 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } | |
attributes #11 = { noinline } | |
attributes #12 = { noinline noreturn nounwind } | |
attributes #13 = { noreturn } | |
attributes #14 = { nounwind } | |
!llvm.module.flags = !{!0, !1} | |
!0 = !{i32 8, !"PIC Level", i32 2} | |
!1 = !{i32 2, !"RtLibUseGOT", i32 1} | |
!2 = !{} | |
!3 = !{i8 0, i8 2} | |
!4 = !{i64 4} | |
!5 = !{i64 1, i64 -9223372036854775807} | |
!6 = !{i64 0, i64 -9223372036854775807} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment