Skip to content

Instantly share code, notes, and snippets.

@nikic
Created July 7, 2023 08:28
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/9ec0bc02d451e7abd0f8d78800c2206c to your computer and use it in GitHub Desktop.
Save nikic/9ec0bc02d451e7abd0f8d78800c2206c to your computer and use it in GitHub Desktop.
; ModuleID = 'issue_45222.92a671e8c0281bbe-cgu.0'
source_filename = "issue_45222.92a671e8c0281bbe-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::ops::control_flow::ControlFlow<core::ops::try_trait::NeverShortCircuitResidual>::Continue" = type { {} }
%"core::iter::adapters::rev::Rev<core::ops::range::RangeInclusive<u64>>" = type { %"core::ops::range::RangeInclusive<u64>" }
; <core::ops::try_trait::NeverShortCircuit<T> as core::ops::try_trait::FromResidual>::from_residual
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN103_$LT$core..ops..try_trait..NeverShortCircuit$LT$T$GT$$u20$as$u20$core..ops..try_trait..FromResidual$GT$13from_residual17hf4a5ce29d7025cd2E"() unnamed_addr #0 {
start:
unreachable
}
; <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_back17h12a2e9672c39afecE"(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$2le17h61c79233147be05eE"(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 = %bb11, %bb12
%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$2lt17h0ae41e5c0e438e91E"(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
bb7: ; preds = %bb2
%6 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 2
store i8 1, ptr %6, 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
%7 = call noundef i64 @"_ZN4core5clone5impls52_$LT$impl$u20$core..clone..Clone$u20$for$u20$u64$GT$5clone17haa9457727c12d027E"(ptr noalias noundef readonly align 8 dereferenceable(8) %_14)
store i64 %7, 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$5clone17haa9457727c12d027E"(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_unchecked17h0405671d70271ac8E"(i64 noundef %_10, i64 noundef 1)
%dest = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1
%8 = load i64, ptr %dest, align 8, !noundef !3
store i64 %8, ptr %result, align 8
store i64 %n, ptr %dest, align 8
br label %bb9
bb9: ; preds = %bb4, %bb7
%9 = load i64, ptr %result, align 8, !noundef !3
%10 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 1
store i64 %9, ptr %10, align 8
store i64 1, ptr %0, align 8
call void @llvm.lifetime.end.p0(i64 8, ptr %result)
br label %bb10
bb10: ; preds = %bb1, %bb9
%11 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 0
%12 = load i64, ptr %11, align 8, !range !4, !noundef !3
%13 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 1
%14 = load i64, ptr %13, align 8
%15 = insertvalue { i64, i64 } poison, i64 %12, 0
%16 = insertvalue { i64, i64 } %15, i64 %14, 1
ret { i64, i64 } %16
}
; <core::ops::range::RangeInclusive<T> as core::iter::range::RangeInclusiveIteratorImpl>::spec_try_rfold
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN107_$LT$core..ops..range..RangeInclusive$LT$T$GT$$u20$as$u20$core..iter..range..RangeInclusiveIteratorImpl$GT$14spec_try_rfold17h87529341d3e5f428E"(ptr noalias noundef align 8 dereferenceable(24) %self, ptr noalias noundef align 8 dereferenceable(8) %0) unnamed_addr #0 personality ptr @rust_eh_personality {
start:
%1 = alloca { ptr, i32 }, align 8
%_41 = alloca i8, align 1
%_40 = alloca i8, align 1
%_39 = alloca i8, align 1
%_31 = alloca i64, align 8
%_28 = alloca %"core::ops::control_flow::ControlFlow<core::ops::try_trait::NeverShortCircuitResidual>::Continue", align 1
%_20 = alloca i64, align 8
%_17 = alloca %"core::ops::control_flow::ControlFlow<core::ops::try_trait::NeverShortCircuitResidual>::Continue", align 1
%_4 = alloca i8, align 1
%f = alloca ptr, align 8
store ptr %0, ptr %f, align 8
store i8 1, ptr %_41, align 1
call void @llvm.lifetime.start.p0(i64 1, ptr %_4)
%2 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 2
%3 = load i8, ptr %2, align 8, !range !2, !noundef !3
%_42 = trunc i8 %3 to i1
br i1 %_42, label %bb37, label %bb38
bb38: ; preds = %start
%_46 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1
; invoke core::cmp::impls::<impl core::cmp::PartialOrd for u64>::le
%_44 = invoke noundef zeroext i1 @"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$u64$GT$2le17h61c79233147be05eE"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %_46)
to label %bb40 unwind label %cleanup
bb37: ; preds = %start
store i8 1, ptr %_4, align 1
br label %bb39
bb29: ; preds = %bb33, %bb34, %cleanup
br label %bb36
cleanup: ; preds = %bb1, %bb38
%4 = landingpad { ptr, i32 }
cleanup
%5 = extractvalue { ptr, i32 } %4, 0
%6 = extractvalue { ptr, i32 } %4, 1
call void @llvm.lifetime.start.p0(i64 16, ptr %1)
%7 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 0
store ptr %5, ptr %7, align 8
%8 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 1
store i32 %6, ptr %8, align 8
br label %bb29
bb40: ; preds = %bb38
%_43 = xor i1 %_44, true
%9 = zext i1 %_43 to i8
store i8 %9, ptr %_4, align 1
br label %bb39
bb39: ; preds = %bb37, %bb40
%10 = load i8, ptr %_4, align 1, !range !2, !noundef !3
%11 = trunc i8 %10 to i1
br i1 %11, label %bb1, label %bb4
bb4: ; preds = %bb39
call void @llvm.lifetime.end.p0(i64 1, ptr %_4)
store i8 0, ptr %_41, align 1
store i8 1, ptr %_40, align 1
br label %bb5
bb1: ; preds = %bb39
store i8 0, ptr %_41, align 1
; invoke <core::ops::try_trait::NeverShortCircuit<T> as core::ops::try_trait::Try>::from_output
invoke void @"_ZN94_$LT$core..ops..try_trait..NeverShortCircuit$LT$T$GT$$u20$as$u20$core..ops..try_trait..Try$GT$11from_output17h519aeed33b98503cE"()
to label %bb2 unwind label %cleanup
bb5: ; preds = %bb12, %bb4
%_10 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1
; invoke core::cmp::impls::<impl core::cmp::PartialOrd for u64>::lt
%_8 = invoke noundef zeroext i1 @"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$u64$GT$2lt17h0ae41e5c0e438e91E"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %_10)
to label %bb6 unwind label %cleanup1
bb34: ; preds = %bb31, %bb32, %cleanup1
%12 = load i8, ptr %_40, align 1, !range !2, !noundef !3
%13 = trunc i8 %12 to i1
br i1 %13, label %bb33, label %bb29
cleanup1: ; preds = %bb13, %bb10, %bb9, %bb8, %bb7, %bb22, %bb24, %bb19, %bb15, %bb5
%14 = landingpad { ptr, i32 }
cleanup
%15 = extractvalue { ptr, i32 } %14, 0
%16 = extractvalue { ptr, i32 } %14, 1
call void @llvm.lifetime.start.p0(i64 16, ptr %1)
%17 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 0
store ptr %15, ptr %17, align 8
%18 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 1
store i32 %16, ptr %18, align 8
br label %bb34
bb6: ; preds = %bb5
br i1 %_8, label %bb7, label %bb15
bb15: ; preds = %bb6
%19 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 2
store i8 1, ptr %19, align 8
%_27 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1
; invoke core::cmp::impls::<impl core::cmp::PartialEq for u64>::eq
%_25 = invoke noundef zeroext i1 @"_ZN4core3cmp5impls54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$u64$GT$2eq17hffcea47d6c9b0b4dE"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %_27)
to label %bb16 unwind label %cleanup1
bb7: ; preds = %bb6
%_13 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1
; invoke core::clone::impls::<impl core::clone::Clone for u64>::clone
%_12 = invoke noundef i64 @"_ZN4core5clone5impls52_$LT$impl$u20$core..clone..Clone$u20$for$u20$u64$GT$5clone17haa9457727c12d027E"(ptr noalias noundef readonly align 8 dereferenceable(8) %_13)
to label %bb8 unwind label %cleanup1
bb16: ; preds = %bb15
br i1 %_25, label %bb17, label %bb24
bb24: ; preds = %bb21, %bb16
store i8 0, ptr %_40, align 1
; invoke <core::ops::try_trait::NeverShortCircuit<T> as core::ops::try_trait::Try>::from_output
invoke void @"_ZN94_$LT$core..ops..try_trait..NeverShortCircuit$LT$T$GT$$u20$as$u20$core..ops..try_trait..Try$GT$11from_output17h519aeed33b98503cE"()
to label %bb25 unwind label %cleanup1
bb17: ; preds = %bb16
call void @llvm.lifetime.start.p0(i64 8, ptr %_31)
store i8 0, ptr %_40, align 1
store i8 1, ptr %_39, align 1
; invoke core::clone::impls::<impl core::clone::Clone for u64>::clone
%_33 = invoke noundef i64 @"_ZN4core5clone5impls52_$LT$impl$u20$core..clone..Clone$u20$for$u20$u64$GT$5clone17haa9457727c12d027E"(ptr noalias noundef readonly align 8 dereferenceable(8) %self)
to label %bb18 unwind label %cleanup2
bb32: ; preds = %cleanup2
%20 = load i8, ptr %_39, align 1, !range !2, !noundef !3
%21 = trunc i8 %20 to i1
br i1 %21, label %bb31, label %bb34
cleanup2: ; preds = %bb18, %bb17
%22 = landingpad { ptr, i32 }
cleanup
%23 = extractvalue { ptr, i32 } %22, 0
%24 = extractvalue { ptr, i32 } %22, 1
call void @llvm.lifetime.start.p0(i64 16, ptr %1)
%25 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 0
store ptr %23, ptr %25, align 8
%26 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 1
store i32 %24, ptr %26, align 8
br label %bb32
bb18: ; preds = %bb17
store i8 0, ptr %_39, align 1
store i64 %_33, ptr %_31, align 8
%27 = load i64, ptr %_31, align 8, !noundef !3
; invoke core::ops::try_trait::NeverShortCircuit<T>::wrap_mut_2::{{closure}}
invoke void @"_ZN4core3ops9try_trait26NeverShortCircuit$LT$T$GT$10wrap_mut_228_$u7b$$u7b$closure$u7d$$u7d$17h307f5114cbd75641E"(ptr noalias noundef align 8 dereferenceable(8) %f, i64 noundef %27)
to label %bb19 unwind label %cleanup2
bb19: ; preds = %bb18
call void @llvm.lifetime.end.p0(i64 8, ptr %_31)
; invoke <core::ops::try_trait::NeverShortCircuit<T> as core::ops::try_trait::Try>::branch
invoke void @"_ZN94_$LT$core..ops..try_trait..NeverShortCircuit$LT$T$GT$$u20$as$u20$core..ops..try_trait..Try$GT$6branch17hcce65fc46deca911E"()
to label %bb20 unwind label %cleanup1
bb20: ; preds = %bb19
switch i64 0, label %bb3 [
i64 0, label %bb21
i64 1, label %bb22
]
bb3: ; preds = %bb11, %bb20
unreachable
bb21: ; preds = %bb20
br label %bb24
bb22: ; preds = %bb20
; invoke <core::ops::try_trait::NeverShortCircuit<T> as core::ops::try_trait::FromResidual>::from_residual
invoke void @"_ZN103_$LT$core..ops..try_trait..NeverShortCircuit$LT$T$GT$$u20$as$u20$core..ops..try_trait..FromResidual$GT$13from_residual17hf4a5ce29d7025cd2E"()
to label %bb23 unwind label %cleanup1
bb25: ; preds = %bb24
br label %bb28
bb28: ; preds = %bb27, %bb25
ret void
bb23: ; preds = %bb22
br label %bb26
bb26: ; preds = %bb14, %bb23
br label %bb27
bb31: ; preds = %bb32
br label %bb34
bb8: ; preds = %bb7
; invoke <u64 as core::iter::range::Step>::backward_unchecked
%n = invoke noundef i64 @"_ZN47_$LT$u64$u20$as$u20$core..iter..range..Step$GT$18backward_unchecked17h0405671d70271ac8E"(i64 noundef %_12, i64 noundef 1)
to label %bb9 unwind label %cleanup1
bb9: ; preds = %bb8
%dest = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1
%n3 = load i64, ptr %dest, align 8, !noundef !3
store i64 %n, ptr %dest, align 8
call void @llvm.lifetime.start.p0(i64 8, ptr %_20)
store i8 0, ptr %_40, align 1
store i64 %n3, ptr %_20, align 8
%28 = load i64, ptr %_20, align 8, !noundef !3
; invoke core::ops::try_trait::NeverShortCircuit<T>::wrap_mut_2::{{closure}}
invoke void @"_ZN4core3ops9try_trait26NeverShortCircuit$LT$T$GT$10wrap_mut_228_$u7b$$u7b$closure$u7d$$u7d$17h307f5114cbd75641E"(ptr noalias noundef align 8 dereferenceable(8) %f, i64 noundef %28)
to label %bb10 unwind label %cleanup1
bb10: ; preds = %bb9
call void @llvm.lifetime.end.p0(i64 8, ptr %_20)
; invoke <core::ops::try_trait::NeverShortCircuit<T> as core::ops::try_trait::Try>::branch
invoke void @"_ZN94_$LT$core..ops..try_trait..NeverShortCircuit$LT$T$GT$$u20$as$u20$core..ops..try_trait..Try$GT$6branch17hcce65fc46deca911E"()
to label %bb11 unwind label %cleanup1
bb11: ; preds = %bb10
switch i64 0, label %bb3 [
i64 0, label %bb12
i64 1, label %bb13
]
bb12: ; preds = %bb11
store i8 1, ptr %_40, align 1
br label %bb5
bb13: ; preds = %bb11
; invoke <core::ops::try_trait::NeverShortCircuit<T> as core::ops::try_trait::FromResidual>::from_residual
invoke void @"_ZN103_$LT$core..ops..try_trait..NeverShortCircuit$LT$T$GT$$u20$as$u20$core..ops..try_trait..FromResidual$GT$13from_residual17hf4a5ce29d7025cd2E"()
to label %bb14 unwind label %cleanup1
bb14: ; preds = %bb13
br label %bb26
bb27: ; preds = %bb2, %bb26
br label %bb28
bb33: ; preds = %bb34
br label %bb29
bb2: ; preds = %bb1
call void @llvm.lifetime.end.p0(i64 1, ptr %_4)
br label %bb27
bb36: ; preds = %bb29
%29 = load i8, ptr %_41, align 1, !range !2, !noundef !3
%30 = trunc i8 %29 to i1
br i1 %30, label %bb35, label %bb30
bb30: ; preds = %bb35, %bb36
%31 = load ptr, ptr %1, align 8, !noundef !3
%32 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 1
%33 = load i32, ptr %32, align 8, !noundef !3
call void @llvm.lifetime.end.p0(i64 16, ptr %1)
%34 = insertvalue { ptr, i32 } poison, ptr %31, 0
%35 = insertvalue { ptr, i32 } %34, i32 %33, 1
resume { ptr, i32 } %35
bb35: ; preds = %bb36
br label %bb30
}
; <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_unchecked17h5de6fa8b4c603b44E"(i64 noundef %start1, i64 noundef %n) unnamed_addr #0 {
start:
%0 = add nuw i64 %start1, %n
ret i64 %0
}
; <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_unchecked17h0405671d70271ac8E"(i64 noundef %start1, i64 noundef %n) unnamed_addr #0 {
start:
%0 = sub nuw i64 %start1, %n
ret i64 %0
}
; core::cmp::impls::<impl core::cmp::PartialEq for u64>::eq
; Function Attrs: inlinehint nonlazybind uwtable
define internal noundef zeroext i1 @"_ZN4core3cmp5impls54_$LT$impl$u20$core..cmp..PartialEq$u20$for$u20$u64$GT$2eq17hffcea47d6c9b0b4dE"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %other) unnamed_addr #0 {
start:
%_3 = load i64, ptr %self, align 8, !noundef !3
%_4 = load i64, ptr %other, align 8, !noundef !3
%0 = icmp eq i64 %_3, %_4
ret i1 %0
}
; 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$2le17h61c79233147be05eE"(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$2lt17h0ae41e5c0e438e91E"(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::ops::try_trait::NeverShortCircuit<T>::wrap_mut_2::{{closure}}
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN4core3ops9try_trait26NeverShortCircuit$LT$T$GT$10wrap_mut_228_$u7b$$u7b$closure$u7d$$u7d$17h307f5114cbd75641E"(ptr noalias noundef align 8 dereferenceable(8) %_1, i64 noundef %b) unnamed_addr #0 {
start:
%_6 = alloca i64, align 8
call void @llvm.lifetime.start.p0(i64 8, ptr %_6)
store i64 %b, ptr %_6, align 8
%0 = load i64, ptr %_6, align 8, !noundef !3
; call core::iter::traits::iterator::Iterator::for_each::call::{{closure}}
call void @"_ZN4core4iter6traits8iterator8Iterator8for_each4call28_$u7b$$u7b$closure$u7d$$u7d$17h6ad39fe04aef364eE"(ptr noalias noundef align 8 dereferenceable(8) %_1, i64 noundef %0)
call void @llvm.lifetime.end.p0(i64 8, ptr %_6)
ret void
}
; core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next
; Function Attrs: inlinehint nonlazybind uwtable
define internal { i64, i64 } @"_ZN4core4iter5range101_$LT$impl$u20$core..iter..traits..iterator..Iterator$u20$for$u20$core..ops..range..Range$LT$A$GT$$GT$4next17hc34df5242b59ea8dE"(ptr noalias noundef align 8 dereferenceable(16) %self) unnamed_addr #0 {
start:
; call <core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next
%0 = call { i64, i64 } @"_ZN89_$LT$core..ops..range..Range$LT$T$GT$$u20$as$u20$core..iter..range..RangeIteratorImpl$GT$9spec_next17h3bdea5ec41d1bfe8E"(ptr noalias noundef align 8 dereferenceable(16) %self)
%1 = extractvalue { i64, i64 } %0, 0
%2 = extractvalue { i64, i64 } %0, 1
%3 = insertvalue { i64, i64 } poison, i64 %1, 0
%4 = insertvalue { i64, i64 } %3, i64 %2, 1
ret { i64, i64 } %4
}
; core::iter::range::<impl core::iter::traits::double_ended::DoubleEndedIterator for core::ops::range::RangeInclusive<A>>::rfold
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN4core4iter5range125_$LT$impl$u20$core..iter..traits..double_ended..DoubleEndedIterator$u20$for$u20$core..ops..range..RangeInclusive$LT$A$GT$$GT$5rfold17he4e8655f46a3812cE"(ptr noalias nocapture noundef dereferenceable(24) %self, ptr noalias noundef align 8 dereferenceable(8) %fold) unnamed_addr #0 personality ptr @rust_eh_personality {
start:
%0 = alloca { ptr, i32 }, align 8
%f = alloca ptr, align 8
call void @llvm.lifetime.start.p0(i64 8, ptr %f)
store ptr %fold, ptr %f, align 8
%1 = load ptr, ptr %f, align 8, !nonnull !3, !align !5, !noundef !3
; invoke <core::ops::range::RangeInclusive<T> as core::iter::range::RangeInclusiveIteratorImpl>::spec_try_rfold
invoke void @"_ZN107_$LT$core..ops..range..RangeInclusive$LT$T$GT$$u20$as$u20$core..iter..range..RangeInclusiveIteratorImpl$GT$14spec_try_rfold17h87529341d3e5f428E"(ptr noalias noundef align 8 dereferenceable(24) %self, ptr noalias noundef align 8 dereferenceable(8) %1)
to label %bb6 unwind label %cleanup
bb5: ; preds = %cleanup
br i1 false, label %bb4, label %bb2
cleanup: ; preds = %start
%2 = landingpad { ptr, i32 }
cleanup
%3 = extractvalue { ptr, i32 } %2, 0
%4 = extractvalue { ptr, i32 } %2, 1
call void @llvm.lifetime.start.p0(i64 16, ptr %0)
%5 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0
store ptr %3, ptr %5, align 8
%6 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1
store i32 %4, ptr %6, align 8
br label %bb5
bb6: ; preds = %start
call void @llvm.lifetime.end.p0(i64 8, ptr %f)
ret void
bb2: ; preds = %bb4, %bb5
%7 = load ptr, ptr %0, align 8, !noundef !3
%8 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1
%9 = load i32, ptr %8, align 8, !noundef !3
call void @llvm.lifetime.end.p0(i64 16, ptr %0)
%10 = insertvalue { ptr, i32 } poison, ptr %7, 0
%11 = insertvalue { ptr, i32 } %10, i32 %9, 1
resume { ptr, i32 } %11
bb4: ; preds = %bb5
br label %bb2
}
; core::iter::traits::iterator::Iterator::fold
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @_ZN4core4iter6traits8iterator8Iterator4fold17hf000747592b80338E(i64 noundef %0, i64 noundef %1, ptr noalias noundef readonly align 8 dereferenceable(8) %2, ptr noalias noundef align 8 dereferenceable(8) %3) unnamed_addr #0 personality ptr @rust_eh_personality {
start:
%4 = alloca { ptr, i32 }, align 8
%_13 = alloca i8, align 1
%_11 = alloca i64, align 8
%_5 = alloca { i64, i64 }, align 8
%f = alloca { ptr, ptr }, align 8
%self = alloca { i64, i64 }, align 8
%5 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 0
store i64 %0, ptr %5, align 8
%6 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1
store i64 %1, ptr %6, align 8
%7 = getelementptr inbounds { ptr, ptr }, ptr %f, i32 0, i32 0
store ptr %2, ptr %7, align 8
%8 = getelementptr inbounds { ptr, ptr }, ptr %f, i32 0, i32 1
store ptr %3, ptr %8, align 8
store i8 1, ptr %_13, align 1
br label %bb1
bb1: ; preds = %bb4, %start
call void @llvm.lifetime.start.p0(i64 16, ptr %_5)
; invoke core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next
%9 = invoke { i64, i64 } @"_ZN4core4iter5range101_$LT$impl$u20$core..iter..traits..iterator..Iterator$u20$for$u20$core..ops..range..Range$LT$A$GT$$GT$4next17hc34df5242b59ea8dE"(ptr noalias noundef align 8 dereferenceable(16) %self)
to label %bb2 unwind label %cleanup
bb13: ; preds = %cleanup
%10 = load i8, ptr %_13, align 1, !range !2, !noundef !3
%11 = trunc i8 %10 to i1
br i1 %11, label %bb12, label %bb9
cleanup: ; preds = %bb3, %bb1
%12 = landingpad { ptr, i32 }
cleanup
%13 = extractvalue { ptr, i32 } %12, 0
%14 = extractvalue { ptr, i32 } %12, 1
call void @llvm.lifetime.start.p0(i64 16, ptr %4)
%15 = getelementptr inbounds { ptr, i32 }, ptr %4, i32 0, i32 0
store ptr %13, ptr %15, align 8
%16 = getelementptr inbounds { ptr, i32 }, ptr %4, i32 0, i32 1
store i32 %14, ptr %16, align 8
br label %bb13
bb2: ; preds = %bb1
store { i64, i64 } %9, ptr %_5, align 8
%_7 = load i64, ptr %_5, align 8, !range !4, !noundef !3
%17 = icmp eq i64 %_7, 1
br i1 %17, label %bb3, label %bb5
bb3: ; preds = %bb2
%18 = getelementptr inbounds { i64, i64 }, ptr %_5, i32 0, i32 1
%x = load i64, ptr %18, align 8, !noundef !3
call void @llvm.lifetime.start.p0(i64 8, ptr %_11)
store i8 0, ptr %_13, align 1
store i64 %x, ptr %_11, align 8
%19 = load i64, ptr %_11, align 8, !noundef !3
; invoke core::iter::traits::iterator::Iterator::for_each::call::{{closure}}
invoke void @"_ZN4core4iter6traits8iterator8Iterator8for_each4call28_$u7b$$u7b$closure$u7d$$u7d$17hadf3d18d52770f9fE"(ptr noalias noundef align 8 dereferenceable(16) %f, i64 noundef %19)
to label %bb4 unwind label %cleanup
bb5: ; preds = %bb2
br label %bb6
bb4: ; preds = %bb3
call void @llvm.lifetime.end.p0(i64 8, ptr %_11)
store i8 1, ptr %_13, align 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_5)
br label %bb1
bb6: ; preds = %bb5
call void @llvm.lifetime.end.p0(i64 16, ptr %_5)
br label %bb7
bb7: ; preds = %bb6
ret void
bb9: ; preds = %bb12, %bb13
br label %bb10
bb12: ; preds = %bb13
br label %bb9
bb10: ; preds = %bb9
%20 = load ptr, ptr %4, align 8, !noundef !3
%21 = getelementptr inbounds { ptr, i32 }, ptr %4, i32 0, i32 1
%22 = load i32, ptr %21, align 8, !noundef !3
call void @llvm.lifetime.end.p0(i64 16, ptr %4)
%23 = insertvalue { ptr, i32 } poison, ptr %20, 0
%24 = insertvalue { ptr, i32 } %23, i32 %22, 1
resume { ptr, i32 } %24
}
; core::iter::traits::iterator::Iterator::for_each
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @_ZN4core4iter6traits8iterator8Iterator8for_each17h3ee852a0270b0c55E(ptr noalias nocapture noundef dereferenceable(24) %self, ptr noalias noundef align 8 dereferenceable(8) %f) unnamed_addr #0 personality ptr @rust_eh_personality {
start:
%0 = alloca { ptr, i32 }, align 8
%_5 = alloca ptr, align 8
%_4 = alloca %"core::iter::adapters::rev::Rev<core::ops::range::RangeInclusive<u64>>", align 8
call void @llvm.lifetime.start.p0(i64 24, ptr %_4)
call void @llvm.memcpy.p0.p0.i64(ptr align 8 %_4, ptr align 8 %self, i64 24, i1 false)
call void @llvm.lifetime.start.p0(i64 8, ptr %_5)
store ptr %f, ptr %_5, align 8
%1 = load ptr, ptr %_5, align 8, !nonnull !3, !align !5, !noundef !3
; invoke <core::iter::adapters::rev::Rev<I> as core::iter::traits::iterator::Iterator>::fold
invoke void @"_ZN98_$LT$core..iter..adapters..rev..Rev$LT$I$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4fold17h435289598eb14167E"(ptr noalias nocapture noundef dereferenceable(24) %_4, ptr noalias noundef align 8 dereferenceable(8) %1)
to label %bb1 unwind label %cleanup
bb4: ; preds = %cleanup
br i1 false, label %bb3, label %bb2
cleanup: ; preds = %start
%2 = landingpad { ptr, i32 }
cleanup
%3 = extractvalue { ptr, i32 } %2, 0
%4 = extractvalue { ptr, i32 } %2, 1
call void @llvm.lifetime.start.p0(i64 16, ptr %0)
%5 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0
store ptr %3, ptr %5, align 8
%6 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1
store i32 %4, ptr %6, align 8
br label %bb4
bb1: ; preds = %start
call void @llvm.lifetime.end.p0(i64 8, ptr %_5)
call void @llvm.lifetime.end.p0(i64 24, ptr %_4)
ret void
bb2: ; preds = %bb3, %bb4
%7 = load ptr, ptr %0, align 8, !noundef !3
%8 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1
%9 = load i32, ptr %8, align 8, !noundef !3
call void @llvm.lifetime.end.p0(i64 16, ptr %0)
%10 = insertvalue { ptr, i32 } poison, ptr %7, 0
%11 = insertvalue { ptr, i32 } %10, i32 %9, 1
resume { ptr, i32 } %11
bb3: ; preds = %bb4
br label %bb2
}
; core::iter::traits::iterator::Iterator::for_each
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @_ZN4core4iter6traits8iterator8Iterator8for_each17hc7f3cbecc5d904ceE(i64 noundef %self.0, i64 noundef %self.1, ptr noalias noundef readonly align 8 dereferenceable(8) %f.0, ptr noalias noundef align 8 dereferenceable(8) %f.1) unnamed_addr #0 personality ptr @rust_eh_personality {
start:
%0 = alloca { ptr, i32 }, align 8
%_5 = alloca { ptr, ptr }, align 8
call void @llvm.lifetime.start.p0(i64 16, ptr %_5)
%1 = getelementptr inbounds { ptr, ptr }, ptr %_5, i32 0, i32 0
store ptr %f.0, ptr %1, align 8
%2 = getelementptr inbounds { ptr, ptr }, ptr %_5, i32 0, i32 1
store ptr %f.1, ptr %2, align 8
%3 = getelementptr inbounds { ptr, ptr }, ptr %_5, i32 0, i32 0
%4 = load ptr, ptr %3, align 8, !nonnull !3, !align !5, !noundef !3
%5 = getelementptr inbounds { ptr, ptr }, ptr %_5, i32 0, i32 1
%6 = load ptr, ptr %5, align 8, !nonnull !3, !align !5, !noundef !3
; invoke core::iter::traits::iterator::Iterator::fold
invoke void @_ZN4core4iter6traits8iterator8Iterator4fold17hf000747592b80338E(i64 noundef %self.0, i64 noundef %self.1, ptr noalias noundef readonly align 8 dereferenceable(8) %4, ptr noalias noundef align 8 dereferenceable(8) %6)
to label %bb1 unwind label %cleanup
bb4: ; preds = %cleanup
br i1 false, label %bb3, label %bb2
cleanup: ; preds = %start
%7 = landingpad { ptr, i32 }
cleanup
%8 = extractvalue { ptr, i32 } %7, 0
%9 = extractvalue { ptr, i32 } %7, 1
call void @llvm.lifetime.start.p0(i64 16, ptr %0)
%10 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0
store ptr %8, ptr %10, align 8
%11 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1
store i32 %9, ptr %11, align 8
br label %bb4
bb1: ; preds = %start
call void @llvm.lifetime.end.p0(i64 16, ptr %_5)
ret void
bb2: ; preds = %bb3, %bb4
%12 = load ptr, ptr %0, align 8, !noundef !3
%13 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1
%14 = load i32, ptr %13, align 8, !noundef !3
call void @llvm.lifetime.end.p0(i64 16, ptr %0)
%15 = insertvalue { ptr, i32 } poison, ptr %12, 0
%16 = insertvalue { ptr, i32 } %15, i32 %14, 1
resume { ptr, i32 } %16
bb3: ; preds = %bb4
br label %bb2
}
; core::iter::traits::iterator::Iterator::for_each::call::{{closure}}
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN4core4iter6traits8iterator8Iterator8for_each4call28_$u7b$$u7b$closure$u7d$$u7d$17h6ad39fe04aef364eE"(ptr noalias noundef align 8 dereferenceable(8) %_1, i64 noundef %item) unnamed_addr #0 {
start:
%_5 = alloca i64, align 8
call void @llvm.lifetime.start.p0(i64 8, ptr %_5)
store i64 %item, ptr %_5, align 8
%0 = load i64, ptr %_5, align 8, !noundef !3
; call issue_45222::foo3r::{{closure}}::{{closure}}
call void @"_ZN11issue_452225foo3r28_$u7b$$u7b$closure$u7d$$u7d$28_$u7b$$u7b$closure$u7d$$u7d$17h63eb898456361ec5E"(ptr noalias noundef align 8 dereferenceable(8) %_1, i64 noundef %0)
call void @llvm.lifetime.end.p0(i64 8, ptr %_5)
ret void
}
; core::iter::traits::iterator::Iterator::for_each::call::{{closure}}
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN4core4iter6traits8iterator8Iterator8for_each4call28_$u7b$$u7b$closure$u7d$$u7d$17hadf3d18d52770f9fE"(ptr noalias noundef align 8 dereferenceable(16) %_1, i64 noundef %item) unnamed_addr #0 {
start:
%_5 = alloca i64, align 8
call void @llvm.lifetime.start.p0(i64 8, ptr %_5)
store i64 %item, ptr %_5, align 8
%0 = load i64, ptr %_5, align 8, !noundef !3
; call issue_45222::foo3r::{{closure}}
call void @"_ZN11issue_452225foo3r28_$u7b$$u7b$closure$u7d$$u7d$17h19a29c2a72d09367E"(ptr noalias noundef align 8 dereferenceable(16) %_1, i64 noundef %0)
call void @llvm.lifetime.end.p0(i64 8, ptr %_5)
ret void
}
; 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$5clone17haa9457727c12d027E"(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_next17h3bdea5ec41d1bfe8E"(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$2lt17h0ae41e5c0e438e91E"(ptr noalias noundef readonly align 8 dereferenceable(8) %self, ptr noalias noundef readonly align 8 dereferenceable(8) %_4)
br i1 %_2, label %bb2, label %bb4
bb4: ; preds = %start
store i64 0, ptr %0, align 8
br label %bb5
bb2: ; preds = %start
%old = load i64, ptr %self, align 8, !noundef !3
; call <u64 as core::iter::range::Step>::forward_unchecked
%_6 = call noundef i64 @"_ZN47_$LT$u64$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17h5de6fa8b4c603b44E"(i64 noundef %old, i64 noundef 1)
store i64 %_6, ptr %self, align 8
%1 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 1
store i64 %old, ptr %1, align 8
store i64 1, ptr %0, align 8
br label %bb5
bb5: ; preds = %bb2, %bb4
%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
}
; <core::ops::try_trait::NeverShortCircuit<T> as core::ops::try_trait::Try>::from_output
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN94_$LT$core..ops..try_trait..NeverShortCircuit$LT$T$GT$$u20$as$u20$core..ops..try_trait..Try$GT$11from_output17h519aeed33b98503cE"() unnamed_addr #0 {
start:
ret void
}
; <core::ops::try_trait::NeverShortCircuit<T> as core::ops::try_trait::Try>::branch
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN94_$LT$core..ops..try_trait..NeverShortCircuit$LT$T$GT$$u20$as$u20$core..ops..try_trait..Try$GT$6branch17hcce65fc46deca911E"() unnamed_addr #0 {
start:
ret void
}
; <core::iter::adapters::rev::Rev<I> as core::iter::traits::iterator::Iterator>::fold
; Function Attrs: nonlazybind uwtable
define internal void @"_ZN98_$LT$core..iter..adapters..rev..Rev$LT$I$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4fold17h435289598eb14167E"(ptr noalias nocapture noundef dereferenceable(24) %self, ptr noalias noundef align 8 dereferenceable(8) %f) unnamed_addr #2 {
start:
%_4 = alloca %"core::ops::range::RangeInclusive<u64>", align 8
call void @llvm.lifetime.start.p0(i64 24, ptr %_4)
call void @llvm.memcpy.p0.p0.i64(ptr align 8 %_4, ptr align 8 %self, i64 24, i1 false)
; call core::iter::range::<impl core::iter::traits::double_ended::DoubleEndedIterator for core::ops::range::RangeInclusive<A>>::rfold
call void @"_ZN4core4iter5range125_$LT$impl$u20$core..iter..traits..double_ended..DoubleEndedIterator$u20$for$u20$core..ops..range..RangeInclusive$LT$A$GT$$GT$5rfold17he4e8655f46a3812cE"(ptr noalias nocapture noundef dereferenceable(24) %_4, ptr noalias noundef align 8 dereferenceable(8) %f)
call void @llvm.lifetime.end.p0(i64 24, ptr %_4)
ret void
}
; issue_45222::foo2
; Function Attrs: nonlazybind uwtable
define internal noundef i64 @_ZN11issue_452224foo217h44ec2f5f4f9c843bE(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)
%other = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 1
%_20 = load i64, ptr %iter, align 8, !noundef !3
%_21 = load i64, ptr %other, align 8, !noundef !3
%_15 = icmp ult i64 %_20, %_21
br i1 %_15, label %bb8, label %bb10
bb10: ; preds = %bb1
store i64 0, ptr %_5, align 8
br label %bb11
bb8: ; preds = %bb1
%old = load i64, ptr %iter, align 8, !noundef !3
; call <u64 as core::iter::range::Step>::forward_unchecked
%_19 = call noundef i64 @"_ZN47_$LT$u64$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17h5de6fa8b4c603b44E"(i64 noundef %old, i64 noundef 1)
store i64 %_19, ptr %iter, align 8
%7 = getelementptr inbounds { i64, i64 }, ptr %_5, i32 0, i32 1
store i64 %old, ptr %7, align 8
store i64 1, ptr %_5, align 8
br label %bb11
bb11: ; preds = %bb8, %bb10
%_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, %bb11
unreachable
bb4: ; preds = %bb11
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 = %bb11
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_back17h12a2e9672c39afecE"(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_452224foo217h44ec2f5f4f9c843bE(i64 noundef 100000)
ret i64 %0
}
; issue_45222::foo3r
; Function Attrs: nonlazybind uwtable
define internal noundef i64 @_ZN11issue_452225foo3r17h591a63fca7bc02d7E(i64 noundef %0) unnamed_addr #2 {
start:
%_6 = alloca { ptr, ptr }, align 8
%_4 = alloca { i64, i64 }, align 8
%count = alloca i64, align 8
%n = alloca i64, align 8
store i64 %0, ptr %n, align 8
call void @llvm.lifetime.start.p0(i64 8, ptr %count)
store i64 0, ptr %count, align 8
call void @llvm.lifetime.start.p0(i64 16, ptr %_4)
%_5 = load i64, ptr %n, align 8, !noundef !3
store i64 0, ptr %_4, align 8
%1 = getelementptr inbounds { i64, i64 }, ptr %_4, i32 0, i32 1
store i64 %_5, ptr %1, align 8
call void @llvm.lifetime.start.p0(i64 16, ptr %_6)
store ptr %n, ptr %_6, align 8
%2 = getelementptr inbounds { ptr, ptr }, ptr %_6, i32 0, i32 1
store ptr %count, ptr %2, align 8
%3 = getelementptr inbounds { i64, i64 }, ptr %_4, i32 0, i32 0
%4 = load i64, ptr %3, align 8, !noundef !3
%5 = getelementptr inbounds { i64, i64 }, ptr %_4, i32 0, i32 1
%6 = load i64, ptr %5, align 8, !noundef !3
%7 = getelementptr inbounds { ptr, ptr }, ptr %_6, i32 0, i32 0
%8 = load ptr, ptr %7, align 8, !nonnull !3, !align !5, !noundef !3
%9 = getelementptr inbounds { ptr, ptr }, ptr %_6, i32 0, i32 1
%10 = load ptr, ptr %9, align 8, !nonnull !3, !align !5, !noundef !3
; call core::iter::traits::iterator::Iterator::for_each
call void @_ZN4core4iter6traits8iterator8Iterator8for_each17hc7f3cbecc5d904ceE(i64 noundef %4, i64 noundef %6, ptr noalias noundef readonly align 8 dereferenceable(8) %8, ptr noalias noundef align 8 dereferenceable(8) %10)
call void @llvm.lifetime.end.p0(i64 16, ptr %_6)
call void @llvm.lifetime.end.p0(i64 16, ptr %_4)
%11 = load i64, ptr %count, align 8, !noundef !3
call void @llvm.lifetime.end.p0(i64 8, ptr %count)
ret i64 %11
}
; issue_45222::foo3r::{{closure}}
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN11issue_452225foo3r28_$u7b$$u7b$closure$u7d$$u7d$17h19a29c2a72d09367E"(ptr noalias noundef align 8 dereferenceable(16) %_1, i64 noundef %_2) unnamed_addr #0 {
start:
%_6 = alloca ptr, align 8
%self = alloca %"core::ops::range::RangeInclusive<u64>", align 8
%_3 = alloca %"core::iter::adapters::rev::Rev<core::ops::range::RangeInclusive<u64>>", align 8
call void @llvm.lifetime.start.p0(i64 24, ptr %_3)
call void @llvm.lifetime.start.p0(i64 24, ptr %self)
%_7 = load ptr, ptr %_1, align 8, !nonnull !3, !align !5, !noundef !3
%end = load i64, ptr %_7, align 8, !noundef !3
store i64 0, ptr %self, align 8
%0 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 1
store i64 %end, ptr %0, align 8
%1 = getelementptr inbounds %"core::ops::range::RangeInclusive<u64>", ptr %self, i32 0, i32 2
store i8 0, ptr %1, align 8
call void @llvm.memcpy.p0.p0.i64(ptr align 8 %_3, ptr align 8 %self, i64 24, i1 false)
call void @llvm.lifetime.end.p0(i64 24, ptr %self)
call void @llvm.lifetime.start.p0(i64 8, ptr %_6)
%2 = getelementptr inbounds { ptr, ptr }, ptr %_1, i32 0, i32 1
%_8 = load ptr, ptr %2, align 8, !nonnull !3, !align !5, !noundef !3
store ptr %_8, ptr %_6, align 8
%3 = load ptr, ptr %_6, align 8, !nonnull !3, !align !5, !noundef !3
; call core::iter::traits::iterator::Iterator::for_each
call void @_ZN4core4iter6traits8iterator8Iterator8for_each17h3ee852a0270b0c55E(ptr noalias nocapture noundef dereferenceable(24) %_3, ptr noalias noundef align 8 dereferenceable(8) %3)
call void @llvm.lifetime.end.p0(i64 8, ptr %_6)
call void @llvm.lifetime.end.p0(i64 24, ptr %_3)
ret void
}
; issue_45222::foo3r::{{closure}}::{{closure}}
; Function Attrs: inlinehint nonlazybind uwtable
define internal void @"_ZN11issue_452225foo3r28_$u7b$$u7b$closure$u7d$$u7d$28_$u7b$$u7b$closure$u7d$$u7d$17h63eb898456361ec5E"(ptr noalias noundef align 8 dereferenceable(8) %_1, i64 noundef %j) unnamed_addr #0 {
start:
%_3 = load ptr, ptr %_1, align 8, !nonnull !3, !align !5, !noundef !3
%_4 = load ptr, ptr %_1, align 8, !nonnull !3, !align !5, !noundef !3
%0 = load i64, ptr %_4, align 8, !noundef !3
%1 = add i64 %0, %j
store i64 %1, ptr %_3, align 8
ret void
}
; Function Attrs: nonlazybind uwtable
define noundef i64 @check_foo3r() unnamed_addr #2 {
start:
; call issue_45222::foo3r
%0 = call noundef i64 @_ZN11issue_452225foo3r17h591a63fca7bc02d7E(i64 noundef 10000)
ret i64 %0
}
; Function Attrs: nonlazybind uwtable
declare noundef i32 @rust_eh_personality(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) unnamed_addr #2
; 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}
!5 = !{i64 8}
; ModuleID = 'issue_45466.710b5059f82e5cd4-cgu.0'
source_filename = "issue_45466.710b5059f82e5cd4-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"
@alloc_4ad0e5d40a692d5e0a9ff2ac6aed7173 = private unnamed_addr constant <{ [59 x i8] }> <{ [59 x i8] c"/home/npopov/repos/rust/tests/codegen/issues/issue-45466.rs" }>, align 1
@alloc_bf5c1fa5d04a439726000358054b52ab = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_4ad0e5d40a692d5e0a9ff2ac6aed7173, [16 x i8] c";\00\00\00\00\00\00\00\0D\00\00\00\09\00\00\00" }>, align 8
; <usize as core::iter::range::Step>::forward_unchecked
; Function Attrs: inlinehint nonlazybind uwtable
define internal noundef i64 @"_ZN49_$LT$usize$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17h3b4df60a80deebf2E"(i64 noundef %start1, i64 noundef %n) unnamed_addr #0 {
start:
%0 = add nuw i64 %start1, %n
ret i64 %0
}
; Function Attrs: nonlazybind uwtable
define void @memzero(ptr noalias noundef nonnull align 1 %data.0, i64 noundef %data.1) unnamed_addr #1 {
start:
%_6 = alloca { i64, i64 }, align 8
%iter = alloca { i64, i64 }, align 8
%self = alloca { i64, i64 }, align 8
store i64 0, ptr %self, align 8
%0 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1
store i64 %data.1, 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 !2
%3 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1
%4 = load i64, ptr %3, align 8, !noundef !2
%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 = %bb5, %start
call void @llvm.lifetime.start.p0(i64 16, ptr %_6)
%other = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 1
%_17 = load i64, ptr %iter, align 8, !noundef !2
%_18 = load i64, ptr %other, align 8, !noundef !2
%_12 = icmp ult i64 %_17, %_18
br i1 %_12, label %bb6, label %bb8
bb8: ; preds = %bb1
store i64 0, ptr %_6, align 8
br label %bb9
bb6: ; preds = %bb1
%old = load i64, ptr %iter, align 8, !noundef !2
; call <usize as core::iter::range::Step>::forward_unchecked
%_16 = call noundef i64 @"_ZN49_$LT$usize$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17h3b4df60a80deebf2E"(i64 noundef %old, i64 noundef 1)
store i64 %_16, ptr %iter, align 8
%7 = getelementptr inbounds { i64, i64 }, ptr %_6, i32 0, i32 1
store i64 %old, ptr %7, align 8
store i64 1, ptr %_6, align 8
br label %bb9
bb9: ; preds = %bb6, %bb8
%_8 = load i64, ptr %_6, align 8, !range !3, !noundef !2
switch i64 %_8, label %bb3 [
i64 0, label %bb4
i64 1, label %bb2
]
bb3: ; preds = %bb9
unreachable
bb4: ; preds = %bb9
call void @llvm.lifetime.end.p0(i64 16, ptr %_6)
call void @llvm.lifetime.end.p0(i64 16, ptr %iter)
ret void
bb2: ; preds = %bb9
%8 = getelementptr inbounds { i64, i64 }, ptr %_6, i32 0, i32 1
%i = load i64, ptr %8, align 8, !noundef !2
%_11 = icmp ult i64 %i, %data.1
%9 = call i1 @llvm.expect.i1(i1 %_11, i1 true)
br i1 %9, label %bb5, label %panic
bb5: ; preds = %bb2
%10 = getelementptr inbounds [0 x i8], ptr %data.0, i64 0, i64 %i
store i8 0, ptr %10, align 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_6)
br label %bb1
panic: ; preds = %bb2
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %data.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_bf5c1fa5d04a439726000358054b52ab) #5
unreachable
}
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i1 @llvm.expect.i1(i1, i1) #2
; core::panicking::panic_bounds_check
; Function Attrs: cold noinline noreturn nonlazybind uwtable
declare void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef, i64 noundef, ptr noalias noundef readonly align 8 dereferenceable(24)) unnamed_addr #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 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(none) }
attributes #3 = { cold noinline noreturn nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" }
attributes #4 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { noreturn }
!llvm.module.flags = !{!0, !1}
!0 = !{i32 8, !"PIC Level", i32 2}
!1 = !{i32 2, !"RtLibUseGOT", i32 1}
!2 = !{}
!3 = !{i64 0, i64 2}
; ModuleID = 'issue_69101_bounds_check.58d0c811b707651e-cgu.0'
source_filename = "issue_69101_bounds_check.58d0c811b707651e-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::ptr::metadata::PtrRepr<[u8]>" = type { [2 x i64] }
@alloc_919cf81f22bb2c5e939beb7cb35359d4 = private unnamed_addr constant <{ [72 x i8] }> <{ [72 x i8] c"/home/npopov/repos/rust/tests/codegen/issues/issue-69101-bounds-check.rs" }>, align 1
@alloc_9632efe42385e4d1a660102916ab5d83 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\11\00\00\00\0F\00\00\00" }>, align 8
@alloc_1f6ff27ad65f55031e796cd170cac2cf = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\11\00\00\00\1B\00\00\00" }>, align 8
@alloc_07d287db308b72914e6f66dae383b1de = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\11\00\00\00+\00\00\00" }>, align 8
@alloc_dc471a1c34ac3e17feabf3a126d9d11e = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\13\00\00\00\10\00\00\00" }>, align 8
@alloc_4a5141c0d5cd19694fe7feef4c1caa8f = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\13\00\00\00\17\00\00\00" }>, align 8
@alloc_ff12945f5a1755af19f98a460c88096a = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\13\00\00\00\09\00\00\00" }>, align 8
@alloc_b97c1ca36a7caf937fb873320b2f8256 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\1C\00\00\00\0F\00\00\00" }>, align 8
@alloc_275b83e908d1d653929950ee4401e483 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\1C\00\00\00\1B\00\00\00" }>, align 8
@alloc_21b23c61d637885b7a73c9002d336488 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\1C\00\00\00+\00\00\00" }>, align 8
@alloc_a43e2613bbf8040923fd7442d0f6bd7b = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\1E\00\00\00\10\00\00\00" }>, align 8
@alloc_99ede102f2b7dfd8db9c89bebca13331 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\1E\00\00\00\17\00\00\00" }>, align 8
@alloc_96bf4c20aac2f08a3a40116aeb25dd6e = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00\1E\00\00\00\09\00\00\00" }>, align 8
@alloc_1d14c096e43580a3379b156f945dcbbe = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00(\00\00\00\0F\00\00\00" }>, align 8
@alloc_3720b27dd2332f5cc9c01f2c25555d48 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00(\00\00\00\1B\00\00\00" }>, align 8
@alloc_fdad1336c7ca1a175c942ae37fd88d56 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00(\00\00\00+\00\00\00" }>, align 8
@alloc_a01ca082bc2f921d52c5f3b1e6099e9f = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00*\00\00\00\10\00\00\00" }>, align 8
@alloc_64981a67a3addee60ce5f1c9a87bd610 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00*\00\00\00\17\00\00\00" }>, align 8
@alloc_610f6b6875552ecb58c7009f6639ba16 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_919cf81f22bb2c5e939beb7cb35359d4, [16 x i8] c"H\00\00\00\00\00\00\00*\00\00\00\09\00\00\00" }>, align 8
; <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index
; Function Attrs: inlinehint nonlazybind uwtable
define internal { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17he84d5da9e5ced440E"(i64 noundef %self.0, i64 noundef %self.1, ptr noalias noundef nonnull readonly align 1 %slice.0, i64 noundef %slice.1, ptr noalias noundef readonly align 8 dereferenceable(24) %0) unnamed_addr #0 {
start:
%_22 = alloca { ptr, i64 }, align 8
%_21 = alloca %"core::ptr::metadata::PtrRepr<[u8]>", align 8
%_3 = icmp ugt i64 %self.0, %self.1
br i1 %_3, label %bb1, label %bb2
bb2: ; preds = %start
%_9 = icmp ugt i64 %self.1, %slice.1
br i1 %_9, label %bb3, label %bb4
bb1: ; preds = %start
; call core::slice::index::slice_index_order_fail
call void @_ZN4core5slice5index22slice_index_order_fail17hbb92ac81d067154bE(i64 noundef %self.0, i64 noundef %self.1, ptr noalias noundef readonly align 8 dereferenceable(24) %0) #5
unreachable
bb4: ; preds = %bb2
%new_len = sub nuw i64 %self.1, %self.0
%data = getelementptr inbounds i8, ptr %slice.0, i64 %self.0
call void @llvm.lifetime.start.p0(i64 16, ptr %_21)
call void @llvm.lifetime.start.p0(i64 16, ptr %_22)
store ptr %data, ptr %_22, align 8
%1 = getelementptr inbounds { ptr, i64 }, ptr %_22, i32 0, i32 1
store i64 %new_len, ptr %1, align 8
%2 = getelementptr inbounds { ptr, i64 }, ptr %_22, i32 0, i32 0
%3 = load ptr, ptr %2, align 8, !noundef !2
%4 = getelementptr inbounds { ptr, i64 }, ptr %_22, i32 0, i32 1
%5 = load i64, ptr %4, align 8, !noundef !2
%6 = getelementptr inbounds { ptr, i64 }, ptr %_21, i32 0, i32 0
store ptr %3, ptr %6, align 8
%7 = getelementptr inbounds { ptr, i64 }, ptr %_21, i32 0, i32 1
store i64 %5, ptr %7, align 8
call void @llvm.lifetime.end.p0(i64 16, ptr %_22)
%8 = getelementptr inbounds { ptr, i64 }, ptr %_21, i32 0, i32 0
%_15.0 = load ptr, ptr %8, align 8, !noundef !2
%9 = getelementptr inbounds { ptr, i64 }, ptr %_21, i32 0, i32 1
%_15.1 = load i64, ptr %9, align 8, !noundef !2
call void @llvm.lifetime.end.p0(i64 16, ptr %_21)
%10 = insertvalue { ptr, i64 } poison, ptr %_15.0, 0
%11 = insertvalue { ptr, i64 } %10, i64 %_15.1, 1
ret { ptr, i64 } %11
bb3: ; preds = %bb2
; call core::slice::index::slice_end_index_len_fail
call void @_ZN4core5slice5index24slice_end_index_len_fail17h80a8d89025e3e486E(i64 noundef %self.1, i64 noundef %slice.1, ptr noalias noundef readonly align 8 dereferenceable(24) %0) #5
unreachable
}
; <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index_mut
; Function Attrs: inlinehint nonlazybind uwtable
define internal { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$9index_mut17h9f9cb90a6adeccbbE"(i64 noundef %self.0, i64 noundef %self.1, ptr noalias noundef nonnull align 1 %slice.0, i64 noundef %slice.1, ptr noalias noundef readonly align 8 dereferenceable(24) %0) unnamed_addr #0 {
start:
%_24 = alloca { ptr, i64 }, align 8
%_23 = alloca %"core::ptr::metadata::PtrRepr<[u8]>", align 8
%_3 = icmp ugt i64 %self.0, %self.1
br i1 %_3, label %bb1, label %bb2
bb2: ; preds = %start
%_9 = icmp ugt i64 %self.1, %slice.1
br i1 %_9, label %bb3, label %bb4
bb1: ; preds = %start
; call core::slice::index::slice_index_order_fail
call void @_ZN4core5slice5index22slice_index_order_fail17hbb92ac81d067154bE(i64 noundef %self.0, i64 noundef %self.1, ptr noalias noundef readonly align 8 dereferenceable(24) %0) #5
unreachable
bb4: ; preds = %bb2
%new_len = sub nuw i64 %self.1, %self.0
%data = getelementptr inbounds i8, ptr %slice.0, i64 %self.0
call void @llvm.lifetime.start.p0(i64 16, ptr %_23)
call void @llvm.lifetime.start.p0(i64 16, ptr %_24)
store ptr %data, ptr %_24, align 8
%1 = getelementptr inbounds { ptr, i64 }, ptr %_24, i32 0, i32 1
store i64 %new_len, ptr %1, align 8
%2 = getelementptr inbounds { ptr, i64 }, ptr %_24, i32 0, i32 0
%3 = load ptr, ptr %2, align 8, !noundef !2
%4 = getelementptr inbounds { ptr, i64 }, ptr %_24, i32 0, i32 1
%5 = load i64, ptr %4, align 8, !noundef !2
%6 = getelementptr inbounds { ptr, i64 }, ptr %_23, i32 0, i32 0
store ptr %3, ptr %6, align 8
%7 = getelementptr inbounds { ptr, i64 }, ptr %_23, i32 0, i32 1
store i64 %5, ptr %7, align 8
call void @llvm.lifetime.end.p0(i64 16, ptr %_24)
%8 = getelementptr inbounds { ptr, i64 }, ptr %_23, i32 0, i32 0
%_17.0 = load ptr, ptr %8, align 8, !noundef !2
%9 = getelementptr inbounds { ptr, i64 }, ptr %_23, i32 0, i32 1
%_17.1 = load i64, ptr %9, align 8, !noundef !2
call void @llvm.lifetime.end.p0(i64 16, ptr %_23)
%10 = insertvalue { ptr, i64 } poison, ptr %_17.0, 0
%11 = insertvalue { ptr, i64 } %10, i64 %_17.1, 1
ret { ptr, i64 } %11
bb3: ; preds = %bb2
; call core::slice::index::slice_end_index_len_fail
call void @_ZN4core5slice5index24slice_end_index_len_fail17h80a8d89025e3e486E(i64 noundef %self.1, i64 noundef %slice.1, ptr noalias noundef readonly align 8 dereferenceable(24) %0) #5
unreachable
}
; <usize as core::iter::range::Step>::forward_unchecked
; Function Attrs: inlinehint nonlazybind uwtable
define internal noundef i64 @"_ZN49_$LT$usize$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17h3b4df60a80deebf2E"(i64 noundef %start1, i64 noundef %n) unnamed_addr #0 {
start:
%0 = add nuw i64 %start1, %n
ret i64 %0
}
; Function Attrs: nonlazybind uwtable
define void @already_sliced_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %a.0, i64 noundef %a.1, ptr noalias noundef nonnull readonly align 1 %b.0, i64 noundef %b.1, ptr noalias noundef nonnull align 1 %c.0, i64 noundef %c.1) unnamed_addr #1 {
start:
%_23 = alloca { i64, i64 }, align 8
%_21 = alloca { i64, i64 }, align 8
%_19 = alloca { i64, i64 }, align 8
%_6 = alloca { i64, i64 }, align 8
%iter = alloca { i64, i64 }, align 8
%self = alloca { i64, i64 }, align 8
call void @llvm.lifetime.start.p0(i64 16, ptr %_19)
store i64 0, ptr %_19, align 8
%0 = getelementptr inbounds { i64, i64 }, ptr %_19, i32 0, i32 1
store i64 2048, ptr %0, align 8
%1 = getelementptr inbounds { i64, i64 }, ptr %_19, i32 0, i32 0
%2 = load i64, ptr %1, align 8, !noundef !2
%3 = getelementptr inbounds { i64, i64 }, ptr %_19, i32 0, i32 1
%4 = load i64, ptr %3, align 8, !noundef !2
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index
%5 = call { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17he84d5da9e5ced440E"(i64 noundef %2, i64 noundef %4, ptr noalias noundef nonnull readonly align 1 %a.0, i64 noundef %a.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_9632efe42385e4d1a660102916ab5d83)
%_18.0 = extractvalue { ptr, i64 } %5, 0
%_18.1 = extractvalue { ptr, i64 } %5, 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_19)
call void @llvm.lifetime.start.p0(i64 16, ptr %_21)
store i64 0, ptr %_21, align 8
%6 = getelementptr inbounds { i64, i64 }, ptr %_21, i32 0, i32 1
store i64 2048, ptr %6, align 8
%7 = getelementptr inbounds { i64, i64 }, ptr %_21, i32 0, i32 0
%8 = load i64, ptr %7, align 8, !noundef !2
%9 = getelementptr inbounds { i64, i64 }, ptr %_21, i32 0, i32 1
%10 = load i64, ptr %9, align 8, !noundef !2
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index
%11 = call { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17he84d5da9e5ced440E"(i64 noundef %8, i64 noundef %10, ptr noalias noundef nonnull readonly align 1 %b.0, i64 noundef %b.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_1f6ff27ad65f55031e796cd170cac2cf)
%_20.0 = extractvalue { ptr, i64 } %11, 0
%_20.1 = extractvalue { ptr, i64 } %11, 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_21)
call void @llvm.lifetime.start.p0(i64 16, ptr %_23)
store i64 0, ptr %_23, align 8
%12 = getelementptr inbounds { i64, i64 }, ptr %_23, i32 0, i32 1
store i64 2048, ptr %12, align 8
%13 = getelementptr inbounds { i64, i64 }, ptr %_23, i32 0, i32 0
%14 = load i64, ptr %13, align 8, !noundef !2
%15 = getelementptr inbounds { i64, i64 }, ptr %_23, i32 0, i32 1
%16 = load i64, ptr %15, align 8, !noundef !2
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index_mut
%17 = call { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$9index_mut17h9f9cb90a6adeccbbE"(i64 noundef %14, i64 noundef %16, ptr noalias noundef nonnull align 1 %c.0, i64 noundef %c.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_07d287db308b72914e6f66dae383b1de)
%_22.0 = extractvalue { ptr, i64 } %17, 0
%_22.1 = extractvalue { ptr, i64 } %17, 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_23)
store i64 0, ptr %self, align 8
%18 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1
store i64 1024, ptr %18, align 8
call void @llvm.lifetime.start.p0(i64 16, ptr %iter)
%19 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 0
%20 = load i64, ptr %19, align 8, !noundef !2
%21 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1
%22 = load i64, ptr %21, align 8, !noundef !2
%23 = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 0
store i64 %20, ptr %23, align 8
%24 = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 1
store i64 %22, ptr %24, align 8
br label %bb1
bb1: ; preds = %bb7, %start
call void @llvm.lifetime.start.p0(i64 16, ptr %_6)
%other = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 1
%_29 = load i64, ptr %iter, align 8, !noundef !2
%_30 = load i64, ptr %other, align 8, !noundef !2
%_24 = icmp ult i64 %_29, %_30
br i1 %_24, label %bb11, label %bb13
bb13: ; preds = %bb1
store i64 0, ptr %_6, align 8
br label %bb14
bb11: ; preds = %bb1
%old = load i64, ptr %iter, align 8, !noundef !2
; call <usize as core::iter::range::Step>::forward_unchecked
%_28 = call noundef i64 @"_ZN49_$LT$usize$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17h3b4df60a80deebf2E"(i64 noundef %old, i64 noundef 1)
store i64 %_28, ptr %iter, align 8
%25 = getelementptr inbounds { i64, i64 }, ptr %_6, i32 0, i32 1
store i64 %old, ptr %25, align 8
store i64 1, ptr %_6, align 8
br label %bb14
bb14: ; preds = %bb11, %bb13
%_8 = load i64, ptr %_6, align 8, !range !3, !noundef !2
switch i64 %_8, label %bb3 [
i64 0, label %bb4
i64 1, label %bb2
]
bb3: ; preds = %bb14
unreachable
bb4: ; preds = %bb14
call void @llvm.lifetime.end.p0(i64 16, ptr %_6)
call void @llvm.lifetime.end.p0(i64 16, ptr %iter)
ret void
bb2: ; preds = %bb14
%26 = getelementptr inbounds { i64, i64 }, ptr %_6, i32 0, i32 1
%i = load i64, ptr %26, align 8, !noundef !2
%_12 = icmp ult i64 %i, %a.1
%27 = call i1 @llvm.expect.i1(i1 %_12, i1 true)
br i1 %27, label %bb5, label %panic
bb5: ; preds = %bb2
%28 = getelementptr inbounds [0 x i8], ptr %a.0, i64 0, i64 %i
%_10 = load i8, ptr %28, align 1, !noundef !2
%_15 = icmp ult i64 %i, %b.1
%29 = call i1 @llvm.expect.i1(i1 %_15, i1 true)
br i1 %29, label %bb6, label %panic1
panic: ; preds = %bb2
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %a.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_dc471a1c34ac3e17feabf3a126d9d11e) #5
unreachable
bb6: ; preds = %bb5
%30 = getelementptr inbounds [0 x i8], ptr %b.0, i64 0, i64 %i
%_13 = load i8, ptr %30, align 1, !noundef !2
%_17 = icmp ult i64 %i, %c.1
%31 = call i1 @llvm.expect.i1(i1 %_17, i1 true)
br i1 %31, label %bb7, label %panic2
panic1: ; preds = %bb5
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %b.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_4a5141c0d5cd19694fe7feef4c1caa8f) #5
unreachable
bb7: ; preds = %bb6
%32 = getelementptr inbounds [0 x i8], ptr %c.0, i64 0, i64 %i
%33 = xor i8 %_10, %_13
store i8 %33, ptr %32, align 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_6)
br label %bb1
panic2: ; preds = %bb6
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %c.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_ff12945f5a1755af19f98a460c88096a) #5
unreachable
}
; Function Attrs: nonlazybind uwtable
define void @already_sliced_no_bounds_check_exact(ptr noalias noundef nonnull readonly align 1 %a.0, i64 noundef %a.1, ptr noalias noundef nonnull readonly align 1 %b.0, i64 noundef %b.1, ptr noalias noundef nonnull align 1 %c.0, i64 noundef %c.1) unnamed_addr #1 {
start:
%_23 = alloca { i64, i64 }, align 8
%_21 = alloca { i64, i64 }, align 8
%_19 = alloca { i64, i64 }, align 8
%_6 = alloca { i64, i64 }, align 8
%iter = alloca { i64, i64 }, align 8
%self = alloca { i64, i64 }, align 8
call void @llvm.lifetime.start.p0(i64 16, ptr %_19)
store i64 0, ptr %_19, align 8
%0 = getelementptr inbounds { i64, i64 }, ptr %_19, i32 0, i32 1
store i64 1024, ptr %0, align 8
%1 = getelementptr inbounds { i64, i64 }, ptr %_19, i32 0, i32 0
%2 = load i64, ptr %1, align 8, !noundef !2
%3 = getelementptr inbounds { i64, i64 }, ptr %_19, i32 0, i32 1
%4 = load i64, ptr %3, align 8, !noundef !2
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index
%5 = call { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17he84d5da9e5ced440E"(i64 noundef %2, i64 noundef %4, ptr noalias noundef nonnull readonly align 1 %a.0, i64 noundef %a.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_b97c1ca36a7caf937fb873320b2f8256)
%_18.0 = extractvalue { ptr, i64 } %5, 0
%_18.1 = extractvalue { ptr, i64 } %5, 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_19)
call void @llvm.lifetime.start.p0(i64 16, ptr %_21)
store i64 0, ptr %_21, align 8
%6 = getelementptr inbounds { i64, i64 }, ptr %_21, i32 0, i32 1
store i64 1024, ptr %6, align 8
%7 = getelementptr inbounds { i64, i64 }, ptr %_21, i32 0, i32 0
%8 = load i64, ptr %7, align 8, !noundef !2
%9 = getelementptr inbounds { i64, i64 }, ptr %_21, i32 0, i32 1
%10 = load i64, ptr %9, align 8, !noundef !2
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index
%11 = call { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17he84d5da9e5ced440E"(i64 noundef %8, i64 noundef %10, ptr noalias noundef nonnull readonly align 1 %b.0, i64 noundef %b.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_275b83e908d1d653929950ee4401e483)
%_20.0 = extractvalue { ptr, i64 } %11, 0
%_20.1 = extractvalue { ptr, i64 } %11, 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_21)
call void @llvm.lifetime.start.p0(i64 16, ptr %_23)
store i64 0, ptr %_23, align 8
%12 = getelementptr inbounds { i64, i64 }, ptr %_23, i32 0, i32 1
store i64 1024, ptr %12, align 8
%13 = getelementptr inbounds { i64, i64 }, ptr %_23, i32 0, i32 0
%14 = load i64, ptr %13, align 8, !noundef !2
%15 = getelementptr inbounds { i64, i64 }, ptr %_23, i32 0, i32 1
%16 = load i64, ptr %15, align 8, !noundef !2
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index_mut
%17 = call { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$9index_mut17h9f9cb90a6adeccbbE"(i64 noundef %14, i64 noundef %16, ptr noalias noundef nonnull align 1 %c.0, i64 noundef %c.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_21b23c61d637885b7a73c9002d336488)
%_22.0 = extractvalue { ptr, i64 } %17, 0
%_22.1 = extractvalue { ptr, i64 } %17, 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_23)
store i64 0, ptr %self, align 8
%18 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1
store i64 1024, ptr %18, align 8
call void @llvm.lifetime.start.p0(i64 16, ptr %iter)
%19 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 0
%20 = load i64, ptr %19, align 8, !noundef !2
%21 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1
%22 = load i64, ptr %21, align 8, !noundef !2
%23 = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 0
store i64 %20, ptr %23, align 8
%24 = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 1
store i64 %22, ptr %24, align 8
br label %bb1
bb1: ; preds = %bb7, %start
call void @llvm.lifetime.start.p0(i64 16, ptr %_6)
%other = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 1
%_29 = load i64, ptr %iter, align 8, !noundef !2
%_30 = load i64, ptr %other, align 8, !noundef !2
%_24 = icmp ult i64 %_29, %_30
br i1 %_24, label %bb11, label %bb13
bb13: ; preds = %bb1
store i64 0, ptr %_6, align 8
br label %bb14
bb11: ; preds = %bb1
%old = load i64, ptr %iter, align 8, !noundef !2
; call <usize as core::iter::range::Step>::forward_unchecked
%_28 = call noundef i64 @"_ZN49_$LT$usize$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17h3b4df60a80deebf2E"(i64 noundef %old, i64 noundef 1)
store i64 %_28, ptr %iter, align 8
%25 = getelementptr inbounds { i64, i64 }, ptr %_6, i32 0, i32 1
store i64 %old, ptr %25, align 8
store i64 1, ptr %_6, align 8
br label %bb14
bb14: ; preds = %bb11, %bb13
%_8 = load i64, ptr %_6, align 8, !range !3, !noundef !2
switch i64 %_8, label %bb3 [
i64 0, label %bb4
i64 1, label %bb2
]
bb3: ; preds = %bb14
unreachable
bb4: ; preds = %bb14
call void @llvm.lifetime.end.p0(i64 16, ptr %_6)
call void @llvm.lifetime.end.p0(i64 16, ptr %iter)
ret void
bb2: ; preds = %bb14
%26 = getelementptr inbounds { i64, i64 }, ptr %_6, i32 0, i32 1
%i = load i64, ptr %26, align 8, !noundef !2
%_12 = icmp ult i64 %i, %a.1
%27 = call i1 @llvm.expect.i1(i1 %_12, i1 true)
br i1 %27, label %bb5, label %panic
bb5: ; preds = %bb2
%28 = getelementptr inbounds [0 x i8], ptr %a.0, i64 0, i64 %i
%_10 = load i8, ptr %28, align 1, !noundef !2
%_15 = icmp ult i64 %i, %b.1
%29 = call i1 @llvm.expect.i1(i1 %_15, i1 true)
br i1 %29, label %bb6, label %panic1
panic: ; preds = %bb2
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %a.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_a43e2613bbf8040923fd7442d0f6bd7b) #5
unreachable
bb6: ; preds = %bb5
%30 = getelementptr inbounds [0 x i8], ptr %b.0, i64 0, i64 %i
%_13 = load i8, ptr %30, align 1, !noundef !2
%_17 = icmp ult i64 %i, %c.1
%31 = call i1 @llvm.expect.i1(i1 %_17, i1 true)
br i1 %31, label %bb7, label %panic2
panic1: ; preds = %bb5
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %b.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_99ede102f2b7dfd8db9c89bebca13331) #5
unreachable
bb7: ; preds = %bb6
%32 = getelementptr inbounds [0 x i8], ptr %c.0, i64 0, i64 %i
%33 = xor i8 %_10, %_13
store i8 %33, ptr %32, align 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_6)
br label %bb1
panic2: ; preds = %bb6
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %c.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_96bf4c20aac2f08a3a40116aeb25dd6e) #5
unreachable
}
; Function Attrs: nonlazybind uwtable
define void @already_sliced_bounds_check(ptr noalias noundef nonnull readonly align 1 %a.0, i64 noundef %a.1, ptr noalias noundef nonnull readonly align 1 %b.0, i64 noundef %b.1, ptr noalias noundef nonnull align 1 %c.0, i64 noundef %c.1) unnamed_addr #1 {
start:
%_23 = alloca { i64, i64 }, align 8
%_21 = alloca { i64, i64 }, align 8
%_19 = alloca { i64, i64 }, align 8
%_6 = alloca { i64, i64 }, align 8
%iter = alloca { i64, i64 }, align 8
%self = alloca { i64, i64 }, align 8
call void @llvm.lifetime.start.p0(i64 16, ptr %_19)
store i64 0, ptr %_19, align 8
%0 = getelementptr inbounds { i64, i64 }, ptr %_19, i32 0, i32 1
store i64 1023, ptr %0, align 8
%1 = getelementptr inbounds { i64, i64 }, ptr %_19, i32 0, i32 0
%2 = load i64, ptr %1, align 8, !noundef !2
%3 = getelementptr inbounds { i64, i64 }, ptr %_19, i32 0, i32 1
%4 = load i64, ptr %3, align 8, !noundef !2
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index
%5 = call { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17he84d5da9e5ced440E"(i64 noundef %2, i64 noundef %4, ptr noalias noundef nonnull readonly align 1 %a.0, i64 noundef %a.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_1d14c096e43580a3379b156f945dcbbe)
%_18.0 = extractvalue { ptr, i64 } %5, 0
%_18.1 = extractvalue { ptr, i64 } %5, 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_19)
call void @llvm.lifetime.start.p0(i64 16, ptr %_21)
store i64 0, ptr %_21, align 8
%6 = getelementptr inbounds { i64, i64 }, ptr %_21, i32 0, i32 1
store i64 2048, ptr %6, align 8
%7 = getelementptr inbounds { i64, i64 }, ptr %_21, i32 0, i32 0
%8 = load i64, ptr %7, align 8, !noundef !2
%9 = getelementptr inbounds { i64, i64 }, ptr %_21, i32 0, i32 1
%10 = load i64, ptr %9, align 8, !noundef !2
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index
%11 = call { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17he84d5da9e5ced440E"(i64 noundef %8, i64 noundef %10, ptr noalias noundef nonnull readonly align 1 %b.0, i64 noundef %b.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_3720b27dd2332f5cc9c01f2c25555d48)
%_20.0 = extractvalue { ptr, i64 } %11, 0
%_20.1 = extractvalue { ptr, i64 } %11, 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_21)
call void @llvm.lifetime.start.p0(i64 16, ptr %_23)
store i64 0, ptr %_23, align 8
%12 = getelementptr inbounds { i64, i64 }, ptr %_23, i32 0, i32 1
store i64 2048, ptr %12, align 8
%13 = getelementptr inbounds { i64, i64 }, ptr %_23, i32 0, i32 0
%14 = load i64, ptr %13, align 8, !noundef !2
%15 = getelementptr inbounds { i64, i64 }, ptr %_23, i32 0, i32 1
%16 = load i64, ptr %15, align 8, !noundef !2
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index_mut
%17 = call { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$9index_mut17h9f9cb90a6adeccbbE"(i64 noundef %14, i64 noundef %16, ptr noalias noundef nonnull align 1 %c.0, i64 noundef %c.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_fdad1336c7ca1a175c942ae37fd88d56)
%_22.0 = extractvalue { ptr, i64 } %17, 0
%_22.1 = extractvalue { ptr, i64 } %17, 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_23)
store i64 0, ptr %self, align 8
%18 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1
store i64 1024, ptr %18, align 8
call void @llvm.lifetime.start.p0(i64 16, ptr %iter)
%19 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 0
%20 = load i64, ptr %19, align 8, !noundef !2
%21 = getelementptr inbounds { i64, i64 }, ptr %self, i32 0, i32 1
%22 = load i64, ptr %21, align 8, !noundef !2
%23 = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 0
store i64 %20, ptr %23, align 8
%24 = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 1
store i64 %22, ptr %24, align 8
br label %bb1
bb1: ; preds = %bb7, %start
call void @llvm.lifetime.start.p0(i64 16, ptr %_6)
%other = getelementptr inbounds { i64, i64 }, ptr %iter, i32 0, i32 1
%_29 = load i64, ptr %iter, align 8, !noundef !2
%_30 = load i64, ptr %other, align 8, !noundef !2
%_24 = icmp ult i64 %_29, %_30
br i1 %_24, label %bb11, label %bb13
bb13: ; preds = %bb1
store i64 0, ptr %_6, align 8
br label %bb14
bb11: ; preds = %bb1
%old = load i64, ptr %iter, align 8, !noundef !2
; call <usize as core::iter::range::Step>::forward_unchecked
%_28 = call noundef i64 @"_ZN49_$LT$usize$u20$as$u20$core..iter..range..Step$GT$17forward_unchecked17h3b4df60a80deebf2E"(i64 noundef %old, i64 noundef 1)
store i64 %_28, ptr %iter, align 8
%25 = getelementptr inbounds { i64, i64 }, ptr %_6, i32 0, i32 1
store i64 %old, ptr %25, align 8
store i64 1, ptr %_6, align 8
br label %bb14
bb14: ; preds = %bb11, %bb13
%_8 = load i64, ptr %_6, align 8, !range !3, !noundef !2
switch i64 %_8, label %bb3 [
i64 0, label %bb4
i64 1, label %bb2
]
bb3: ; preds = %bb14
unreachable
bb4: ; preds = %bb14
call void @llvm.lifetime.end.p0(i64 16, ptr %_6)
call void @llvm.lifetime.end.p0(i64 16, ptr %iter)
ret void
bb2: ; preds = %bb14
%26 = getelementptr inbounds { i64, i64 }, ptr %_6, i32 0, i32 1
%i = load i64, ptr %26, align 8, !noundef !2
%_12 = icmp ult i64 %i, %a.1
%27 = call i1 @llvm.expect.i1(i1 %_12, i1 true)
br i1 %27, label %bb5, label %panic
bb5: ; preds = %bb2
%28 = getelementptr inbounds [0 x i8], ptr %a.0, i64 0, i64 %i
%_10 = load i8, ptr %28, align 1, !noundef !2
%_15 = icmp ult i64 %i, %b.1
%29 = call i1 @llvm.expect.i1(i1 %_15, i1 true)
br i1 %29, label %bb6, label %panic1
panic: ; preds = %bb2
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %a.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_a01ca082bc2f921d52c5f3b1e6099e9f) #5
unreachable
bb6: ; preds = %bb5
%30 = getelementptr inbounds [0 x i8], ptr %b.0, i64 0, i64 %i
%_13 = load i8, ptr %30, align 1, !noundef !2
%_17 = icmp ult i64 %i, %c.1
%31 = call i1 @llvm.expect.i1(i1 %_17, i1 true)
br i1 %31, label %bb7, label %panic2
panic1: ; preds = %bb5
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %b.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_64981a67a3addee60ce5f1c9a87bd610) #5
unreachable
bb7: ; preds = %bb6
%32 = getelementptr inbounds [0 x i8], ptr %c.0, i64 0, i64 %i
%33 = xor i8 %_10, %_13
store i8 %33, ptr %32, align 1
call void @llvm.lifetime.end.p0(i64 16, ptr %_6)
br label %bb1
panic2: ; preds = %bb6
; call core::panicking::panic_bounds_check
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i, i64 noundef %c.1, ptr noalias noundef readonly align 8 dereferenceable(24) @alloc_610f6b6875552ecb58c7009f6639ba16) #5
unreachable
}
; core::slice::index::slice_end_index_len_fail
; Function Attrs: cold noinline noreturn nonlazybind uwtable
declare void @_ZN4core5slice5index24slice_end_index_len_fail17h80a8d89025e3e486E(i64 noundef, i64 noundef, ptr noalias noundef readonly align 8 dereferenceable(24)) unnamed_addr #2
; core::slice::index::slice_index_order_fail
; Function Attrs: cold noinline noreturn nonlazybind uwtable
declare void @_ZN4core5slice5index22slice_index_order_fail17hbb92ac81d067154bE(i64 noundef, i64 noundef, ptr noalias noundef readonly align 8 dereferenceable(24)) unnamed_addr #2
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i1 @llvm.expect.i1(i1, i1) #3
; core::panicking::panic_bounds_check
; Function Attrs: cold noinline noreturn nonlazybind uwtable
declare void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef, i64 noundef, ptr noalias noundef readonly align 8 dereferenceable(24)) unnamed_addr #2
; 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 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" }
attributes #2 = { cold noinline noreturn nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" }
attributes #3 = { nocallback nofree nosync nounwind willreturn memory(none) }
attributes #4 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { noreturn }
!llvm.module.flags = !{!0, !1}
!0 = !{i32 8, !"PIC Level", i32 2}
!1 = !{i32 2, !"RtLibUseGOT", i32 1}
!2 = !{}
!3 = !{i64 0, i64 2}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment