Thanks for using Compiler Explorer
Sponsors
Jakt
C++
Ada
Analysis
Android Java
Android Kotlin
Assembly
C
C3
Carbon
C++ (Circle)
CIRCT
Clean
CMake
CMakeScript
COBOL
C++ for OpenCL
MLIR
Cppx
Cppx-Blue
Cppx-Gold
Cpp2-cppfront
Crystal
C#
CUDA C++
D
Dart
Elixir
Erlang
Fortran
F#
Go
Haskell
HLSL
Hook
Hylo
ispc
Java
Julia
Kotlin
LLVM IR
LLVM MIR
Modula-2
Nim
Objective-C
Objective-C++
OCaml
OpenCL C
Pascal
Pony
Python
Racket
Ruby
Rust
Snowball
Scala
Solidity
Spice
Swift
LLVM TableGen
Toit
TypeScript Native
V
Vala
Visual Basic
Zig
Javascript
GIMPLE
llvm source #1
Output
Compile to binary object
Link to binary
Execute the code
Intel asm syntax
Demangle identifiers
Verbose demangling
Filters
Unused labels
Library functions
Directives
Comments
Horizontal whitespace
Debug intrinsics
Compiler
clang (assertions trunk)
clang (trunk)
clang 10.0.0
clang 10.0.1
clang 11.0.0
clang 11.0.1
clang 12.0.0
clang 12.0.1
clang 13.0.0
clang 14.0.0
clang 15.0.0
clang 16.0.0
clang 17.0.1
clang 18.1.0
clang 4.0.1
clang 5.0.0
clang 6.0.0
clang 7.0.0
clang 8.0.0
clang 9.0.0
llc (assertions trunk)
llc (trunk)
llc 10.0.0
llc 10.0.1
llc 11.0.0
llc 11.0.1
llc 12.0.0
llc 12.0.1
llc 13.0.0
llc 14.0.0
llc 15.0.0
llc 16.0.0
llc 17.0.1
llc 18.1.0
llc 3.2
llc 3.3
llc 3.9.1
llc 4.0.0
llc 4.0.1
llc 5.0.0
llc 6.0.0
llc 7.0.0
llc 8.0.0
llc 9.0.0
opt (assertions trunk)
opt (trunk)
opt 10.0.0
opt 10.0.1
opt 11.0.0
opt 11.0.1
opt 12.0.0
opt 12.0.1
opt 13.0.0
opt 14.0.0
opt 15.0.0
opt 16.0.0
opt 17.0.1
opt 18.1.0
opt 3.2
opt 3.3
opt 3.9.1
opt 4.0.0
opt 4.0.1
opt 5.0.0
opt 6.0.0
opt 7.0.0
opt 8.0.0
opt 9.0.0
Options
Source code
; ModuleID = '/app/example.cpp' source_filename = "/app/example.cpp" 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" %class.MyTask = type { %"struct.std::__n4861::coroutine_handle" } %"struct.std::__n4861::coroutine_handle" = type { ptr } %"struct.MyTask::promise_type" = type { %"struct.std::__n4861::coroutine_handle" } %"struct.std::__n4861::suspend_always" = type { i8 } %"struct.std::__n4861::coroutine_handle.0" = type { ptr } %struct.Awaiter = type { %"struct.std::__n4861::coroutine_handle" } %struct.GlobalSetter = type { i32 } %struct.Awaiter.1 = type { ptr, ptr } $_ZN6MyTask12promise_typeC2Ev = comdat any $_ZN6MyTask12promise_type17get_return_objectEv = comdat any $_ZN6MyTask12promise_type15initial_suspendEv = comdat any $_ZNKSt7__n486114suspend_always11await_readyEv = comdat any $_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE = comdat any $_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv = comdat any $_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEEcvNS0_IvEEEv = comdat any $_ZNKSt7__n486114suspend_always12await_resumeEv = comdat any $_ZN6MyTask12promise_type11return_voidEv = comdat any $_ZN6MyTask12promise_type13final_suspendEv = comdat any $_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter11await_readyEv = comdat any $_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE = comdat any $_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv = comdat any $_ZN12GlobalSetterC2Ei = comdat any $_ZN6MyTask12promise_type15await_transformES_ = comdat any $_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter11await_readyEv = comdat any $_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE = comdat any $_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter12await_resumeEv = comdat any $_ZN12GlobalSetterD2Ev = comdat any $_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEEC2Ev = comdat any $_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_promiseERS2_ = comdat any $_ZN6MyTaskC2ENSt7__n486116coroutine_handleINS_12promise_typeEEE = comdat any $_ZNSt7__n486116coroutine_handleIvE12from_addressEPv = comdat any $_ZNSt7__n486116coroutine_handleIvEC2Ev = comdat any $_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7promiseEv = comdat any $_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7destroyEv = comdat any @some_global = dso_local global i32 0, align 4 ; Function Attrs: mustprogress noinline nounwind presplitcoroutine uwtable define dso_local ptr @_Z3Quxv() #0 { entry: %retval = alloca %class.MyTask, align 8 %__promise = alloca %"struct.MyTask::promise_type", align 8 %ref.tmp = alloca %"struct.std::__n4861::suspend_always", align 1 %undef.agg.tmp = alloca %"struct.std::__n4861::suspend_always", align 1 %agg.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8 %ref.tmp4 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %ref.tmp10 = alloca %struct.Awaiter, align 8 %ref.tmp15 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %agg.tmp16 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %0 = bitcast ptr %__promise to ptr %1 = call token @llvm.coro.id(i32 16, ptr %0, ptr null, ptr null) %2 = call i1 @llvm.coro.alloc(token %1) br i1 %2, label %coro.alloc, label %coro.init coro.alloc: ; preds = %entry %3 = call i64 @llvm.coro.size.i64() %call = call noalias noundef nonnull ptr @_Znwm(i64 noundef %3) #14 br label %coro.init coro.init: ; preds = %coro.alloc, %entry %4 = phi ptr [ null, %entry ], [ %call, %coro.alloc ] %5 = call ptr @llvm.coro.begin(token %1, ptr %4) call void @llvm.lifetime.start.p0(i64 8, ptr %__promise) #2 call void @_ZN6MyTask12promise_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %__promise) #2 %call1 = call ptr @_ZN6MyTask12promise_type17get_return_objectEv(ptr noundef nonnull align 8 dereferenceable(8) %__promise) %coerce.dive = getelementptr inbounds %class.MyTask, ptr %retval, i32 0, i32 0 %coerce.dive2 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive, i32 0, i32 0 store ptr %call1, ptr %coerce.dive2, align 8 call void @llvm.lifetime.start.p0(i64 1, ptr %ref.tmp) #2 call void @_ZN6MyTask12promise_type15initial_suspendEv(ptr noundef nonnull align 8 dereferenceable(8) %__promise) %call3 = call noundef zeroext i1 @_ZNKSt7__n486114suspend_always11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2 br i1 %call3, label %init.ready, label %init.suspend init.suspend: ; preds = %coro.init %6 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp4) #2 %call5 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive6 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp4, i32 0, i32 0 store ptr %call5, ptr %coerce.dive6, align 8 %call7 = call ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp4) #2 %coerce.dive8 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %agg.tmp, i32 0, i32 0 store ptr %call7, ptr %coerce.dive8, align 8 %coerce.dive9 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %agg.tmp, i32 0, i32 0 %7 = load ptr, ptr %coerce.dive9, align 8 call void @_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp, ptr %7) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp4) #2 %8 = call i8 @llvm.coro.suspend(token %6, i1 false) switch i8 %8, label %coro.ret [ i8 0, label %init.ready i8 1, label %init.cleanup ] init.cleanup: ; preds = %init.suspend br label %cleanup init.ready: ; preds = %init.suspend, %coro.init call void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2 br label %cleanup cleanup: ; preds = %init.ready, %init.cleanup %cleanup.dest.slot.0 = phi i32 [ 0, %init.ready ], [ 2, %init.cleanup ] call void @llvm.lifetime.end.p0(i64 1, ptr %ref.tmp) #2 switch i32 %cleanup.dest.slot.0, label %cleanup26 [ i32 0, label %cleanup.cont ] cleanup.cont: ; preds = %cleanup call void @_ZN6MyTask12promise_type11return_voidEv(ptr noundef nonnull align 8 dereferenceable(8) %__promise) br label %coro.final coro.final: ; preds = %cleanup.cont call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp10) #2 %call11 = call ptr @_ZN6MyTask12promise_type13final_suspendEv(ptr noundef nonnull align 8 dereferenceable(8) %__promise) #2 %coerce.dive12 = getelementptr inbounds %struct.Awaiter, ptr %ref.tmp10, i32 0, i32 0 %coerce.dive13 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive12, i32 0, i32 0 store ptr %call11, ptr %coerce.dive13, align 8 %call14 = call noundef zeroext i1 @_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp10) #2 br i1 %call14, label %final.ready, label %final.suspend final.suspend: ; preds = %coro.final %9 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp15) #2 %call17 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive18 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp16, i32 0, i32 0 store ptr %call17, ptr %coerce.dive18, align 8 %coerce.dive19 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp16, i32 0, i32 0 %10 = load ptr, ptr %coerce.dive19, align 8 %call20 = call ptr @_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp10, ptr %10) #2 %coerce.dive21 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp15, i32 0, i32 0 store ptr %call20, ptr %coerce.dive21, align 8 %call22 = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp15) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp15) #2 call void @llvm.coro.resume(ptr %call22) %11 = call i8 @llvm.coro.suspend(token %9, i1 true) switch i8 %11, label %coro.ret [ i8 0, label %final.ready i8 1, label %final.cleanup ] final.cleanup: ; preds = %final.suspend br label %cleanup23 final.ready: ; preds = %final.suspend, %coro.final call void @_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp10) #2 br label %cleanup23 cleanup23: ; preds = %final.ready, %final.cleanup %cleanup.dest.slot.1 = phi i32 [ 0, %final.ready ], [ 2, %final.cleanup ] call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp10) #2 switch i32 %cleanup.dest.slot.1, label %cleanup26 [ i32 0, label %cleanup.cont25 ] cleanup.cont25: ; preds = %cleanup23 br label %cleanup26 cleanup26: ; preds = %cleanup.cont25, %cleanup23, %cleanup %cleanup.dest.slot.2 = phi i32 [ %cleanup.dest.slot.0, %cleanup ], [ %cleanup.dest.slot.1, %cleanup23 ], [ 0, %cleanup.cont25 ] call void @llvm.lifetime.end.p0(i64 8, ptr %__promise) #2 %12 = call ptr @llvm.coro.free(token %1, ptr %5) %13 = icmp ne ptr %12, null br i1 %13, label %coro.free, label %after.coro.free coro.free: ; preds = %cleanup26 call void @_ZdlPv(ptr noundef %12) #2 br label %after.coro.free after.coro.free: ; preds = %cleanup26, %coro.free switch i32 %cleanup.dest.slot.2, label %unreachable [ i32 0, label %cleanup.cont29 i32 2, label %coro.ret ] cleanup.cont29: ; preds = %after.coro.free br label %coro.ret coro.ret: ; preds = %cleanup.cont29, %after.coro.free, %final.suspend, %init.suspend %14 = call i1 @llvm.coro.end(ptr null, i1 false) %coerce.dive30 = getelementptr inbounds %class.MyTask, ptr %retval, i32 0, i32 0 %coerce.dive31 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive30, i32 0, i32 0 %15 = load ptr, ptr %coerce.dive31, align 8 ret ptr %15 unreachable: ; preds = %after.coro.free unreachable } ; Function Attrs: argmemonly nounwind readonly declare token @llvm.coro.id(i32, ptr readnone, ptr nocapture readonly, ptr) #1 ; Function Attrs: nounwind declare i1 @llvm.coro.alloc(token) #2 ; Function Attrs: nobuiltin allocsize(0) declare noundef nonnull ptr @_Znwm(i64 noundef) #3 ; Function Attrs: nounwind readnone declare i64 @llvm.coro.size.i64() #4 ; Function Attrs: nounwind declare ptr @llvm.coro.begin(token, ptr writeonly) #2 ; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #5 ; Function Attrs: inlinehint nounwind uwtable define linkonce_odr dso_local void @_ZN6MyTask12promise_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #6 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %resume_when_done = getelementptr inbounds %"struct.MyTask::promise_type", ptr %this1, i32 0, i32 0 call void @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %resume_when_done) #2 ret void } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local ptr @_ZN6MyTask12promise_type17get_return_objectEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 { entry: %retval = alloca %class.MyTask, align 8 %this.addr = alloca ptr, align 8 %agg.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %call = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_promiseERS2_(ptr noundef nonnull align 8 dereferenceable(8) %this1) %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0 store ptr %call, ptr %coerce.dive, align 8 %coerce.dive2 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp, i32 0, i32 0 %0 = load ptr, ptr %coerce.dive2, align 8 call void @_ZN6MyTaskC2ENSt7__n486116coroutine_handleINS_12promise_typeEEE(ptr noundef nonnull align 8 dereferenceable(8) %retval, ptr %0) %coerce.dive3 = getelementptr inbounds %class.MyTask, ptr %retval, i32 0, i32 0 %coerce.dive4 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive3, i32 0, i32 0 %1 = load ptr, ptr %coerce.dive4, align 8 ret ptr %1 } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local void @_ZN6MyTask12promise_type15initial_suspendEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 ret void } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local noundef zeroext i1 @_ZNKSt7__n486114suspend_always11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 ret i1 false } ; Function Attrs: nomerge nounwind declare token @llvm.coro.save(ptr) #8 ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local void @_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr %.coerce) #7 comdat align 2 { entry: %0 = alloca %"struct.std::__n4861::coroutine_handle.0", align 8 %this.addr = alloca ptr, align 8 %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %0, i32 0, i32 0 store ptr %.coerce, ptr %coerce.dive, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 ret void } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %__a) #7 comdat align 2 { entry: %retval = alloca %"struct.std::__n4861::coroutine_handle", align 8 %__a.addr = alloca ptr, align 8 store ptr %__a, ptr %__a.addr, align 8, !tbaa !6 call void @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2 %0 = load ptr, ptr %__a.addr, align 8, !tbaa !6 %_M_fr_ptr = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0 store ptr %0, ptr %_M_fr_ptr, align 8, !tbaa !10 %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0 %1 = load ptr, ptr %coerce.dive, align 8 ret ptr %1 } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 { entry: %retval = alloca %"struct.std::__n4861::coroutine_handle.0", align 8 %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %call = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %this1) #2 %call2 = call ptr @_ZNSt7__n486116coroutine_handleIvE12from_addressEPv(ptr noundef %call) #2 %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0 store ptr %call2, ptr %coerce.dive, align 8 %coerce.dive3 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0 %0 = load ptr, ptr %coerce.dive3, align 8 ret ptr %0 } ; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #5 ; Function Attrs: nounwind declare i8 @llvm.coro.suspend(token, i1) #2 ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 ret void } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local void @_ZN6MyTask12promise_type11return_voidEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 ret void } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local ptr @_ZN6MyTask12promise_type13final_suspendEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 { entry: %retval = alloca %struct.Awaiter, align 8 %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %to_resume = getelementptr inbounds %struct.Awaiter, ptr %retval, i32 0, i32 0 %resume_when_done = getelementptr inbounds %"struct.MyTask::promise_type", ptr %this1, i32 0, i32 0 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %to_resume, ptr align 8 %resume_when_done, i64 8, i1 false), !tbaa.struct !12 %coerce.dive = getelementptr inbounds %struct.Awaiter, ptr %retval, i32 0, i32 0 %coerce.dive2 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive, i32 0, i32 0 %0 = load ptr, ptr %coerce.dive2, align 8 ret ptr %0 } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local noundef zeroext i1 @_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 ret i1 false } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local ptr @_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(8) %this, ptr %h.coerce) #7 comdat align 2 { entry: %retval = alloca %"struct.std::__n4861::coroutine_handle", align 8 %h = alloca %"struct.std::__n4861::coroutine_handle", align 8 %this.addr = alloca ptr, align 8 %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %h, i32 0, i32 0 store ptr %h.coerce, ptr %coerce.dive, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %to_resume = getelementptr inbounds %struct.Awaiter, ptr %this1, i32 0, i32 0 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %retval, ptr align 8 %to_resume, i64 8, i1 false), !tbaa.struct !12 %coerce.dive2 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0 %0 = load ptr, ptr %coerce.dive2, align 8 ret ptr %0 } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %_M_fr_ptr = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %this1, i32 0, i32 0 %0 = load ptr, ptr %_M_fr_ptr, align 8, !tbaa !10 ret ptr %0 } declare void @llvm.coro.resume(ptr) ; Function Attrs: nounwind declare void @_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(8)) #9 ; Function Attrs: nobuiltin nounwind declare void @_ZdlPv(ptr noundef) #10 ; Function Attrs: argmemonly nounwind readonly declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1 ; Function Attrs: nounwind declare i1 @llvm.coro.end(ptr, i1) #2 ; Function Attrs: mustprogress nounwind presplitcoroutine uwtable define dso_local ptr @_Z3Foov() #11 { entry: %retval = alloca %class.MyTask, align 8 %__promise = alloca %"struct.MyTask::promise_type", align 8 %ref.tmp = alloca %"struct.std::__n4861::suspend_always", align 1 %undef.agg.tmp = alloca %"struct.std::__n4861::suspend_always", align 1 %agg.tmp = alloca %"struct.std::__n4861::coroutine_handle.0", align 8 %ref.tmp4 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %gs = alloca %struct.GlobalSetter, align 4 %ref.tmp10 = alloca %struct.Awaiter.1, align 8 %agg.tmp11 = alloca %class.MyTask, align 8 %ref.tmp19 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %agg.tmp20 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %gs34 = alloca %struct.GlobalSetter, align 4 %ref.tmp35 = alloca %struct.Awaiter.1, align 8 %agg.tmp36 = alloca %class.MyTask, align 8 %ref.tmp44 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %agg.tmp45 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %gs59 = alloca %struct.GlobalSetter, align 4 %ref.tmp60 = alloca %struct.Awaiter.1, align 8 %agg.tmp61 = alloca %class.MyTask, align 8 %ref.tmp69 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %agg.tmp70 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %gs84 = alloca %struct.GlobalSetter, align 4 %ref.tmp85 = alloca %struct.Awaiter.1, align 8 %agg.tmp86 = alloca %class.MyTask, align 8 %ref.tmp94 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %agg.tmp95 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %gs109 = alloca %struct.GlobalSetter, align 4 %ref.tmp110 = alloca %struct.Awaiter.1, align 8 %agg.tmp111 = alloca %class.MyTask, align 8 %ref.tmp119 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %agg.tmp120 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %gs134 = alloca %struct.GlobalSetter, align 4 %ref.tmp135 = alloca %struct.Awaiter.1, align 8 %agg.tmp136 = alloca %class.MyTask, align 8 %ref.tmp144 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %agg.tmp145 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %gs159 = alloca %struct.GlobalSetter, align 4 %ref.tmp160 = alloca %struct.Awaiter.1, align 8 %agg.tmp161 = alloca %class.MyTask, align 8 %ref.tmp169 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %agg.tmp170 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %ref.tmp184 = alloca %struct.Awaiter, align 8 %ref.tmp189 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %agg.tmp190 = alloca %"struct.std::__n4861::coroutine_handle", align 8 %0 = bitcast ptr %__promise to ptr %1 = call token @llvm.coro.id(i32 16, ptr %0, ptr null, ptr null) %2 = call i1 @llvm.coro.alloc(token %1) br i1 %2, label %coro.alloc, label %coro.init coro.alloc: ; preds = %entry %3 = call i64 @llvm.coro.size.i64() %call = call noalias noundef nonnull ptr @_Znwm(i64 noundef %3) #14 br label %coro.init coro.init: ; preds = %coro.alloc, %entry %4 = phi ptr [ null, %entry ], [ %call, %coro.alloc ] %5 = call ptr @llvm.coro.begin(token %1, ptr %4) call void @llvm.lifetime.start.p0(i64 8, ptr %__promise) #2 call void @_ZN6MyTask12promise_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %__promise) #2 %call1 = call ptr @_ZN6MyTask12promise_type17get_return_objectEv(ptr noundef nonnull align 8 dereferenceable(8) %__promise) %coerce.dive = getelementptr inbounds %class.MyTask, ptr %retval, i32 0, i32 0 %coerce.dive2 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive, i32 0, i32 0 store ptr %call1, ptr %coerce.dive2, align 8 call void @llvm.lifetime.start.p0(i64 1, ptr %ref.tmp) #2 call void @_ZN6MyTask12promise_type15initial_suspendEv(ptr noundef nonnull align 8 dereferenceable(8) %__promise) %call3 = call noundef zeroext i1 @_ZNKSt7__n486114suspend_always11await_readyEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2 br i1 %call3, label %init.ready, label %init.suspend init.suspend: ; preds = %coro.init %6 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp4) #2 %call5 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive6 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp4, i32 0, i32 0 store ptr %call5, ptr %coerce.dive6, align 8 %call7 = call ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEEcvNS0_IvEEEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp4) #2 %coerce.dive8 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %agg.tmp, i32 0, i32 0 store ptr %call7, ptr %coerce.dive8, align 8 %coerce.dive9 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %agg.tmp, i32 0, i32 0 %7 = load ptr, ptr %coerce.dive9, align 8 call void @_ZNKSt7__n486114suspend_always13await_suspendENS_16coroutine_handleIvEE(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp, ptr %7) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp4) #2 %8 = call i8 @llvm.coro.suspend(token %6, i1 false) switch i8 %8, label %coro.ret [ i8 0, label %init.ready i8 1, label %init.cleanup ] init.cleanup: ; preds = %init.suspend br label %cleanup init.ready: ; preds = %init.suspend, %coro.init call void @_ZNKSt7__n486114suspend_always12await_resumeEv(ptr noundef nonnull align 1 dereferenceable(1) %ref.tmp) #2 br label %cleanup cleanup: ; preds = %init.ready, %init.cleanup %cleanup.dest.slot.0 = phi i32 [ 0, %init.ready ], [ 2, %init.cleanup ] call void @llvm.lifetime.end.p0(i64 1, ptr %ref.tmp) #2 switch i32 %cleanup.dest.slot.0, label %cleanup200 [ i32 0, label %cleanup.cont ] cleanup.cont: ; preds = %cleanup call void @llvm.lifetime.start.p0(i64 4, ptr %gs) #2 call void @_ZN12GlobalSetterC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %gs, i32 noundef 0) call void @llvm.lifetime.start.p0(i64 16, ptr %ref.tmp10) #2 %call12 = call ptr @_Z3Quxv() %coerce.dive13 = getelementptr inbounds %class.MyTask, ptr %agg.tmp11, i32 0, i32 0 %coerce.dive14 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive13, i32 0, i32 0 store ptr %call12, ptr %coerce.dive14, align 8 %coerce.dive15 = getelementptr inbounds %class.MyTask, ptr %agg.tmp11, i32 0, i32 0 %coerce.dive16 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive15, i32 0, i32 0 %9 = load ptr, ptr %coerce.dive16, align 8 %call17 = call { ptr, ptr } @_ZN6MyTask12promise_type15await_transformES_(ptr noundef nonnull align 8 dereferenceable(8) %__promise, ptr %9) %10 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp10, i32 0, i32 0 %11 = extractvalue { ptr, ptr } %call17, 0 store ptr %11, ptr %10, align 8 %12 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp10, i32 0, i32 1 %13 = extractvalue { ptr, ptr } %call17, 1 store ptr %13, ptr %12, align 8 %call18 = call noundef zeroext i1 @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp10) br i1 %call18, label %await.ready, label %await.suspend await.suspend: ; preds = %cleanup.cont %14 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp19) #2 %call21 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive22 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp20, i32 0, i32 0 store ptr %call21, ptr %coerce.dive22, align 8 %coerce.dive23 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp20, i32 0, i32 0 %15 = load ptr, ptr %coerce.dive23, align 8 %call24 = call ptr @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp10, ptr %15) %coerce.dive25 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp19, i32 0, i32 0 store ptr %call24, ptr %coerce.dive25, align 8 %call26 = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp19) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp19) #2 call void @llvm.coro.resume(ptr %call26) %16 = call i8 @llvm.coro.suspend(token %14, i1 false) switch i8 %16, label %coro.ret [ i8 0, label %await.ready i8 1, label %await.cleanup ] await.cleanup: ; preds = %await.suspend unreachable await.ready: ; preds = %await.suspend, %cleanup.cont call void @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp10) br label %cleanup27 cleanup27: ; preds = %await.ready, %await.cleanup %cleanup.dest.slot.1 = phi i32 [ 0, %await.ready ], [ 2, %await.cleanup ] call void @llvm.lifetime.end.p0(i64 16, ptr %ref.tmp10) #2 switch i32 %cleanup.dest.slot.1, label %cleanup30 [ i32 0, label %cleanup.cont29 ] cleanup.cont29: ; preds = %cleanup27 br label %cleanup30 cleanup30: ; preds = %cleanup.cont29, %cleanup27 %cleanup.dest.slot.2 = phi i32 [ %cleanup.dest.slot.1, %cleanup27 ], [ 0, %cleanup.cont29 ] call void @_ZN12GlobalSetterD2Ev(ptr noundef nonnull align 4 dereferenceable(4) %gs) #2 call void @llvm.lifetime.end.p0(i64 4, ptr %gs) #2 switch i32 %cleanup.dest.slot.2, label %cleanup200 [ i32 0, label %cleanup.cont33 ] cleanup.cont33: ; preds = %cleanup30 call void @llvm.lifetime.start.p0(i64 4, ptr %gs34) #2 call void @_ZN12GlobalSetterC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %gs34, i32 noundef 1) call void @llvm.lifetime.start.p0(i64 16, ptr %ref.tmp35) #2 %call37 = call ptr @_Z3Quxv() %coerce.dive38 = getelementptr inbounds %class.MyTask, ptr %agg.tmp36, i32 0, i32 0 %coerce.dive39 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive38, i32 0, i32 0 store ptr %call37, ptr %coerce.dive39, align 8 %coerce.dive40 = getelementptr inbounds %class.MyTask, ptr %agg.tmp36, i32 0, i32 0 %coerce.dive41 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive40, i32 0, i32 0 %17 = load ptr, ptr %coerce.dive41, align 8 %call42 = call { ptr, ptr } @_ZN6MyTask12promise_type15await_transformES_(ptr noundef nonnull align 8 dereferenceable(8) %__promise, ptr %17) %18 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp35, i32 0, i32 0 %19 = extractvalue { ptr, ptr } %call42, 0 store ptr %19, ptr %18, align 8 %20 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp35, i32 0, i32 1 %21 = extractvalue { ptr, ptr } %call42, 1 store ptr %21, ptr %20, align 8 %call43 = call noundef zeroext i1 @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp35) br i1 %call43, label %await2.ready, label %await2.suspend await2.suspend: ; preds = %cleanup.cont33 %22 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp44) #2 %call46 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive47 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp45, i32 0, i32 0 store ptr %call46, ptr %coerce.dive47, align 8 %coerce.dive48 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp45, i32 0, i32 0 %23 = load ptr, ptr %coerce.dive48, align 8 %call49 = call ptr @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp35, ptr %23) %coerce.dive50 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp44, i32 0, i32 0 store ptr %call49, ptr %coerce.dive50, align 8 %call51 = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp44) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp44) #2 call void @llvm.coro.resume(ptr %call51) %24 = call i8 @llvm.coro.suspend(token %22, i1 false) switch i8 %24, label %coro.ret [ i8 0, label %await2.ready i8 1, label %await2.cleanup ] await2.cleanup: ; preds = %await2.suspend unreachable await2.ready: ; preds = %await2.suspend, %cleanup.cont33 call void @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp35) br label %cleanup52 cleanup52: ; preds = %await2.ready, %await2.cleanup %cleanup.dest.slot.3 = phi i32 [ 0, %await2.ready ], [ 2, %await2.cleanup ] call void @llvm.lifetime.end.p0(i64 16, ptr %ref.tmp35) #2 switch i32 %cleanup.dest.slot.3, label %cleanup55 [ i32 0, label %cleanup.cont54 ] cleanup.cont54: ; preds = %cleanup52 br label %cleanup55 cleanup55: ; preds = %cleanup.cont54, %cleanup52 %cleanup.dest.slot.4 = phi i32 [ %cleanup.dest.slot.3, %cleanup52 ], [ 0, %cleanup.cont54 ] call void @_ZN12GlobalSetterD2Ev(ptr noundef nonnull align 4 dereferenceable(4) %gs34) #2 call void @llvm.lifetime.end.p0(i64 4, ptr %gs34) #2 switch i32 %cleanup.dest.slot.4, label %cleanup200 [ i32 0, label %cleanup.cont58 ] cleanup.cont58: ; preds = %cleanup55 call void @llvm.lifetime.start.p0(i64 4, ptr %gs59) #2 call void @_ZN12GlobalSetterC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %gs59, i32 noundef 2) call void @llvm.lifetime.start.p0(i64 16, ptr %ref.tmp60) #2 %call62 = call ptr @_Z3Quxv() %coerce.dive63 = getelementptr inbounds %class.MyTask, ptr %agg.tmp61, i32 0, i32 0 %coerce.dive64 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive63, i32 0, i32 0 store ptr %call62, ptr %coerce.dive64, align 8 %coerce.dive65 = getelementptr inbounds %class.MyTask, ptr %agg.tmp61, i32 0, i32 0 %coerce.dive66 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive65, i32 0, i32 0 %25 = load ptr, ptr %coerce.dive66, align 8 %call67 = call { ptr, ptr } @_ZN6MyTask12promise_type15await_transformES_(ptr noundef nonnull align 8 dereferenceable(8) %__promise, ptr %25) %26 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp60, i32 0, i32 0 %27 = extractvalue { ptr, ptr } %call67, 0 store ptr %27, ptr %26, align 8 %28 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp60, i32 0, i32 1 %29 = extractvalue { ptr, ptr } %call67, 1 store ptr %29, ptr %28, align 8 %call68 = call noundef zeroext i1 @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp60) br i1 %call68, label %await3.ready, label %await3.suspend await3.suspend: ; preds = %cleanup.cont58 %30 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp69) #2 %call71 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive72 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp70, i32 0, i32 0 store ptr %call71, ptr %coerce.dive72, align 8 %coerce.dive73 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp70, i32 0, i32 0 %31 = load ptr, ptr %coerce.dive73, align 8 %call74 = call ptr @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp60, ptr %31) %coerce.dive75 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp69, i32 0, i32 0 store ptr %call74, ptr %coerce.dive75, align 8 %call76 = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp69) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp69) #2 call void @llvm.coro.resume(ptr %call76) %32 = call i8 @llvm.coro.suspend(token %30, i1 false) switch i8 %32, label %coro.ret [ i8 0, label %await3.ready i8 1, label %await3.cleanup ] await3.cleanup: ; preds = %await3.suspend unreachable await3.ready: ; preds = %await3.suspend, %cleanup.cont58 call void @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp60) br label %cleanup77 cleanup77: ; preds = %await3.ready, %await3.cleanup %cleanup.dest.slot.5 = phi i32 [ 0, %await3.ready ], [ 2, %await3.cleanup ] call void @llvm.lifetime.end.p0(i64 16, ptr %ref.tmp60) #2 switch i32 %cleanup.dest.slot.5, label %cleanup80 [ i32 0, label %cleanup.cont79 ] cleanup.cont79: ; preds = %cleanup77 br label %cleanup80 cleanup80: ; preds = %cleanup.cont79, %cleanup77 %cleanup.dest.slot.6 = phi i32 [ %cleanup.dest.slot.5, %cleanup77 ], [ 0, %cleanup.cont79 ] call void @_ZN12GlobalSetterD2Ev(ptr noundef nonnull align 4 dereferenceable(4) %gs59) #2 call void @llvm.lifetime.end.p0(i64 4, ptr %gs59) #2 switch i32 %cleanup.dest.slot.6, label %cleanup200 [ i32 0, label %cleanup.cont83 ] cleanup.cont83: ; preds = %cleanup80 call void @llvm.lifetime.start.p0(i64 4, ptr %gs84) #2 call void @_ZN12GlobalSetterC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %gs84, i32 noundef 3) call void @llvm.lifetime.start.p0(i64 16, ptr %ref.tmp85) #2 %call87 = call ptr @_Z3Quxv() %coerce.dive88 = getelementptr inbounds %class.MyTask, ptr %agg.tmp86, i32 0, i32 0 %coerce.dive89 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive88, i32 0, i32 0 store ptr %call87, ptr %coerce.dive89, align 8 %coerce.dive90 = getelementptr inbounds %class.MyTask, ptr %agg.tmp86, i32 0, i32 0 %coerce.dive91 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive90, i32 0, i32 0 %33 = load ptr, ptr %coerce.dive91, align 8 %call92 = call { ptr, ptr } @_ZN6MyTask12promise_type15await_transformES_(ptr noundef nonnull align 8 dereferenceable(8) %__promise, ptr %33) %34 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp85, i32 0, i32 0 %35 = extractvalue { ptr, ptr } %call92, 0 store ptr %35, ptr %34, align 8 %36 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp85, i32 0, i32 1 %37 = extractvalue { ptr, ptr } %call92, 1 store ptr %37, ptr %36, align 8 %call93 = call noundef zeroext i1 @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp85) br i1 %call93, label %await4.ready, label %await4.suspend await4.suspend: ; preds = %cleanup.cont83 %38 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp94) #2 %call96 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive97 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp95, i32 0, i32 0 store ptr %call96, ptr %coerce.dive97, align 8 %coerce.dive98 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp95, i32 0, i32 0 %39 = load ptr, ptr %coerce.dive98, align 8 %call99 = call ptr @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp85, ptr %39) %coerce.dive100 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp94, i32 0, i32 0 store ptr %call99, ptr %coerce.dive100, align 8 %call101 = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp94) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp94) #2 call void @llvm.coro.resume(ptr %call101) %40 = call i8 @llvm.coro.suspend(token %38, i1 false) switch i8 %40, label %coro.ret [ i8 0, label %await4.ready i8 1, label %await4.cleanup ] await4.cleanup: ; preds = %await4.suspend unreachable await4.ready: ; preds = %await4.suspend, %cleanup.cont83 call void @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp85) br label %cleanup102 cleanup102: ; preds = %await4.ready, %await4.cleanup %cleanup.dest.slot.7 = phi i32 [ 0, %await4.ready ], [ 2, %await4.cleanup ] call void @llvm.lifetime.end.p0(i64 16, ptr %ref.tmp85) #2 switch i32 %cleanup.dest.slot.7, label %cleanup105 [ i32 0, label %cleanup.cont104 ] cleanup.cont104: ; preds = %cleanup102 br label %cleanup105 cleanup105: ; preds = %cleanup.cont104, %cleanup102 %cleanup.dest.slot.8 = phi i32 [ %cleanup.dest.slot.7, %cleanup102 ], [ 0, %cleanup.cont104 ] call void @_ZN12GlobalSetterD2Ev(ptr noundef nonnull align 4 dereferenceable(4) %gs84) #2 call void @llvm.lifetime.end.p0(i64 4, ptr %gs84) #2 switch i32 %cleanup.dest.slot.8, label %cleanup200 [ i32 0, label %cleanup.cont108 ] cleanup.cont108: ; preds = %cleanup105 call void @llvm.lifetime.start.p0(i64 4, ptr %gs109) #2 call void @_ZN12GlobalSetterC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %gs109, i32 noundef 4) call void @llvm.lifetime.start.p0(i64 16, ptr %ref.tmp110) #2 %call112 = call ptr @_Z3Quxv() %coerce.dive113 = getelementptr inbounds %class.MyTask, ptr %agg.tmp111, i32 0, i32 0 %coerce.dive114 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive113, i32 0, i32 0 store ptr %call112, ptr %coerce.dive114, align 8 %coerce.dive115 = getelementptr inbounds %class.MyTask, ptr %agg.tmp111, i32 0, i32 0 %coerce.dive116 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive115, i32 0, i32 0 %41 = load ptr, ptr %coerce.dive116, align 8 %call117 = call { ptr, ptr } @_ZN6MyTask12promise_type15await_transformES_(ptr noundef nonnull align 8 dereferenceable(8) %__promise, ptr %41) %42 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp110, i32 0, i32 0 %43 = extractvalue { ptr, ptr } %call117, 0 store ptr %43, ptr %42, align 8 %44 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp110, i32 0, i32 1 %45 = extractvalue { ptr, ptr } %call117, 1 store ptr %45, ptr %44, align 8 %call118 = call noundef zeroext i1 @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp110) br i1 %call118, label %await5.ready, label %await5.suspend await5.suspend: ; preds = %cleanup.cont108 %46 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp119) #2 %call121 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive122 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp120, i32 0, i32 0 store ptr %call121, ptr %coerce.dive122, align 8 %coerce.dive123 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp120, i32 0, i32 0 %47 = load ptr, ptr %coerce.dive123, align 8 %call124 = call ptr @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp110, ptr %47) %coerce.dive125 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp119, i32 0, i32 0 store ptr %call124, ptr %coerce.dive125, align 8 %call126 = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp119) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp119) #2 call void @llvm.coro.resume(ptr %call126) %48 = call i8 @llvm.coro.suspend(token %46, i1 false) switch i8 %48, label %coro.ret [ i8 0, label %await5.ready i8 1, label %await5.cleanup ] await5.cleanup: ; preds = %await5.suspend unreachable await5.ready: ; preds = %await5.suspend, %cleanup.cont108 call void @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp110) br label %cleanup127 cleanup127: ; preds = %await5.ready, %await5.cleanup %cleanup.dest.slot.9 = phi i32 [ 0, %await5.ready ], [ 2, %await5.cleanup ] call void @llvm.lifetime.end.p0(i64 16, ptr %ref.tmp110) #2 switch i32 %cleanup.dest.slot.9, label %cleanup130 [ i32 0, label %cleanup.cont129 ] cleanup.cont129: ; preds = %cleanup127 br label %cleanup130 cleanup130: ; preds = %cleanup.cont129, %cleanup127 %cleanup.dest.slot.10 = phi i32 [ %cleanup.dest.slot.9, %cleanup127 ], [ 0, %cleanup.cont129 ] call void @_ZN12GlobalSetterD2Ev(ptr noundef nonnull align 4 dereferenceable(4) %gs109) #2 call void @llvm.lifetime.end.p0(i64 4, ptr %gs109) #2 switch i32 %cleanup.dest.slot.10, label %cleanup200 [ i32 0, label %cleanup.cont133 ] cleanup.cont133: ; preds = %cleanup130 call void @llvm.lifetime.start.p0(i64 4, ptr %gs134) #2 call void @_ZN12GlobalSetterC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %gs134, i32 noundef 5) call void @llvm.lifetime.start.p0(i64 16, ptr %ref.tmp135) #2 %call137 = call ptr @_Z3Quxv() %coerce.dive138 = getelementptr inbounds %class.MyTask, ptr %agg.tmp136, i32 0, i32 0 %coerce.dive139 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive138, i32 0, i32 0 store ptr %call137, ptr %coerce.dive139, align 8 %coerce.dive140 = getelementptr inbounds %class.MyTask, ptr %agg.tmp136, i32 0, i32 0 %coerce.dive141 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive140, i32 0, i32 0 %49 = load ptr, ptr %coerce.dive141, align 8 %call142 = call { ptr, ptr } @_ZN6MyTask12promise_type15await_transformES_(ptr noundef nonnull align 8 dereferenceable(8) %__promise, ptr %49) %50 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp135, i32 0, i32 0 %51 = extractvalue { ptr, ptr } %call142, 0 store ptr %51, ptr %50, align 8 %52 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp135, i32 0, i32 1 %53 = extractvalue { ptr, ptr } %call142, 1 store ptr %53, ptr %52, align 8 %call143 = call noundef zeroext i1 @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp135) br i1 %call143, label %await6.ready, label %await6.suspend await6.suspend: ; preds = %cleanup.cont133 %54 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp144) #2 %call146 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive147 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp145, i32 0, i32 0 store ptr %call146, ptr %coerce.dive147, align 8 %coerce.dive148 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp145, i32 0, i32 0 %55 = load ptr, ptr %coerce.dive148, align 8 %call149 = call ptr @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp135, ptr %55) %coerce.dive150 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp144, i32 0, i32 0 store ptr %call149, ptr %coerce.dive150, align 8 %call151 = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp144) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp144) #2 call void @llvm.coro.resume(ptr %call151) %56 = call i8 @llvm.coro.suspend(token %54, i1 false) switch i8 %56, label %coro.ret [ i8 0, label %await6.ready i8 1, label %await6.cleanup ] await6.cleanup: ; preds = %await6.suspend unreachable await6.ready: ; preds = %await6.suspend, %cleanup.cont133 call void @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp135) br label %cleanup152 cleanup152: ; preds = %await6.ready, %await6.cleanup %cleanup.dest.slot.11 = phi i32 [ 0, %await6.ready ], [ 2, %await6.cleanup ] call void @llvm.lifetime.end.p0(i64 16, ptr %ref.tmp135) #2 switch i32 %cleanup.dest.slot.11, label %cleanup155 [ i32 0, label %cleanup.cont154 ] cleanup.cont154: ; preds = %cleanup152 br label %cleanup155 cleanup155: ; preds = %cleanup.cont154, %cleanup152 %cleanup.dest.slot.12 = phi i32 [ %cleanup.dest.slot.11, %cleanup152 ], [ 0, %cleanup.cont154 ] call void @_ZN12GlobalSetterD2Ev(ptr noundef nonnull align 4 dereferenceable(4) %gs134) #2 call void @llvm.lifetime.end.p0(i64 4, ptr %gs134) #2 switch i32 %cleanup.dest.slot.12, label %cleanup200 [ i32 0, label %cleanup.cont158 ] cleanup.cont158: ; preds = %cleanup155 call void @llvm.lifetime.start.p0(i64 4, ptr %gs159) #2 call void @_ZN12GlobalSetterC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %gs159, i32 noundef 6) call void @llvm.lifetime.start.p0(i64 16, ptr %ref.tmp160) #2 %call162 = call ptr @_Z3Quxv() %coerce.dive163 = getelementptr inbounds %class.MyTask, ptr %agg.tmp161, i32 0, i32 0 %coerce.dive164 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive163, i32 0, i32 0 store ptr %call162, ptr %coerce.dive164, align 8 %coerce.dive165 = getelementptr inbounds %class.MyTask, ptr %agg.tmp161, i32 0, i32 0 %coerce.dive166 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive165, i32 0, i32 0 %57 = load ptr, ptr %coerce.dive166, align 8 %call167 = call { ptr, ptr } @_ZN6MyTask12promise_type15await_transformES_(ptr noundef nonnull align 8 dereferenceable(8) %__promise, ptr %57) %58 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp160, i32 0, i32 0 %59 = extractvalue { ptr, ptr } %call167, 0 store ptr %59, ptr %58, align 8 %60 = getelementptr inbounds { ptr, ptr }, ptr %ref.tmp160, i32 0, i32 1 %61 = extractvalue { ptr, ptr } %call167, 1 store ptr %61, ptr %60, align 8 %call168 = call noundef zeroext i1 @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp160) br i1 %call168, label %await7.ready, label %await7.suspend await7.suspend: ; preds = %cleanup.cont158 %62 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp169) #2 %call171 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive172 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp170, i32 0, i32 0 store ptr %call171, ptr %coerce.dive172, align 8 %coerce.dive173 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp170, i32 0, i32 0 %63 = load ptr, ptr %coerce.dive173, align 8 %call174 = call ptr @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp160, ptr %63) %coerce.dive175 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp169, i32 0, i32 0 store ptr %call174, ptr %coerce.dive175, align 8 %call176 = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp169) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp169) #2 call void @llvm.coro.resume(ptr %call176) %64 = call i8 @llvm.coro.suspend(token %62, i1 false) switch i8 %64, label %coro.ret [ i8 0, label %await7.ready i8 1, label %await7.cleanup ] await7.cleanup: ; preds = %await7.suspend unreachable await7.ready: ; preds = %await7.suspend, %cleanup.cont158 call void @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(16) %ref.tmp160) br label %cleanup177 cleanup177: ; preds = %await7.ready, %await7.cleanup %cleanup.dest.slot.13 = phi i32 [ 0, %await7.ready ], [ 2, %await7.cleanup ] call void @llvm.lifetime.end.p0(i64 16, ptr %ref.tmp160) #2 switch i32 %cleanup.dest.slot.13, label %cleanup180 [ i32 0, label %cleanup.cont179 ] cleanup.cont179: ; preds = %cleanup177 br label %cleanup180 cleanup180: ; preds = %cleanup.cont179, %cleanup177 %cleanup.dest.slot.14 = phi i32 [ %cleanup.dest.slot.13, %cleanup177 ], [ 0, %cleanup.cont179 ] call void @_ZN12GlobalSetterD2Ev(ptr noundef nonnull align 4 dereferenceable(4) %gs159) #2 call void @llvm.lifetime.end.p0(i64 4, ptr %gs159) #2 switch i32 %cleanup.dest.slot.14, label %cleanup200 [ i32 0, label %cleanup.cont183 ] cleanup.cont183: ; preds = %cleanup180 call void @_ZN6MyTask12promise_type11return_voidEv(ptr noundef nonnull align 8 dereferenceable(8) %__promise) br label %coro.final coro.final: ; preds = %cleanup.cont183 call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp184) #2 %call185 = call ptr @_ZN6MyTask12promise_type13final_suspendEv(ptr noundef nonnull align 8 dereferenceable(8) %__promise) #2 %coerce.dive186 = getelementptr inbounds %struct.Awaiter, ptr %ref.tmp184, i32 0, i32 0 %coerce.dive187 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive186, i32 0, i32 0 store ptr %call185, ptr %coerce.dive187, align 8 %call188 = call noundef zeroext i1 @_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp184) #2 br i1 %call188, label %final.ready, label %final.suspend final.suspend: ; preds = %coro.final %65 = call token @llvm.coro.save(ptr null) call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp189) #2 %call191 = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_addressEPv(ptr noundef %5) #2 %coerce.dive192 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp190, i32 0, i32 0 store ptr %call191, ptr %coerce.dive192, align 8 %coerce.dive193 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %agg.tmp190, i32 0, i32 0 %66 = load ptr, ptr %coerce.dive193, align 8 %call194 = call ptr @_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp184, ptr %66) #2 %coerce.dive195 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp189, i32 0, i32 0 store ptr %call194, ptr %coerce.dive195, align 8 %call196 = call noundef ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7addressEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp189) #2 call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp189) #2 call void @llvm.coro.resume(ptr %call196) %67 = call i8 @llvm.coro.suspend(token %65, i1 true) switch i8 %67, label %coro.ret [ i8 0, label %final.ready i8 1, label %final.cleanup ] final.cleanup: ; preds = %final.suspend br label %cleanup197 final.ready: ; preds = %final.suspend, %coro.final call void @_ZZN6MyTask12promise_type13final_suspendEvEN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp184) #2 br label %cleanup197 cleanup197: ; preds = %final.ready, %final.cleanup %cleanup.dest.slot.15 = phi i32 [ 0, %final.ready ], [ 2, %final.cleanup ] call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp184) #2 switch i32 %cleanup.dest.slot.15, label %cleanup200 [ i32 0, label %cleanup.cont199 ] cleanup.cont199: ; preds = %cleanup197 br label %cleanup200 cleanup200: ; preds = %cleanup.cont199, %cleanup197, %cleanup180, %cleanup155, %cleanup130, %cleanup105, %cleanup80, %cleanup55, %cleanup30, %cleanup %cleanup.dest.slot.16 = phi i32 [ %cleanup.dest.slot.0, %cleanup ], [ %cleanup.dest.slot.2, %cleanup30 ], [ %cleanup.dest.slot.4, %cleanup55 ], [ %cleanup.dest.slot.6, %cleanup80 ], [ %cleanup.dest.slot.8, %cleanup105 ], [ %cleanup.dest.slot.10, %cleanup130 ], [ %cleanup.dest.slot.12, %cleanup155 ], [ %cleanup.dest.slot.14, %cleanup180 ], [ %cleanup.dest.slot.15, %cleanup197 ], [ 0, %cleanup.cont199 ] call void @llvm.lifetime.end.p0(i64 8, ptr %__promise) #2 %68 = call ptr @llvm.coro.free(token %1, ptr %5) %69 = icmp ne ptr %68, null br i1 %69, label %coro.free, label %after.coro.free coro.free: ; preds = %cleanup200 call void @_ZdlPv(ptr noundef %68) #2 br label %after.coro.free after.coro.free: ; preds = %cleanup200, %coro.free switch i32 %cleanup.dest.slot.16, label %unreachable [ i32 0, label %cleanup.cont203 i32 2, label %coro.ret ] cleanup.cont203: ; preds = %after.coro.free br label %coro.ret coro.ret: ; preds = %cleanup.cont203, %after.coro.free, %final.suspend, %await7.suspend, %await6.suspend, %await5.suspend, %await4.suspend, %await3.suspend, %await2.suspend, %await.suspend, %init.suspend %70 = call i1 @llvm.coro.end(ptr null, i1 false) %coerce.dive204 = getelementptr inbounds %class.MyTask, ptr %retval, i32 0, i32 0 %coerce.dive205 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive204, i32 0, i32 0 %71 = load ptr, ptr %coerce.dive205, align 8 ret ptr %71 unreachable: ; preds = %after.coro.free unreachable } ; Function Attrs: nounwind uwtable define linkonce_odr dso_local void @_ZN12GlobalSetterC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %this, i32 noundef %value) unnamed_addr #12 comdat align 2 { entry: %this.addr = alloca ptr, align 8 %value.addr = alloca i32, align 4 store ptr %this, ptr %this.addr, align 8, !tbaa !6 store i32 %value, ptr %value.addr, align 4, !tbaa !13 %this1 = load ptr, ptr %this.addr, align 8 %value2 = getelementptr inbounds %struct.GlobalSetter, ptr %this1, i32 0, i32 0 %0 = load i32, ptr %value.addr, align 4, !tbaa !13 store i32 %0, ptr %value2, align 4, !tbaa !15 ret void } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local { ptr, ptr } @_ZN6MyTask12promise_type15await_transformES_(ptr noundef nonnull align 8 dereferenceable(8) %this, ptr %task.coerce) #7 comdat align 2 { entry: %retval = alloca %struct.Awaiter.1, align 8 %task = alloca %class.MyTask, align 8 %this.addr = alloca ptr, align 8 %coerce.dive = getelementptr inbounds %class.MyTask, ptr %task, i32 0, i32 0 %coerce.dive1 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %coerce.dive, i32 0, i32 0 store ptr %task.coerce, ptr %coerce.dive1, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this2 = load ptr, ptr %this.addr, align 8 %caller = getelementptr inbounds %struct.Awaiter.1, ptr %retval, i32 0, i32 0 store ptr %this2, ptr %caller, align 8, !tbaa !6 %callee = getelementptr inbounds %struct.Awaiter.1, ptr %retval, i32 0, i32 1 %handle_ = getelementptr inbounds %class.MyTask, ptr %task, i32 0, i32 0 %call = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7promiseEv(ptr noundef nonnull align 8 dereferenceable(8) %handle_) store ptr %call, ptr %callee, align 8, !tbaa !6 %0 = load { ptr, ptr }, ptr %retval, align 8 ret { ptr, ptr } %0 } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local noundef zeroext i1 @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter11await_readyEv(ptr noundef nonnull align 8 dereferenceable(16) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 ret i1 false } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local ptr @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter13await_suspendENSt7__n486116coroutine_handleIS0_EE(ptr noundef nonnull align 8 dereferenceable(16) %this, ptr %h.coerce) #7 comdat align 2 { entry: %retval = alloca %"struct.std::__n4861::coroutine_handle", align 8 %h = alloca %"struct.std::__n4861::coroutine_handle", align 8 %this.addr = alloca ptr, align 8 %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %h, i32 0, i32 0 store ptr %h.coerce, ptr %coerce.dive, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %caller = getelementptr inbounds %struct.Awaiter.1, ptr %this1, i32 0, i32 0 %0 = load ptr, ptr %caller, align 8, !tbaa !17 %resume_when_done = getelementptr inbounds %"struct.MyTask::promise_type", ptr %0, i32 0, i32 0 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %resume_when_done, ptr align 8 %h, i64 8, i1 false), !tbaa.struct !12 %callee = getelementptr inbounds %struct.Awaiter.1, ptr %this1, i32 0, i32 1 %1 = load ptr, ptr %callee, align 8, !tbaa !19 %call = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_promiseERS2_(ptr noundef nonnull align 8 dereferenceable(8) %1) %coerce.dive2 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0 store ptr %call, ptr %coerce.dive2, align 8 %coerce.dive3 = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0 %2 = load ptr, ptr %coerce.dive3, align 8 ret ptr %2 } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local void @_ZZN6MyTask12promise_type15await_transformES_EN7Awaiter12await_resumeEv(ptr noundef nonnull align 8 dereferenceable(16) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 %ref.tmp = alloca %"struct.std::__n4861::coroutine_handle", align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 call void @llvm.lifetime.start.p0(i64 8, ptr %ref.tmp) #2 %callee = getelementptr inbounds %struct.Awaiter.1, ptr %this1, i32 0, i32 1 %0 = load ptr, ptr %callee, align 8, !tbaa !19 %call = call ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_promiseERS2_(ptr noundef nonnull align 8 dereferenceable(8) %0) %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %ref.tmp, i32 0, i32 0 store ptr %call, ptr %coerce.dive, align 8 call void @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7destroyEv(ptr noundef nonnull align 8 dereferenceable(8) %ref.tmp) call void @llvm.lifetime.end.p0(i64 8, ptr %ref.tmp) #2 ret void } ; Function Attrs: nounwind uwtable define linkonce_odr dso_local void @_ZN12GlobalSetterD2Ev(ptr noundef nonnull align 4 dereferenceable(4) %this) unnamed_addr #12 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %value = getelementptr inbounds %struct.GlobalSetter, ptr %this1, i32 0, i32 0 %0 = load i32, ptr %value, align 4, !tbaa !15 store i32 %0, ptr @some_global, align 4, !tbaa !13 ret void } ; Function Attrs: nounwind uwtable define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #12 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %_M_fr_ptr = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %this1, i32 0, i32 0 store ptr null, ptr %_M_fr_ptr, align 8, !tbaa !10 ret void } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEE12from_promiseERS2_(ptr noundef nonnull align 8 dereferenceable(8) %__p) #7 comdat align 2 { entry: %retval = alloca %"struct.std::__n4861::coroutine_handle", align 8 %__p.addr = alloca ptr, align 8 store ptr %__p, ptr %__p.addr, align 8, !tbaa !6 call void @_ZNSt7__n486116coroutine_handleIN6MyTask12promise_typeEEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2 %0 = load ptr, ptr %__p.addr, align 8, !tbaa !6 %1 = call ptr @llvm.coro.promise(ptr %0, i32 8, i1 true) %_M_fr_ptr = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0 store ptr %1, ptr %_M_fr_ptr, align 8, !tbaa !10 %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %retval, i32 0, i32 0 %2 = load ptr, ptr %coerce.dive, align 8 ret ptr %2 } ; Function Attrs: nounwind uwtable define linkonce_odr dso_local void @_ZN6MyTaskC2ENSt7__n486116coroutine_handleINS_12promise_typeEEE(ptr noundef nonnull align 8 dereferenceable(8) %this, ptr %handle.coerce) unnamed_addr #12 comdat align 2 { entry: %handle = alloca %"struct.std::__n4861::coroutine_handle", align 8 %this.addr = alloca ptr, align 8 %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %handle, i32 0, i32 0 store ptr %handle.coerce, ptr %coerce.dive, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %handle_ = getelementptr inbounds %class.MyTask, ptr %this1, i32 0, i32 0 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %handle_, ptr align 8 %handle, i64 8, i1 false), !tbaa.struct !12 ret void } ; Function Attrs: nounwind readnone declare ptr @llvm.coro.promise(ptr nocapture, i32, i1) #4 ; Function Attrs: argmemonly nocallback nofree nounwind willreturn declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #13 ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local ptr @_ZNSt7__n486116coroutine_handleIvE12from_addressEPv(ptr noundef %__a) #7 comdat align 2 { entry: %retval = alloca %"struct.std::__n4861::coroutine_handle.0", align 8 %__a.addr = alloca ptr, align 8 store ptr %__a, ptr %__a.addr, align 8, !tbaa !6 call void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %retval) #2 %0 = load ptr, ptr %__a.addr, align 8, !tbaa !6 %_M_fr_ptr = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0 store ptr %0, ptr %_M_fr_ptr, align 8, !tbaa !20 %coerce.dive = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %retval, i32 0, i32 0 %1 = load ptr, ptr %coerce.dive, align 8 ret ptr %1 } ; Function Attrs: nounwind uwtable define linkonce_odr dso_local void @_ZNSt7__n486116coroutine_handleIvEC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %this) unnamed_addr #12 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %_M_fr_ptr = getelementptr inbounds %"struct.std::__n4861::coroutine_handle.0", ptr %this1, i32 0, i32 0 store ptr null, ptr %_M_fr_ptr, align 8, !tbaa !20 ret void } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7promiseEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 %__t = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 call void @llvm.lifetime.start.p0(i64 8, ptr %__t) #2 %_M_fr_ptr = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %this1, i32 0, i32 0 %0 = load ptr, ptr %_M_fr_ptr, align 8, !tbaa !10 %1 = call ptr @llvm.coro.promise(ptr %0, i32 8, i1 false) store ptr %1, ptr %__t, align 8, !tbaa !6 %2 = load ptr, ptr %__t, align 8, !tbaa !6 call void @llvm.lifetime.end.p0(i64 8, ptr %__t) #2 ret ptr %2 } ; Function Attrs: mustprogress nounwind uwtable define linkonce_odr dso_local void @_ZNKSt7__n486116coroutine_handleIN6MyTask12promise_typeEE7destroyEv(ptr noundef nonnull align 8 dereferenceable(8) %this) #7 comdat align 2 { entry: %this.addr = alloca ptr, align 8 store ptr %this, ptr %this.addr, align 8, !tbaa !6 %this1 = load ptr, ptr %this.addr, align 8 %_M_fr_ptr = getelementptr inbounds %"struct.std::__n4861::coroutine_handle", ptr %this1, i32 0, i32 0 %0 = load ptr, ptr %_M_fr_ptr, align 8, !tbaa !10 call void @llvm.coro.destroy(ptr %0) ret void } declare void @llvm.coro.destroy(ptr) attributes #0 = { mustprogress noinline nounwind presplitcoroutine uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #1 = { argmemonly nounwind readonly } attributes #2 = { nounwind } attributes #3 = { nobuiltin allocsize(0) "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #4 = { nounwind readnone } attributes #5 = { argmemonly nocallback nofree nosync nounwind willreturn } attributes #6 = { inlinehint nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #7 = { mustprogress nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #8 = { nomerge nounwind } attributes #9 = { nounwind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #10 = { nobuiltin nounwind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #11 = { mustprogress nounwind presplitcoroutine uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #12 = { nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } attributes #13 = { argmemonly nocallback nofree nounwind willreturn } attributes #14 = { allocsize(0) } !llvm.linker.options = !{} !llvm.module.flags = !{!0, !1, !2, !3, !4} !llvm.ident = !{!5} !0 = !{i32 7, !"Dwarf Version", i32 4} !1 = !{i32 1, !"wchar_size", i32 4} !2 = !{i32 8, !"PIC Level", i32 2} !3 = !{i32 7, !"PIE Level", i32 2} !4 = !{i32 7, !"uwtable", i32 2} !5 = !{!"clang version 16.0.0 (https://github.com/llvm/llvm-project.git e5581df60a35fffb0c69589777e4e126c849405f)"} !6 = !{!7, !7, i64 0} !7 = !{!"any pointer", !8, i64 0} !8 = !{!"omnipotent char", !9, i64 0} !9 = !{!"Simple C++ TBAA"} !10 = !{!11, !7, i64 0} !11 = !{!"_ZTSNSt7__n486116coroutine_handleIN6MyTask12promise_typeEEE", !7, i64 0} !12 = !{i64 0, i64 8, !6} !13 = !{!14, !14, i64 0} !14 = !{!"int", !8, i64 0} !15 = !{!16, !14, i64 0} !16 = !{!"_ZTS12GlobalSetter", !14, i64 0} !17 = !{!18, !7, i64 0} !18 = !{!"_ZTSZN6MyTask12promise_type15await_transformES_E7Awaiter", !7, i64 0, !7, i64 8} !19 = !{!18, !7, i64 8} !20 = !{!21, !7, i64 0} !21 = !{!"_ZTSNSt7__n486116coroutine_handleIvEE", !7, i64 0}
Become a Patron
Sponsor on GitHub
Donate via PayPal
Source on GitHub
Mailing list
Installed libraries
Wiki
Report an issue
How it works
Contact the author
CE on Mastodon
About the author
Statistics
Changelog
Version tree