Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Investigate why #113970 changes async2.rs coverage maps on some targets #116134

Open
Zalathar opened this issue Sep 25, 2023 · 9 comments
Open

Investigate why #113970 changes async2.rs coverage maps on some targets #116134

Zalathar opened this issue Sep 25, 2023 · 9 comments
Labels
A-code-coverage Area: Source-based code coverage (-Cinstrument-coverage) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@Zalathar
Copy link
Contributor

The changes in #113970 ended up changing the coverage mappings for tests/coverage-map/status-quo/async2.rs, but only on some targets.

I wanted to create a place to put my notes from investigating that, without gunking up the original PR.

@rustbot label +A-code-coverage

@rustbot rustbot added needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. A-code-coverage Area: Source-based code coverage (-Cinstrument-coverage) labels Sep 25, 2023
@Zalathar
Copy link
Contributor Author

@rustbot label -needs-triage

@rustbot rustbot removed the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Sep 25, 2023
@Zalathar

This comment was marked as outdated.

@Zalathar
Copy link
Contributor Author

async2.ll
$ x test coverage-map --force-rerun -- async2
; ModuleID = 'async2.3556024874bfaf70-cgu.0'
source_filename = "async2.3556024874bfaf70-cgu.0"
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
target triple = "arm64-apple-macosx11.0.0"

%"core::task::wake::RawWakerVTable" = type { ptr, ptr, ptr, ptr }
%"core::fmt::Arguments<'_>" = type { { ptr, i64 }, { ptr, i64 }, { ptr, i64 } }

@vtable.0 = private unnamed_addr constant <{ ptr, [16 x i8], ptr, ptr, ptr }> <{ ptr @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0ECs4zUb9XLQiyW_6async2, [16 x i8] c"\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00", ptr @_RNSNvYNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceuE9call_once6vtableCs4zUb9XLQiyW_6async2, ptr @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2, ptr @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2 }>, align 8
@alloc_513570631223a12912d85da2bec3b15a = private unnamed_addr constant <{}> zeroinitializer, align 8
@alloc_9ba35fb86d20c9c13d197ffc9a9264ba = private unnamed_addr constant <{ [27 x i8] }> <{ [27 x i8] c"non_async_func was covered\0A" }>, align 1
@alloc_a921d308b684528df82f6e4dffdb80bd = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_9ba35fb86d20c9c13d197ffc9a9264ba, [8 x i8] c"\1B\00\00\00\00\00\00\00" }>, align 8
@alloc_842fe36ca0d975cd1eb64dadf6b36635 = private unnamed_addr constant <{ [32 x i8] }> <{ [32 x i8] c"non_async_func println in block\0A" }>, align 1
@alloc_beefbc7dab13e3fb922964c749019704 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_842fe36ca0d975cd1eb64dadf6b36635, [8 x i8] c" \00\00\00\00\00\00\00" }>, align 8
@alloc_22eeafdaf5b2dda1e0b3955ae16d58d8 = private unnamed_addr constant <{ [23 x i8] }> <{ [23 x i8] c"async_func was covered\0A" }>, align 1
@alloc_bb9cfe869d3fbd1b0bac54c64137be2e = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_22eeafdaf5b2dda1e0b3955ae16d58d8, [8 x i8] c"\17\00\00\00\00\00\00\00" }>, align 8
@alloc_8b8d639be3764847ca76057a8208860f = private unnamed_addr constant <{ [28 x i8] }> <{ [28 x i8] c"async_func println in block\0A" }>, align 1
@alloc_8a2eecf69e2fc1f364ea48da3a4d02ff = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_8b8d639be3764847ca76057a8208860f, [8 x i8] c"\1C\00\00\00\00\00\00\00" }>, align 8
@alloc_626c5d64fd47031c853154dd4aeec363 = private unnamed_addr constant <{ [36 x i8] }> <{ [36 x i8] c"async_func_just_println was covered\0A" }>, align 1
@alloc_228521f8fdd0525c9bea7f9192a53491 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_626c5d64fd47031c853154dd4aeec363, [8 x i8] c"$\00\00\00\00\00\00\00" }>, align 8
@alloc_fa958ac97aa85c340217f7ce164b63cf = private unnamed_addr constant <{ [20 x i8] }> <{ [20 x i8] c"codecovsample::main\0A" }>, align 1
@alloc_8c6fa871f2b6ccc3596c5d8143fd3c62 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_fa958ac97aa85c340217f7ce164b63cf, [8 x i8] c"\14\00\00\00\00\00\00\00" }>, align 8
@_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE = internal constant <{ ptr, ptr, ptr, ptr }> <{ ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_ }>, align 8
@__covrec_F74DDFE43B4BAE36u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -626598601794277834, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01.\11\00\13" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_E1A8165202F21C03u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -2186473077595825149, i32 9, i64 155372126598700742, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\13\01\00$" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_AF0136FEB71B924Cu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -5836323174473821620, i32 9, i64 155372126598700742, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\13$\02\02" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_3BF8FE240EC55615u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 4321483273282082325, i32 9, i64 719582524320644771, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\17\01\07\02" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_7A4298E94A9FBACAu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [26 x i8] }> <{ i64 8809771948836895434, i32 26, i64 -3630791716643471453, i64 1889826389874031115, [26 x i8] c"\01\01\01\05\00\04\01\03\01\03\09\05\03\0A\02\06\00\02\06\00\07\03\01\01\00\02" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_82806BDCC676AC9Eu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [44 x i8] }> <{ i64 -9043109455793312610, i32 44, i64 -8617230451985595640, i64 1889826389874031115, [44 x i8] c"\01\01\05\0B\05\01\05\01\05\02\00\02\00\06\01'\05\0A6\02\0D \00#\0B\00'\00I\0F\01\17\00\1A\05\01\0E\00\0F\13\02\05\00\06" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_2E7D282BFF3BC65Au = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 3349877867264329306, i32 9, i64 1759751756802921227, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\0B\01\00\17" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_5BC727AD826DA7A4u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [28 x i8] }> <{ i64 6613298203987912612, i32 28, i64 1759751756802921227, i64 1889826389874031115, [28 x i8] c"\01\01\02\01\05\05\02\04\01\0B\17\03\09\05\03\0A\02\06\02\02\06\00\07\07\01\01\00\02" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_8AD7B697A08EFFCAu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [44 x i8] }> <{ i64 -8442078214132662326, i32 44, i64 -8617230451985595640, i64 1889826389874031115, [44 x i8] c"\01\01\05\0B\05\01\05\01\05\02\00\02\00\06\01'\05\0A6\02\0D \00#\0B\00'\00I\0F\01\17\00\1A\05\01\0E\00\0F\13\02\05\00\06" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__llvm_coverage_mapping = private constant { { i32, i32, i32, i32 }, [77 x i8] } { { i32, i32, i32, i32 } { i32 0, i32 77, i32 0, i32 5 }, [77 x i8] c"\02`Jx\DA\93\D6\0F-N-*\D6/.)M,*\D1wI-\D3/*-.\01\13\CEx\E4\F4KR\8BK\8A\F5\93\F3\CBR\8B\12\D3Sus\13\0B\80\EA\12KJ\8Bu\0BK\F3\F5\13\8B+\F3\92\8D\F4\8A\8A\01\CE<$D" }, section "__LLVM_COV,__llvm_covmap", align 8
@__llvm_profile_runtime = external hidden local_unnamed_addr global i32
@__profc__RNvCs4zUb9XLQiyW_6async214non_async_func = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNvCs4zUb9XLQiyW_6async214non_async_func = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 8809771948836895434, i64 -3630791716643471453, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNvCs4zUb9XLQiyW_6async210async_func = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNvCs4zUb9XLQiyW_6async210async_func = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 3349877867264329306, i64 1759751756802921227, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async210async_func to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async210async_func to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 6613298203987912612, i64 1759751756802921227, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ to i64), i64 ptrtoint (ptr @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -2186473077595825149, i64 155372126598700742, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -5836323174473821620, i64 155372126598700742, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ to i64), i64 ptrtoint (ptr @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNvCs4zUb9XLQiyW_6async24main = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNvCs4zUb9XLQiyW_6async24main = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 4321483273282082325, i64 719582524320644771, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async24main to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async24main to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -9043109455793312610, i64 -8617230451985595640, i64 sub (i64 ptrtoint (ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ to i64), i64 ptrtoint (ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -8442078214132662326, i64 -8617230451985595640, i64 sub (i64 ptrtoint (ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ to i64), i64 ptrtoint (ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -626598601794277834, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__llvm_prf_nm = private constant [158 x i8] c"\E1\03\9A\01x\DA\8B\0F\F2+s.6\A9\0AM\B2\8C\F0\09\CC\AC\0C\8F7K,\AE\CCK624\C9\CB\CF\8B\07\B3\E3\D3J\F3\92\19\E3q\AA4@U\E5L\84:\03'\E3x\DC&\1A\19#T\C6g\95\16\97\C4\17\14e\E6\95\E4\E4\E13\1E\A7&\FCv\99\E4&f\82\CC\F5\F4+\F3+\C1\AA\C2\22\B5\225\B9\B4$\BF\C8\22)'?9;>?\0F\E4\06'\93x\14\0F\B9\02\05\C83\06\B7\C3\A1f\82\D4\91`\ACYX\88\A3\93\8Fk\B1a\BC\81\93y<\00q\D3\ABo", section "__DATA,__llvm_prf_names", align 1
@__llvm_profile_filename = weak hidden local_unnamed_addr constant [22 x i8] c"default_%m_%p.profraw\00"
@llvm.used = appending global [11 x ptr] [ptr @__covrec_2E7D282BFF3BC65Au, ptr @__covrec_3BF8FE240EC55615u, ptr @__covrec_5BC727AD826DA7A4u, ptr @__covrec_7A4298E94A9FBACAu, ptr @__covrec_82806BDCC676AC9Eu, ptr @__covrec_8AD7B697A08EFFCAu, ptr @__covrec_AF0136FEB71B924Cu, ptr @__covrec_E1A8165202F21C03u, ptr @__covrec_F74DDFE43B4BAE36u, ptr @__llvm_coverage_mapping, ptr @__llvm_prf_nm], section "llvm.metadata"
@llvm.compiler.used = appending global [10 x ptr] [ptr @__llvm_profile_runtime_user, ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_, ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_, ptr @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, ptr @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, ptr @__profd__RNvCs4zUb9XLQiyW_6async210async_func, ptr @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func, ptr @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println, ptr @__profd__RNvCs4zUb9XLQiyW_6async24main], section "llvm.metadata"

; std::rt::lang_start::<()>
; Function Attrs: uwtable
define hidden noundef i64 @_RINvNtCs8koKRe9ETht_3std2rt10lang_startuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %main, i64 noundef %argc, ptr noundef %argv, i8 noundef %sigpipe) unnamed_addr #0 {
start:
  %_8 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %_8)
  store ptr %main, ptr %_8, align 8
; call std::rt::lang_start_internal
  %0 = call noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1 %_8, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @vtable.0, i64 noundef %argc, ptr noundef %argv, i8 noundef %sigpipe)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %_8)
  ret i64 %0
}

; core::ptr::drop_in_place::<std::rt::lang_start<()>::{closure#0}>
; Function Attrs: inlinehint mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable
define internal void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0ECs4zUb9XLQiyW_6async2(ptr noalias nocapture readnone align 8 %_1) unnamed_addr #1 {
start:
  ret void
}

; core::ptr::drop_in_place::<core::task::wake::Waker>
; Function Attrs: uwtable
define internal fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias nocapture noundef readonly align 8 dereferenceable(16) %_1) unnamed_addr #0 {
start:
  tail call void @llvm.experimental.noalias.scope.decl(metadata !3)
  %_4.i = load ptr, ptr %_1, align 8, !alias.scope !3, !nonnull !6, !align !7, !noundef !6
  %0 = getelementptr inbounds %"core::task::wake::RawWakerVTable", ptr %_4.i, i64 0, i32 3
  %_2.i = load ptr, ptr %0, align 8, !noalias !3, !nonnull !6, !noundef !6
  %1 = getelementptr inbounds { ptr, ptr }, ptr %_1, i64 0, i32 1
  %_3.i = load ptr, ptr %1, align 8, !alias.scope !3, !noundef !6
  tail call void %_2.i(ptr noundef %_3.i), !noalias !3
  ret void
}

; std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>
; Function Attrs: noinline uwtable
define internal fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr nocapture noundef nonnull readonly %f) unnamed_addr #2 {
start:
  tail call void %f()
  tail call void asm sideeffect "", "~{memory}"() #11, !srcloc !8
  ret void
}

; std::rt::lang_start::<()>::{closure#0}
; Function Attrs: inlinehint uwtable
define internal noundef i32 @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2(ptr noalias nocapture noundef readonly align 8 dereferenceable(8) %_1) unnamed_addr #3 {
start:
  %_4 = load ptr, ptr %_1, align 8, !nonnull !6, !noundef !6
; call std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>
  tail call fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %_4)
  ret i32 0
}

; <std::rt::lang_start<()>::{closure#0} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
; Function Attrs: inlinehint uwtable
define internal noundef i32 @_RNSNvYNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceuE9call_once6vtableCs4zUb9XLQiyW_6async2(ptr nocapture noundef readonly %_1) unnamed_addr #3 personality ptr @rust_eh_personality {
start:
  %0 = load ptr, ptr %_1, align 8, !nonnull !6, !noundef !6
; call std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>
  tail call fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %0), !noalias !9
  ret i32 0
}

; <async2::executor::block_on::VTABLE::{closure#0} as core::ops::function::FnOnce<(*const (),)>>::call_once
; Function Attrs: inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable
define internal { ptr, ptr } @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #4 personality ptr @rust_eh_personality {
start:
  unreachable
}

; <async2::executor::block_on::VTABLE::{closure#2} as core::ops::function::FnOnce<(*const (),)>>::call_once
; Function Attrs: inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable
define internal void @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #4 personality ptr @rust_eh_personality {
start:
  unreachable
}

; <async2::executor::block_on::VTABLE::{closure#3} as core::ops::function::FnOnce<(*const (),)>>::call_once
; Function Attrs: inlinehint mustprogress nofree norecurse nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable
define internal void @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #5 personality ptr @rust_eh_personality {
start:
  %1 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8
  ret void
}

; async2::main
; Function Attrs: uwtable
define internal void @_RNvCs4zUb9XLQiyW_6async24main() unnamed_addr #0 personality ptr @rust_eh_personality {
start:
  %_4.i.i2 = alloca %"core::fmt::Arguments<'_>", align 8
  %waker.i3 = alloca { ptr, ptr }, align 8
  %_8.i.i = alloca %"core::fmt::Arguments<'_>", align 8
  %_4.i.i = alloca %"core::fmt::Arguments<'_>", align 8
  %waker.i = alloca { ptr, ptr }, align 8
  %_5.i = alloca %"core::fmt::Arguments<'_>", align 8
  %_2.i = alloca %"core::fmt::Arguments<'_>", align 8
  %_2 = alloca %"core::fmt::Arguments<'_>", align 8
  %0 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async24main, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_2)
  store ptr @alloc_8c6fa871f2b6ccc3596c5d8143fd3c62, ptr %_2, align 8
  %1 = getelementptr inbounds { ptr, i64 }, ptr %_2, i64 0, i32 1
  store i64 1, ptr %1, align 8
  %2 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 2
  store ptr null, ptr %2, align 8
  %3 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %3, align 8
  %4 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 1, i32 1
  store i64 0, ptr %4, align 8
; call std::io::stdio::_print
  call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_2)
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_2)
  %5 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_2.i)
  store ptr @alloc_a921d308b684528df82f6e4dffdb80bd, ptr %_2.i, align 8
  %6 = getelementptr inbounds { ptr, i64 }, ptr %_2.i, i64 0, i32 1
  store i64 1, ptr %6, align 8
  %7 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 2
  store ptr null, ptr %7, align 8
  %8 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %8, align 8
  %9 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 1, i32 1
  store i64 0, ptr %9, align 8
; call std::io::stdio::_print
  call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_2.i)
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_2.i)
  %10 = atomicrmw add ptr getelementptr inbounds ([2 x i64], ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func, i64 0, i64 1), i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_5.i)
  store ptr @alloc_beefbc7dab13e3fb922964c749019704, ptr %_5.i, align 8
  %11 = getelementptr inbounds { ptr, i64 }, ptr %_5.i, i64 0, i32 1
  store i64 1, ptr %11, align 8
  %12 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 2
  store ptr null, ptr %12, align 8
  %13 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %13, align 8
  %14 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 1, i32 1
  store i64 0, ptr %14, align 8
; call std::io::stdio::_print
  call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_5.i)
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_5.i)
  %15 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async210async_func, i64 1 monotonic, align 8
  %16 = atomicrmw add ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %waker.i)
  store ptr @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE, ptr %waker.i, align 8
  %17 = getelementptr inbounds { ptr, ptr }, ptr %waker.i, i64 0, i32 1
  store ptr null, ptr %17, align 8
  %18 = atomicrmw add ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_4.i.i)
  store ptr @alloc_bb9cfe869d3fbd1b0bac54c64137be2e, ptr %_4.i.i, align 8, !alias.scope !12, !noalias !15
  %19 = getelementptr inbounds { ptr, i64 }, ptr %_4.i.i, i64 0, i32 1
  store i64 1, ptr %19, align 8, !alias.scope !12, !noalias !15
  %20 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 2
  store ptr null, ptr %20, align 8, !alias.scope !12, !noalias !15
  %21 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %21, align 8, !alias.scope !12, !noalias !15
  %22 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 1, i32 1
  store i64 0, ptr %22, align 8, !alias.scope !12, !noalias !15
; invoke std::io::stdio::_print
  invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_4.i.i)
          to label %bb5.i.i unwind label %cleanup1.i.i

cleanup1.i.i:                                     ; preds = %start
  %23 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i)
  br label %cleanup.body.i

bb5.i.i:                                          ; preds = %start
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i)
  %24 = atomicrmw add ptr getelementptr inbounds ([2 x i64], ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, i64 0, i64 1), i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_8.i.i)
  store ptr @alloc_8a2eecf69e2fc1f364ea48da3a4d02ff, ptr %_8.i.i, align 8, !alias.scope !17, !noalias !20
  %25 = getelementptr inbounds { ptr, i64 }, ptr %_8.i.i, i64 0, i32 1
  store i64 1, ptr %25, align 8, !alias.scope !17, !noalias !20
  %26 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 2
  store ptr null, ptr %26, align 8, !alias.scope !17, !noalias !20
  %27 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %27, align 8, !alias.scope !17, !noalias !20
  %28 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 1, i32 1
  store i64 0, ptr %28, align 8, !alias.scope !17, !noalias !20
; invoke std::io::stdio::_print
  invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_8.i.i)
          to label %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit unwind label %cleanup3.i.i

cleanup3.i.i:                                     ; preds = %bb5.i.i
  %29 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_8.i.i)
  br label %cleanup.body.i

cleanup.body.i:                                   ; preds = %cleanup3.i.i, %cleanup1.i.i
  %.pn6.pn.i.i = phi { ptr, i32 } [ %29, %cleanup3.i.i ], [ %23, %cleanup1.i.i ]
; invoke core::ptr::drop_in_place::<core::task::wake::Waker>
  invoke fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias noundef nonnull align 8 dereferenceable(16) %waker.i) #9
          to label %common.resume unwind label %terminate.i

terminate.i:                                      ; preds = %cleanup.body.i
  %30 = landingpad { ptr, i32 }
          filter [0 x ptr] zeroinitializer
; call core::panicking::panic_in_cleanup
  tail call void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() #12
  unreachable

common.resume:                                    ; preds = %cleanup.body.i4, %cleanup.body.i
  %common.resume.op = phi { ptr, i32 } [ %.pn6.pn.i.i, %cleanup.body.i ], [ %40, %cleanup.body.i4 ]
  resume { ptr, i32 } %common.resume.op

_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit: ; preds = %bb5.i.i
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_8.i.i)
  %31 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %waker.i)
  %32 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println, i64 1 monotonic, align 8
  %33 = atomicrmw add ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %waker.i3)
  store ptr @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE, ptr %waker.i3, align 8
  %34 = getelementptr inbounds { ptr, ptr }, ptr %waker.i3, i64 0, i32 1
  store ptr null, ptr %34, align 8
  %35 = atomicrmw add ptr @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_4.i.i2)
  store ptr @alloc_228521f8fdd0525c9bea7f9192a53491, ptr %_4.i.i2, align 8, !alias.scope !22, !noalias !25
  %36 = getelementptr inbounds { ptr, i64 }, ptr %_4.i.i2, i64 0, i32 1
  store i64 1, ptr %36, align 8, !alias.scope !22, !noalias !25
  %37 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 2
  store ptr null, ptr %37, align 8, !alias.scope !22, !noalias !25
  %38 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %38, align 8, !alias.scope !22, !noalias !25
  %39 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 1, i32 1
  store i64 0, ptr %39, align 8, !alias.scope !22, !noalias !25
; invoke std::io::stdio::_print
  invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_4.i.i2)
          to label %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_.exit unwind label %cleanup.body.i4

cleanup.body.i4:                                  ; preds = %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit
  %40 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i2)
; invoke core::ptr::drop_in_place::<core::task::wake::Waker>
  invoke fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias noundef nonnull align 8 dereferenceable(16) %waker.i3) #9
          to label %common.resume unwind label %terminate.i5

terminate.i5:                                     ; preds = %cleanup.body.i4
  %41 = landingpad { ptr, i32 }
          filter [0 x ptr] zeroinitializer
; call core::panicking::panic_in_cleanup
  tail call void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() #12
  unreachable

_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_.exit: ; preds = %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i2)
  %42 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %waker.i3)
  ret void
}

; std::rt::lang_start_internal
; Function Attrs: uwtable
declare noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1, ptr noalias noundef readonly align 8 dereferenceable(24), i64 noundef, ptr noundef, i8 noundef) unnamed_addr #0

; Function Attrs: uwtable
declare noundef i32 @rust_eh_personality(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) unnamed_addr #0

; std::io::stdio::_print
; Function Attrs: uwtable
declare void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef align 8 dereferenceable(48)) unnamed_addr #0

; core::panicking::panic_in_cleanup
; Function Attrs: cold noinline noreturn nounwind uwtable
declare void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() unnamed_addr #6

define i32 @main(i32 %0, ptr %1) unnamed_addr #7 {
top:
  %_8.i = alloca ptr, align 8
  %2 = sext i32 %0 to i64
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %_8.i)
  store ptr @_RNvCs4zUb9XLQiyW_6async24main, ptr %_8.i, align 8
; call std::rt::lang_start_internal
  %3 = call noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1 %_8.i, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @vtable.0, i64 noundef %2, ptr noundef %1, i8 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %_8.i)
  %4 = trunc i64 %3 to i32
  ret i32 %4
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #8

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #8

; Function Attrs: noinline
define linkonce_odr hidden i32 @__llvm_profile_runtime_user() #9 {
  %1 = load i32, ptr @__llvm_profile_runtime, align 4
  ret i32 %1
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
declare void @llvm.experimental.noalias.scope.decl(metadata) #10

attributes #0 = { uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #1 = { inlinehint mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #2 = { noinline uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #3 = { inlinehint uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #4 = { inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #5 = { inlinehint mustprogress nofree norecurse nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #6 = { cold noinline noreturn nounwind uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #7 = { "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #8 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { noinline }
attributes #10 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
attributes #11 = { nounwind }
attributes #12 = { noinline noreturn nounwind }

!llvm.module.flags = !{!0, !1}
!llvm.ident = !{!2}

!0 = !{i32 8, !"PIC Level", i32 2}
!1 = !{i32 7, !"PIE Level", i32 2}
!2 = !{!"rustc version 1.74.0-dev"}
!3 = !{!4}
!4 = distinct !{!4, !5, !"_ZN65_$LT$core..task..wake..Waker$u20$as$u20$core..ops..drop..Drop$GT$4drop17h46a336b29aede688E: %self"}
!5 = distinct !{!5, !"_ZN65_$LT$core..task..wake..Waker$u20$as$u20$core..ops..drop..Drop$GT$4drop17h46a336b29aede688E"}
!6 = !{}
!7 = !{i64 8}
!8 = !{i32 587843}
!9 = !{!10}
!10 = distinct !{!10, !11, !"_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2: %_1"}
!11 = distinct !{!11, !"_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2"}
!12 = !{!13}
!13 = distinct !{!13, !14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"}
!14 = distinct !{!14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"}
!15 = !{!16}
!16 = distinct !{!16, !14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"}
!17 = !{!18}
!18 = distinct !{!18, !19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"}
!19 = distinct !{!19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"}
!20 = !{!21}
!21 = distinct !{!21, !19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"}
!22 = !{!23}
!23 = distinct !{!23, !24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"}
!24 = distinct !{!24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"}
!25 = !{!26}
!26 = distinct !{!26, !24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"}

@Zalathar
Copy link
Contributor Author

Looking at the LLVM IR, it seems that the closures have an unreachable body, with no remnant of the llvm.instrprof.increment.

Perhaps that intrinsic is being optimized away before the InstrProfiling pass sees it, so from the instrumentor's perspective it isn't instrumented at all.

@Zalathar
Copy link
Contributor Author

async2.ll (from master, for comparison)
; ModuleID = 'async2.3556024874bfaf70-cgu.0'
source_filename = "async2.3556024874bfaf70-cgu.0"
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
target triple = "arm64-apple-macosx11.0.0"

%"core::task::wake::RawWakerVTable" = type { ptr, ptr, ptr, ptr }
%"core::fmt::Arguments<'_>" = type { { ptr, i64 }, { ptr, i64 }, { ptr, i64 } }

@vtable.0 = private unnamed_addr constant <{ ptr, [16 x i8], ptr, ptr, ptr }> <{ ptr @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0ECs4zUb9XLQiyW_6async2, [16 x i8] c"\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00", ptr @_RNSNvYNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceuE9call_once6vtableCs4zUb9XLQiyW_6async2, ptr @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2, ptr @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2 }>, align 8
@alloc_513570631223a12912d85da2bec3b15a = private unnamed_addr constant <{}> zeroinitializer, align 8
@alloc_9ba35fb86d20c9c13d197ffc9a9264ba = private unnamed_addr constant <{ [27 x i8] }> <{ [27 x i8] c"non_async_func was covered\0A" }>, align 1
@alloc_a921d308b684528df82f6e4dffdb80bd = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_9ba35fb86d20c9c13d197ffc9a9264ba, [8 x i8] c"\1B\00\00\00\00\00\00\00" }>, align 8
@alloc_842fe36ca0d975cd1eb64dadf6b36635 = private unnamed_addr constant <{ [32 x i8] }> <{ [32 x i8] c"non_async_func println in block\0A" }>, align 1
@alloc_beefbc7dab13e3fb922964c749019704 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_842fe36ca0d975cd1eb64dadf6b36635, [8 x i8] c" \00\00\00\00\00\00\00" }>, align 8
@alloc_22eeafdaf5b2dda1e0b3955ae16d58d8 = private unnamed_addr constant <{ [23 x i8] }> <{ [23 x i8] c"async_func was covered\0A" }>, align 1
@alloc_bb9cfe869d3fbd1b0bac54c64137be2e = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_22eeafdaf5b2dda1e0b3955ae16d58d8, [8 x i8] c"\17\00\00\00\00\00\00\00" }>, align 8
@alloc_8b8d639be3764847ca76057a8208860f = private unnamed_addr constant <{ [28 x i8] }> <{ [28 x i8] c"async_func println in block\0A" }>, align 1
@alloc_8a2eecf69e2fc1f364ea48da3a4d02ff = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_8b8d639be3764847ca76057a8208860f, [8 x i8] c"\1C\00\00\00\00\00\00\00" }>, align 8
@alloc_626c5d64fd47031c853154dd4aeec363 = private unnamed_addr constant <{ [36 x i8] }> <{ [36 x i8] c"async_func_just_println was covered\0A" }>, align 1
@alloc_228521f8fdd0525c9bea7f9192a53491 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_626c5d64fd47031c853154dd4aeec363, [8 x i8] c"$\00\00\00\00\00\00\00" }>, align 8
@alloc_fa958ac97aa85c340217f7ce164b63cf = private unnamed_addr constant <{ [20 x i8] }> <{ [20 x i8] c"codecovsample::main\0A" }>, align 1
@alloc_8c6fa871f2b6ccc3596c5d8143fd3c62 = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr @alloc_fa958ac97aa85c340217f7ce164b63cf, [8 x i8] c"\14\00\00\00\00\00\00\00" }>, align 8
@_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE = internal constant <{ ptr, ptr, ptr, ptr }> <{ ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_, ptr @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_ }>, align 8
@__covrec_F74DDFE43B4BAE36u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -626598601794277834, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01.\11\00\13" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_E1A8165202F21C03u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -2186473077595825149, i32 9, i64 155372126598700742, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\13\01\00$" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_5BC727AD826DA7A4u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [28 x i8] }> <{ i64 6613298203987912612, i32 28, i64 1759751756802921227, i64 1889826389874031115, [28 x i8] c"\01\01\02\01\05\05\02\04\01\0B\17\03\09\05\03\0A\02\06\02\02\06\00\07\07\01\01\00\02" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_AF0136FEB71B924Cu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -5836323174473821620, i32 9, i64 155372126598700742, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\13$\02\02" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_B970A97BED51257Au = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -5084377629573700230, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01+\11\003" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_3BF8FE240EC55615u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 4321483273282082325, i32 9, i64 719582524320644771, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\17\01\07\02" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_7A4298E94A9FBACAu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [26 x i8] }> <{ i64 8809771948836895434, i32 26, i64 -3630791716643471453, i64 1889826389874031115, [26 x i8] c"\01\01\01\05\00\04\01\03\01\03\09\05\03\0A\02\06\00\02\06\00\07\03\01\01\00\02" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_2E7D282BFF3BC65Au = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 3349877867264329306, i32 9, i64 1759751756802921227, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01\0B\01\00\17" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_BCBD2FA868D7E7A1u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -4846665223620794463, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01,\11\003" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_82806BDCC676AC9Eu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [44 x i8] }> <{ i64 -9043109455793312610, i32 44, i64 -8617230451985595640, i64 1889826389874031115, [44 x i8] c"\01\01\05\0B\05\01\05\01\05\02\00\02\00\06\01'\05\0A6\02\0D \00#\0B\00'\00I\0F\01\17\00\1A\05\01\0E\00\0F\13\02\05\00\06" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_8AD7B697A08EFFCAu = linkonce_odr hidden constant <{ i64, i32, i64, i64, [44 x i8] }> <{ i64 -8442078214132662326, i32 44, i64 -8617230451985595640, i64 1889826389874031115, [44 x i8] c"\01\01\05\0B\05\01\05\01\05\02\00\02\00\06\01'\05\0A6\02\0D \00#\0B\00'\00I\0F\01\17\00\1A\05\01\0E\00\0F\13\02\05\00\06" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__covrec_A2FE9A724E39BD63u = linkonce_odr hidden constant <{ i64, i32, i64, i64, [9 x i8] }> <{ i64 -6701749379751363229, i32 9, i64 -6856040691413589372, i64 1889826389874031115, [9 x i8] c"\01\01\00\01\01-\11\003" }>, section "__LLVM_COV,__llvm_covfun", align 8
@__llvm_coverage_mapping = private constant { { i32, i32, i32, i32 }, [77 x i8] } { { i32, i32, i32, i32 } { i32 0, i32 77, i32 0, i32 5 }, [77 x i8] c"\02`Jx\DA\93\D6\0F-N-*\D6/.)M,*\D1wI-\D3/*-.\01\13\CEx\E4\F4KR\8BK\8A\F5\93\F3\CBR\8B\12\D3Sus\13\0B\80\EA\12KJ\8Bu\0BK\F3\F5\13\8B+\F3\92\8D\F4\8A\8A\01\CE<$D" }, section "__LLVM_COV,__llvm_covmap", align 8
@__llvm_profile_runtime = external hidden local_unnamed_addr global i32
@__profc__RNvCs4zUb9XLQiyW_6async214non_async_func = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNvCs4zUb9XLQiyW_6async214non_async_func = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 8809771948836895434, i64 -3630791716643471453, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNvCs4zUb9XLQiyW_6async210async_func = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNvCs4zUb9XLQiyW_6async210async_func = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 3349877867264329306, i64 1759751756802921227, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async210async_func to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async210async_func to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 6613298203987912612, i64 1759751756802921227, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ to i64), i64 ptrtoint (ptr @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -2186473077595825149, i64 155372126598700742, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -5836323174473821620, i64 155372126598700742, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ to i64), i64 ptrtoint (ptr @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNvCs4zUb9XLQiyW_6async24main = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNvCs4zUb9XLQiyW_6async24main = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 4321483273282082325, i64 719582524320644771, i64 sub (i64 ptrtoint (ptr @__profc__RNvCs4zUb9XLQiyW_6async24main to i64), i64 ptrtoint (ptr @__profd__RNvCs4zUb9XLQiyW_6async24main to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -9043109455793312610, i64 -8617230451985595640, i64 sub (i64 ptrtoint (ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ to i64), i64 ptrtoint (ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ = private global [2 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -8442078214132662326, i64 -8617230451985595640, i64 sub (i64 ptrtoint (ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ to i64), i64 ptrtoint (ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_ to i64)), ptr null, ptr null, i32 2, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -5084377629573700230, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -4846665223620794463, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -6701749379751363229, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ = private global [1 x i64] zeroinitializer, section "__DATA,__llvm_prf_cnts", align 8
@__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -626598601794277834, i64 -6856040691413589372, i64 sub (i64 ptrtoint (ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ to i64), i64 ptrtoint (ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_ to i64)), ptr null, ptr null, i32 1, [2 x i16] zeroinitializer }, section "__DATA,__llvm_prf_data,regular,live_support", align 8
@__llvm_prf_nm = private constant [167 x i8] c"\9D\05\A3\01x\DA\8B\0F\F2+s.6\A9\0AM\B2\8C\F0\09\CC\AC\0C\8F7K,\AE\CCK624\C9\CB\CF\8B\07\B3\E3\D3J\F3\92\19\E3q\AA4@U\E5L\84:\03'\E3x\DC&\1A\19#T\C6g\95\16\97\C4\17\14e\E6\95\E4\E4\E13\1E\A7&\FCv\99\E4&f\82\CC\F5\F4+\F3+\C1\AA\C2\22\B5\225\B9\B4$\BF\C8\22)'?9;>?\0F\E4\06'\93x\14\0F\B9\02\05\C83\06\B7\C3\A1f\82\D4\91`\ACYX\88\A3\93\8F\AB\81\939\F9\9A\8B\E3)\D3n@\A1~C\B0~\00tI\EC\85", section "__DATA,__llvm_prf_names", align 1
@__llvm_profile_filename = weak hidden local_unnamed_addr constant [22 x i8] c"default_%m_%p.profraw\00"
@llvm.used = appending global [14 x ptr] [ptr @__covrec_2E7D282BFF3BC65Au, ptr @__covrec_3BF8FE240EC55615u, ptr @__covrec_5BC727AD826DA7A4u, ptr @__covrec_7A4298E94A9FBACAu, ptr @__covrec_82806BDCC676AC9Eu, ptr @__covrec_8AD7B697A08EFFCAu, ptr @__covrec_A2FE9A724E39BD63u, ptr @__covrec_AF0136FEB71B924Cu, ptr @__covrec_B970A97BED51257Au, ptr @__covrec_BCBD2FA868D7E7A1u, ptr @__covrec_E1A8165202F21C03u, ptr @__covrec_F74DDFE43B4BAE36u, ptr @__llvm_coverage_mapping, ptr @__llvm_prf_nm], section "llvm.metadata"
@llvm.compiler.used = appending global [13 x ptr] [ptr @__llvm_profile_runtime_user, ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_, ptr @__profd__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_, ptr @__profd__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, ptr @__profd__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0B7_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0B7_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, ptr @__profd__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs_0B7_, ptr @__profd__RNvCs4zUb9XLQiyW_6async210async_func, ptr @__profd__RNvCs4zUb9XLQiyW_6async214non_async_func, ptr @__profd__RNvCs4zUb9XLQiyW_6async223async_func_just_println, ptr @__profd__RNvCs4zUb9XLQiyW_6async24main], section "llvm.metadata"

; std::rt::lang_start::<()>
; Function Attrs: uwtable
define hidden noundef i64 @_RINvNtCs8koKRe9ETht_3std2rt10lang_startuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %main, i64 noundef %argc, ptr noundef %argv, i8 noundef %sigpipe) unnamed_addr #0 {
start:
  %_8 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %_8)
  store ptr %main, ptr %_8, align 8
; call std::rt::lang_start_internal
  %0 = call noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1 %_8, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @vtable.0, i64 noundef %argc, ptr noundef %argv, i8 noundef %sigpipe)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %_8)
  ret i64 %0
}

; core::ptr::drop_in_place::<std::rt::lang_start<()>::{closure#0}>
; Function Attrs: inlinehint mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable
define internal void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0ECs4zUb9XLQiyW_6async2(ptr noalias nocapture readnone align 8 %_1) unnamed_addr #1 {
start:
  ret void
}

; core::ptr::drop_in_place::<core::task::wake::Waker>
; Function Attrs: uwtable
define internal fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias nocapture noundef readonly align 8 dereferenceable(16) %_1) unnamed_addr #0 {
start:
  tail call void @llvm.experimental.noalias.scope.decl(metadata !3)
  %_4.i = load ptr, ptr %_1, align 8, !alias.scope !3, !nonnull !6, !align !7, !noundef !6
  %0 = getelementptr inbounds %"core::task::wake::RawWakerVTable", ptr %_4.i, i64 0, i32 3
  %_2.i = load ptr, ptr %0, align 8, !noalias !3, !nonnull !6, !noundef !6
  %1 = getelementptr inbounds { ptr, ptr }, ptr %_1, i64 0, i32 1
  %_3.i = load ptr, ptr %1, align 8, !alias.scope !3, !noundef !6
  tail call void %_2.i(ptr noundef %_3.i), !noalias !3
  ret void
}

; std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>
; Function Attrs: noinline uwtable
define internal fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr nocapture noundef nonnull readonly %f) unnamed_addr #2 {
start:
  tail call void %f()
  tail call void asm sideeffect "", "~{memory}"() #11, !srcloc !8
  ret void
}

; std::rt::lang_start::<()>::{closure#0}
; Function Attrs: inlinehint uwtable
define internal noundef i32 @_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2(ptr noalias nocapture noundef readonly align 8 dereferenceable(8) %_1) unnamed_addr #3 {
start:
  %_4 = load ptr, ptr %_1, align 8, !nonnull !6, !noundef !6
; call std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>
  tail call fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %_4)
  ret i32 0
}

; <std::rt::lang_start<()>::{closure#0} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
; Function Attrs: inlinehint uwtable
define internal noundef i32 @_RNSNvYNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceuE9call_once6vtableCs4zUb9XLQiyW_6async2(ptr nocapture noundef readonly %_1) unnamed_addr #3 personality ptr @rust_eh_personality {
start:
  %0 = load ptr, ptr %_1, align 8, !nonnull !6, !noundef !6
; call std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>
  tail call fastcc void @_RINvNtNtCs8koKRe9ETht_3std10sys_common9backtrace28___rust_begin_short_backtraceFEuuECs4zUb9XLQiyW_6async2(ptr noundef nonnull %0), !noalias !9
  ret i32 0
}

; <async2::executor::block_on::VTABLE::{closure#0} as core::ops::function::FnOnce<(*const (),)>>::call_once
; Function Attrs: inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable
define internal { ptr, ptr } @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #4 personality ptr @rust_eh_personality {
start:
  unreachable
}

; <async2::executor::block_on::VTABLE::{closure#2} as core::ops::function::FnOnce<(*const (),)>>::call_once
; Function Attrs: inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable
define internal void @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs0_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #4 personality ptr @rust_eh_personality {
start:
  unreachable
}

; <async2::executor::block_on::VTABLE::{closure#3} as core::ops::function::FnOnce<(*const (),)>>::call_once
; Function Attrs: inlinehint mustprogress nofree norecurse nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable
define internal void @_RNvYNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0INtNtNtCscBXtjtswptt_4core3ops8function6FnOnceTPuEE9call_onceBa_(ptr nocapture readnone %0) unnamed_addr #5 personality ptr @rust_eh_personality {
start:
  %1 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8
  ret void
}

; async2::main
; Function Attrs: uwtable
define internal void @_RNvCs4zUb9XLQiyW_6async24main() unnamed_addr #0 personality ptr @rust_eh_personality {
start:
  %_4.i.i2 = alloca %"core::fmt::Arguments<'_>", align 8
  %waker.i3 = alloca { ptr, ptr }, align 8
  %_8.i.i = alloca %"core::fmt::Arguments<'_>", align 8
  %_4.i.i = alloca %"core::fmt::Arguments<'_>", align 8
  %waker.i = alloca { ptr, ptr }, align 8
  %_5.i = alloca %"core::fmt::Arguments<'_>", align 8
  %_2.i = alloca %"core::fmt::Arguments<'_>", align 8
  %_2 = alloca %"core::fmt::Arguments<'_>", align 8
  %0 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async24main, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_2)
  store ptr @alloc_8c6fa871f2b6ccc3596c5d8143fd3c62, ptr %_2, align 8
  %1 = getelementptr inbounds { ptr, i64 }, ptr %_2, i64 0, i32 1
  store i64 1, ptr %1, align 8
  %2 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 2
  store ptr null, ptr %2, align 8
  %3 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %3, align 8
  %4 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2, i64 0, i32 1, i32 1
  store i64 0, ptr %4, align 8
; call std::io::stdio::_print
  call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_2)
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_2)
  %5 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_2.i)
  store ptr @alloc_a921d308b684528df82f6e4dffdb80bd, ptr %_2.i, align 8
  %6 = getelementptr inbounds { ptr, i64 }, ptr %_2.i, i64 0, i32 1
  store i64 1, ptr %6, align 8
  %7 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 2
  store ptr null, ptr %7, align 8
  %8 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %8, align 8
  %9 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_2.i, i64 0, i32 1, i32 1
  store i64 0, ptr %9, align 8
; call std::io::stdio::_print
  call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_2.i)
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_2.i)
  %10 = atomicrmw add ptr getelementptr inbounds ([2 x i64], ptr @__profc__RNvCs4zUb9XLQiyW_6async214non_async_func, i64 0, i64 1), i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_5.i)
  store ptr @alloc_beefbc7dab13e3fb922964c749019704, ptr %_5.i, align 8
  %11 = getelementptr inbounds { ptr, i64 }, ptr %_5.i, i64 0, i32 1
  store i64 1, ptr %11, align 8
  %12 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 2
  store ptr null, ptr %12, align 8
  %13 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %13, align 8
  %14 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_5.i, i64 0, i32 1, i32 1
  store i64 0, ptr %14, align 8
; call std::io::stdio::_print
  call void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_5.i)
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_5.i)
  %15 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async210async_func, i64 1 monotonic, align 8
  %16 = atomicrmw add ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %waker.i)
  store ptr @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE, ptr %waker.i, align 8
  %17 = getelementptr inbounds { ptr, ptr }, ptr %waker.i, i64 0, i32 1
  store ptr null, ptr %17, align 8
  %18 = atomicrmw add ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_4.i.i)
  store ptr @alloc_bb9cfe869d3fbd1b0bac54c64137be2e, ptr %_4.i.i, align 8, !alias.scope !12, !noalias !15
  %19 = getelementptr inbounds { ptr, i64 }, ptr %_4.i.i, i64 0, i32 1
  store i64 1, ptr %19, align 8, !alias.scope !12, !noalias !15
  %20 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 2
  store ptr null, ptr %20, align 8, !alias.scope !12, !noalias !15
  %21 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %21, align 8, !alias.scope !12, !noalias !15
  %22 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i, i64 0, i32 1, i32 1
  store i64 0, ptr %22, align 8, !alias.scope !12, !noalias !15
; invoke std::io::stdio::_print
  invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_4.i.i)
          to label %bb5.i.i unwind label %cleanup1.i.i

cleanup1.i.i:                                     ; preds = %start
  %23 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i)
  br label %cleanup.body.i

bb5.i.i:                                          ; preds = %start
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i)
  %24 = atomicrmw add ptr getelementptr inbounds ([2 x i64], ptr @__profc__RNCNvCs4zUb9XLQiyW_6async210async_func0B3_, i64 0, i64 1), i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_8.i.i)
  store ptr @alloc_8a2eecf69e2fc1f364ea48da3a4d02ff, ptr %_8.i.i, align 8, !alias.scope !17, !noalias !20
  %25 = getelementptr inbounds { ptr, i64 }, ptr %_8.i.i, i64 0, i32 1
  store i64 1, ptr %25, align 8, !alias.scope !17, !noalias !20
  %26 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 2
  store ptr null, ptr %26, align 8, !alias.scope !17, !noalias !20
  %27 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %27, align 8, !alias.scope !17, !noalias !20
  %28 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_8.i.i, i64 0, i32 1, i32 1
  store i64 0, ptr %28, align 8, !alias.scope !17, !noalias !20
; invoke std::io::stdio::_print
  invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_8.i.i)
          to label %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit unwind label %cleanup3.i.i

cleanup3.i.i:                                     ; preds = %bb5.i.i
  %29 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_8.i.i)
  br label %cleanup.body.i

cleanup.body.i:                                   ; preds = %cleanup3.i.i, %cleanup1.i.i
  %.pn6.pn.i.i = phi { ptr, i32 } [ %29, %cleanup3.i.i ], [ %23, %cleanup1.i.i ]
; invoke core::ptr::drop_in_place::<core::task::wake::Waker>
  invoke fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias noundef nonnull align 8 dereferenceable(16) %waker.i) #9
          to label %common.resume unwind label %terminate.i

terminate.i:                                      ; preds = %cleanup.body.i
  %30 = landingpad { ptr, i32 }
          filter [0 x ptr] zeroinitializer
; call core::panicking::panic_in_cleanup
  tail call void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() #12
  unreachable

common.resume:                                    ; preds = %cleanup.body.i4, %cleanup.body.i
  %common.resume.op = phi { ptr, i32 } [ %.pn6.pn.i.i, %cleanup.body.i ], [ %40, %cleanup.body.i4 ]
  resume { ptr, i32 } %common.resume.op

_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit: ; preds = %bb5.i.i
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_8.i.i)
  %31 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %waker.i)
  %32 = atomicrmw add ptr @__profc__RNvCs4zUb9XLQiyW_6async223async_func_just_println, i64 1 monotonic, align 8
  %33 = atomicrmw add ptr @__profc__RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %waker.i3)
  store ptr @_RNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLE, ptr %waker.i3, align 8
  %34 = getelementptr inbounds { ptr, ptr }, ptr %waker.i3, i64 0, i32 1
  store ptr null, ptr %34, align 8
  %35 = atomicrmw add ptr @__profc__RNCNvCs4zUb9XLQiyW_6async223async_func_just_println0B3_, i64 1 monotonic, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %_4.i.i2)
  store ptr @alloc_228521f8fdd0525c9bea7f9192a53491, ptr %_4.i.i2, align 8, !alias.scope !22, !noalias !25
  %36 = getelementptr inbounds { ptr, i64 }, ptr %_4.i.i2, i64 0, i32 1
  store i64 1, ptr %36, align 8, !alias.scope !22, !noalias !25
  %37 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 2
  store ptr null, ptr %37, align 8, !alias.scope !22, !noalias !25
  %38 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 1
  store ptr @alloc_513570631223a12912d85da2bec3b15a, ptr %38, align 8, !alias.scope !22, !noalias !25
  %39 = getelementptr inbounds %"core::fmt::Arguments<'_>", ptr %_4.i.i2, i64 0, i32 1, i32 1
  store i64 0, ptr %39, align 8, !alias.scope !22, !noalias !25
; invoke std::io::stdio::_print
  invoke void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef nonnull align 8 dereferenceable(48) %_4.i.i2)
          to label %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_.exit unwind label %cleanup.body.i4

cleanup.body.i4:                                  ; preds = %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit
  %40 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i2)
; invoke core::ptr::drop_in_place::<core::task::wake::Waker>
  invoke fastcc void @_RINvNtCscBXtjtswptt_4core3ptr13drop_in_placeNtNtNtB4_4task4wake5WakerECs4zUb9XLQiyW_6async2(ptr noalias noundef nonnull align 8 dereferenceable(16) %waker.i3) #9
          to label %common.resume unwind label %terminate.i5

terminate.i5:                                     ; preds = %cleanup.body.i4
  %41 = landingpad { ptr, i32 }
          filter [0 x ptr] zeroinitializer
; call core::panicking::panic_in_cleanup
  tail call void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() #12
  unreachable

_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_23async_func_just_println0EB4_.exit: ; preds = %_RINvNtCs4zUb9XLQiyW_6async28executor8block_onNCNvB4_10async_func0EB4_.exit
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %_4.i.i2)
  %42 = atomicrmw add ptr @__profc__RNCNvNvNtCs4zUb9XLQiyW_6async28executor8block_on6VTABLEs1_0B7_, i64 1 monotonic, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %waker.i3)
  ret void
}

; std::rt::lang_start_internal
; Function Attrs: uwtable
declare noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1, ptr noalias noundef readonly align 8 dereferenceable(24), i64 noundef, ptr noundef, i8 noundef) unnamed_addr #0

; Function Attrs: uwtable
declare noundef i32 @rust_eh_personality(i32 noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef) unnamed_addr #0

; std::io::stdio::_print
; Function Attrs: uwtable
declare void @_ZN3std2io5stdio6_print17h159df1e36ccb658eE(ptr noalias nocapture noundef align 8 dereferenceable(48)) unnamed_addr #0

; core::panicking::panic_in_cleanup
; Function Attrs: cold noinline noreturn nounwind uwtable
declare void @_ZN4core9panicking16panic_in_cleanup17h79e82dd57955c40cE() unnamed_addr #6

define i32 @main(i32 %0, ptr %1) unnamed_addr #7 {
top:
  %_8.i = alloca ptr, align 8
  %2 = sext i32 %0 to i64
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %_8.i)
  store ptr @_RNvCs4zUb9XLQiyW_6async24main, ptr %_8.i, align 8
; call std::rt::lang_start_internal
  %3 = call noundef i64 @_ZN3std2rt19lang_start_internal17he54ad6d8e161668fE(ptr noundef nonnull align 1 %_8.i, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @vtable.0, i64 noundef %2, ptr noundef %1, i8 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %_8.i)
  %4 = trunc i64 %3 to i32
  ret i32 %4
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #8

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #8

; Function Attrs: noinline
define linkonce_odr hidden i32 @__llvm_profile_runtime_user() #9 {
  %1 = load i32, ptr @__llvm_profile_runtime, align 4
  ret i32 %1
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
declare void @llvm.experimental.noalias.scope.decl(metadata) #10

attributes #0 = { uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #1 = { inlinehint mustprogress nofree norecurse nosync nounwind willreturn memory(none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #2 = { noinline uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #3 = { inlinehint uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #4 = { inlinehint mustprogress nofree norecurse noreturn nosync nounwind willreturn memory(none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #5 = { inlinehint mustprogress nofree norecurse nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #6 = { cold noinline noreturn nounwind uwtable "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #7 = { "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
attributes #8 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { noinline }
attributes #10 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
attributes #11 = { nounwind }
attributes #12 = { noinline noreturn nounwind }

!llvm.module.flags = !{!0, !1}
!llvm.ident = !{!2}

!0 = !{i32 8, !"PIC Level", i32 2}
!1 = !{i32 7, !"PIE Level", i32 2}
!2 = !{!"rustc version 1.74.0-dev"}
!3 = !{!4}
!4 = distinct !{!4, !5, !"_ZN65_$LT$core..task..wake..Waker$u20$as$u20$core..ops..drop..Drop$GT$4drop17h46a336b29aede688E: %self"}
!5 = distinct !{!5, !"_ZN65_$LT$core..task..wake..Waker$u20$as$u20$core..ops..drop..Drop$GT$4drop17h46a336b29aede688E"}
!6 = !{}
!7 = !{i64 8}
!8 = !{i32 587843}
!9 = !{!10}
!10 = distinct !{!10, !11, !"_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2: %_1"}
!11 = distinct !{!11, !"_RNCINvNtCs8koKRe9ETht_3std2rt10lang_startuE0Cs4zUb9XLQiyW_6async2"}
!12 = !{!13}
!13 = distinct !{!13, !14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"}
!14 = distinct !{!14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"}
!15 = !{!16}
!16 = distinct !{!16, !14, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"}
!17 = !{!18}
!18 = distinct !{!18, !19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"}
!19 = distinct !{!19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"}
!20 = !{!21}
!21 = distinct !{!21, !19, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"}
!22 = !{!23}
!23 = distinct !{!23, !24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %_0"}
!24 = distinct !{!24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E"}
!25 = !{!26}
!26 = distinct !{!26, !24, !"_ZN4core3fmt9Arguments9new_const17h4dfb0a79b9637285E: %pieces.0"}

@Zalathar
Copy link
Contributor Author

Zalathar commented Sep 25, 2023

Comparing the two LLVM IR dumps, it seems that the bodies for closure 0 are identical, and the bodies for closure 2 are identical. (Closure 1 is missing in both, presumably because it was merged with closure 2.)

So that's evidence against my hypothesis of the unreachable-only body being responsible.

@Zalathar
Copy link
Contributor Author

If I set -Zmir-opt-level=1 (or lower), the problem doesn't occur, presumably because the changed MIR pass doesn't run.

If I go into unreachable_prop.rs and comment out the loop that clears unreachable BBs, the problem also doesn't occur, though presumably that has the side-effect of making the MIR pass do less.

@Zalathar
Copy link
Contributor Author

OK, I think I've found the problem.

If we instrument a function for coverage, but a MIR optimization later removes all of its CoverageKind::Counter statements, LLVM treats it as not instrumented and it disappears from coverage reports.

A proper fix will need to wait until after #116046. Until then, the workaround is to avoid deleting StatementKind::Coverage statements from mir::START_BLOCK.

@Noratrieb Noratrieb added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Sep 25, 2023
@Zalathar
Copy link
Contributor Author

Actually, a better workaround is probably just to disable the UnreachablePropagation pass entirely if coverage is enabled:

impl MirPass<'_> for UnreachablePropagation {
    fn is_enabled(&self, sess: &rustc_session::Session) -> bool {
        // Enable only under -Zmir-opt-level=2 as this can make programs less debuggable.
        // Coverage gets confused by MIR passes that can remove all coverage statements
        // from an instrumented function.
        sess.mir_opt_level() >= 2 && !sess.instrument_coverage()
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-code-coverage Area: Source-based code coverage (-Cinstrument-coverage) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

3 participants