-
-
Save nikic/9ec0bc02d451e7abd0f8d78800c2206c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; ModuleID = 'issue_45222.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} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; ModuleID = 'issue_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} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; ModuleID = 'issue_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