Created
June 30, 2023 17:52
-
-
Save maurer/9fdcc6d84db76863174aaf84317bdf7c 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_73396_bounds_check_after_position.243dbce97eb6665-cgu.0' | |
source_filename = "issue_73396_bounds_check_after_position.243dbce97eb6665-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_e4b1b3666b3c25567a07430a79501aaf = private unnamed_addr constant <{ [116 x i8] }> <{ [116 x i8] c"/usr/local/google/home/mmaurer/github/rust-lang/rust/tests/codegen/issues/issue-73396-bounds-check-after-position.rs" }>, align 1 | |
@alloc_317973b77b3cc8361da3eba518797a85 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_e4b1b3666b3c25567a07430a79501aaf, [16 x i8] c"t\00\00\00\00\00\00\00\11\00\00\00\0A\00\00\00" }>, align 8 | |
@alloc_7bfe8eaf482419fd2021a64e7d1acdd9 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_e4b1b3666b3c25567a07430a79501aaf, [16 x i8] c"t\00\00\00\00\00\00\00 \00\00\00\0A\00\00\00" }>, align 8 | |
@alloc_c8fb52adf811dcb255160898c9f3f03d = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_e4b1b3666b3c25567a07430a79501aaf, [16 x i8] c"t\00\00\00\00\00\00\00/\00\00\00\09\00\00\00" }>, align 8 | |
@alloc_e89c398a0256471fc014ced090cdaceb = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_e4b1b3666b3c25567a07430a79501aaf, [16 x i8] c"t\00\00\00\00\00\00\00=\00\00\00\0A\00\00\00" }>, align 8 | |
@alloc_c175dc71da6f7e1dc826123052d9cd03 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_e4b1b3666b3c25567a07430a79501aaf, [16 x i8] c"t\00\00\00\00\00\00\00L\00\00\00\0A\00\00\00" }>, align 8 | |
@alloc_eb910bea89086399bbc20567964c9030 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_e4b1b3666b3c25567a07430a79501aaf, [16 x i8] c"t\00\00\00\00\00\00\00[\00\00\00\09\00\00\00" }>, align 8 | |
; Function Attrs: nonlazybind uwtable | |
define { ptr, i64 } @position_slice_to_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
%0 = icmp eq i64 %s.1, 0 | |
br i1 %0, label %bb4, label %bb7.i | |
bb7.i: ; preds = %start, %bb10.i | |
%i.011.i = phi i64 [ %_21.0.i, %bb10.i ], [ 0, %start ] | |
%_32.i910.i = phi ptr [ %_32.i.i, %bb10.i ], [ %s.0, %start ] | |
%_3.i.i = load i8, ptr %_32.i910.i, align 1, !alias.scope !2, !noalias !5, !noundef !8 | |
%1 = icmp eq i8 %_3.i.i, 92 | |
br i1 %1, label %bb2, label %bb10.i | |
bb10.i: ; preds = %bb7.i | |
%_32.i.i = getelementptr inbounds i8, ptr %_32.i910.i, i64 1 | |
%_21.0.i = add nuw i64 %i.011.i, 1 | |
%2 = icmp eq ptr %_32.i.i, %end | |
br i1 %2, label %bb4, label %bb7.i | |
bb2: ; preds = %bb7.i | |
%_9.i = icmp ugt i64 %i.011.i, %s.1 | |
br i1 %_9.i, label %bb3.i, label %bb4 | |
bb3.i: ; preds = %bb2 | |
; call core::slice::index::slice_end_index_len_fail | |
tail call void @_ZN4core5slice5index24slice_end_index_len_fail17h80a8d89025e3e486E(i64 noundef %i.011.i, i64 noundef %s.1, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @alloc_317973b77b3cc8361da3eba518797a85) #2, !noalias !9 | |
unreachable | |
bb4: ; preds = %bb10.i, %bb2, %start | |
%.sroa.3.0 = phi i64 [ 0, %start ], [ %i.011.i, %bb2 ], [ %s.1, %bb10.i ] | |
%3 = insertvalue { ptr, i64 } poison, ptr %s.0, 0 | |
%4 = insertvalue { ptr, i64 } %3, i64 %.sroa.3.0, 1 | |
ret { ptr, i64 } %4 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define { ptr, i64 } @position_slice_from_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
%0 = icmp eq i64 %s.1, 0 | |
br i1 %0, label %bb4, label %bb7.i | |
bb7.i: ; preds = %start, %bb10.i | |
%i.011.i = phi i64 [ %_21.0.i, %bb10.i ], [ 0, %start ] | |
%_32.i910.i = phi ptr [ %_32.i.i, %bb10.i ], [ %s.0, %start ] | |
%_3.i.i = load i8, ptr %_32.i910.i, align 1, !alias.scope !12, !noalias !15, !noundef !8 | |
%1 = icmp eq i8 %_3.i.i, 92 | |
br i1 %1, label %bb2, label %bb10.i | |
bb10.i: ; preds = %bb7.i | |
%_32.i.i = getelementptr inbounds i8, ptr %_32.i910.i, i64 1 | |
%_21.0.i = add nuw i64 %i.011.i, 1 | |
%2 = icmp eq ptr %_32.i.i, %end | |
br i1 %2, label %bb4, label %bb7.i | |
bb2: ; preds = %bb7.i | |
%_18 = icmp ugt i64 %i.011.i, %s.1 | |
br i1 %_18, label %bb5, label %bb6 | |
bb6: ; preds = %bb2 | |
%new_len = sub nuw i64 %s.1, %i.011.i | |
%data = getelementptr inbounds i8, ptr %s.0, i64 %i.011.i | |
br label %bb4 | |
bb5: ; preds = %bb2 | |
; call core::slice::index::slice_start_index_len_fail | |
tail call void @_ZN4core5slice5index26slice_start_index_len_fail17hebf4c07799653c4cE(i64 noundef %i.011.i, i64 noundef %s.1, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @alloc_7bfe8eaf482419fd2021a64e7d1acdd9) #2 | |
unreachable | |
bb4: ; preds = %bb10.i, %start, %bb6 | |
%.sroa.3.0 = phi i64 [ %new_len, %bb6 ], [ 0, %start ], [ %s.1, %bb10.i ] | |
%.sroa.0.0 = phi ptr [ %data, %bb6 ], [ %s.0, %start ], [ %s.0, %bb10.i ] | |
%3 = insertvalue { ptr, i64 } poison, ptr %.sroa.0.0, 0 | |
%4 = insertvalue { ptr, i64 } %3, i64 %.sroa.3.0, 1 | |
ret { ptr, i64 } %4 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define noundef i8 @position_index_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
%0 = icmp eq i64 %s.1, 0 | |
br i1 %0, label %bb5, label %bb7.i | |
bb7.i: ; preds = %start, %bb10.i | |
%i.011.i = phi i64 [ %_21.0.i, %bb10.i ], [ 0, %start ] | |
%_32.i910.i = phi ptr [ %_32.i.i, %bb10.i ], [ %s.0, %start ] | |
%_3.i.i = load i8, ptr %_32.i910.i, align 1, !alias.scope !18, !noalias !21, !noundef !8 | |
%1 = icmp eq i8 %_3.i.i, 92 | |
br i1 %1, label %bb2, label %bb10.i | |
bb10.i: ; preds = %bb7.i | |
%_32.i.i = getelementptr inbounds i8, ptr %_32.i910.i, i64 1 | |
%_21.0.i = add nuw i64 %i.011.i, 1 | |
%2 = icmp eq ptr %_32.i.i, %end | |
br i1 %2, label %bb5, label %bb7.i | |
bb2: ; preds = %bb7.i | |
%_8 = icmp ult i64 %i.011.i, %s.1 | |
br i1 %_8, label %bb3, label %panic, !prof !24 | |
bb3: ; preds = %bb2 | |
%3 = getelementptr inbounds [0 x i8], ptr %s.0, i64 0, i64 %i.011.i | |
%4 = load i8, ptr %3, align 1, !noundef !8 | |
br label %bb5 | |
panic: ; preds = %bb2 | |
; call core::panicking::panic_bounds_check | |
tail call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %i.011.i, i64 noundef %s.1, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @alloc_c8fb52adf811dcb255160898c9f3f03d) #2 | |
unreachable | |
bb5: ; preds = %bb10.i, %start, %bb3 | |
%.0 = phi i8 [ %4, %bb3 ], [ 42, %start ], [ 42, %bb10.i ] | |
ret i8 %.0 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define { ptr, i64 } @rposition_slice_to_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
br label %bb5.i | |
bb5.i: ; preds = %bb7.i, %start | |
%self1.i10.i = phi ptr [ %end, %start ], [ %_10.i.i.i, %bb7.i ] | |
%i.0.i = phi i64 [ %s.1, %start ], [ %1, %bb7.i ] | |
%0 = icmp eq ptr %self1.i10.i, %s.0 | |
br i1 %0, label %bb4, label %bb7.i | |
bb7.i: ; preds = %bb5.i | |
%_10.i.i.i = getelementptr inbounds i8, ptr %self1.i10.i, i64 -1 | |
%1 = add i64 %i.0.i, -1 | |
%_3.i.i = load i8, ptr %_10.i.i.i, align 1, !alias.scope !25, !noalias !28, !noundef !8 | |
%2 = icmp eq i8 %_3.i.i, 92 | |
br i1 %2, label %bb2, label %bb5.i | |
bb2: ; preds = %bb7.i | |
%_9.i = icmp ugt i64 %1, %s.1 | |
br i1 %_9.i, label %bb3.i, label %bb4 | |
bb3.i: ; preds = %bb2 | |
; call core::slice::index::slice_end_index_len_fail | |
tail call void @_ZN4core5slice5index24slice_end_index_len_fail17h80a8d89025e3e486E(i64 noundef %1, i64 noundef %s.1, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @alloc_e89c398a0256471fc014ced090cdaceb) #2, !noalias !31 | |
unreachable | |
bb4: ; preds = %bb5.i, %bb2 | |
%.sroa.3.0 = phi i64 [ %1, %bb2 ], [ %s.1, %bb5.i ] | |
%3 = insertvalue { ptr, i64 } poison, ptr %s.0, 0 | |
%4 = insertvalue { ptr, i64 } %3, i64 %.sroa.3.0, 1 | |
ret { ptr, i64 } %4 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define { ptr, i64 } @rposition_slice_from_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
br label %bb5.i | |
bb5.i: ; preds = %bb7.i, %start | |
%self1.i10.i = phi ptr [ %end, %start ], [ %_10.i.i.i, %bb7.i ] | |
%i.0.i = phi i64 [ %s.1, %start ], [ %1, %bb7.i ] | |
%0 = icmp eq ptr %self1.i10.i, %s.0 | |
br i1 %0, label %bb4, label %bb7.i | |
bb7.i: ; preds = %bb5.i | |
%_10.i.i.i = getelementptr inbounds i8, ptr %self1.i10.i, i64 -1 | |
%1 = add i64 %i.0.i, -1 | |
%_3.i.i = load i8, ptr %_10.i.i.i, align 1, !alias.scope !34, !noalias !37, !noundef !8 | |
%2 = icmp eq i8 %_3.i.i, 92 | |
br i1 %2, label %bb2, label %bb5.i | |
bb2: ; preds = %bb7.i | |
%_18 = icmp ugt i64 %1, %s.1 | |
br i1 %_18, label %bb5, label %bb6 | |
bb6: ; preds = %bb2 | |
%new_len = sub nuw i64 %s.1, %1 | |
%data = getelementptr inbounds i8, ptr %s.0, i64 %1 | |
br label %bb4 | |
bb5: ; preds = %bb2 | |
; call core::slice::index::slice_start_index_len_fail | |
tail call void @_ZN4core5slice5index26slice_start_index_len_fail17hebf4c07799653c4cE(i64 noundef %1, i64 noundef %s.1, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @alloc_c175dc71da6f7e1dc826123052d9cd03) #2 | |
unreachable | |
bb4: ; preds = %bb5.i, %bb6 | |
%.sroa.3.0 = phi i64 [ %new_len, %bb6 ], [ %s.1, %bb5.i ] | |
%.sroa.0.0 = phi ptr [ %data, %bb6 ], [ %s.0, %bb5.i ] | |
%3 = insertvalue { ptr, i64 } poison, ptr %.sroa.0.0, 0 | |
%4 = insertvalue { ptr, i64 } %3, i64 %.sroa.3.0, 1 | |
ret { ptr, i64 } %4 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define noundef i8 @rposition_index_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
br label %bb5.i | |
bb5.i: ; preds = %bb7.i, %start | |
%self1.i10.i = phi ptr [ %end, %start ], [ %_10.i.i.i, %bb7.i ] | |
%i.0.i = phi i64 [ %s.1, %start ], [ %1, %bb7.i ] | |
%0 = icmp eq ptr %self1.i10.i, %s.0 | |
br i1 %0, label %bb5, label %bb7.i | |
bb7.i: ; preds = %bb5.i | |
%_10.i.i.i = getelementptr inbounds i8, ptr %self1.i10.i, i64 -1 | |
%1 = add i64 %i.0.i, -1 | |
%_3.i.i = load i8, ptr %_10.i.i.i, align 1, !alias.scope !40, !noalias !43, !noundef !8 | |
%2 = icmp eq i8 %_3.i.i, 92 | |
br i1 %2, label %bb2, label %bb5.i | |
bb2: ; preds = %bb7.i | |
%_8 = icmp ult i64 %1, %s.1 | |
br i1 %_8, label %bb3, label %panic, !prof !24 | |
bb3: ; preds = %bb2 | |
%3 = getelementptr inbounds [0 x i8], ptr %s.0, i64 0, i64 %1 | |
%4 = load i8, ptr %3, align 1, !noundef !8 | |
br label %bb5 | |
panic: ; preds = %bb2 | |
; call core::panicking::panic_bounds_check | |
tail call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 noundef %1, i64 noundef %s.1, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @alloc_eb910bea89086399bbc20567964c9030) #2 | |
unreachable | |
bb5: ; preds = %bb5.i, %bb3 | |
%.0 = phi i8 [ %4, %bb3 ], [ 42, %bb5.i ] | |
ret i8 %.0 | |
} | |
; 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 #1 | |
; Function Attrs: nonlazybind uwtable | |
declare noundef i32 @rust_eh_personality(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) unnamed_addr #0 | |
; core::slice::index::slice_start_index_len_fail | |
; Function Attrs: cold noinline noreturn nonlazybind uwtable | |
declare void @_ZN4core5slice5index26slice_start_index_len_fail17hebf4c07799653c4cE(i64 noundef, i64 noundef, ptr noalias noundef readonly align 8 dereferenceable(24)) unnamed_addr #1 | |
; 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 #1 | |
attributes #0 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #1 = { cold noinline noreturn nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #2 = { noreturn } | |
!llvm.module.flags = !{!0, !1} | |
!0 = !{i32 8, !"PIC Level", i32 2} | |
!1 = !{i32 2, !"RtLibUseGOT", i32 1} | |
!2 = !{!3} | |
!3 = distinct !{!3, !4, !"_ZN39issue_73396_bounds_check_after_position33position_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h99f5d541eb931a50E: %b"} | |
!4 = distinct !{!4, !"_ZN39issue_73396_bounds_check_after_position33position_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h99f5d541eb931a50E"} | |
!5 = !{!6} | |
!6 = distinct !{!6, !7, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h014a29f14846ed19E: %self"} | |
!7 = distinct !{!7, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h014a29f14846ed19E"} | |
!8 = !{} | |
!9 = !{!10} | |
!10 = distinct !{!10, !11, !"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h59e8fe4d54d43364E: %slice.0"} | |
!11 = distinct !{!11, !"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h59e8fe4d54d43364E"} | |
!12 = !{!13} | |
!13 = distinct !{!13, !14, !"_ZN39issue_73396_bounds_check_after_position35position_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h67ad3d0719537553E: %b"} | |
!14 = distinct !{!14, !"_ZN39issue_73396_bounds_check_after_position35position_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h67ad3d0719537553E"} | |
!15 = !{!16} | |
!16 = distinct !{!16, !17, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17hff5e01dff8f73f91E: %self"} | |
!17 = distinct !{!17, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17hff5e01dff8f73f91E"} | |
!18 = !{!19} | |
!19 = distinct !{!19, !20, !"_ZN39issue_73396_bounds_check_after_position30position_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17hd945e81644499524E: %b"} | |
!20 = distinct !{!20, !"_ZN39issue_73396_bounds_check_after_position30position_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17hd945e81644499524E"} | |
!21 = !{!22} | |
!22 = distinct !{!22, !23, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h29ed6b771178a12bE: %self"} | |
!23 = distinct !{!23, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h29ed6b771178a12bE"} | |
!24 = !{!"branch_weights", i32 2000, i32 1} | |
!25 = !{!26} | |
!26 = distinct !{!26, !27, !"_ZN39issue_73396_bounds_check_after_position34rposition_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h448d1758c85b4ea9E: %b"} | |
!27 = distinct !{!27, !"_ZN39issue_73396_bounds_check_after_position34rposition_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h448d1758c85b4ea9E"} | |
!28 = !{!29} | |
!29 = distinct !{!29, !30, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h5b47a5f6bb653399E: %self"} | |
!30 = distinct !{!30, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h5b47a5f6bb653399E"} | |
!31 = !{!32} | |
!32 = distinct !{!32, !33, !"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h59e8fe4d54d43364E: %slice.0"} | |
!33 = distinct !{!33, !"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h59e8fe4d54d43364E"} | |
!34 = !{!35} | |
!35 = distinct !{!35, !36, !"_ZN39issue_73396_bounds_check_after_position36rposition_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h0e540b8963bdb02dE: %b"} | |
!36 = distinct !{!36, !"_ZN39issue_73396_bounds_check_after_position36rposition_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h0e540b8963bdb02dE"} | |
!37 = !{!38} | |
!38 = distinct !{!38, !39, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17ha10bc9d42e3742a8E: %self"} | |
!39 = distinct !{!39, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17ha10bc9d42e3742a8E"} | |
!40 = !{!41} | |
!41 = distinct !{!41, !42, !"_ZN39issue_73396_bounds_check_after_position31rposition_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h543c9a77d10c335dE: %b"} | |
!42 = distinct !{!42, !"_ZN39issue_73396_bounds_check_after_position31rposition_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h543c9a77d10c335dE"} | |
!43 = !{!44} | |
!44 = distinct !{!44, !45, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h37283fbd7bde1439E: %self"} | |
!45 = distinct !{!45, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h37283fbd7bde1439E"} |
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_73396_bounds_check_after_position.243dbce97eb6665-cgu.0' | |
source_filename = "issue_73396_bounds_check_after_position.243dbce97eb6665-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" | |
; Function Attrs: nofree nosync nounwind nonlazybind memory(read, inaccessiblemem: readwrite) uwtable | |
define { ptr, i64 } @position_slice_to_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
%0 = icmp eq i64 %s.1, 0 | |
br i1 %0, label %bb4, label %bb7.i | |
bb7.i: ; preds = %start, %bb10.i | |
%i.013.i = phi i64 [ %_21.0.i, %bb10.i ], [ 0, %start ] | |
%_32.i1112.i = phi ptr [ %_32.i.i, %bb10.i ], [ %s.0, %start ] | |
%_3.i.i = load i8, ptr %_32.i1112.i, align 1, !alias.scope !2, !noalias !5, !noundef !8 | |
%1 = icmp eq i8 %_3.i.i, 92 | |
br i1 %1, label %bb2, label %bb10.i | |
bb10.i: ; preds = %bb7.i | |
%_32.i.i = getelementptr inbounds i8, ptr %_32.i1112.i, i64 1 | |
%_21.0.i = add nuw i64 %i.013.i, 1 | |
%2 = icmp eq ptr %_32.i.i, %end | |
br i1 %2, label %bb4, label %bb7.i | |
bb2: ; preds = %bb7.i | |
%_17.i = icmp ult i64 %i.013.i, %s.1 | |
tail call void @llvm.assume(i1 %_17.i) | |
br label %bb4 | |
bb4: ; preds = %bb10.i, %start, %bb2 | |
%.sroa.3.0 = phi i64 [ %i.013.i, %bb2 ], [ 0, %start ], [ %s.1, %bb10.i ] | |
%3 = insertvalue { ptr, i64 } poison, ptr %s.0, 0 | |
%4 = insertvalue { ptr, i64 } %3, i64 %.sroa.3.0, 1 | |
ret { ptr, i64 } %4 | |
} | |
; Function Attrs: nofree nosync nounwind nonlazybind memory(read, inaccessiblemem: readwrite) uwtable | |
define { ptr, i64 } @position_slice_from_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
%0 = icmp eq i64 %s.1, 0 | |
br i1 %0, label %bb4, label %bb7.i | |
bb7.i: ; preds = %start, %bb10.i | |
%i.013.i = phi i64 [ %_21.0.i, %bb10.i ], [ 0, %start ] | |
%_32.i1112.i = phi ptr [ %_32.i.i, %bb10.i ], [ %s.0, %start ] | |
%_3.i.i = load i8, ptr %_32.i1112.i, align 1, !alias.scope !9, !noalias !12, !noundef !8 | |
%1 = icmp eq i8 %_3.i.i, 92 | |
br i1 %1, label %bb2, label %bb10.i | |
bb10.i: ; preds = %bb7.i | |
%_32.i.i = getelementptr inbounds i8, ptr %_32.i1112.i, i64 1 | |
%_21.0.i = add nuw i64 %i.013.i, 1 | |
%2 = icmp eq ptr %_32.i.i, %end | |
br i1 %2, label %bb4, label %bb7.i | |
bb2: ; preds = %bb7.i | |
%_17.i = icmp ult i64 %i.013.i, %s.1 | |
tail call void @llvm.assume(i1 %_17.i) | |
%new_len = sub nuw i64 %s.1, %i.013.i | |
%data = getelementptr inbounds i8, ptr %s.0, i64 %i.013.i | |
br label %bb4 | |
bb4: ; preds = %bb10.i, %start, %bb2 | |
%.sroa.3.0 = phi i64 [ %new_len, %bb2 ], [ 0, %start ], [ %s.1, %bb10.i ] | |
%.sroa.0.0 = phi ptr [ %data, %bb2 ], [ %s.0, %start ], [ %s.0, %bb10.i ] | |
%3 = insertvalue { ptr, i64 } poison, ptr %.sroa.0.0, 0 | |
%4 = insertvalue { ptr, i64 } %3, i64 %.sroa.3.0, 1 | |
ret { ptr, i64 } %4 | |
} | |
; Function Attrs: nofree nosync nounwind nonlazybind memory(read, inaccessiblemem: readwrite) uwtable | |
define noundef i8 @position_index_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
%0 = icmp eq i64 %s.1, 0 | |
br i1 %0, label %bb5, label %bb7.i | |
bb7.i: ; preds = %start, %bb10.i | |
%i.013.i = phi i64 [ %_21.0.i, %bb10.i ], [ 0, %start ] | |
%_32.i1112.i = phi ptr [ %_32.i.i, %bb10.i ], [ %s.0, %start ] | |
%_3.i.i = load i8, ptr %_32.i1112.i, align 1, !alias.scope !15, !noalias !18, !noundef !8 | |
%1 = icmp eq i8 %_3.i.i, 92 | |
br i1 %1, label %bb2, label %bb10.i | |
bb10.i: ; preds = %bb7.i | |
%_32.i.i = getelementptr inbounds i8, ptr %_32.i1112.i, i64 1 | |
%_21.0.i = add nuw i64 %i.013.i, 1 | |
%2 = icmp eq ptr %_32.i.i, %end | |
br i1 %2, label %bb5, label %bb7.i | |
bb2: ; preds = %bb7.i | |
%_17.i = icmp ult i64 %i.013.i, %s.1 | |
tail call void @llvm.assume(i1 %_17.i) | |
%3 = getelementptr inbounds [0 x i8], ptr %s.0, i64 0, i64 %i.013.i | |
%4 = load i8, ptr %3, align 1, !noundef !8 | |
br label %bb5 | |
bb5: ; preds = %bb10.i, %start, %bb2 | |
%.0 = phi i8 [ %4, %bb2 ], [ 42, %start ], [ 42, %bb10.i ] | |
ret i8 %.0 | |
} | |
; Function Attrs: nofree nosync nounwind nonlazybind memory(read, inaccessiblemem: readwrite) uwtable | |
define { ptr, i64 } @rposition_slice_to_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
br label %bb5.i | |
bb5.i: ; preds = %bb7.i, %start | |
%self1.i10.i = phi ptr [ %end, %start ], [ %_10.i.i.i, %bb7.i ] | |
%i.0.i = phi i64 [ %s.1, %start ], [ %1, %bb7.i ] | |
%0 = icmp eq ptr %self1.i10.i, %s.0 | |
br i1 %0, label %bb4, label %bb7.i | |
bb7.i: ; preds = %bb5.i | |
%_10.i.i.i = getelementptr inbounds i8, ptr %self1.i10.i, i64 -1 | |
%1 = add i64 %i.0.i, -1 | |
%_3.i.i = load i8, ptr %_10.i.i.i, align 1, !alias.scope !21, !noalias !24, !noundef !8 | |
%2 = icmp eq i8 %_3.i.i, 92 | |
br i1 %2, label %bb2, label %bb5.i | |
bb2: ; preds = %bb7.i | |
%_17.i = icmp ult i64 %1, %s.1 | |
tail call void @llvm.assume(i1 %_17.i) | |
br label %bb4 | |
bb4: ; preds = %bb5.i, %bb2 | |
%.sroa.3.0 = phi i64 [ %1, %bb2 ], [ %s.1, %bb5.i ] | |
%3 = insertvalue { ptr, i64 } poison, ptr %s.0, 0 | |
%4 = insertvalue { ptr, i64 } %3, i64 %.sroa.3.0, 1 | |
ret { ptr, i64 } %4 | |
} | |
; Function Attrs: nofree nosync nounwind nonlazybind memory(read, inaccessiblemem: readwrite) uwtable | |
define { ptr, i64 } @rposition_slice_from_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
br label %bb5.i | |
bb5.i: ; preds = %bb7.i, %start | |
%self1.i10.i = phi ptr [ %end, %start ], [ %_10.i.i.i, %bb7.i ] | |
%i.0.i = phi i64 [ %s.1, %start ], [ %1, %bb7.i ] | |
%0 = icmp eq ptr %self1.i10.i, %s.0 | |
br i1 %0, label %bb4, label %bb7.i | |
bb7.i: ; preds = %bb5.i | |
%_10.i.i.i = getelementptr inbounds i8, ptr %self1.i10.i, i64 -1 | |
%1 = add i64 %i.0.i, -1 | |
%_3.i.i = load i8, ptr %_10.i.i.i, align 1, !alias.scope !27, !noalias !30, !noundef !8 | |
%2 = icmp eq i8 %_3.i.i, 92 | |
br i1 %2, label %bb2, label %bb5.i | |
bb2: ; preds = %bb7.i | |
%_17.i = icmp ult i64 %1, %s.1 | |
tail call void @llvm.assume(i1 %_17.i) | |
%new_len = sub nuw i64 %s.1, %1 | |
%data = getelementptr inbounds i8, ptr %s.0, i64 %1 | |
br label %bb4 | |
bb4: ; preds = %bb5.i, %bb2 | |
%.sroa.3.0 = phi i64 [ %new_len, %bb2 ], [ %s.1, %bb5.i ] | |
%.sroa.0.0 = phi ptr [ %data, %bb2 ], [ %s.0, %bb5.i ] | |
%3 = insertvalue { ptr, i64 } poison, ptr %.sroa.0.0, 0 | |
%4 = insertvalue { ptr, i64 } %3, i64 %.sroa.3.0, 1 | |
ret { ptr, i64 } %4 | |
} | |
; Function Attrs: nofree nosync nounwind nonlazybind memory(read, inaccessiblemem: readwrite) uwtable | |
define noundef i8 @rposition_index_no_bounds_check(ptr noalias noundef nonnull readonly align 1 %s.0, i64 noundef %s.1) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%end = getelementptr inbounds i8, ptr %s.0, i64 %s.1 | |
br label %bb5.i | |
bb5.i: ; preds = %bb7.i, %start | |
%self1.i10.i = phi ptr [ %end, %start ], [ %_10.i.i.i, %bb7.i ] | |
%i.0.i = phi i64 [ %s.1, %start ], [ %1, %bb7.i ] | |
%0 = icmp eq ptr %self1.i10.i, %s.0 | |
br i1 %0, label %bb5, label %bb7.i | |
bb7.i: ; preds = %bb5.i | |
%_10.i.i.i = getelementptr inbounds i8, ptr %self1.i10.i, i64 -1 | |
%1 = add i64 %i.0.i, -1 | |
%_3.i.i = load i8, ptr %_10.i.i.i, align 1, !alias.scope !33, !noalias !36, !noundef !8 | |
%2 = icmp eq i8 %_3.i.i, 92 | |
br i1 %2, label %bb2, label %bb5.i | |
bb2: ; preds = %bb7.i | |
%_17.i = icmp ult i64 %1, %s.1 | |
tail call void @llvm.assume(i1 %_17.i) | |
%3 = getelementptr inbounds [0 x i8], ptr %s.0, i64 0, i64 %1 | |
%4 = load i8, ptr %3, align 1, !noundef !8 | |
br label %bb5 | |
bb5: ; preds = %bb5.i, %bb2 | |
%.0 = phi i8 [ %4, %bb2 ], [ 42, %bb5.i ] | |
ret i8 %.0 | |
} | |
; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) | |
declare void @llvm.assume(i1 noundef) #1 | |
; Function Attrs: nonlazybind uwtable | |
declare noundef i32 @rust_eh_personality(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) unnamed_addr #2 | |
attributes #0 = { nofree nosync nounwind nonlazybind memory(read, inaccessiblemem: readwrite) uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) } | |
attributes #2 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } | |
!llvm.module.flags = !{!0, !1} | |
!0 = !{i32 8, !"PIC Level", i32 2} | |
!1 = !{i32 2, !"RtLibUseGOT", i32 1} | |
!2 = !{!3} | |
!3 = distinct !{!3, !4, !"_ZN39issue_73396_bounds_check_after_position33position_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h99f5d541eb931a50E: %b"} | |
!4 = distinct !{!4, !"_ZN39issue_73396_bounds_check_after_position33position_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h99f5d541eb931a50E"} | |
!5 = !{!6} | |
!6 = distinct !{!6, !7, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h014a29f14846ed19E: %self"} | |
!7 = distinct !{!7, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h014a29f14846ed19E"} | |
!8 = !{} | |
!9 = !{!10} | |
!10 = distinct !{!10, !11, !"_ZN39issue_73396_bounds_check_after_position35position_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h67ad3d0719537553E: %b"} | |
!11 = distinct !{!11, !"_ZN39issue_73396_bounds_check_after_position35position_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h67ad3d0719537553E"} | |
!12 = !{!13} | |
!13 = distinct !{!13, !14, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17hff5e01dff8f73f91E: %self"} | |
!14 = distinct !{!14, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17hff5e01dff8f73f91E"} | |
!15 = !{!16} | |
!16 = distinct !{!16, !17, !"_ZN39issue_73396_bounds_check_after_position30position_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17hd945e81644499524E: %b"} | |
!17 = distinct !{!17, !"_ZN39issue_73396_bounds_check_after_position30position_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17hd945e81644499524E"} | |
!18 = !{!19} | |
!19 = distinct !{!19, !20, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h29ed6b771178a12bE: %self"} | |
!20 = distinct !{!20, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h29ed6b771178a12bE"} | |
!21 = !{!22} | |
!22 = distinct !{!22, !23, !"_ZN39issue_73396_bounds_check_after_position34rposition_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h448d1758c85b4ea9E: %b"} | |
!23 = distinct !{!23, !"_ZN39issue_73396_bounds_check_after_position34rposition_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h448d1758c85b4ea9E"} | |
!24 = !{!25} | |
!25 = distinct !{!25, !26, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h5b47a5f6bb653399E: %self"} | |
!26 = distinct !{!26, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h5b47a5f6bb653399E"} | |
!27 = !{!28} | |
!28 = distinct !{!28, !29, !"_ZN39issue_73396_bounds_check_after_position36rposition_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h0e540b8963bdb02dE: %b"} | |
!29 = distinct !{!29, !"_ZN39issue_73396_bounds_check_after_position36rposition_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h0e540b8963bdb02dE"} | |
!30 = !{!31} | |
!31 = distinct !{!31, !32, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17ha10bc9d42e3742a8E: %self"} | |
!32 = distinct !{!32, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17ha10bc9d42e3742a8E"} | |
!33 = !{!34} | |
!34 = distinct !{!34, !35, !"_ZN39issue_73396_bounds_check_after_position31rposition_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h543c9a77d10c335dE: %b"} | |
!35 = distinct !{!35, !"_ZN39issue_73396_bounds_check_after_position31rposition_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h543c9a77d10c335dE"} | |
!36 = !{!37} | |
!37 = distinct !{!37, !38, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h37283fbd7bde1439E: %self"} | |
!38 = distinct !{!38, !"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h37283fbd7bde1439E"} |
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_73396_bounds_check_after_position.12dbb5087cd0c66c-cgu.0' | |
source_filename = "issue_73396_bounds_check_after_position.12dbb5087cd0c66c-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] } | |
%"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:46:42: 46:45]" = type {} | |
%"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:16:42: 16:45]" = type {} | |
%"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:31:42: 31:45]" = type {} | |
%"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:60:43: 60:46]" = type {} | |
%"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:75:43: 75:46]" = type {} | |
%"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:90:43: 90:46]" = type {} | |
@alloc_ec595fc0e82ef92fc59bd74f68296eae = private unnamed_addr constant <{ [73 x i8] }> <{ [73 x i8] c"assertion failed: 0 < pointee_size && pointee_size <= isize::MAX as usize" }>, align 1 | |
@alloc_a9b9d27d369490c800a95967305acdd4 = private unnamed_addr constant <{ [86 x i8] }> <{ [86 x i8] c"/usr/local/google/home/mmaurer/github/rust-lang/rust/library/core/src/ptr/const_ptr.rs" }>, align 1 | |
@alloc_de0e111772569183ce64d8c631a4a53c = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_a9b9d27d369490c800a95967305acdd4, [16 x i8] c"V\00\00\00\00\00\00\00\1D\03\00\00\09\00\00\00" }>, align 8 | |
@alloc_0749546057a47d312f067b3c1ec35c24 = private unnamed_addr constant <{ [83 x i8] }> <{ [83 x i8] c"/usr/local/google/home/mmaurer/github/rust-lang/rust/library/core/src/slice/iter.rs" }>, align 1 | |
@alloc_0ef4327575a2b985ccec2b4b1b800927 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_0749546057a47d312f067b3c1ec35c24, [16 x i8] c"S\00\00\00\00\00\00\00\83\00\00\00\01\00\00\00" }>, align 8 | |
@str.0 = internal constant [28 x i8] c"attempt to add with overflow" | |
@alloc_6118ae478a48f0775b0377b40d9df188 = private unnamed_addr constant <{ [63 x i8] }> <{ [63 x i8] c"tests/codegen/issues/issue-73396-bounds-check-after-position.rs" }>, align 1 | |
@alloc_3be2c4c24977a1246f0f21c86e12e13d = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_6118ae478a48f0775b0377b40d9df188, [16 x i8] c"?\00\00\00\00\00\00\00\11\00\00\00\0A\00\00\00" }>, align 8 | |
@alloc_1aa28502097eab29d2364e0f05756451 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_6118ae478a48f0775b0377b40d9df188, [16 x i8] c"?\00\00\00\00\00\00\00 \00\00\00\0A\00\00\00" }>, align 8 | |
@alloc_6d0dcba2cfb971c18983344891bc74d3 = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_6118ae478a48f0775b0377b40d9df188, [16 x i8] c"?\00\00\00\00\00\00\00/\00\00\00\09\00\00\00" }>, align 8 | |
@alloc_bc51fbc4dba7ecff3cbe7998b8cdf04b = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_6118ae478a48f0775b0377b40d9df188, [16 x i8] c"?\00\00\00\00\00\00\00=\00\00\00\0A\00\00\00" }>, align 8 | |
@alloc_4ffa1e0c5f69e41cbb461912a83bf72c = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_6118ae478a48f0775b0377b40d9df188, [16 x i8] c"?\00\00\00\00\00\00\00L\00\00\00\0A\00\00\00" }>, align 8 | |
@alloc_710ed194fbc5b9f5c247e30afb3033da = private unnamed_addr constant <{ ptr, [16 x i8] }> <{ ptr @alloc_6118ae478a48f0775b0377b40d9df188, [16 x i8] c"?\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 { ptr, i64 } @"_ZN106_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17hcbc738f1f1169dc1E"(i64 %self.0, i64 %self.1, ptr align 1 %slice.0, i64 %slice.1, ptr align 8 %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 %self.0, i64 %self.1, ptr align 8 %0) #6 | |
unreachable | |
bb4: ; preds = %bb2 | |
%new_len = sub nuw i64 %self.1, %self.0 | |
%data = getelementptr inbounds i8, ptr %slice.0, i64 %self.0 | |
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 | |
%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 | |
%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 %self.1, i64 %slice.1, ptr align 8 %0) #6 | |
unreachable | |
} | |
; <core::slice::iter::Iter<T> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define align 1 ptr @"_ZN106_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..double_ended..DoubleEndedIterator$GT$9next_back17h41c1c6141187c094E"(ptr align 8 %self) unnamed_addr #0 { | |
start: | |
%0 = alloca ptr, align 8 | |
%_6 = alloca i8, align 1 | |
%1 = alloca ptr, align 8 | |
br i1 true, label %bb1, label %bb2 | |
bb2: ; preds = %bb1, %start | |
br i1 false, label %bb3, label %bb4 | |
bb1: ; preds = %start | |
%2 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1 = load ptr, ptr %2, align 8, !noundef !2 | |
%_17 = ptrtoint ptr %self1 to i64 | |
%_4 = icmp eq i64 %_17, 0 | |
%_3 = xor i1 %_4, true | |
call void @llvm.assume(i1 %_3) | |
br label %bb2 | |
bb4: ; preds = %bb2 | |
%self2 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
%3 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%_13 = load ptr, ptr %3, align 8, !noundef !2 | |
%4 = icmp eq ptr %self2, %_13 | |
%5 = zext i1 %4 to i8 | |
store i8 %5, ptr %_6, align 1 | |
br label %bb5 | |
bb3: ; preds = %bb2 | |
%6 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self3 = load ptr, ptr %6, align 8, !noundef !2 | |
%_8 = ptrtoint ptr %self3 to i64 | |
%7 = icmp eq i64 %_8, 0 | |
%8 = zext i1 %7 to i8 | |
store i8 %8, ptr %_6, align 1 | |
br label %bb5 | |
bb5: ; preds = %bb3, %bb4 | |
%9 = load i8, ptr %_6, align 1, !range !3, !noundef !2 | |
%10 = trunc i8 %9 to i1 | |
br i1 %10, label %bb6, label %bb7 | |
bb7: ; preds = %bb5 | |
%11 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1.i = load ptr, ptr %11, align 8, !noundef !2 | |
%_10.i = getelementptr inbounds i8, ptr %self1.i, i64 -1 | |
%12 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
store ptr %_10.i, ptr %12, align 8 | |
%13 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%14 = load ptr, ptr %13, align 8, !noundef !2 | |
store ptr %14, ptr %0, align 8 | |
%15 = load ptr, ptr %0, align 8, !noundef !2 | |
store ptr %15, ptr %1, align 8 | |
br label %bb9 | |
bb6: ; preds = %bb5 | |
store ptr null, ptr %1, align 8 | |
br label %bb9 | |
bb9: ; preds = %bb6, %bb7 | |
%16 = load ptr, ptr %1, align 8, !align !4, !noundef !2 | |
ret ptr %16 | |
} | |
; <core::ops::range::RangeTo<usize> as core::slice::index::SliceIndex<[T]>>::index | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { ptr, i64 } @"_ZN108_$LT$core..ops..range..RangeTo$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17hb8e049a278b56912E"(i64 %self, ptr align 1 %slice.0, i64 %slice.1, ptr align 8 %0) unnamed_addr #0 { | |
start: | |
%_4 = alloca { i64, i64 }, align 8 | |
store i64 0, ptr %_4, align 8 | |
%1 = getelementptr inbounds { i64, i64 }, ptr %_4, i32 0, i32 1 | |
store i64 %self, ptr %1, align 8 | |
%2 = getelementptr inbounds { i64, i64 }, ptr %_4, i32 0, i32 0 | |
%3 = load i64, ptr %2, align 8, !noundef !2 | |
%4 = getelementptr inbounds { i64, i64 }, ptr %_4, i32 0, i32 1 | |
%5 = load i64, ptr %4, align 8, !noundef !2 | |
; call <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index | |
%6 = 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$5index17hcbc738f1f1169dc1E"(i64 %3, i64 %5, ptr align 1 %slice.0, i64 %slice.1, ptr align 8 %0) | |
%_3.0 = extractvalue { ptr, i64 } %6, 0 | |
%_3.1 = extractvalue { ptr, i64 } %6, 1 | |
%7 = insertvalue { ptr, i64 } poison, ptr %_3.0, 0 | |
%8 = insertvalue { ptr, i64 } %7, i64 %_3.1, 1 | |
ret { ptr, i64 } %8 | |
} | |
; <core::ops::range::RangeFrom<usize> as core::slice::index::SliceIndex<[T]>>::index | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { ptr, i64 } @"_ZN110_$LT$core..ops..range..RangeFrom$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h5a0dbace8eab3d1cE"(i64 %self, ptr align 1 %slice.0, i64 %slice.1, ptr align 8 %0) unnamed_addr #0 { | |
start: | |
%_18 = alloca { ptr, i64 }, align 8 | |
%_17 = alloca %"core::ptr::metadata::PtrRepr<[u8]>", align 8 | |
%_12 = alloca %"core::ptr::metadata::PtrRepr<[u8]>", align 8 | |
%_3 = icmp ugt i64 %self, %slice.1 | |
br i1 %_3, label %bb1, label %bb2 | |
bb2: ; preds = %start | |
%1 = getelementptr inbounds { ptr, i64 }, ptr %_12, i32 0, i32 0 | |
store ptr %slice.0, ptr %1, align 8 | |
%2 = getelementptr inbounds { ptr, i64 }, ptr %_12, i32 0, i32 1 | |
store i64 %slice.1, ptr %2, align 8 | |
%3 = getelementptr inbounds { ptr, i64 }, ptr %_12, i32 0, i32 1 | |
%self1 = load i64, ptr %3, align 8, !noundef !2 | |
%new_len = sub nuw i64 %self1, %self | |
%data = getelementptr inbounds i8, ptr %slice.0, i64 %self | |
store ptr %data, ptr %_18, align 8 | |
%4 = getelementptr inbounds { ptr, i64 }, ptr %_18, i32 0, i32 1 | |
store i64 %new_len, ptr %4, align 8 | |
%5 = getelementptr inbounds { ptr, i64 }, ptr %_18, i32 0, i32 0 | |
%6 = load ptr, ptr %5, align 8, !noundef !2 | |
%7 = getelementptr inbounds { ptr, i64 }, ptr %_18, i32 0, i32 1 | |
%8 = load i64, ptr %7, align 8, !noundef !2 | |
%9 = getelementptr inbounds { ptr, i64 }, ptr %_17, i32 0, i32 0 | |
store ptr %6, ptr %9, align 8 | |
%10 = getelementptr inbounds { ptr, i64 }, ptr %_17, i32 0, i32 1 | |
store i64 %8, ptr %10, align 8 | |
%11 = getelementptr inbounds { ptr, i64 }, ptr %_17, i32 0, i32 0 | |
%_9.0 = load ptr, ptr %11, align 8, !noundef !2 | |
%12 = getelementptr inbounds { ptr, i64 }, ptr %_17, i32 0, i32 1 | |
%_9.1 = load i64, ptr %12, align 8, !noundef !2 | |
%13 = insertvalue { ptr, i64 } poison, ptr %_9.0, 0 | |
%14 = insertvalue { ptr, i64 } %13, i64 %_9.1, 1 | |
ret { ptr, i64 } %14 | |
bb1: ; preds = %start | |
; call core::slice::index::slice_start_index_len_fail | |
call void @_ZN4core5slice5index26slice_start_index_len_fail17hebf4c07799653c4cE(i64 %self, i64 %slice.1, ptr align 8 %0) #6 | |
unreachable | |
} | |
; core::slice::<impl [T]>::iter | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { ptr, ptr } @"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hc2bc82a9da745a53E"(ptr align 1 %self.0, i64 %self.1) unnamed_addr #0 { | |
start: | |
%_7 = alloca ptr, align 8 | |
%end = alloca ptr, align 8 | |
%0 = alloca { ptr, ptr }, align 8 | |
br i1 false, label %bb1, label %bb2 | |
bb2: ; preds = %start | |
%1 = getelementptr inbounds i8, ptr %self.0, i64 %self.1 | |
store ptr %1, ptr %end, align 8 | |
br label %bb3 | |
bb1: ; preds = %start | |
%2 = inttoptr i64 %self.1 to ptr | |
store ptr %2, ptr %end, align 8 | |
br label %bb3 | |
bb3: ; preds = %bb1, %bb2 | |
store ptr %self.0, ptr %_7, align 8 | |
%_9 = load ptr, ptr %end, align 8, !noundef !2 | |
%3 = load ptr, ptr %_7, align 8, !nonnull !2, !noundef !2 | |
store ptr %3, ptr %0, align 8 | |
%4 = getelementptr inbounds { ptr, ptr }, ptr %0, i32 0, i32 1 | |
store ptr %_9, ptr %4, align 8 | |
%5 = getelementptr inbounds { ptr, ptr }, ptr %0, i32 0, i32 0 | |
%6 = load ptr, ptr %5, align 8, !nonnull !2, !noundef !2 | |
%7 = getelementptr inbounds { ptr, ptr }, ptr %0, i32 0, i32 1 | |
%8 = load ptr, ptr %7, align 8, !noundef !2 | |
%9 = insertvalue { ptr, ptr } poison, ptr %6, 0 | |
%10 = insertvalue { ptr, ptr } %9, ptr %8, 1 | |
ret { ptr, ptr } %10 | |
} | |
; core::slice::index::<impl core::ops::index::Index<I> for [T]>::index | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { ptr, i64 } @"_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h66a3bc8ab0c1335cE"(ptr align 1 %self.0, i64 %self.1, i64 %index, ptr align 8 %0) unnamed_addr #0 { | |
start: | |
; call <core::ops::range::RangeTo<usize> as core::slice::index::SliceIndex<[T]>>::index | |
%1 = call { ptr, i64 } @"_ZN108_$LT$core..ops..range..RangeTo$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17hb8e049a278b56912E"(i64 %index, ptr align 1 %self.0, i64 %self.1, ptr align 8 %0) | |
%_3.0 = extractvalue { ptr, i64 } %1, 0 | |
%_3.1 = extractvalue { ptr, i64 } %1, 1 | |
%2 = insertvalue { ptr, i64 } poison, ptr %_3.0, 0 | |
%3 = insertvalue { ptr, i64 } %2, i64 %_3.1, 1 | |
ret { ptr, i64 } %3 | |
} | |
; core::slice::index::<impl core::ops::index::Index<I> for [T]>::index | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { ptr, i64 } @"_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17hf11adc2032126944E"(ptr align 1 %self.0, i64 %self.1, i64 %index, ptr align 8 %0) unnamed_addr #0 { | |
start: | |
; call <core::ops::range::RangeFrom<usize> as core::slice::index::SliceIndex<[T]>>::index | |
%1 = call { ptr, i64 } @"_ZN110_$LT$core..ops..range..RangeFrom$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$5index17h5a0dbace8eab3d1cE"(i64 %index, ptr align 1 %self.0, i64 %self.1, ptr align 8 %0) | |
%_3.0 = extractvalue { ptr, i64 } %1, 0 | |
%_3.1 = extractvalue { ptr, i64 } %1, 1 | |
%2 = insertvalue { ptr, i64 } poison, ptr %_3.0, 0 | |
%3 = insertvalue { ptr, i64 } %2, i64 %_3.1, 1 | |
ret { ptr, i64 } %3 | |
} | |
; <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define align 1 ptr @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17ha3ea26ba16b609e4E"(ptr align 8 %self) unnamed_addr #0 { | |
start: | |
%_28 = alloca ptr, align 8 | |
%_6 = alloca i8, align 1 | |
%0 = alloca ptr, align 8 | |
br i1 true, label %bb1, label %bb2 | |
bb2: ; preds = %bb1, %start | |
br i1 false, label %bb3, label %bb4 | |
bb1: ; preds = %start | |
%1 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1 = load ptr, ptr %1, align 8, !noundef !2 | |
%_17 = ptrtoint ptr %self1 to i64 | |
%_4 = icmp eq i64 %_17, 0 | |
%_3 = xor i1 %_4, true | |
call void @llvm.assume(i1 %_3) | |
br label %bb2 | |
bb4: ; preds = %bb2 | |
%self2 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
%2 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%_13 = load ptr, ptr %2, align 8, !noundef !2 | |
%3 = icmp eq ptr %self2, %_13 | |
%4 = zext i1 %3 to i8 | |
store i8 %4, ptr %_6, align 1 | |
br label %bb5 | |
bb3: ; preds = %bb2 | |
%5 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self3 = load ptr, ptr %5, align 8, !noundef !2 | |
%_8 = ptrtoint ptr %self3 to i64 | |
%6 = icmp eq i64 %_8, 0 | |
%7 = zext i1 %6 to i8 | |
store i8 %7, ptr %_6, align 1 | |
br label %bb5 | |
bb5: ; preds = %bb3, %bb4 | |
%8 = load i8, ptr %_6, align 1, !range !3, !noundef !2 | |
%9 = trunc i8 %8 to i1 | |
br i1 %9, label %bb6, label %bb7 | |
bb7: ; preds = %bb5 | |
%old = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
br i1 false, label %bb9, label %bb10 | |
bb6: ; preds = %bb5 | |
store ptr null, ptr %0, align 8 | |
br label %bb8 | |
bb10: ; preds = %bb7 | |
%self4 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
%_32 = getelementptr inbounds i8, ptr %self4, i64 1 | |
store ptr %_32, ptr %_28, align 8 | |
%10 = load ptr, ptr %_28, align 8, !nonnull !2, !noundef !2 | |
store ptr %10, ptr %self, align 8 | |
br label %bb11 | |
bb9: ; preds = %bb7 | |
%11 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self5 = load ptr, ptr %11, align 8, !noundef !2 | |
%_25 = ptrtoint ptr %self5 to i64 | |
%new_len = sub i64 %_25, 1 | |
%_27 = inttoptr i64 %new_len to ptr | |
%12 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
store ptr %_27, ptr %12, align 8 | |
br label %bb11 | |
bb11: ; preds = %bb9, %bb10 | |
store ptr %old, ptr %0, align 8 | |
br label %bb8 | |
bb8: ; preds = %bb6, %bb11 | |
%13 = load ptr, ptr %0, align 8, !align !4, !noundef !2 | |
ret ptr %13 | |
} | |
; <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::position | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h8533e6dc674a7121E"(ptr align 8 %self) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%0 = alloca { ptr, i32 }, align 8 | |
%_26 = alloca i8, align 1 | |
%_16 = alloca ptr, align 8 | |
%_11 = alloca ptr, align 8 | |
%i = alloca i64, align 8 | |
%n = alloca i64, align 8 | |
%1 = alloca { i64, i64 }, align 8 | |
%predicate = alloca %"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:46:42: 46:45]", align 1 | |
br i1 false, label %bb1, label %bb2 | |
bb2: ; preds = %start | |
%2 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1 = load ptr, ptr %2, align 8, !noundef !2 | |
%self2 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
br i1 true, label %bb17, label %bb16 | |
bb1: ; preds = %start | |
%3 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self3 = load ptr, ptr %3, align 8, !noundef !2 | |
%4 = ptrtoint ptr %self3 to i64 | |
store i64 %4, ptr %n, align 8 | |
br label %bb4 | |
bb16: ; preds = %bb2 | |
store i8 0, ptr %_26, align 1 | |
br label %bb18 | |
bb17: ; preds = %bb2 | |
store i8 1, ptr %_26, align 1 | |
br label %bb18 | |
bb18: ; preds = %bb17, %bb16 | |
%5 = load i8, ptr %_26, align 1, !range !3, !noundef !2 | |
%6 = trunc i8 %5 to i1 | |
%_25 = xor i1 %6, true | |
br i1 %_25, label %bb19, label %bb20 | |
bb20: ; preds = %bb18 | |
%7 = ptrtoint ptr %self1 to i64 | |
%8 = ptrtoint ptr %self2 to i64 | |
%9 = sub nuw i64 %7, %8 | |
%10 = udiv exact i64 %9, 1 | |
store i64 %10, ptr %n, align 8 | |
br label %bb4 | |
bb19: ; preds = %bb18 | |
; invoke core::panicking::panic | |
invoke void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1 @alloc_ec595fc0e82ef92fc59bd74f68296eae, i64 73, ptr align 8 @alloc_de0e111772569183ce64d8c631a4a53c) #6 | |
to label %unreachable unwind label %cleanup | |
bb4: ; preds = %bb1, %bb20 | |
store i64 0, ptr %i, align 8 | |
br label %bb5 | |
bb14: ; preds = %cleanup | |
%11 = load ptr, ptr %0, align 8, !noundef !2 | |
%12 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
%13 = load i32, ptr %12, align 8, !noundef !2 | |
%14 = insertvalue { ptr, i32 } poison, ptr %11, 0 | |
%15 = insertvalue { ptr, i32 } %14, i32 %13, 1 | |
resume { ptr, i32 } %15 | |
cleanup: ; preds = %panic, %bb7, %bb5, %bb19 | |
%16 = landingpad { ptr, i32 } | |
cleanup | |
%17 = extractvalue { ptr, i32 } %16, 0 | |
%18 = extractvalue { ptr, i32 } %16, 1 | |
%19 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0 | |
store ptr %17, ptr %19, align 8 | |
%20 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
store i32 %18, ptr %20, align 8 | |
br label %bb14 | |
unreachable: ; preds = %panic, %bb19 | |
unreachable | |
bb5: ; preds = %bb11, %bb4 | |
; invoke <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next | |
%21 = invoke align 1 ptr @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17ha3ea26ba16b609e4E"(ptr align 8 %self) | |
to label %bb6 unwind label %cleanup | |
bb6: ; preds = %bb5 | |
store ptr %21, ptr %_11, align 8 | |
%22 = load ptr, ptr %_11, align 8, !noundef !2 | |
%23 = ptrtoint ptr %22 to i64 | |
%24 = icmp eq i64 %23, 0 | |
%_12 = select i1 %24, i64 0, i64 1 | |
%25 = icmp eq i64 %_12, 1 | |
br i1 %25, label %bb7, label %bb12 | |
bb7: ; preds = %bb6 | |
%x = load ptr, ptr %_11, align 8, !nonnull !2, !align !4, !noundef !2 | |
store ptr %x, ptr %_16, align 8 | |
%26 = load ptr, ptr %_16, align 8, !nonnull !2, !align !4, !noundef !2 | |
; invoke issue_73396_bounds_check_after_position::position_index_no_bounds_check::{{closure}} | |
%_14 = invoke zeroext i1 @"_ZN39issue_73396_bounds_check_after_position30position_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h4c285c223db8e52aE"(ptr align 1 %predicate, ptr align 1 %26) | |
to label %bb8 unwind label %cleanup | |
bb12: ; preds = %bb6 | |
store i64 0, ptr %1, align 8 | |
br label %bb13 | |
bb8: ; preds = %bb7 | |
br i1 %_14, label %bb9, label %bb10 | |
bb10: ; preds = %bb8 | |
%27 = load i64, ptr %i, align 8, !noundef !2 | |
%28 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %27, i64 1) | |
%_21.0 = extractvalue { i64, i1 } %28, 0 | |
%_21.1 = extractvalue { i64, i1 } %28, 1 | |
%29 = call i1 @llvm.expect.i1(i1 %_21.1, i1 false) | |
br i1 %29, label %panic, label %bb11 | |
bb9: ; preds = %bb8 | |
%_18 = load i64, ptr %i, align 8, !noundef !2 | |
%_19 = load i64, ptr %n, align 8, !noundef !2 | |
%_17 = icmp ult i64 %_18, %_19 | |
call void @llvm.assume(i1 %_17) | |
%_20 = load i64, ptr %i, align 8, !noundef !2 | |
%30 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
store i64 %_20, ptr %30, align 8 | |
store i64 1, ptr %1, align 8 | |
br label %bb13 | |
bb11: ; preds = %bb10 | |
store i64 %_21.0, ptr %i, align 8 | |
br label %bb5 | |
panic: ; preds = %bb10 | |
; invoke core::panicking::panic | |
invoke void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1 @str.0, i64 28, ptr align 8 @alloc_0ef4327575a2b985ccec2b4b1b800927) #6 | |
to label %unreachable unwind label %cleanup | |
bb13: ; preds = %bb12, %bb9 | |
%31 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 0 | |
%32 = load i64, ptr %31, align 8, !range !5, !noundef !2 | |
%33 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
%34 = load i64, ptr %33, align 8 | |
%35 = insertvalue { i64, i64 } poison, i64 %32, 0 | |
%36 = insertvalue { i64, i64 } %35, i64 %34, 1 | |
ret { i64, i64 } %36 | |
} | |
; <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::position | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17had4e29db686da3c3E"(ptr align 8 %self) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%0 = alloca { ptr, i32 }, align 8 | |
%_26 = alloca i8, align 1 | |
%_16 = alloca ptr, align 8 | |
%_11 = alloca ptr, align 8 | |
%i = alloca i64, align 8 | |
%n = alloca i64, align 8 | |
%1 = alloca { i64, i64 }, align 8 | |
%predicate = alloca %"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:16:42: 16:45]", align 1 | |
br i1 false, label %bb1, label %bb2 | |
bb2: ; preds = %start | |
%2 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1 = load ptr, ptr %2, align 8, !noundef !2 | |
%self2 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
br i1 true, label %bb17, label %bb16 | |
bb1: ; preds = %start | |
%3 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self3 = load ptr, ptr %3, align 8, !noundef !2 | |
%4 = ptrtoint ptr %self3 to i64 | |
store i64 %4, ptr %n, align 8 | |
br label %bb4 | |
bb16: ; preds = %bb2 | |
store i8 0, ptr %_26, align 1 | |
br label %bb18 | |
bb17: ; preds = %bb2 | |
store i8 1, ptr %_26, align 1 | |
br label %bb18 | |
bb18: ; preds = %bb17, %bb16 | |
%5 = load i8, ptr %_26, align 1, !range !3, !noundef !2 | |
%6 = trunc i8 %5 to i1 | |
%_25 = xor i1 %6, true | |
br i1 %_25, label %bb19, label %bb20 | |
bb20: ; preds = %bb18 | |
%7 = ptrtoint ptr %self1 to i64 | |
%8 = ptrtoint ptr %self2 to i64 | |
%9 = sub nuw i64 %7, %8 | |
%10 = udiv exact i64 %9, 1 | |
store i64 %10, ptr %n, align 8 | |
br label %bb4 | |
bb19: ; preds = %bb18 | |
; invoke core::panicking::panic | |
invoke void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1 @alloc_ec595fc0e82ef92fc59bd74f68296eae, i64 73, ptr align 8 @alloc_de0e111772569183ce64d8c631a4a53c) #6 | |
to label %unreachable unwind label %cleanup | |
bb4: ; preds = %bb1, %bb20 | |
store i64 0, ptr %i, align 8 | |
br label %bb5 | |
bb14: ; preds = %cleanup | |
%11 = load ptr, ptr %0, align 8, !noundef !2 | |
%12 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
%13 = load i32, ptr %12, align 8, !noundef !2 | |
%14 = insertvalue { ptr, i32 } poison, ptr %11, 0 | |
%15 = insertvalue { ptr, i32 } %14, i32 %13, 1 | |
resume { ptr, i32 } %15 | |
cleanup: ; preds = %panic, %bb7, %bb5, %bb19 | |
%16 = landingpad { ptr, i32 } | |
cleanup | |
%17 = extractvalue { ptr, i32 } %16, 0 | |
%18 = extractvalue { ptr, i32 } %16, 1 | |
%19 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0 | |
store ptr %17, ptr %19, align 8 | |
%20 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
store i32 %18, ptr %20, align 8 | |
br label %bb14 | |
unreachable: ; preds = %panic, %bb19 | |
unreachable | |
bb5: ; preds = %bb11, %bb4 | |
; invoke <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next | |
%21 = invoke align 1 ptr @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17ha3ea26ba16b609e4E"(ptr align 8 %self) | |
to label %bb6 unwind label %cleanup | |
bb6: ; preds = %bb5 | |
store ptr %21, ptr %_11, align 8 | |
%22 = load ptr, ptr %_11, align 8, !noundef !2 | |
%23 = ptrtoint ptr %22 to i64 | |
%24 = icmp eq i64 %23, 0 | |
%_12 = select i1 %24, i64 0, i64 1 | |
%25 = icmp eq i64 %_12, 1 | |
br i1 %25, label %bb7, label %bb12 | |
bb7: ; preds = %bb6 | |
%x = load ptr, ptr %_11, align 8, !nonnull !2, !align !4, !noundef !2 | |
store ptr %x, ptr %_16, align 8 | |
%26 = load ptr, ptr %_16, align 8, !nonnull !2, !align !4, !noundef !2 | |
; invoke issue_73396_bounds_check_after_position::position_slice_to_no_bounds_check::{{closure}} | |
%_14 = invoke zeroext i1 @"_ZN39issue_73396_bounds_check_after_position33position_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h4684d6c4f2db2c2eE"(ptr align 1 %predicate, ptr align 1 %26) | |
to label %bb8 unwind label %cleanup | |
bb12: ; preds = %bb6 | |
store i64 0, ptr %1, align 8 | |
br label %bb13 | |
bb8: ; preds = %bb7 | |
br i1 %_14, label %bb9, label %bb10 | |
bb10: ; preds = %bb8 | |
%27 = load i64, ptr %i, align 8, !noundef !2 | |
%28 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %27, i64 1) | |
%_21.0 = extractvalue { i64, i1 } %28, 0 | |
%_21.1 = extractvalue { i64, i1 } %28, 1 | |
%29 = call i1 @llvm.expect.i1(i1 %_21.1, i1 false) | |
br i1 %29, label %panic, label %bb11 | |
bb9: ; preds = %bb8 | |
%_18 = load i64, ptr %i, align 8, !noundef !2 | |
%_19 = load i64, ptr %n, align 8, !noundef !2 | |
%_17 = icmp ult i64 %_18, %_19 | |
call void @llvm.assume(i1 %_17) | |
%_20 = load i64, ptr %i, align 8, !noundef !2 | |
%30 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
store i64 %_20, ptr %30, align 8 | |
store i64 1, ptr %1, align 8 | |
br label %bb13 | |
bb11: ; preds = %bb10 | |
store i64 %_21.0, ptr %i, align 8 | |
br label %bb5 | |
panic: ; preds = %bb10 | |
; invoke core::panicking::panic | |
invoke void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1 @str.0, i64 28, ptr align 8 @alloc_0ef4327575a2b985ccec2b4b1b800927) #6 | |
to label %unreachable unwind label %cleanup | |
bb13: ; preds = %bb12, %bb9 | |
%31 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 0 | |
%32 = load i64, ptr %31, align 8, !range !5, !noundef !2 | |
%33 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
%34 = load i64, ptr %33, align 8 | |
%35 = insertvalue { i64, i64 } poison, i64 %32, 0 | |
%36 = insertvalue { i64, i64 } %35, i64 %34, 1 | |
ret { i64, i64 } %36 | |
} | |
; <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::position | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17he231b42fb8f32e16E"(ptr align 8 %self) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%0 = alloca { ptr, i32 }, align 8 | |
%_26 = alloca i8, align 1 | |
%_16 = alloca ptr, align 8 | |
%_11 = alloca ptr, align 8 | |
%i = alloca i64, align 8 | |
%n = alloca i64, align 8 | |
%1 = alloca { i64, i64 }, align 8 | |
%predicate = alloca %"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:31:42: 31:45]", align 1 | |
br i1 false, label %bb1, label %bb2 | |
bb2: ; preds = %start | |
%2 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1 = load ptr, ptr %2, align 8, !noundef !2 | |
%self2 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
br i1 true, label %bb17, label %bb16 | |
bb1: ; preds = %start | |
%3 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self3 = load ptr, ptr %3, align 8, !noundef !2 | |
%4 = ptrtoint ptr %self3 to i64 | |
store i64 %4, ptr %n, align 8 | |
br label %bb4 | |
bb16: ; preds = %bb2 | |
store i8 0, ptr %_26, align 1 | |
br label %bb18 | |
bb17: ; preds = %bb2 | |
store i8 1, ptr %_26, align 1 | |
br label %bb18 | |
bb18: ; preds = %bb17, %bb16 | |
%5 = load i8, ptr %_26, align 1, !range !3, !noundef !2 | |
%6 = trunc i8 %5 to i1 | |
%_25 = xor i1 %6, true | |
br i1 %_25, label %bb19, label %bb20 | |
bb20: ; preds = %bb18 | |
%7 = ptrtoint ptr %self1 to i64 | |
%8 = ptrtoint ptr %self2 to i64 | |
%9 = sub nuw i64 %7, %8 | |
%10 = udiv exact i64 %9, 1 | |
store i64 %10, ptr %n, align 8 | |
br label %bb4 | |
bb19: ; preds = %bb18 | |
; invoke core::panicking::panic | |
invoke void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1 @alloc_ec595fc0e82ef92fc59bd74f68296eae, i64 73, ptr align 8 @alloc_de0e111772569183ce64d8c631a4a53c) #6 | |
to label %unreachable unwind label %cleanup | |
bb4: ; preds = %bb1, %bb20 | |
store i64 0, ptr %i, align 8 | |
br label %bb5 | |
bb14: ; preds = %cleanup | |
%11 = load ptr, ptr %0, align 8, !noundef !2 | |
%12 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
%13 = load i32, ptr %12, align 8, !noundef !2 | |
%14 = insertvalue { ptr, i32 } poison, ptr %11, 0 | |
%15 = insertvalue { ptr, i32 } %14, i32 %13, 1 | |
resume { ptr, i32 } %15 | |
cleanup: ; preds = %panic, %bb7, %bb5, %bb19 | |
%16 = landingpad { ptr, i32 } | |
cleanup | |
%17 = extractvalue { ptr, i32 } %16, 0 | |
%18 = extractvalue { ptr, i32 } %16, 1 | |
%19 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0 | |
store ptr %17, ptr %19, align 8 | |
%20 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
store i32 %18, ptr %20, align 8 | |
br label %bb14 | |
unreachable: ; preds = %panic, %bb19 | |
unreachable | |
bb5: ; preds = %bb11, %bb4 | |
; invoke <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next | |
%21 = invoke align 1 ptr @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$4next17ha3ea26ba16b609e4E"(ptr align 8 %self) | |
to label %bb6 unwind label %cleanup | |
bb6: ; preds = %bb5 | |
store ptr %21, ptr %_11, align 8 | |
%22 = load ptr, ptr %_11, align 8, !noundef !2 | |
%23 = ptrtoint ptr %22 to i64 | |
%24 = icmp eq i64 %23, 0 | |
%_12 = select i1 %24, i64 0, i64 1 | |
%25 = icmp eq i64 %_12, 1 | |
br i1 %25, label %bb7, label %bb12 | |
bb7: ; preds = %bb6 | |
%x = load ptr, ptr %_11, align 8, !nonnull !2, !align !4, !noundef !2 | |
store ptr %x, ptr %_16, align 8 | |
%26 = load ptr, ptr %_16, align 8, !nonnull !2, !align !4, !noundef !2 | |
; invoke issue_73396_bounds_check_after_position::position_slice_from_no_bounds_check::{{closure}} | |
%_14 = invoke zeroext i1 @"_ZN39issue_73396_bounds_check_after_position35position_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h33ac7926901bfdabE"(ptr align 1 %predicate, ptr align 1 %26) | |
to label %bb8 unwind label %cleanup | |
bb12: ; preds = %bb6 | |
store i64 0, ptr %1, align 8 | |
br label %bb13 | |
bb8: ; preds = %bb7 | |
br i1 %_14, label %bb9, label %bb10 | |
bb10: ; preds = %bb8 | |
%27 = load i64, ptr %i, align 8, !noundef !2 | |
%28 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %27, i64 1) | |
%_21.0 = extractvalue { i64, i1 } %28, 0 | |
%_21.1 = extractvalue { i64, i1 } %28, 1 | |
%29 = call i1 @llvm.expect.i1(i1 %_21.1, i1 false) | |
br i1 %29, label %panic, label %bb11 | |
bb9: ; preds = %bb8 | |
%_18 = load i64, ptr %i, align 8, !noundef !2 | |
%_19 = load i64, ptr %n, align 8, !noundef !2 | |
%_17 = icmp ult i64 %_18, %_19 | |
call void @llvm.assume(i1 %_17) | |
%_20 = load i64, ptr %i, align 8, !noundef !2 | |
%30 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
store i64 %_20, ptr %30, align 8 | |
store i64 1, ptr %1, align 8 | |
br label %bb13 | |
bb11: ; preds = %bb10 | |
store i64 %_21.0, ptr %i, align 8 | |
br label %bb5 | |
panic: ; preds = %bb10 | |
; invoke core::panicking::panic | |
invoke void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1 @str.0, i64 28, ptr align 8 @alloc_0ef4327575a2b985ccec2b4b1b800927) #6 | |
to label %unreachable unwind label %cleanup | |
bb13: ; preds = %bb12, %bb9 | |
%31 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 0 | |
%32 = load i64, ptr %31, align 8, !range !5, !noundef !2 | |
%33 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
%34 = load i64, ptr %33, align 8 | |
%35 = insertvalue { i64, i64 } poison, i64 %32, 0 | |
%36 = insertvalue { i64, i64 } %35, i64 %34, 1 | |
ret { i64, i64 } %36 | |
} | |
; <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::rposition | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h07494362af3538e8E"(ptr align 8 %self) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%0 = alloca { ptr, i32 }, align 8 | |
%_25 = alloca i8, align 1 | |
%_16 = alloca ptr, align 8 | |
%_11 = alloca ptr, align 8 | |
%i = alloca i64, align 8 | |
%n = alloca i64, align 8 | |
%1 = alloca { i64, i64 }, align 8 | |
%predicate = alloca %"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:60:43: 60:46]", align 1 | |
br i1 false, label %bb1, label %bb2 | |
bb2: ; preds = %start | |
%2 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1 = load ptr, ptr %2, align 8, !noundef !2 | |
%self2 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
br i1 true, label %bb17, label %bb16 | |
bb1: ; preds = %start | |
%3 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self3 = load ptr, ptr %3, align 8, !noundef !2 | |
%4 = ptrtoint ptr %self3 to i64 | |
store i64 %4, ptr %n, align 8 | |
br label %bb4 | |
bb16: ; preds = %bb2 | |
store i8 0, ptr %_25, align 1 | |
br label %bb18 | |
bb17: ; preds = %bb2 | |
store i8 1, ptr %_25, align 1 | |
br label %bb18 | |
bb18: ; preds = %bb17, %bb16 | |
%5 = load i8, ptr %_25, align 1, !range !3, !noundef !2 | |
%6 = trunc i8 %5 to i1 | |
%_24 = xor i1 %6, true | |
br i1 %_24, label %bb19, label %bb20 | |
bb20: ; preds = %bb18 | |
%7 = ptrtoint ptr %self1 to i64 | |
%8 = ptrtoint ptr %self2 to i64 | |
%9 = sub nuw i64 %7, %8 | |
%10 = udiv exact i64 %9, 1 | |
store i64 %10, ptr %n, align 8 | |
br label %bb4 | |
bb19: ; preds = %bb18 | |
; invoke core::panicking::panic | |
invoke void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1 @alloc_ec595fc0e82ef92fc59bd74f68296eae, i64 73, ptr align 8 @alloc_de0e111772569183ce64d8c631a4a53c) #6 | |
to label %unreachable unwind label %cleanup | |
bb4: ; preds = %bb1, %bb20 | |
%11 = load i64, ptr %n, align 8, !noundef !2 | |
store i64 %11, ptr %i, align 8 | |
br label %bb5 | |
bb14: ; preds = %cleanup | |
%12 = load ptr, ptr %0, align 8, !noundef !2 | |
%13 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
%14 = load i32, ptr %13, align 8, !noundef !2 | |
%15 = insertvalue { ptr, i32 } poison, ptr %12, 0 | |
%16 = insertvalue { ptr, i32 } %15, i32 %14, 1 | |
resume { ptr, i32 } %16 | |
cleanup: ; preds = %bb7, %bb5, %bb19 | |
%17 = landingpad { ptr, i32 } | |
cleanup | |
%18 = extractvalue { ptr, i32 } %17, 0 | |
%19 = extractvalue { ptr, i32 } %17, 1 | |
%20 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0 | |
store ptr %18, ptr %20, align 8 | |
%21 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
store i32 %19, ptr %21, align 8 | |
br label %bb14 | |
unreachable: ; preds = %bb19 | |
unreachable | |
bb5: ; preds = %bb10, %bb4 | |
; invoke <core::slice::iter::Iter<T> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back | |
%22 = invoke align 1 ptr @"_ZN106_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..double_ended..DoubleEndedIterator$GT$9next_back17h41c1c6141187c094E"(ptr align 8 %self) | |
to label %bb6 unwind label %cleanup | |
bb6: ; preds = %bb5 | |
store ptr %22, ptr %_11, align 8 | |
%23 = load ptr, ptr %_11, align 8, !noundef !2 | |
%24 = ptrtoint ptr %23 to i64 | |
%25 = icmp eq i64 %24, 0 | |
%_12 = select i1 %25, i64 0, i64 1 | |
%26 = icmp eq i64 %_12, 1 | |
br i1 %26, label %bb7, label %bb11 | |
bb7: ; preds = %bb6 | |
%x = load ptr, ptr %_11, align 8, !nonnull !2, !align !4, !noundef !2 | |
%27 = load i64, ptr %i, align 8, !noundef !2 | |
%28 = sub i64 %27, 1 | |
store i64 %28, ptr %i, align 8 | |
store ptr %x, ptr %_16, align 8 | |
%29 = load ptr, ptr %_16, align 8, !nonnull !2, !align !4, !noundef !2 | |
; invoke issue_73396_bounds_check_after_position::rposition_slice_to_no_bounds_check::{{closure}} | |
%_14 = invoke zeroext i1 @"_ZN39issue_73396_bounds_check_after_position34rposition_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17hc8d3489862ffcefeE"(ptr align 1 %predicate, ptr align 1 %29) | |
to label %bb8 unwind label %cleanup | |
bb11: ; preds = %bb6 | |
br label %bb12 | |
bb8: ; preds = %bb7 | |
br i1 %_14, label %bb9, label %bb10 | |
bb10: ; preds = %bb8 | |
br label %bb5 | |
bb9: ; preds = %bb8 | |
%_18 = load i64, ptr %i, align 8, !noundef !2 | |
%_19 = load i64, ptr %n, align 8, !noundef !2 | |
%_17 = icmp ult i64 %_18, %_19 | |
call void @llvm.assume(i1 %_17) | |
%_20 = load i64, ptr %i, align 8, !noundef !2 | |
%30 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
store i64 %_20, ptr %30, align 8 | |
store i64 1, ptr %1, align 8 | |
br label %bb13 | |
bb13: ; preds = %bb12, %bb9 | |
%31 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 0 | |
%32 = load i64, ptr %31, align 8, !range !5, !noundef !2 | |
%33 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
%34 = load i64, ptr %33, align 8 | |
%35 = insertvalue { i64, i64 } poison, i64 %32, 0 | |
%36 = insertvalue { i64, i64 } %35, i64 %34, 1 | |
ret { i64, i64 } %36 | |
bb12: ; preds = %bb11 | |
store i64 0, ptr %1, align 8 | |
br label %bb13 | |
} | |
; <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::rposition | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h4635c5af17f83fa7E"(ptr align 8 %self) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%0 = alloca { ptr, i32 }, align 8 | |
%_25 = alloca i8, align 1 | |
%_16 = alloca ptr, align 8 | |
%_11 = alloca ptr, align 8 | |
%i = alloca i64, align 8 | |
%n = alloca i64, align 8 | |
%1 = alloca { i64, i64 }, align 8 | |
%predicate = alloca %"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:75:43: 75:46]", align 1 | |
br i1 false, label %bb1, label %bb2 | |
bb2: ; preds = %start | |
%2 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1 = load ptr, ptr %2, align 8, !noundef !2 | |
%self2 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
br i1 true, label %bb17, label %bb16 | |
bb1: ; preds = %start | |
%3 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self3 = load ptr, ptr %3, align 8, !noundef !2 | |
%4 = ptrtoint ptr %self3 to i64 | |
store i64 %4, ptr %n, align 8 | |
br label %bb4 | |
bb16: ; preds = %bb2 | |
store i8 0, ptr %_25, align 1 | |
br label %bb18 | |
bb17: ; preds = %bb2 | |
store i8 1, ptr %_25, align 1 | |
br label %bb18 | |
bb18: ; preds = %bb17, %bb16 | |
%5 = load i8, ptr %_25, align 1, !range !3, !noundef !2 | |
%6 = trunc i8 %5 to i1 | |
%_24 = xor i1 %6, true | |
br i1 %_24, label %bb19, label %bb20 | |
bb20: ; preds = %bb18 | |
%7 = ptrtoint ptr %self1 to i64 | |
%8 = ptrtoint ptr %self2 to i64 | |
%9 = sub nuw i64 %7, %8 | |
%10 = udiv exact i64 %9, 1 | |
store i64 %10, ptr %n, align 8 | |
br label %bb4 | |
bb19: ; preds = %bb18 | |
; invoke core::panicking::panic | |
invoke void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1 @alloc_ec595fc0e82ef92fc59bd74f68296eae, i64 73, ptr align 8 @alloc_de0e111772569183ce64d8c631a4a53c) #6 | |
to label %unreachable unwind label %cleanup | |
bb4: ; preds = %bb1, %bb20 | |
%11 = load i64, ptr %n, align 8, !noundef !2 | |
store i64 %11, ptr %i, align 8 | |
br label %bb5 | |
bb14: ; preds = %cleanup | |
%12 = load ptr, ptr %0, align 8, !noundef !2 | |
%13 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
%14 = load i32, ptr %13, align 8, !noundef !2 | |
%15 = insertvalue { ptr, i32 } poison, ptr %12, 0 | |
%16 = insertvalue { ptr, i32 } %15, i32 %14, 1 | |
resume { ptr, i32 } %16 | |
cleanup: ; preds = %bb7, %bb5, %bb19 | |
%17 = landingpad { ptr, i32 } | |
cleanup | |
%18 = extractvalue { ptr, i32 } %17, 0 | |
%19 = extractvalue { ptr, i32 } %17, 1 | |
%20 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0 | |
store ptr %18, ptr %20, align 8 | |
%21 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
store i32 %19, ptr %21, align 8 | |
br label %bb14 | |
unreachable: ; preds = %bb19 | |
unreachable | |
bb5: ; preds = %bb10, %bb4 | |
; invoke <core::slice::iter::Iter<T> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back | |
%22 = invoke align 1 ptr @"_ZN106_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..double_ended..DoubleEndedIterator$GT$9next_back17h41c1c6141187c094E"(ptr align 8 %self) | |
to label %bb6 unwind label %cleanup | |
bb6: ; preds = %bb5 | |
store ptr %22, ptr %_11, align 8 | |
%23 = load ptr, ptr %_11, align 8, !noundef !2 | |
%24 = ptrtoint ptr %23 to i64 | |
%25 = icmp eq i64 %24, 0 | |
%_12 = select i1 %25, i64 0, i64 1 | |
%26 = icmp eq i64 %_12, 1 | |
br i1 %26, label %bb7, label %bb11 | |
bb7: ; preds = %bb6 | |
%x = load ptr, ptr %_11, align 8, !nonnull !2, !align !4, !noundef !2 | |
%27 = load i64, ptr %i, align 8, !noundef !2 | |
%28 = sub i64 %27, 1 | |
store i64 %28, ptr %i, align 8 | |
store ptr %x, ptr %_16, align 8 | |
%29 = load ptr, ptr %_16, align 8, !nonnull !2, !align !4, !noundef !2 | |
; invoke issue_73396_bounds_check_after_position::rposition_slice_from_no_bounds_check::{{closure}} | |
%_14 = invoke zeroext i1 @"_ZN39issue_73396_bounds_check_after_position36rposition_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h7296da868918d0daE"(ptr align 1 %predicate, ptr align 1 %29) | |
to label %bb8 unwind label %cleanup | |
bb11: ; preds = %bb6 | |
br label %bb12 | |
bb8: ; preds = %bb7 | |
br i1 %_14, label %bb9, label %bb10 | |
bb10: ; preds = %bb8 | |
br label %bb5 | |
bb9: ; preds = %bb8 | |
%_18 = load i64, ptr %i, align 8, !noundef !2 | |
%_19 = load i64, ptr %n, align 8, !noundef !2 | |
%_17 = icmp ult i64 %_18, %_19 | |
call void @llvm.assume(i1 %_17) | |
%_20 = load i64, ptr %i, align 8, !noundef !2 | |
%30 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
store i64 %_20, ptr %30, align 8 | |
store i64 1, ptr %1, align 8 | |
br label %bb13 | |
bb13: ; preds = %bb12, %bb9 | |
%31 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 0 | |
%32 = load i64, ptr %31, align 8, !range !5, !noundef !2 | |
%33 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
%34 = load i64, ptr %33, align 8 | |
%35 = insertvalue { i64, i64 } poison, i64 %32, 0 | |
%36 = insertvalue { i64, i64 } %35, i64 %34, 1 | |
ret { i64, i64 } %36 | |
bb12: ; preds = %bb11 | |
store i64 0, ptr %1, align 8 | |
br label %bb13 | |
} | |
; <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::rposition | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h5db3b3c3f65ee4c2E"(ptr align 8 %self) unnamed_addr #0 personality ptr @rust_eh_personality { | |
start: | |
%0 = alloca { ptr, i32 }, align 8 | |
%_25 = alloca i8, align 1 | |
%_16 = alloca ptr, align 8 | |
%_11 = alloca ptr, align 8 | |
%i = alloca i64, align 8 | |
%n = alloca i64, align 8 | |
%1 = alloca { i64, i64 }, align 8 | |
%predicate = alloca %"[closure@tests/codegen/issues/issue-73396-bounds-check-after-position.rs:90:43: 90:46]", align 1 | |
br i1 false, label %bb1, label %bb2 | |
bb2: ; preds = %start | |
%2 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self1 = load ptr, ptr %2, align 8, !noundef !2 | |
%self2 = load ptr, ptr %self, align 8, !nonnull !2, !noundef !2 | |
br i1 true, label %bb17, label %bb16 | |
bb1: ; preds = %start | |
%3 = getelementptr inbounds { ptr, ptr }, ptr %self, i32 0, i32 1 | |
%self3 = load ptr, ptr %3, align 8, !noundef !2 | |
%4 = ptrtoint ptr %self3 to i64 | |
store i64 %4, ptr %n, align 8 | |
br label %bb4 | |
bb16: ; preds = %bb2 | |
store i8 0, ptr %_25, align 1 | |
br label %bb18 | |
bb17: ; preds = %bb2 | |
store i8 1, ptr %_25, align 1 | |
br label %bb18 | |
bb18: ; preds = %bb17, %bb16 | |
%5 = load i8, ptr %_25, align 1, !range !3, !noundef !2 | |
%6 = trunc i8 %5 to i1 | |
%_24 = xor i1 %6, true | |
br i1 %_24, label %bb19, label %bb20 | |
bb20: ; preds = %bb18 | |
%7 = ptrtoint ptr %self1 to i64 | |
%8 = ptrtoint ptr %self2 to i64 | |
%9 = sub nuw i64 %7, %8 | |
%10 = udiv exact i64 %9, 1 | |
store i64 %10, ptr %n, align 8 | |
br label %bb4 | |
bb19: ; preds = %bb18 | |
; invoke core::panicking::panic | |
invoke void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1 @alloc_ec595fc0e82ef92fc59bd74f68296eae, i64 73, ptr align 8 @alloc_de0e111772569183ce64d8c631a4a53c) #6 | |
to label %unreachable unwind label %cleanup | |
bb4: ; preds = %bb1, %bb20 | |
%11 = load i64, ptr %n, align 8, !noundef !2 | |
store i64 %11, ptr %i, align 8 | |
br label %bb5 | |
bb14: ; preds = %cleanup | |
%12 = load ptr, ptr %0, align 8, !noundef !2 | |
%13 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
%14 = load i32, ptr %13, align 8, !noundef !2 | |
%15 = insertvalue { ptr, i32 } poison, ptr %12, 0 | |
%16 = insertvalue { ptr, i32 } %15, i32 %14, 1 | |
resume { ptr, i32 } %16 | |
cleanup: ; preds = %bb7, %bb5, %bb19 | |
%17 = landingpad { ptr, i32 } | |
cleanup | |
%18 = extractvalue { ptr, i32 } %17, 0 | |
%19 = extractvalue { ptr, i32 } %17, 1 | |
%20 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 0 | |
store ptr %18, ptr %20, align 8 | |
%21 = getelementptr inbounds { ptr, i32 }, ptr %0, i32 0, i32 1 | |
store i32 %19, ptr %21, align 8 | |
br label %bb14 | |
unreachable: ; preds = %bb19 | |
unreachable | |
bb5: ; preds = %bb10, %bb4 | |
; invoke <core::slice::iter::Iter<T> as core::iter::traits::double_ended::DoubleEndedIterator>::next_back | |
%22 = invoke align 1 ptr @"_ZN106_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..double_ended..DoubleEndedIterator$GT$9next_back17h41c1c6141187c094E"(ptr align 8 %self) | |
to label %bb6 unwind label %cleanup | |
bb6: ; preds = %bb5 | |
store ptr %22, ptr %_11, align 8 | |
%23 = load ptr, ptr %_11, align 8, !noundef !2 | |
%24 = ptrtoint ptr %23 to i64 | |
%25 = icmp eq i64 %24, 0 | |
%_12 = select i1 %25, i64 0, i64 1 | |
%26 = icmp eq i64 %_12, 1 | |
br i1 %26, label %bb7, label %bb11 | |
bb7: ; preds = %bb6 | |
%x = load ptr, ptr %_11, align 8, !nonnull !2, !align !4, !noundef !2 | |
%27 = load i64, ptr %i, align 8, !noundef !2 | |
%28 = sub i64 %27, 1 | |
store i64 %28, ptr %i, align 8 | |
store ptr %x, ptr %_16, align 8 | |
%29 = load ptr, ptr %_16, align 8, !nonnull !2, !align !4, !noundef !2 | |
; invoke issue_73396_bounds_check_after_position::rposition_index_no_bounds_check::{{closure}} | |
%_14 = invoke zeroext i1 @"_ZN39issue_73396_bounds_check_after_position31rposition_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17hebfb37f35bc4dddfE"(ptr align 1 %predicate, ptr align 1 %29) | |
to label %bb8 unwind label %cleanup | |
bb11: ; preds = %bb6 | |
br label %bb12 | |
bb8: ; preds = %bb7 | |
br i1 %_14, label %bb9, label %bb10 | |
bb10: ; preds = %bb8 | |
br label %bb5 | |
bb9: ; preds = %bb8 | |
%_18 = load i64, ptr %i, align 8, !noundef !2 | |
%_19 = load i64, ptr %n, align 8, !noundef !2 | |
%_17 = icmp ult i64 %_18, %_19 | |
call void @llvm.assume(i1 %_17) | |
%_20 = load i64, ptr %i, align 8, !noundef !2 | |
%30 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
store i64 %_20, ptr %30, align 8 | |
store i64 1, ptr %1, align 8 | |
br label %bb13 | |
bb13: ; preds = %bb12, %bb9 | |
%31 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 0 | |
%32 = load i64, ptr %31, align 8, !range !5, !noundef !2 | |
%33 = getelementptr inbounds { i64, i64 }, ptr %1, i32 0, i32 1 | |
%34 = load i64, ptr %33, align 8 | |
%35 = insertvalue { i64, i64 } poison, i64 %32, 0 | |
%36 = insertvalue { i64, i64 } %35, i64 %34, 1 | |
ret { i64, i64 } %36 | |
bb12: ; preds = %bb11 | |
store i64 0, ptr %1, align 8 | |
br label %bb13 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define { ptr, i64 } @position_slice_to_no_bounds_check(ptr align 1 %s.0, i64 %s.1) unnamed_addr #1 { | |
start: | |
%_9 = alloca i64, align 8 | |
%_4 = alloca { ptr, ptr }, align 8 | |
%_2 = alloca { i64, i64 }, align 8 | |
%0 = alloca { ptr, i64 }, align 8 | |
; call core::slice::<impl [T]>::iter | |
%1 = call { ptr, ptr } @"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hc2bc82a9da745a53E"(ptr align 1 %s.0, i64 %s.1) | |
store { ptr, ptr } %1, ptr %_4, align 8 | |
; call <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::position | |
%2 = call { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17had4e29db686da3c3E"(ptr align 8 %_4) | |
store { i64, i64 } %2, ptr %_2, align 8 | |
%_5 = load i64, ptr %_2, align 8, !range !5, !noundef !2 | |
%3 = icmp eq i64 %_5, 1 | |
br i1 %3, label %bb3, label %bb5 | |
bb3: ; preds = %start | |
%4 = getelementptr inbounds { i64, i64 }, ptr %_2, i32 0, i32 1 | |
%idx = load i64, ptr %4, align 8, !noundef !2 | |
store i64 %idx, ptr %_9, align 8 | |
%5 = load i64, ptr %_9, align 8, !noundef !2 | |
; call core::slice::index::<impl core::ops::index::Index<I> for [T]>::index | |
%6 = call { ptr, i64 } @"_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h66a3bc8ab0c1335cE"(ptr align 1 %s.0, i64 %s.1, i64 %5, ptr align 8 @alloc_3be2c4c24977a1246f0f21c86e12e13d) | |
%_8.0 = extractvalue { ptr, i64 } %6, 0 | |
%_8.1 = extractvalue { ptr, i64 } %6, 1 | |
%7 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
store ptr %_8.0, ptr %7, align 8 | |
%8 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %_8.1, ptr %8, align 8 | |
br label %bb6 | |
bb5: ; preds = %start | |
%9 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
store ptr %s.0, ptr %9, align 8 | |
%10 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %s.1, ptr %10, align 8 | |
br label %bb6 | |
bb6: ; preds = %bb5, %bb3 | |
%11 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
%12 = load ptr, ptr %11, align 8, !nonnull !2, !align !4, !noundef !2 | |
%13 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
%14 = load i64, ptr %13, align 8, !noundef !2 | |
%15 = insertvalue { ptr, i64 } poison, ptr %12, 0 | |
%16 = insertvalue { ptr, i64 } %15, i64 %14, 1 | |
ret { ptr, i64 } %16 | |
} | |
; issue_73396_bounds_check_after_position::position_slice_to_no_bounds_check::{{closure}} | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal zeroext i1 @"_ZN39issue_73396_bounds_check_after_position33position_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h4684d6c4f2db2c2eE"(ptr align 1 %_1, ptr align 1 %b) unnamed_addr #0 { | |
start: | |
%_3 = load i8, ptr %b, align 1, !noundef !2 | |
%0 = icmp eq i8 %_3, 92 | |
ret i1 %0 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define { ptr, i64 } @position_slice_from_no_bounds_check(ptr align 1 %s.0, i64 %s.1) unnamed_addr #1 { | |
start: | |
%_9 = alloca i64, align 8 | |
%_4 = alloca { ptr, ptr }, align 8 | |
%_2 = alloca { i64, i64 }, align 8 | |
%0 = alloca { ptr, i64 }, align 8 | |
; call core::slice::<impl [T]>::iter | |
%1 = call { ptr, ptr } @"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hc2bc82a9da745a53E"(ptr align 1 %s.0, i64 %s.1) | |
store { ptr, ptr } %1, ptr %_4, align 8 | |
; call <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::position | |
%2 = call { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17he231b42fb8f32e16E"(ptr align 8 %_4) | |
store { i64, i64 } %2, ptr %_2, align 8 | |
%_5 = load i64, ptr %_2, align 8, !range !5, !noundef !2 | |
%3 = icmp eq i64 %_5, 1 | |
br i1 %3, label %bb3, label %bb5 | |
bb3: ; preds = %start | |
%4 = getelementptr inbounds { i64, i64 }, ptr %_2, i32 0, i32 1 | |
%idx = load i64, ptr %4, align 8, !noundef !2 | |
store i64 %idx, ptr %_9, align 8 | |
%5 = load i64, ptr %_9, align 8, !noundef !2 | |
; call core::slice::index::<impl core::ops::index::Index<I> for [T]>::index | |
%6 = call { ptr, i64 } @"_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17hf11adc2032126944E"(ptr align 1 %s.0, i64 %s.1, i64 %5, ptr align 8 @alloc_1aa28502097eab29d2364e0f05756451) | |
%_8.0 = extractvalue { ptr, i64 } %6, 0 | |
%_8.1 = extractvalue { ptr, i64 } %6, 1 | |
%7 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
store ptr %_8.0, ptr %7, align 8 | |
%8 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %_8.1, ptr %8, align 8 | |
br label %bb6 | |
bb5: ; preds = %start | |
%9 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
store ptr %s.0, ptr %9, align 8 | |
%10 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %s.1, ptr %10, align 8 | |
br label %bb6 | |
bb6: ; preds = %bb5, %bb3 | |
%11 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
%12 = load ptr, ptr %11, align 8, !nonnull !2, !align !4, !noundef !2 | |
%13 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
%14 = load i64, ptr %13, align 8, !noundef !2 | |
%15 = insertvalue { ptr, i64 } poison, ptr %12, 0 | |
%16 = insertvalue { ptr, i64 } %15, i64 %14, 1 | |
ret { ptr, i64 } %16 | |
} | |
; issue_73396_bounds_check_after_position::position_slice_from_no_bounds_check::{{closure}} | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal zeroext i1 @"_ZN39issue_73396_bounds_check_after_position35position_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h33ac7926901bfdabE"(ptr align 1 %_1, ptr align 1 %b) unnamed_addr #0 { | |
start: | |
%_3 = load i8, ptr %b, align 1, !noundef !2 | |
%0 = icmp eq i8 %_3, 92 | |
ret i1 %0 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define i8 @position_index_no_bounds_check(ptr align 1 %s.0, i64 %s.1) unnamed_addr #1 { | |
start: | |
%_4 = alloca { ptr, ptr }, align 8 | |
%_2 = alloca { i64, i64 }, align 8 | |
%0 = alloca i8, align 1 | |
; call core::slice::<impl [T]>::iter | |
%1 = call { ptr, ptr } @"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hc2bc82a9da745a53E"(ptr align 1 %s.0, i64 %s.1) | |
store { ptr, ptr } %1, ptr %_4, align 8 | |
; call <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::position | |
%2 = call { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$8position17h8533e6dc674a7121E"(ptr align 8 %_4) | |
store { i64, i64 } %2, ptr %_2, align 8 | |
%_5 = load i64, ptr %_2, align 8, !range !5, !noundef !2 | |
%3 = icmp eq i64 %_5, 1 | |
br i1 %3, label %bb3, label %bb5 | |
bb3: ; preds = %start | |
%4 = getelementptr inbounds { i64, i64 }, ptr %_2, i32 0, i32 1 | |
%idx = load i64, ptr %4, align 8, !noundef !2 | |
%_8 = icmp ult i64 %idx, %s.1 | |
%5 = call i1 @llvm.expect.i1(i1 %_8, i1 true) | |
br i1 %5, label %bb4, label %panic | |
bb5: ; preds = %start | |
store i8 42, ptr %0, align 1 | |
br label %bb6 | |
bb4: ; preds = %bb3 | |
%6 = getelementptr inbounds [0 x i8], ptr %s.0, i64 0, i64 %idx | |
%7 = load i8, ptr %6, align 1, !noundef !2 | |
store i8 %7, ptr %0, align 1 | |
br label %bb6 | |
panic: ; preds = %bb3 | |
; call core::panicking::panic_bounds_check | |
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 %idx, i64 %s.1, ptr align 8 @alloc_6d0dcba2cfb971c18983344891bc74d3) #6 | |
unreachable | |
bb6: ; preds = %bb5, %bb4 | |
%8 = load i8, ptr %0, align 1, !noundef !2 | |
ret i8 %8 | |
} | |
; issue_73396_bounds_check_after_position::position_index_no_bounds_check::{{closure}} | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal zeroext i1 @"_ZN39issue_73396_bounds_check_after_position30position_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h4c285c223db8e52aE"(ptr align 1 %_1, ptr align 1 %b) unnamed_addr #0 { | |
start: | |
%_3 = load i8, ptr %b, align 1, !noundef !2 | |
%0 = icmp eq i8 %_3, 92 | |
ret i1 %0 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define { ptr, i64 } @rposition_slice_to_no_bounds_check(ptr align 1 %s.0, i64 %s.1) unnamed_addr #1 { | |
start: | |
%_9 = alloca i64, align 8 | |
%_4 = alloca { ptr, ptr }, align 8 | |
%_2 = alloca { i64, i64 }, align 8 | |
%0 = alloca { ptr, i64 }, align 8 | |
; call core::slice::<impl [T]>::iter | |
%1 = call { ptr, ptr } @"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hc2bc82a9da745a53E"(ptr align 1 %s.0, i64 %s.1) | |
store { ptr, ptr } %1, ptr %_4, align 8 | |
; call <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::rposition | |
%2 = call { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h07494362af3538e8E"(ptr align 8 %_4) | |
store { i64, i64 } %2, ptr %_2, align 8 | |
%_5 = load i64, ptr %_2, align 8, !range !5, !noundef !2 | |
%3 = icmp eq i64 %_5, 1 | |
br i1 %3, label %bb3, label %bb5 | |
bb3: ; preds = %start | |
%4 = getelementptr inbounds { i64, i64 }, ptr %_2, i32 0, i32 1 | |
%idx = load i64, ptr %4, align 8, !noundef !2 | |
store i64 %idx, ptr %_9, align 8 | |
%5 = load i64, ptr %_9, align 8, !noundef !2 | |
; call core::slice::index::<impl core::ops::index::Index<I> for [T]>::index | |
%6 = call { ptr, i64 } @"_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17h66a3bc8ab0c1335cE"(ptr align 1 %s.0, i64 %s.1, i64 %5, ptr align 8 @alloc_bc51fbc4dba7ecff3cbe7998b8cdf04b) | |
%_8.0 = extractvalue { ptr, i64 } %6, 0 | |
%_8.1 = extractvalue { ptr, i64 } %6, 1 | |
%7 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
store ptr %_8.0, ptr %7, align 8 | |
%8 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %_8.1, ptr %8, align 8 | |
br label %bb6 | |
bb5: ; preds = %start | |
%9 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
store ptr %s.0, ptr %9, align 8 | |
%10 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %s.1, ptr %10, align 8 | |
br label %bb6 | |
bb6: ; preds = %bb5, %bb3 | |
%11 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
%12 = load ptr, ptr %11, align 8, !nonnull !2, !align !4, !noundef !2 | |
%13 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
%14 = load i64, ptr %13, align 8, !noundef !2 | |
%15 = insertvalue { ptr, i64 } poison, ptr %12, 0 | |
%16 = insertvalue { ptr, i64 } %15, i64 %14, 1 | |
ret { ptr, i64 } %16 | |
} | |
; issue_73396_bounds_check_after_position::rposition_slice_to_no_bounds_check::{{closure}} | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal zeroext i1 @"_ZN39issue_73396_bounds_check_after_position34rposition_slice_to_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17hc8d3489862ffcefeE"(ptr align 1 %_1, ptr align 1 %b) unnamed_addr #0 { | |
start: | |
%_3 = load i8, ptr %b, align 1, !noundef !2 | |
%0 = icmp eq i8 %_3, 92 | |
ret i1 %0 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define { ptr, i64 } @rposition_slice_from_no_bounds_check(ptr align 1 %s.0, i64 %s.1) unnamed_addr #1 { | |
start: | |
%_9 = alloca i64, align 8 | |
%_4 = alloca { ptr, ptr }, align 8 | |
%_2 = alloca { i64, i64 }, align 8 | |
%0 = alloca { ptr, i64 }, align 8 | |
; call core::slice::<impl [T]>::iter | |
%1 = call { ptr, ptr } @"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hc2bc82a9da745a53E"(ptr align 1 %s.0, i64 %s.1) | |
store { ptr, ptr } %1, ptr %_4, align 8 | |
; call <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::rposition | |
%2 = call { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h4635c5af17f83fa7E"(ptr align 8 %_4) | |
store { i64, i64 } %2, ptr %_2, align 8 | |
%_5 = load i64, ptr %_2, align 8, !range !5, !noundef !2 | |
%3 = icmp eq i64 %_5, 1 | |
br i1 %3, label %bb3, label %bb5 | |
bb3: ; preds = %start | |
%4 = getelementptr inbounds { i64, i64 }, ptr %_2, i32 0, i32 1 | |
%idx = load i64, ptr %4, align 8, !noundef !2 | |
store i64 %idx, ptr %_9, align 8 | |
%5 = load i64, ptr %_9, align 8, !noundef !2 | |
; call core::slice::index::<impl core::ops::index::Index<I> for [T]>::index | |
%6 = call { ptr, i64 } @"_ZN4core5slice5index74_$LT$impl$u20$core..ops..index..Index$LT$I$GT$$u20$for$u20$$u5b$T$u5d$$GT$5index17hf11adc2032126944E"(ptr align 1 %s.0, i64 %s.1, i64 %5, ptr align 8 @alloc_4ffa1e0c5f69e41cbb461912a83bf72c) | |
%_8.0 = extractvalue { ptr, i64 } %6, 0 | |
%_8.1 = extractvalue { ptr, i64 } %6, 1 | |
%7 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
store ptr %_8.0, ptr %7, align 8 | |
%8 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %_8.1, ptr %8, align 8 | |
br label %bb6 | |
bb5: ; preds = %start | |
%9 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
store ptr %s.0, ptr %9, align 8 | |
%10 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
store i64 %s.1, ptr %10, align 8 | |
br label %bb6 | |
bb6: ; preds = %bb5, %bb3 | |
%11 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 0 | |
%12 = load ptr, ptr %11, align 8, !nonnull !2, !align !4, !noundef !2 | |
%13 = getelementptr inbounds { ptr, i64 }, ptr %0, i32 0, i32 1 | |
%14 = load i64, ptr %13, align 8, !noundef !2 | |
%15 = insertvalue { ptr, i64 } poison, ptr %12, 0 | |
%16 = insertvalue { ptr, i64 } %15, i64 %14, 1 | |
ret { ptr, i64 } %16 | |
} | |
; issue_73396_bounds_check_after_position::rposition_slice_from_no_bounds_check::{{closure}} | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal zeroext i1 @"_ZN39issue_73396_bounds_check_after_position36rposition_slice_from_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17h7296da868918d0daE"(ptr align 1 %_1, ptr align 1 %b) unnamed_addr #0 { | |
start: | |
%_3 = load i8, ptr %b, align 1, !noundef !2 | |
%0 = icmp eq i8 %_3, 92 | |
ret i1 %0 | |
} | |
; Function Attrs: nonlazybind uwtable | |
define i8 @rposition_index_no_bounds_check(ptr align 1 %s.0, i64 %s.1) unnamed_addr #1 { | |
start: | |
%_4 = alloca { ptr, ptr }, align 8 | |
%_2 = alloca { i64, i64 }, align 8 | |
%0 = alloca i8, align 1 | |
; call core::slice::<impl [T]>::iter | |
%1 = call { ptr, ptr } @"_ZN4core5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$4iter17hc2bc82a9da745a53E"(ptr align 1 %s.0, i64 %s.1) | |
store { ptr, ptr } %1, ptr %_4, align 8 | |
; call <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::rposition | |
%2 = call { i64, i64 } @"_ZN91_$LT$core..slice..iter..Iter$LT$T$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$9rposition17h5db3b3c3f65ee4c2E"(ptr align 8 %_4) | |
store { i64, i64 } %2, ptr %_2, align 8 | |
%_5 = load i64, ptr %_2, align 8, !range !5, !noundef !2 | |
%3 = icmp eq i64 %_5, 1 | |
br i1 %3, label %bb3, label %bb5 | |
bb3: ; preds = %start | |
%4 = getelementptr inbounds { i64, i64 }, ptr %_2, i32 0, i32 1 | |
%idx = load i64, ptr %4, align 8, !noundef !2 | |
%_8 = icmp ult i64 %idx, %s.1 | |
%5 = call i1 @llvm.expect.i1(i1 %_8, i1 true) | |
br i1 %5, label %bb4, label %panic | |
bb5: ; preds = %start | |
store i8 42, ptr %0, align 1 | |
br label %bb6 | |
bb4: ; preds = %bb3 | |
%6 = getelementptr inbounds [0 x i8], ptr %s.0, i64 0, i64 %idx | |
%7 = load i8, ptr %6, align 1, !noundef !2 | |
store i8 %7, ptr %0, align 1 | |
br label %bb6 | |
panic: ; preds = %bb3 | |
; call core::panicking::panic_bounds_check | |
call void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64 %idx, i64 %s.1, ptr align 8 @alloc_710ed194fbc5b9f5c247e30afb3033da) #6 | |
unreachable | |
bb6: ; preds = %bb5, %bb4 | |
%8 = load i8, ptr %0, align 1, !noundef !2 | |
ret i8 %8 | |
} | |
; issue_73396_bounds_check_after_position::rposition_index_no_bounds_check::{{closure}} | |
; Function Attrs: inlinehint nonlazybind uwtable | |
define internal zeroext i1 @"_ZN39issue_73396_bounds_check_after_position31rposition_index_no_bounds_check28_$u7b$$u7b$closure$u7d$$u7d$17hebfb37f35bc4dddfE"(ptr align 1 %_1, ptr align 1 %b) unnamed_addr #0 { | |
start: | |
%_3 = load i8, ptr %b, align 1, !noundef !2 | |
%0 = icmp eq i8 %_3, 92 | |
ret i1 %0 | |
} | |
; core::slice::index::slice_end_index_len_fail | |
; Function Attrs: cold noinline noreturn nonlazybind uwtable | |
declare void @_ZN4core5slice5index24slice_end_index_len_fail17h80a8d89025e3e486E(i64, i64, ptr align 8) unnamed_addr #2 | |
; core::slice::index::slice_index_order_fail | |
; Function Attrs: cold noinline noreturn nonlazybind uwtable | |
declare void @_ZN4core5slice5index22slice_index_order_fail17hbb92ac81d067154bE(i64, i64, ptr align 8) unnamed_addr #2 | |
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) | |
declare void @llvm.assume(i1 noundef) #3 | |
; core::slice::index::slice_start_index_len_fail | |
; Function Attrs: cold noinline noreturn nonlazybind uwtable | |
declare void @_ZN4core5slice5index26slice_start_index_len_fail17hebf4c07799653c4cE(i64, i64, ptr align 8) unnamed_addr #2 | |
; Function Attrs: nonlazybind uwtable | |
declare i32 @rust_eh_personality(i32, i32, i64, ptr, ptr) unnamed_addr #1 | |
; core::panicking::panic | |
; Function Attrs: cold noinline noreturn nonlazybind uwtable | |
declare void @_ZN4core9panicking5panic17h0c30414c03dbaa75E(ptr align 1, i64, ptr align 8) unnamed_addr #2 | |
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) | |
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #4 | |
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none) | |
declare i1 @llvm.expect.i1(i1, i1) #5 | |
; core::panicking::panic_bounds_check | |
; Function Attrs: cold noinline noreturn nonlazybind uwtable | |
declare void @_ZN4core9panicking18panic_bounds_check17h2c24583383b0129bE(i64, i64, ptr align 8) unnamed_addr #2 | |
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(inaccessiblemem: readwrite) } | |
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } | |
attributes #5 = { nocallback nofree nosync nounwind willreturn memory(none) } | |
attributes #6 = { noreturn } | |
!llvm.module.flags = !{!0, !1} | |
!0 = !{i32 8, !"PIC Level", i32 2} | |
!1 = !{i32 2, !"RtLibUseGOT", i32 1} | |
!2 = !{} | |
!3 = !{i8 0, i8 2} | |
!4 = !{i64 1} | |
!5 = !{i64 0, i64 2} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment