Skip to content

Instantly share code, notes, and snippets.

@nikic
Created May 25, 2023 10:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nikic/4a714ea550bf2252543570585f642af2 to your computer and use it in GitHub Desktop.
Save nikic/4a714ea550bf2252543570585f642af2 to your computer and use it in GitHub Desktop.
; 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}
; 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